]> git.proxmox.com Git - mirror_frr.git/commitdiff
ospf6d part of 6Wind patch.
authorhasso <hasso>
Sun, 25 May 2003 21:39:29 +0000 (21:39 +0000)
committerhasso <hasso>
Sun, 25 May 2003 21:39:29 +0000 (21:39 +0000)
ospf6d/Makefile.am
ospf6d/ospf6_asbr.c
ospf6d/ospf6_main.c
ospf6d/ospf6_network.c
ospf6d/ospf6_top.c

index e1b78cbc0c18eec763d26ed0d0ea6b016645673f..680e89b8f729ee558938be2c6dc4a3f9e0e443c3 100644 (file)
@@ -28,7 +28,7 @@ noinst_HEADERS = \
 ospf6d_SOURCES = \
        ospf6_main.c $(libospf6_a_SOURCES)
 
-ospf6d_LDADD = ../lib/libzebra.a
+ospf6d_LDADD = -L../lib -lzebra
 
 sysconf_DATA = ospf6d.conf.sample
 
index 00a2b66c0748e38bc1e5d46ce38d05ede5955026..deb708ac68aad5a27668766d7dd68941f62c630d 100644 (file)
@@ -412,8 +412,9 @@ ospf6_asbr_external_lsa_refresh (void *data)
   struct ospf6_lsa_as_external *e;
   struct prefix prefix;
   struct route_node *node;
-  struct ospf6_external_route *route;
-  struct ospf6_external_info *info;
+  struct ospf6_external_route *route = NULL;
+  struct ospf6_external_info *info = NULL;
+  struct ospf6_external_info *match = NULL;
 
   if (IS_OSPF6_DUMP_ASBR)
     zlog_info ("ASBR: refresh %s", lsa->str);
@@ -424,6 +425,29 @@ ospf6_asbr_external_lsa_refresh (void *data)
   prefix.family = AF_INET6;
   apply_mask_ipv6 ((struct prefix_ipv6 *) &prefix);
 
+  for (node = route_top (external_table); node; node = route_next (node))
+    {
+      route = node->info;
+      if (route == NULL)
+        continue;
+
+      for (info = route->info_head; info; info = info->next)
+        {
+          if (lsa->header->id == htonl (info->id))
+            match = info;
+        }
+    }
+
+  if (match == NULL)
+    {
+      ospf6_lsa_premature_aging (lsa);
+      return 0;
+    }
+
+  ospf6_asbr_schedule_external (match);
+  return 0;
+
+#if 0
   node = route_node_lookup (external_table, &prefix);
   if (! node || ! node->info)
     {
@@ -450,6 +474,7 @@ ospf6_asbr_external_lsa_refresh (void *data)
     ospf6_lsa_premature_aging (lsa);
 
   return 0;
+#endif
 }
 
 void
@@ -461,6 +486,18 @@ ospf6_asbr_route_add (int type, int ifindex, struct prefix *prefix,
   struct ospf6_external_route *route;
   struct ospf6_external_info *info, tinfo;
 
+#if defined (MUSICA) || defined (LINUX)
+  /* XXX As long as the OSPFv3 redistribution is applied to all the connected
+   *     routes, one needs to filter the ::/96 prefixes.
+   *     However it could be a wanted case, it will be removed soon.
+   */
+  struct prefix_ipv6 *p = (prefix_ipv6 *)prefix;
+
+  if ((IN6_IS_ADDR_V4COMPAT(&p->prefix)) ||
+      (IN6_IS_ADDR_UNSPECIFIED (&p->prefix) && (p->prefixlen == 96))) 
+    return;
+#endif /* MUSICA or LINUX */
+
   if (! ospf6_zebra_is_redistribute (type))
     return;
 
@@ -567,6 +604,18 @@ ospf6_asbr_route_remove (int type, int ifindex, struct prefix *prefix)
   struct ospf6_external_info *info;
   struct ospf6_lsa *lsa;
 
+#if defined (MUSICA) || defined (LINUX)
+  /* XXX As long as the OSPFv3 redistribution is applied to all the connected
+   *     routes, one needs to filter the ::/96 prefixes.
+   *     However it could be a wanted case, it will be removed soon.
+   */
+  struct prefix_ipv6 *p = (prefix_ipv6 *)prefix;
+
+  if ((IN6_IS_ADDR_V4COMPAT(&p->prefix)) ||
+      (IN6_IS_ADDR_UNSPECIFIED (&p->prefix) && (p->prefixlen == 96))) 
+    return;
+#endif /* MUSICA or LINUX */
+
   node = route_node_get (external_table, prefix);
   route = node->info;
 
index 3f3d5508d5b6f2222a7a68c2666b8dfc6b6f9908..10203bf854d02d0d32702c0450f08f175c0d3f5d 100644 (file)
@@ -283,10 +283,10 @@ main (int argc, char *argv[], char *envp[])
   if (! daemon_mode)
     flag = ZLOG_STDOUT;
   else
-    flag = 0;
+    flag = ZLOG_NOLOG;
 
   zlog_default = openzlog (progname, flag, ZLOG_OSPF6,
-                          LOG_CONS|LOG_NDELAY|LOG_PERROR|LOG_PID,
+                          LOG_CONS|LOG_NDELAY|LOG_PID,
                           LOG_DAEMON);
   signal_init ();
   cmd_init (1);
@@ -315,9 +315,11 @@ main (int argc, char *argv[], char *envp[])
   /* Make ospf vty socket. */
   vty_serv_sock (vty_addr, vty_port, OSPF6_VTYSH_PATH);
 
+#ifdef DEBUG
   /* Print start message */
   zlog_notice ("OSPF6d (Zebra-%s ospf6d-%s) starts",
                ZEBRA_VERSION, OSPF6_DAEMON_VERSION);
+#endif
 
   /* Start finite state machine, here we go! */
   while (thread_fetch (master, &thread))
index 041d829b504453a7107a8cfcfc76612330d8fbf9..e90614e59c825d3dba07f86b208e096102da3b3a 100644 (file)
@@ -255,10 +255,8 @@ ospf6_leave_allspfrouters (u_int ifindex)
                   &mreq6, sizeof (mreq6)) < 0)
     zlog_warn ("Network: Leave AllSPFRouters on ifindex %d Failed: %s",
                ifindex, strerror (errno));
-#if 0
   else
     zlog_info ("Network: Leave AllSPFRouters on ifindex %d", ifindex);
-#endif
 }
 
 void
@@ -275,10 +273,8 @@ ospf6_join_alldrouters (u_int ifindex)
                   &mreq6, sizeof (mreq6)) < 0)
     zlog_warn ("Network: Join AllDRouters on ifindex %d Failed: %s",
                ifindex, strerror (errno));
-#if 0
   else
     zlog_info ("Network: Join AllDRouters on ifindex %d", ifindex);
-#endif
 }
 
 void
@@ -294,10 +290,8 @@ ospf6_leave_alldrouters (u_int ifindex)
   if (setsockopt (ospf6_sock, IPPROTO_IPV6, IPV6_LEAVE_GROUP,
                   &mreq6, sizeof (mreq6)) < 0)
     zlog_warn ("Network: Leave AllDRouters on ifindex %d Failed", ifindex);
-#if 0
   else
     zlog_info ("Network: Leave AllDRouters on ifindex %d", ifindex);
-#endif
 }
 
 /* setsockopt ReUseAddr to on */
@@ -340,7 +334,7 @@ void
 ospf6_set_checksum ()
 {
   int offset = 12;
-#ifndef DISABLE_IPV6_CHECKSUM
+#if !defined(DISABLE_IPV6_CHECKSUM)
   if (setsockopt (ospf6_sock, IPPROTO_IPV6, IPV6_CHECKSUM,
                   &offset, sizeof (offset)) < 0)
     zlog_warn ("Network: set IPV6_CHECKSUM failed: %s", strerror (errno));
index a8a058f2c254e1c3f3c05ba01bfdff50ac807a6d..f9cc32991bc43028f1b0444aa20bd914e39ad706 100644 (file)
@@ -286,6 +286,9 @@ ospf6_create (unsigned long process_id)
 void
 ospf6_delete (struct ospf6 *ospf6)
 {
+  if (!ospf6)
+    return;
+
   ospf6_route_remove_all (ospf6->route_table);
   ospf6_free (ospf6);
 }