]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6ConfigImpl.c
ArmPkg/ArmDmaLib: clean up abuse of device address
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6ConfigImpl.c
index 9a1e3d076f6a021829a8b28310a5ae828fca7be3..9b6a62e9ec885b3894fc3d9a6211e15ed659134c 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of EFI IPv6 Configuration Protocol.\r
 \r
 /** @file\r
   The implementation of EFI IPv6 Configuration Protocol.\r
 \r
-  Copyright (c) 2009 - 2014, 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
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -52,7 +52,8 @@ Ip6ConfigOnPolicyChanged (
   LIST_ENTRY      *Next;\r
   IP6_INTERFACE   *IpIf;\r
   IP6_DAD_ENTRY   *DadEntry;\r
   LIST_ENTRY      *Next;\r
   IP6_INTERFACE   *IpIf;\r
   IP6_DAD_ENTRY   *DadEntry;\r
-\r
+  IP6_DELAY_JOIN_LIST       *DelayNode;\r
+  \r
   //\r
   // Currently there are only two policies: Manual and Automatic. Regardless of\r
   // what transition is going on, i.e., Manual -> Automatic and Automatic ->\r
   //\r
   // Currently there are only two policies: Manual and Automatic. Regardless of\r
   // what transition is going on, i.e., Manual -> Automatic and Automatic ->\r
@@ -94,10 +95,18 @@ Ip6ConfigOnPolicyChanged (
 \r
   NET_LIST_FOR_EACH (Entry, &IpSb->Interfaces) {\r
     //\r
 \r
   NET_LIST_FOR_EACH (Entry, &IpSb->Interfaces) {\r
     //\r
-    // remove all pending DAD entries for the global addresses.\r
+    // remove all pending delay node and DAD entries for the global addresses.\r
     //\r
     IpIf = NET_LIST_USER_STRUCT_S (Entry, IP6_INTERFACE, Link, IP6_INTERFACE_SIGNATURE);\r
 \r
     //\r
     IpIf = NET_LIST_USER_STRUCT_S (Entry, IP6_INTERFACE, Link, IP6_INTERFACE_SIGNATURE);\r
 \r
+    NET_LIST_FOR_EACH_SAFE (Entry2, Next, &IpIf->DelayJoinList) {\r
+      DelayNode = NET_LIST_USER_STRUCT (Entry2, IP6_DELAY_JOIN_LIST, Link);\r
+      if (!NetIp6IsLinkLocalAddr (&DelayNode->AddressInfo->Address)) {\r
+        RemoveEntryList (&DelayNode->Link);\r
+        FreePool (DelayNode);\r
+      }\r
+    }\r
+\r
     NET_LIST_FOR_EACH_SAFE (Entry2, Next, &IpIf->DupAddrDetectList) {\r
       DadEntry = NET_LIST_USER_STRUCT_S (Entry2, IP6_DAD_ENTRY, Link, IP6_DAD_ENTRY_SIGNATURE);\r
 \r
     NET_LIST_FOR_EACH_SAFE (Entry2, Next, &IpIf->DupAddrDetectList) {\r
       DadEntry = NET_LIST_USER_STRUCT_S (Entry2, IP6_DAD_ENTRY, Link, IP6_DAD_ENTRY_SIGNATURE);\r
 \r
@@ -112,7 +121,7 @@ Ip6ConfigOnPolicyChanged (
 \r
   if (NewPolicy == Ip6ConfigPolicyAutomatic) {\r
     //\r
 \r
   if (NewPolicy == Ip6ConfigPolicyAutomatic) {\r
     //\r
-    // Set paramters to trigger router solicitation sending in timer handler.\r
+    // Set parameters to trigger router solicitation sending in timer handler.\r
     //\r
     IpSb->RouterAdvertiseReceived = FALSE;\r
     IpSb->SolicitTimer            = IP6_MAX_RTR_SOLICITATIONS;\r
     //\r
     IpSb->RouterAdvertiseReceived = FALSE;\r
     IpSb->SolicitTimer            = IP6_MAX_RTR_SOLICITATIONS;\r
@@ -210,9 +219,9 @@ Ip6ConfigStartStatefulAutoConfig (
   // with DNS SERVERS.\r
   //\r
   Oro                         = (EFI_DHCP6_PACKET_OPTION *) OptBuf;\r
   // 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
   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
   OptList[0]                  = Oro;\r
 \r
   Status                      = EFI_SUCCESS;\r
   OptList[0]                  = Oro;\r
 \r
   Status                      = EFI_SUCCESS;\r
@@ -656,36 +665,35 @@ Ip6ConfigSetPolicy (
 \r
     return EFI_ABORTED;\r
   } else {\r
 \r
     return EFI_ABORTED;\r
   } else {\r
-\r
-    if (NewPolicy == Ip6ConfigPolicyAutomatic) {\r
-      //\r
-      // Clean the ManualAddress, Gateway and DnsServers, shrink the variable\r
-      // data size, and fire up all the related events.\r
-      //\r
-      DataItem           = &Instance->DataItem[Ip6ConfigDataTypeManualAddress];\r
-      if (DataItem->Data.Ptr != NULL) {\r
-        FreePool (DataItem->Data.Ptr);\r
-      }\r
-      DataItem->Data.Ptr = NULL;\r
-      DataItem->DataSize = 0;\r
-      DataItem->Status   = EFI_NOT_FOUND;\r
-      NetMapIterate (&DataItem->EventMap, Ip6ConfigSignalEvent, NULL);\r
-\r
-      DataItem           = &Instance->DataItem[Ip6ConfigDataTypeGateway];\r
-      if (DataItem->Data.Ptr != NULL) {\r
-        FreePool (DataItem->Data.Ptr);\r
-      }\r
-      DataItem->Data.Ptr = NULL;\r
-      DataItem->DataSize = 0;\r
-      DataItem->Status   = EFI_NOT_FOUND;\r
-      NetMapIterate (&DataItem->EventMap, Ip6ConfigSignalEvent, NULL);\r
-\r
-      DataItem           = &Instance->DataItem[Ip6ConfigDataTypeDnsServer];\r
-      DataItem->Data.Ptr = NULL;\r
-      DataItem->DataSize = 0;\r
-      DataItem->Status   = EFI_NOT_FOUND;\r
-      NetMapIterate (&DataItem->EventMap, Ip6ConfigSignalEvent, NULL);\r
-    } else {\r
+    //\r
+    // Clean the ManualAddress, Gateway and DnsServers, shrink the variable\r
+    // data size, and fire up all the related events.\r
+    //\r
+    DataItem           = &Instance->DataItem[Ip6ConfigDataTypeManualAddress];\r
+    if (DataItem->Data.Ptr != NULL) {\r
+      FreePool (DataItem->Data.Ptr);\r
+    }\r
+    DataItem->Data.Ptr = NULL;\r
+    DataItem->DataSize = 0;\r
+    DataItem->Status   = EFI_NOT_FOUND;\r
+    NetMapIterate (&DataItem->EventMap, Ip6ConfigSignalEvent, NULL);\r
+\r
+    DataItem           = &Instance->DataItem[Ip6ConfigDataTypeGateway];\r
+    if (DataItem->Data.Ptr != NULL) {\r
+      FreePool (DataItem->Data.Ptr);\r
+    }\r
+    DataItem->Data.Ptr = NULL;\r
+    DataItem->DataSize = 0;\r
+    DataItem->Status   = EFI_NOT_FOUND;\r
+    NetMapIterate (&DataItem->EventMap, Ip6ConfigSignalEvent, NULL);\r
+\r
+    DataItem           = &Instance->DataItem[Ip6ConfigDataTypeDnsServer];\r
+    DataItem->Data.Ptr = NULL;\r
+    DataItem->DataSize = 0;\r
+    DataItem->Status   = EFI_NOT_FOUND;\r
+    NetMapIterate (&DataItem->EventMap, Ip6ConfigSignalEvent, NULL);\r
+    \r
+    if (NewPolicy == Ip6ConfigPolicyManual) {\r
       //\r
       // The policy is changed from automatic to manual. Stop the DHCPv6 process\r
       // and destroy the DHCPv6 child.\r
       //\r
       // The policy is changed from automatic to manual. Stop the DHCPv6 process\r
       // and destroy the DHCPv6 child.\r
@@ -1499,7 +1507,7 @@ Ip6ConfigParseDhcpReply (
     CopyMem (&OpCode, &OptList[Index]->OpCode, sizeof (OpCode));\r
     OpCode = NTOHS (OpCode);\r
 \r
     CopyMem (&OpCode, &OptList[Index]->OpCode, sizeof (OpCode));\r
     OpCode = NTOHS (OpCode);\r
 \r
-    if (OpCode == IP6_CONFIG_DHCP6_OPTION_DNS_SERVERS) {\r
+    if (OpCode == DHCP6_OPT_DNS_SERVERS) {\r
       CopyMem (&Length, &OptList[Index]->OpLen, sizeof (Length));\r
       Length = NTOHS (Length);\r
 \r
       CopyMem (&Length, &OptList[Index]->OpLen, sizeof (Length));\r
       Length = NTOHS (Length);\r
 \r
@@ -2200,7 +2208,7 @@ Ip6ConfigInitInstance (
   DataItem->SetData  = Ip6ConfigSetPolicy;\r
   DataItem->Data.Ptr = &Instance->Policy;\r
   DataItem->DataSize = sizeof (Instance->Policy);\r
   DataItem->SetData  = Ip6ConfigSetPolicy;\r
   DataItem->Data.Ptr = &Instance->Policy;\r
   DataItem->DataSize = sizeof (Instance->Policy);\r
-  Instance->Policy   = Ip6ConfigPolicyAutomatic;\r
+  Instance->Policy   = Ip6ConfigPolicyManual;\r
   SET_DATA_ATTRIB (DataItem->Attribute, DATA_ATTRIB_SIZE_FIXED);\r
 \r
   DataItem           = &Instance->DataItem[Ip6ConfigDataTypeDupAddrDetectTransmits];\r
   SET_DATA_ATTRIB (DataItem->Attribute, DATA_ATTRIB_SIZE_FIXED);\r
 \r
   DataItem           = &Instance->DataItem[Ip6ConfigDataTypeDupAddrDetectTransmits];\r