]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fixes issues with "Discard Changes and Exit" option in IPv6 driver's Advance Configur...
authortye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 28 Apr 2012 09:43:31 +0000 (09:43 +0000)
committertye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 28 Apr 2012 09:43:31 +0000 (09:43 +0000)
Signed-off-by: Ye Ting<ting.ye@intel.com>
Reviewed-by: Qianouyang <qian.ouyang@intel.com>
Reviewed-by: Fu, Siyuan <Siyuan.fu@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13229 6f19259b-4bc3-4df7-8a09-765794883524

NetworkPkg/Ip6Dxe/Ip6ConfigNv.c

index db2155e14cfbb1733ebddebe9ef3cf6e34a9a589..d4f25d030147134d1898c6c6401ec98b0c22c468 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Helper functions for configuring or obtaining the parameters relating to IP6.\r
 \r
-  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2012, 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
@@ -928,11 +928,11 @@ Ip6ConvertConfigNvDataToIfrNvData (
   IN     IP6_CONFIG_INSTANCE         *Instance\r
   )\r
 {\r
+  IP6_CONFIG_NVDATA                          *Ip6NvData;\r
   EFI_IP6_CONFIG_PROTOCOL                    *Ip6Config;\r
   UINTN                                      DataSize;\r
   VOID                                       *Data;\r
   EFI_STATUS                                 Status;\r
-  EFI_IP6_CONFIG_INTERFACE_ID                InterfaceId;\r
   EFI_IP6_CONFIG_POLICY                      Policy;\r
   EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS   DadXmits;\r
   EFI_HII_HANDLE                             HiiHandle;\r
@@ -944,6 +944,7 @@ Ip6ConvertConfigNvDataToIfrNvData (
   NET_CHECK_SIGNATURE (Instance, IP6_CONFIG_INSTANCE_SIGNATURE);\r
 \r
   Ip6Config = &Instance->Ip6Config;\r
+  Ip6NvData = &Instance->Ip6NvData;\r
   Data      = NULL;\r
   DataSize  = 0;\r
   HiiHandle = Instance->CallbackInfo.RegisteredHandle;\r
@@ -977,18 +978,18 @@ Ip6ConvertConfigNvDataToIfrNvData (
   // Get the interface id.\r
   //\r
   DataSize = sizeof (EFI_IP6_CONFIG_INTERFACE_ID);\r
-  ZeroMem (&InterfaceId, DataSize);\r
+  ZeroMem (&Ip6NvData->InterfaceId, DataSize);\r
   Status = Ip6Config->GetData (\r
                         Ip6Config,\r
                         Ip6ConfigDataTypeAltInterfaceId,\r
                         &DataSize,\r
-                        &InterfaceId\r
+                        &Ip6NvData->InterfaceId\r
                         );\r
   if (EFI_ERROR (Status)) {\r
     goto Exit;\r
   }\r
 \r
-  Ip6ConvertInterfaceIdToString (IfrNvData->InterfaceId, &InterfaceId);\r
+  Ip6ConvertInterfaceIdToString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId);\r
 \r
   //\r
   // Get current policy.\r
@@ -1627,7 +1628,6 @@ Ip6FormCallback (
   IP6_FORM_CALLBACK_INFO        *Private;\r
   UINTN                         BufferSize;\r
   IP6_CONFIG_IFR_NVDATA         *IfrNvData;\r
-  IP6_CONFIG_IFR_NVDATA         OldIfrNvData;\r
   EFI_STATUS                    Status;\r
   EFI_INPUT_KEY                 Key;\r
   IP6_CONFIG_INSTANCE           *Instance;\r
@@ -1671,12 +1671,8 @@ Ip6FormCallback (
 \r
   Status = EFI_SUCCESS;\r
 \r
-  ZeroMem (&OldIfrNvData, BufferSize);\r
-\r
   HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData);\r
 \r
-  CopyMem (&OldIfrNvData, IfrNvData, BufferSize);\r
-\r
   if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
     switch (QuestionId) {\r
     case KEY_GET_CURRENT_SETTING:\r
@@ -1817,12 +1813,18 @@ Ip6FormCallback (
   } else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
     switch (QuestionId) {\r
     case KEY_SAVE_CONFIG_CHANGES:\r
-      CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
       *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT;\r
       break;\r
 \r
     case KEY_IGNORE_CONFIG_CHANGES:\r
-      CopyMem (IfrNvData, &OldIfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
+      Ip6FreeAddressInfoList (&Ip6NvData->ManualAddress);\r
+      Ip6FreeAddressInfoList (&Ip6NvData->GatewayAddress);\r
+      Ip6FreeAddressInfoList (&Ip6NvData->DnsAddress);\r
+\r
+      Ip6NvData->ManualAddressCount  = 0;\r
+      Ip6NvData->GatewayAddressCount = 0;\r
+      Ip6NvData->DnsAddressCount     = 0;\r
+\r
       *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
       break;\r
 \r