]> 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
 /** @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
 \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
   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_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
   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
   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
   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
   // 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
   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
                         );\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
 \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_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
   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
 \r
   Status = EFI_SUCCESS;\r
 \r
-  ZeroMem (&OldIfrNvData, BufferSize);\r
-\r
   HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData);\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
   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
   } 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
       *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
       *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
       break;\r
 \r