Hi,

I've found that if an interface is declared passive (or is a CARP
interface) in ospf6d.conf, ospf6d will not send LSAs for that
interface, and any associated prefixes will not be advertised. This is
contrary to the behaviour in ospfd and what I would expect.

The problem appears to be that orig_intra_lsa_rtr in rde.c assumes
that if an interface is in the down state we should not include that
interface in intra-area LSAs, which is incorrect - a passive interface
will be in the down state by definition and we still want to advertise
the attached prefix. The patch below fixes the issue for me. I'd
appreciate any comments, as I'd like to deploy this in production.

Cheers,

Patrick

-- 
http://www.labyrinthdata.net.au - WA Backup, Web and VPS Hosting


Also up at http://patrick.ld.net.au/ospf6d-fix-passive-interfaces.patch

cvs server: Diffing .
Index: rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospf6d/rde.c,v
retrieving revision 1.50
diff -u -p -r1.50 rde.c
--- rde.c       22 Aug 2010 20:55:10 -0000      1.50
+++ rde.c       3 Jan 2011 02:23:23 -0000
@@ -22,6 +22,7 @@
 #include <sys/socket.h>
 #include <sys/queue.h>
 #include <sys/param.h>
+#include <net/if_types.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <err.h>
@@ -1459,7 +1460,9 @@ orig_intra_lsa_rtr(struct area *area, st

        numprefix = 0;
        LIST_FOREACH(iface, &area->iface_list, entry) {
-               if (iface->state & IF_STA_DOWN)
+               if ((iface->state & IF_STA_DOWN) &&
+                   !((iface->media_type == IFT_CARP) ||
+                   (iface->cflags & F_IFACE_PASSIVE)))
                        continue;

                /* Broadcast links with adjacencies are handled

Reply via email to