ipv6 host routes

JINMEI Tatuya / 神明達哉 jinmei at isl.rdc.toshiba.co.jp
Mon Oct 2 01:19:31 PDT 2006


>>>>> On Fri, 8 Sep 2006 18:15:14 +0200, 
>>>>> John Hay <jhay at meraka.org.za> said:

> With this and my FreeBSD/IPv6 port of olsrd I can run multiple wireless
> interfaces with the same IPv6 subnet and olsrd can make it all work.

I should have looked at it much earlier (sorry about the delay), but I
don't this change is correct.  This will easily bother statically
installed route (especially) on a point-to-point interface.

There seem to be some try-and-errors in the CURRENT branch, but even
the latest revision (1.69) has a bad side-effect.  For example, if you
statically install the following *host* route

# route add -inet6 2001:db8::abcd -host -interface gif0

the latest revision of kernel will eventually remove it due to
unreachability detection, which is unlikely what the administrator
wanted to see.

The key point here is whether the route is statically created or not.
And, if I understand your intent correctly, the host route you want to
install is not really "static" in that it can (or should) be removed
when it's detected to be unreachable, right?

If so, the correct change to the kernel is the patch attached below
(it's against RELENG_6 as of today, which is rev. 1.48.2.14).

					JINMEI, Tatuya
					Communication Platform Lab.
					Corporate R&D Center, Toshiba Corp.
					jinmei at isl.rdc.toshiba.co.jp

Index: nd6.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/nd6.c,v
retrieving revision 1.48.2.14
diff -u -r1.48.2.14 nd6.c
--- nd6.c	20 Sep 2006 19:10:18 -0000	1.48.2.14
+++ nd6.c	2 Oct 2006 08:17:30 -0000
@@ -1315,7 +1315,7 @@
 		callout_init(&ln->ln_timer_ch, 0);
 
 		/* this is required for "ndp" command. - shin */
-		if (req == RTM_ADD) {
+		if (req == RTM_ADD && (rt->rt_flags & RTF_STATIC)) {
 		        /*
 			 * gate should have some valid AF_LINK entry,
 			 * and ln->ln_expire should have some lifetime
@@ -1392,8 +1392,6 @@
 					    ip6_sprintf(&llsol), error));
 				}
 			}
-		} else if (req == RTM_ADD && SDL(gate)->sdl_alen == 0) {
-			ln->ln_state = ND6_LLINFO_INCOMPLETE;
 		}
 		break;
 


More information about the freebsd-net mailing list