Re: cvs commit: src/sys/netinet6 nd6.c

From: Brian F. Feldman <green_at_FreeBSD.org>
Date: Mon, 08 Dec 2003 17:18:49 -0500
Hajimu UMEMOTO <ume_at_FreeBSD.org> wrote:
> ume         2003/12/08 03:59:21 PST
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/netinet6         nd6.c 
>   Log:
>   - changed the logic in nd6_is_addr_neighbor(); check on-link prefixes
>     (not interface addresses) to see if a given address is on-link.
>   - skip offlink prefixes in neighbor determination in nd6_is_addr_neighbor.
>   - in nd6_is_addr_neighbor, regarded every address as on-link when the
>     default router list is empty.  otherwise, we'd not be able make a neighbor
>     cache for the address.
>     this algorithm is applied to hosts only.
>   - in nd6_is_addr_neighbor, check if the default interface is equal to
>     the interface in question in addition to check if the default router
>     list is empty.
>   
>   Obtained from:  KAME

Does this have any bearing on the recursion that I (worked around|fixed) 
because it was locking the same route twice and crashing?

--- nd6.c       21 Nov 2003 20:09:00 -0000      1.1
+++ nd6.c       8 Dec 2003 17:17:10 -0000
_at__at_ -1095,7 +1095,8 _at__at_
 
        if (req == RTM_RESOLVE &&
            (nd6_need_cache(ifp) == 0 || /* stf case */
-            !nd6_is_addr_neighbor((struct sockaddr_in6 *)rt_key(rt), ifp))) {
+           ((!(rt->rt_flags & RTF_WASCLONED) || rt->rt_flags & RTF_LLINFO) &&
+           !nd6_is_addr_neighbor((struct sockaddr_in6 *)rt_key(rt), ifp)))) {
                /*
                 * FreeBSD and BSD/OS often make a cloned host route based
                 * on a less-specific route (e.g. the default route).



-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green_at_FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\
Received on Mon Dec 08 2003 - 14:18:50 UTC