]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6Nd.c
Remove duplicate DAD entry in IP6 driver to fix DAD fail issue.
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6Nd.c
index 9f30f9b20e05545d5d640bf607ec0bdec9359dc3..2c8be42f093f63e0961f62d3a0aa0c9930b567cc 100644 (file)
@@ -982,6 +982,13 @@ Ip6InitDADProcess (
   NET_CHECK_SIGNATURE (IpIf, IP6_INTERFACE_SIGNATURE);\r
   ASSERT (AddressInfo != NULL);\r
 \r
+  //\r
+  // Do nothing if we have already started DAD on the address.\r
+  //\r
+  if (Ip6FindDADEntry (IpIf->Service, &AddressInfo->Address, NULL) != NULL) {\r
+    return EFI_SUCCESS;\r
+  }\r
+  \r
   Status   = EFI_SUCCESS;\r
   IpSb     = IpIf->Service;\r
   DadXmits = &IpSb->Ip6ConfigInstance.DadXmits;\r
@@ -1577,16 +1584,6 @@ Ip6ProcessNeighborSolicit (
   if (IsDAD && !IsMaintained) {\r
     DupAddrDetect = Ip6FindDADEntry (IpSb, &Target, &IpIf);\r
     if (DupAddrDetect != NULL) {\r
-      if (DupAddrDetect->Transmit == 0) {\r
-        //\r
-        // The NS is from another node to performing DAD on the same address since\r
-        // we haven't send out any NS yet. Fail DAD for the tentative address.\r
-        //\r
-        Ip6OnDADFinished (FALSE, IpIf, DupAddrDetect);\r
-        Status = EFI_ICMP_ERROR;\r
-        goto Exit;\r
-      }\r
-\r
       //\r
       // Check the MAC address of the incoming packet.\r
       //\r
@@ -2863,7 +2860,7 @@ Ip6NdFasterTimerTicking (
           //\r
           Flag = FALSE;\r
           if ((DupAddrDetect->Receive == 0) ||\r
-              (DupAddrDetect->Transmit == DupAddrDetect->Receive)) {\r
+              (DupAddrDetect->Transmit <= DupAddrDetect->Receive)) {\r
             Flag = TRUE;\r
           }\r
 \r