Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=398bcbebb6f721ac308df1e3d658c0029bb74503
Commit:     398bcbebb6f721ac308df1e3d658c0029bb74503
Parent:     8d3f099abe25c21670cb5728178a1f286952782d
Author:     YOSHIFUJI Hideaki <[EMAIL PROTECTED]>
AuthorDate: Sat Jan 19 00:35:16 2008 -0800
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Sun Jan 20 20:31:40 2008 -0800

    [IPV6] ROUTE: Make sending algorithm more friendly with RFC 4861.
    
    We omit (or delay) sending NSes for known-to-unreachable routers (in
    NUD_FAILED state) according to RFC 4191 (Default Router Preferences
    and More-Specific Routes).  But this is not fully compatible with RFC
    4861 (Neighbor Discovery Protocol for IPv6), which does not remember
    unreachability of neighbors.
    
    So, let's avoid mixing sending algorithm of RFC 4191 and that of RFC
    4861, and make the algorithm more friendly with RFC 4861 if RFC 4191
    is disabled.
    
    Issue was found by IPv6 Ready Logo Core Self_Test 1.5.0b2 (by TAHI
    Project), and has been tracked down by Mitsuru Chinen
    <[EMAIL PROTECTED]>.
    
    Signed-off-by: YOSHIFUJI Hideaki <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ipv6/route.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 6ecb5e6..20083e0 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -329,7 +329,7 @@ static inline int rt6_check_dev(struct rt6_info *rt, int 
oif)
 static inline int rt6_check_neigh(struct rt6_info *rt)
 {
        struct neighbour *neigh = rt->rt6i_nexthop;
-       int m = 0;
+       int m;
        if (rt->rt6i_flags & RTF_NONEXTHOP ||
            !(rt->rt6i_flags & RTF_GATEWAY))
                m = 1;
@@ -337,10 +337,15 @@ static inline int rt6_check_neigh(struct rt6_info *rt)
                read_lock_bh(&neigh->lock);
                if (neigh->nud_state & NUD_VALID)
                        m = 2;
-               else if (!(neigh->nud_state & NUD_FAILED))
+#ifdef CONFIG_IPV6_ROUTER_PREF
+               else if (neigh->nud_state & NUD_FAILED)
+                       m = 0;
+#endif
+               else
                        m = 1;
                read_unlock_bh(&neigh->lock);
-       }
+       } else
+               m = 0;
        return m;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to