netdev
[Top] [All Lists]

[PATCH 1/3] IPV6: clean-up DAD vs tentative address

To: davem@xxxxxxxxxx
Subject: [PATCH 1/3] IPV6: clean-up DAD vs tentative address
From: YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@xxxxxxxxxxxxxx>
Date: Fri, 06 Feb 2004 18:10:03 +0900 (JST)
Cc: yoshfuji@xxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
Organization: USAGI Project
Sender: netdev-bounce@xxxxxxxxxxx
Hello.

[PATCH 1/3] IPV6: clean-up DAD vs tentative address

D: clean-up NS (including DAD) vs tentative address

Thanks.

===== net/ipv6/ndisc.c 1.67 vs edited =====
--- 1.67/net/ipv6/ndisc.c       Wed Feb  4 02:13:51 2004
+++ edited/net/ipv6/ndisc.c     Fri Feb  6 15:10:20 2004
@@ -764,23 +764,24 @@
                           does DAD, otherwise we ignore solicitations
                           until DAD timer expires.
                         */
-                       if (addr_type == IPV6_ADDR_ANY) {
-                               if (dev->type == ARPHRD_IEEE802_TR) { 
-                                       unsigned char *sadr = skb->mac.raw ;
-                                       if (((sadr[8] &0x7f) != 
(dev->dev_addr[0] & 0x7f)) ||
-                                       (sadr[9] != dev->dev_addr[1]) ||
-                                       (sadr[10] != dev->dev_addr[2]) ||
-                                       (sadr[11] != dev->dev_addr[3]) ||
-                                       (sadr[12] != dev->dev_addr[4]) ||
-                                       (sadr[13] != dev->dev_addr[5])) 
-                                       {
-                                               addrconf_dad_failure(ifp) ; 
-                                       }
-                               } else {
-                                       addrconf_dad_failure(ifp);
-                               }
-                       } else
+                       if (addr_type != IPV6_ADDR_ANY) {
                                in6_ifa_put(ifp);
+                               return;
+                       }
+                       if (dev->type == ARPHRD_IEEE802_TR) {
+                               unsigned char *sadr = skb->mac.raw;
+                               if (((sadr[8] ^ dev->dev_addr[0]) & 0x7f) == 0 
&&
+                                   sadr[9] == dev->dev_addr[1] &&
+                                   sadr[10] == dev->dev_addr[2] &&
+                                   sadr[11] == dev->dev_addr[3] &&
+                                   sadr[12] == dev->dev_addr[4] &&
+                                   sadr[13] == dev->dev_addr[5]) {
+                                       /* looped-back to us */
+                                       in6_ifa_put(ifp);
+                                       return;
+                               }
+                       }
+                       addrconf_dad_failure(ifp); 
                        return;
                }
        

-- 
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@xxxxxxxxxxxxxx>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF  80D8 4807 F894 E062 0EEA

<Prev in Thread] Current Thread [Next in Thread>