]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6ConfigNv.c
Update for NetworkPkg.
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6ConfigNv.c
index ef5ea2e13a408476bf32f08eb83e543db75a15a9..db2155e14cfbb1733ebddebe9ef3cf6e34a9a589 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, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, 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
@@ -15,8 +15,6 @@
 \r
 #include "Ip6Impl.h"\r
 \r
 \r
 #include "Ip6Impl.h"\r
 \r
-EFI_GUID  mIp6HiiVendorDevicePathGuid = IP6_HII_VENDOR_DEVICE_PATH_GUID;\r
-EFI_GUID  mIp6ConfigNvDataGuid        = IP6_CONFIG_NVDATA_GUID;\r
 CHAR16    mIp6ConfigStorageName[]     = L"IP6_CONFIG_IFR_NVDATA";\r
 \r
 /**\r
 CHAR16    mIp6ConfigStorageName[]     = L"IP6_CONFIG_IFR_NVDATA";\r
 \r
 /**\r
@@ -556,7 +554,7 @@ Ip6ConvertAddressListToString (
 \r
   Status = HiiUpdateForm (\r
              HiiHandle,                       // HII handle\r
 \r
   Status = HiiUpdateForm (\r
              HiiHandle,                       // HII handle\r
-             &mIp6ConfigNvDataGuid,           // Formset GUID\r
+             &gIp6ConfigNvDataGuid,           // Formset GUID\r
              FORMID_MAIN_FORM,                // Form ID\r
              StartOpCodeHandle,               // Label for where to insert opcodes\r
              EndOpCodeHandle                  // Replace data\r
              FORMID_MAIN_FORM,                // Form ID\r
              StartOpCodeHandle,               // Label for where to insert opcodes\r
              EndOpCodeHandle                  // Replace data\r
@@ -1447,7 +1445,7 @@ Ip6FormExtractConfig (
 \r
   *Progress = Request;\r
   if ((Request != NULL) &&\r
 \r
   *Progress = Request;\r
   if ((Request != NULL) &&\r
-      !HiiIsConfigHdrMatch (Request, &mIp6ConfigNvDataGuid, mIp6ConfigStorageName)) {\r
+      !HiiIsConfigHdrMatch (Request, &gIp6ConfigNvDataGuid, mIp6ConfigStorageName)) {\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
     return EFI_NOT_FOUND;\r
   }\r
 \r
@@ -1478,7 +1476,7 @@ Ip6FormExtractConfig (
     // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator.\r
     //\r
     ConfigRequestHdr = HiiConstructConfigHdr (\r
     // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator.\r
     //\r
     ConfigRequestHdr = HiiConstructConfigHdr (\r
-                         &mIp6ConfigNvDataGuid,\r
+                         &gIp6ConfigNvDataGuid,\r
                          mIp6ConfigStorageName,\r
                          Private->ChildHandle\r
                          );\r
                          mIp6ConfigStorageName,\r
                          Private->ChildHandle\r
                          );\r
@@ -1578,7 +1576,7 @@ Ip6FormRouteConfig (
   // Check routing data in <ConfigHdr>.\r
   // Note: if only one Storage is used, then this checking could be skipped.\r
   //\r
   // Check routing data in <ConfigHdr>.\r
   // Note: if only one Storage is used, then this checking could be skipped.\r
   //\r
-  if (!HiiIsConfigHdrMatch (Configuration, &mIp6ConfigNvDataGuid, mIp6ConfigStorageName)) {\r
+  if (!HiiIsConfigHdrMatch (Configuration, &gIp6ConfigNvDataGuid, mIp6ConfigStorageName)) {\r
     *Progress = Configuration;\r
     return EFI_NOT_FOUND;\r
   }\r
     *Progress = Configuration;\r
     return EFI_NOT_FOUND;\r
   }\r
@@ -1649,130 +1647,12 @@ Ip6FormCallback (
   Instance  = IP6_CONFIG_INSTANCE_FROM_FORM_CALLBACK (Private);\r
   Ip6NvData = &Instance->Ip6NvData;\r
 \r
   Instance  = IP6_CONFIG_INSTANCE_FROM_FORM_CALLBACK (Private);\r
   Ip6NvData = &Instance->Ip6NvData;\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {\r
-    //\r
-    // Update main Form when main Form is opened.\r
-    // This will be done only in FORM_OPEN CallBack of question with KEY_INTERFACE_ID from main Form.\r
-    //\r
-    if (QuestionId != KEY_INTERFACE_ID) {\r
-      return EFI_SUCCESS;\r
-    }\r
-\r
-    Ip6Config = &Instance->Ip6Config;\r
-    HiiHandle = Instance->CallbackInfo.RegisteredHandle;\r
-\r
-    //\r
-    // Get the current interface info.\r
-    //\r
-    Status = Ip6ConfigNvGetData (\r
-               Ip6Config,\r
-               Ip6ConfigDataTypeInterfaceInfo,\r
-               &DataSize,\r
-               (VOID **) &Data\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
-    }\r
-\r
-    //\r
-    // Generate the dynamic text opcode for host address and draw it.\r
-    //\r
-    IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data;\r
-    Status = Ip6ConvertAddressListToString (\r
-               PortString,\r
-               HiiHandle,\r
-               Ip6ConfigNvHostAddress,\r
-               IfInfo->AddressInfo,\r
-               IfInfo->AddressInfoCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
-    }\r
-\r
-    //\r
-    // Generate the dynamic text opcode for route table and draw it.\r
-    //\r
-    Status = Ip6ConvertAddressListToString (\r
-               PortString,\r
-               HiiHandle,\r
-               Ip6ConfigNvRouteTable,\r
-               IfInfo->RouteTable,\r
-               IfInfo->RouteCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
-    }\r
-\r
-    //\r
-    // Get DNS server list.\r
-    //\r
-    DataSize = 0;\r
-    Status = Ip6ConfigNvGetData (\r
-               Ip6Config,\r
-               Ip6ConfigDataTypeDnsServer,\r
-               &DataSize,\r
-               (VOID **) &Data\r
-               );\r
-    if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
-      goto Exit;\r
-    }\r
-\r
-    if (DataSize > 0) {\r
-      //\r
-      // Generate the dynamic text opcode for DNS server and draw it.\r
-      //\r
-      Status = Ip6ConvertAddressListToString (\r
-                 PortString,\r
-                 HiiHandle,\r
-                 Ip6ConfigNvDnsAddress,\r
-                 Data,\r
-                 DataSize / sizeof (EFI_IPv6_ADDRESS)\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        goto Exit;\r
-      }\r
-    }\r
-\r
-    //\r
-    // Get gateway adderss list.\r
-    //\r
-    DataSize = 0;\r
-    Status = Ip6ConfigNvGetData (\r
-               Ip6Config,\r
-               Ip6ConfigDataTypeGateway,\r
-               &DataSize,\r
-               (VOID **) &Data\r
-               );\r
-    if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
-      goto Exit;\r
-    }\r
-\r
-    if (DataSize > 0) {\r
-      //\r
-      // Generate the dynamic text opcode for gateway and draw it.\r
-      //\r
-      Status = Ip6ConvertAddressListToString (\r
-                 PortString,\r
-                 HiiHandle,\r
-                 Ip6ConfigNvGatewayAddress,\r
-                 Data,\r
-                 DataSize / sizeof (EFI_IPv6_ADDRESS)\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        goto Exit;\r
-      }\r
-    }\r
-\r
-Exit:\r
-    FreePool (Data);\r
-    return Status;\r
+  if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)){\r
+    return EFI_SUCCESS;\r
   }\r
 \r
   }\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_CLOSE) {\r
-    //\r
-    // Do nothing for UEFI FORM_CLOSE action\r
-    //\r
-    return EFI_SUCCESS;\r
+  if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {\r
+    return EFI_UNSUPPORTED;\r
   }\r
 \r
   if ((Value == NULL) || (ActionRequest == NULL)) {\r
   }\r
 \r
   if ((Value == NULL) || (ActionRequest == NULL)) {\r
@@ -1797,92 +1677,230 @@ Exit:
 \r
   CopyMem (&OldIfrNvData, IfrNvData, BufferSize);\r
 \r
 \r
   CopyMem (&OldIfrNvData, IfrNvData, BufferSize);\r
 \r
-  switch (QuestionId) {\r
-  case KEY_INTERFACE_ID:\r
-    Status = Ip6ParseInterfaceIdFromString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId);\r
-    if (EFI_ERROR (Status)) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"Invalid Interface ID!",\r
-        NULL\r
-        );\r
-    }\r
+  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
+    switch (QuestionId) {\r
+    case KEY_GET_CURRENT_SETTING:\r
+      Ip6Config = &Instance->Ip6Config;\r
+      HiiHandle = Instance->CallbackInfo.RegisteredHandle;\r
+      Data      = NULL;\r
 \r
 \r
-    break;\r
+      //\r
+      // Get current interface info.\r
+      //\r
+      Status = Ip6ConfigNvGetData (\r
+                 Ip6Config,\r
+                 Ip6ConfigDataTypeInterfaceInfo,\r
+                 &DataSize,\r
+                 (VOID **) &Data\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        return Status;\r
+      }\r
 \r
 \r
-  case KEY_MANUAL_ADDRESS:\r
-    Status = Ip6ParseAddressListFromString (\r
-               IfrNvData->ManualAddress,\r
-               &Ip6NvData->ManualAddress,\r
-               &Ip6NvData->ManualAddressCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"Invalid Host Addresses!",\r
-        NULL\r
-        );\r
-    }\r
+      //\r
+      // Generate dynamic text opcode for host address and draw it.\r
+      //\r
+      IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data;\r
+      Status = Ip6ConvertAddressListToString (\r
+                 PortString,\r
+                 HiiHandle,\r
+                 Ip6ConfigNvHostAddress,\r
+                 IfInfo->AddressInfo,\r
+                 IfInfo->AddressInfoCount\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        FreePool (Data);\r
+        return Status;\r
+      }\r
 \r
 \r
-    break;\r
+      //\r
+      // Generate the dynamic text opcode for route table and draw it.\r
+      //\r
+      Status = Ip6ConvertAddressListToString (\r
+                 PortString,\r
+                 HiiHandle,\r
+                 Ip6ConfigNvRouteTable,\r
+                 IfInfo->RouteTable,\r
+                 IfInfo->RouteCount\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        FreePool (Data);\r
+        return Status;\r
+      }\r
 \r
 \r
-  case KEY_GATEWAY_ADDRESS:\r
-    Status = Ip6ParseAddressListFromString (\r
-               IfrNvData->GatewayAddress,\r
-               &Ip6NvData->GatewayAddress,\r
-               &Ip6NvData->GatewayAddressCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"Invalid Gateway Addresses!",\r
-        NULL\r
-        );\r
-    }\r
+      //\r
+      // Get DNS server list.\r
+      //\r
+      FreePool (Data);\r
+      DataSize = 0;\r
+      Data = NULL;\r
+      Status = Ip6ConfigNvGetData (\r
+                 Ip6Config,\r
+                 Ip6ConfigDataTypeDnsServer,\r
+                 &DataSize,\r
+                 (VOID **) &Data\r
+                 );\r
+      if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
+        if (Data != NULL) {\r
+          FreePool (Data);\r
+        }\r
+        return Status;\r
+      }\r
 \r
 \r
-    break;\r
+      if (DataSize > 0) {\r
+        //\r
+        // Generate the dynamic text opcode for DNS server and draw it.\r
+        //\r
+        Status = Ip6ConvertAddressListToString (\r
+                   PortString,\r
+                   HiiHandle,\r
+                   Ip6ConfigNvDnsAddress,\r
+                   Data,\r
+                   DataSize / sizeof (EFI_IPv6_ADDRESS)\r
+                   );\r
+        if (EFI_ERROR (Status)) {\r
+          FreePool (Data);\r
+          return Status;\r
+        }\r
+      }\r
 \r
 \r
-  case KEY_DNS_ADDRESS:\r
-    Status = Ip6ParseAddressListFromString (\r
-               IfrNvData->DnsAddress,\r
-               &Ip6NvData->DnsAddress,\r
-               &Ip6NvData->DnsAddressCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      CreatePopUp (\r
-        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-        &Key,\r
-        L"Invalid DNS Addresses!",\r
-        NULL\r
-        );\r
-    }\r
+      //\r
+      // Get gateway adderss list.\r
+      //\r
+      if (Data != NULL) {\r
+        FreePool (Data);\r
+      }\r
 \r
 \r
-    break;\r
+      DataSize = 0;\r
+      Data = NULL;\r
+      Status = Ip6ConfigNvGetData (\r
+                 Ip6Config,\r
+                 Ip6ConfigDataTypeGateway,\r
+                 &DataSize,\r
+                 (VOID **) &Data\r
+                 );\r
+      if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
+        if (Data != NULL) {\r
+          FreePool (Data);\r
+        }\r
+        return Status;\r
+      }\r
 \r
 \r
-  case KEY_SAVE_CONFIG_CHANGES:\r
-    CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
-    break;\r
+      if (DataSize > 0) {\r
+        //\r
+        // Generate the dynamic text opcode for gateway and draw it.\r
+        //\r
+        Status = Ip6ConvertAddressListToString (\r
+                   PortString,\r
+                   HiiHandle,\r
+                   Ip6ConfigNvGatewayAddress,\r
+                   Data,\r
+                   DataSize / sizeof (EFI_IPv6_ADDRESS)\r
+                   );\r
+        if (EFI_ERROR (Status)) {\r
+          FreePool (Data);\r
+          return Status;\r
+        }\r
+      }\r
 \r
 \r
-  case KEY_IGNORE_CONFIG_CHANGES:\r
-    CopyMem (IfrNvData, &OldIfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
-    break;\r
+      if (Data != NULL) {\r
+        FreePool (Data);\r
+      }\r
 \r
 \r
-  case KEY_SAVE_CHANGES:\r
-    Status = Ip6ConvertIfrNvDataToConfigNvData (IfrNvData, Instance);\r
-    if (EFI_ERROR (Status)) {\r
+      Status = EFI_SUCCESS;\r
+\r
+      break;\r
+\r
+    default:\r
       break;\r
     }\r
       break;\r
     }\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
 \r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-    break;\r
+    case KEY_IGNORE_CONFIG_CHANGES:\r
+      CopyMem (IfrNvData, &OldIfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT;\r
+      break;\r
 \r
 \r
-  default:\r
-    break;\r
+    case KEY_SAVE_CHANGES:\r
+      Status = Ip6ConvertIfrNvDataToConfigNvData (IfrNvData, Instance);\r
+      if (EFI_ERROR (Status)) {\r
+        break;\r
+      }\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+      break;\r
+    \r
+    case KEY_INTERFACE_ID:\r
+      Status = Ip6ParseInterfaceIdFromString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId);\r
+      if (EFI_ERROR (Status)) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"Invalid Interface ID!",\r
+          NULL\r
+          );\r
+      }\r
+    \r
+      break;\r
+    \r
+    case KEY_MANUAL_ADDRESS:\r
+      Status = Ip6ParseAddressListFromString (\r
+                 IfrNvData->ManualAddress,\r
+                 &Ip6NvData->ManualAddress,\r
+                 &Ip6NvData->ManualAddressCount\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"Invalid Host Addresses!",\r
+          NULL\r
+          );\r
+      }\r
+    \r
+      break;\r
+    \r
+    case KEY_GATEWAY_ADDRESS:\r
+      Status = Ip6ParseAddressListFromString (\r
+                 IfrNvData->GatewayAddress,\r
+                 &Ip6NvData->GatewayAddress,\r
+                 &Ip6NvData->GatewayAddressCount\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"Invalid Gateway Addresses!",\r
+          NULL\r
+          );\r
+      }\r
+    \r
+      break;\r
+    \r
+    case KEY_DNS_ADDRESS:\r
+      Status = Ip6ParseAddressListFromString (\r
+                 IfrNvData->DnsAddress,\r
+                 &Ip6NvData->DnsAddress,\r
+                 &Ip6NvData->DnsAddressCount\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        CreatePopUp (\r
+          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+          &Key,\r
+          L"Invalid DNS Addresses!",\r
+          NULL\r
+          );\r
+      }\r
+    \r
+      break;\r
+\r
+    default:\r
+      break;\r
+    }\r
   }\r
 \r
   if (!EFI_ERROR (Status)) {\r
   }\r
 \r
   if (!EFI_ERROR (Status)) {\r
@@ -1948,7 +1966,7 @@ Ip6ConfigFormInit (
   VendorDeviceNode.Header.Type    = HARDWARE_DEVICE_PATH;\r
   VendorDeviceNode.Header.SubType = HW_VENDOR_DP;\r
 \r
   VendorDeviceNode.Header.Type    = HARDWARE_DEVICE_PATH;\r
   VendorDeviceNode.Header.SubType = HW_VENDOR_DP;\r
 \r
-  CopyGuid (&VendorDeviceNode.Guid, &mIp6HiiVendorDevicePathGuid);\r
+  CopyGuid (&VendorDeviceNode.Guid, &gEfiCallerIdGuid);\r
 \r
   SetDevicePathNodeLength (&VendorDeviceNode.Header, sizeof (VENDOR_DEVICE_PATH));\r
   CallbackInfo->HiiVendorDevicePath = AppendDevicePathNode (\r
 \r
   SetDevicePathNodeLength (&VendorDeviceNode.Header, sizeof (VENDOR_DEVICE_PATH));\r
   CallbackInfo->HiiVendorDevicePath = AppendDevicePathNode (\r
@@ -1998,7 +2016,7 @@ Ip6ConfigFormInit (
   // Publish our HII data\r
   //\r
   CallbackInfo->RegisteredHandle = HiiAddPackages (\r
   // Publish our HII data\r
   //\r
   CallbackInfo->RegisteredHandle = HiiAddPackages (\r
-                                     &mIp6ConfigNvDataGuid,\r
+                                     &gIp6ConfigNvDataGuid,\r
                                      CallbackInfo->ChildHandle,\r
                                      Ip6DxeStrings,\r
                                      Ip6ConfigBin,\r
                                      CallbackInfo->ChildHandle,\r
                                      Ip6DxeStrings,\r
                                      Ip6ConfigBin,\r