]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6Nd.c
IntelFrameworkModulePkg: Refine casting expression result to bigger size
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6Nd.c
index 9f30f9b20e05545d5d640bf607ec0bdec9359dc3..a3f49bb2daadccf3d65a1ceb314299ccd68bbb2b 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Implementation of Neighbor Discovery support routines.\r
 \r
-  Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -198,7 +198,7 @@ Ip6CreatePrefixListEntry (
   LIST_ENTRY                *Entry;\r
   IP6_PREFIX_LIST_ENTRY     *TmpPrefixEntry;\r
 \r
-  if (Prefix == NULL || PreferredLifetime > ValidLifetime || PrefixLength >= IP6_PREFIX_NUM) {\r
+  if (Prefix == NULL || PreferredLifetime > ValidLifetime || PrefixLength > IP6_PREFIX_MAX) {\r
     return NULL;\r
   }\r
 \r
@@ -853,9 +853,9 @@ Ip6OnDADFinished (
         // with DNS SERVERS.\r
         //\r
         Oro         = (EFI_DHCP6_PACKET_OPTION *) OptBuf;\r
-        Oro->OpCode = HTONS (IP6_CONFIG_DHCP6_OPTION_ORO);\r
+        Oro->OpCode = HTONS (DHCP6_OPT_ORO);\r
         Oro->OpLen  = HTONS (2);\r
-        *((UINT16 *) &Oro->Data[0]) = HTONS (IP6_CONFIG_DHCP6_OPTION_DNS_SERVERS);\r
+        *((UINT16 *) &Oro->Data[0]) = HTONS (DHCP6_OPT_DNS_SERVERS);\r
 \r
         InfoReqReXmit.Irt = 4;\r
         InfoReqReXmit.Mrc = 64;\r
@@ -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