X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=NetworkPkg%2FIp6Dxe%2FIp6ConfigNv.c;h=1b878a56a3aae87b8d8f0909a5b1bf791f8408af;hb=b28bf4143d00142323d5dd9a9129b9b25d0dff56;hp=7dbba664bf3334db6412e02b73861a6aae422a82;hpb=9bdc6592135aa9b687db7a679c52903f63812484;p=mirror_edk2.git diff --git a/NetworkPkg/Ip6Dxe/Ip6ConfigNv.c b/NetworkPkg/Ip6Dxe/Ip6ConfigNv.c index 7dbba664bf..1b878a56a3 100644 --- a/NetworkPkg/Ip6Dxe/Ip6ConfigNv.c +++ b/NetworkPkg/Ip6Dxe/Ip6ConfigNv.c @@ -1,7 +1,7 @@ /** @file Helper functions for configuring or obtaining the parameters relating to IP6. - Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -600,6 +600,7 @@ Ip6ParseAddressListFromString ( return EFI_INVALID_PARAMETER; } + ZeroMem (&AddressInfo, sizeof (EFI_IP6_ADDRESS_INFO)); LocalString = (CHAR16 *) AllocateCopyPool (StrSize (String), String); if (LocalString == NULL) { return EFI_OUT_OF_RESOURCES; @@ -669,9 +670,8 @@ Error: /** This function converts the interface info to string and draws it to the IP6 UI. - The interface information includes interface name, interface type, hardware address, - address info, and route table information. The address information is also used as the - content of manual addresses in IP6 UI. + The interface information includes interface name, interface type, hardware + address and route table information. @param[in] IfInfo The pointer of EFI_IP6_CONFIG_INTERFACE_INFO. @param[in] HiiHandle The handle that was previously registered in the @@ -693,11 +693,9 @@ Ip6ConvertInterfaceInfoToString ( UINT32 Index; UINTN Number; CHAR16 *String; - CHAR16 *LinkLocalStr; CHAR16 PortString[ADDRESS_STR_MAX_SIZE]; CHAR16 FormatString[8]; EFI_STRING_ID StringId; - EFI_STATUS Status; if ((IfInfo == NULL) || (HiiHandle == NULL) || (IfrNvData == NULL)) { return EFI_INVALID_PARAMETER; @@ -720,9 +718,9 @@ Ip6ConvertInterfaceInfoToString ( // Print the interface type. // if (IfInfo->IfType == Ip6InterfaceTypeEthernet) { - StrCpy (PortString, IP6_ETHERNET); + CopyMem (PortString, IP6_ETHERNET, sizeof (IP6_ETHERNET)); } else if (IfInfo->IfType == Ip6InterfaceTypeExperimentalEthernet) { - StrCpy (PortString, IP6_EXPERIMENTAL_ETHERNET); + CopyMem (PortString, IP6_EXPERIMENTAL_ETHERNET, sizeof (IP6_EXPERIMENTAL_ETHERNET)); } else { // // Refer to RFC1700, chapter Number Hardware Type. @@ -749,9 +747,9 @@ Ip6ConvertInterfaceInfoToString ( for (Index = 0; Index < IfInfo->HwAddressSize; Index++) { if (IfInfo->HwAddress.Addr[Index] < 0x10) { - StrCpy (FormatString, L"0%x-"); + CopyMem (FormatString, L"0%x-", sizeof (L"0%x-")); } else { - StrCpy (FormatString, L"%x-"); + CopyMem (FormatString, L"%x-", sizeof (L"%x-")); } Number = UnicodeSPrint ( @@ -782,54 +780,7 @@ Ip6ConvertInterfaceInfoToString ( return EFI_OUT_OF_RESOURCES; } - // - // Print the host address Information. - // - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvHostAddress, - IfInfo->AddressInfo, - IfInfo->AddressInfoCount - ); - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Copy the Host Address Info to manual address field. - // Do not copy the link local address. - // - LinkLocalStr = StrStr (PortString, IP6_LINK_LOCAL_PREFIX); - if (LinkLocalStr != NULL) { - Number = LinkLocalStr - PortString; - if (Number > 0) { - CopyMem (IfrNvData->ManualAddress, PortString, Number * sizeof (CHAR16)); - } - - while ((*LinkLocalStr != L' ') && (*LinkLocalStr != L'\0')) { - LinkLocalStr++; - } - - if (*LinkLocalStr != L'\0') { - LinkLocalStr++; - StrCat (IfrNvData->ManualAddress, LinkLocalStr); - } - } else { - StrCpy (IfrNvData->ManualAddress, PortString); - } - - // - // Print the route table information. - // - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvRouteTable, - IfInfo->RouteTable, - IfInfo->RouteCount - ); - return Status; + return EFI_SUCCESS; } /** @@ -928,11 +879,11 @@ Ip6ConvertConfigNvDataToIfrNvData ( IN IP6_CONFIG_INSTANCE *Instance ) { + IP6_CONFIG_NVDATA *Ip6NvData; EFI_IP6_CONFIG_PROTOCOL *Ip6Config; UINTN DataSize; VOID *Data; EFI_STATUS Status; - EFI_IP6_CONFIG_INTERFACE_ID InterfaceId; EFI_IP6_CONFIG_POLICY Policy; EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS DadXmits; EFI_HII_HANDLE HiiHandle; @@ -944,6 +895,7 @@ Ip6ConvertConfigNvDataToIfrNvData ( NET_CHECK_SIGNATURE (Instance, IP6_CONFIG_INSTANCE_SIGNATURE); Ip6Config = &Instance->Ip6Config; + Ip6NvData = &Instance->Ip6NvData; Data = NULL; DataSize = 0; HiiHandle = Instance->CallbackInfo.RegisteredHandle; @@ -977,18 +929,18 @@ Ip6ConvertConfigNvDataToIfrNvData ( // Get the interface id. // DataSize = sizeof (EFI_IP6_CONFIG_INTERFACE_ID); - ZeroMem (&InterfaceId, DataSize); + ZeroMem (&Ip6NvData->InterfaceId, DataSize); Status = Ip6Config->GetData ( Ip6Config, Ip6ConfigDataTypeAltInterfaceId, &DataSize, - &InterfaceId + &Ip6NvData->InterfaceId ); if (EFI_ERROR (Status)) { goto Exit; } - Ip6ConvertInterfaceIdToString (IfrNvData->InterfaceId, &InterfaceId); + Ip6ConvertInterfaceIdToString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId); // // Get current policy. @@ -1032,75 +984,6 @@ Ip6ConvertConfigNvDataToIfrNvData ( IfrNvData->DadTransmitCount = DadXmits.DupAddrDetectTransmits; - // - // Get DNS server list. - // - FreePool (Data); - Data = NULL; - DataSize = 0; - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeDnsServer, - &DataSize, - (VOID **) &Data - ); - - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - goto Exit; - } - - if (DataSize > 0) { - // - // Convert the DNS server address to string and draw it to UI. - // - Status = Ip6ConvertAddressListToString ( - IfrNvData->DnsAddress, - HiiHandle, - Ip6ConfigNvDnsAddress, - Data, - DataSize / sizeof (EFI_IPv6_ADDRESS) - ); - if (EFI_ERROR (Status)) { - goto Exit; - } - - FreePool (Data); - Data = NULL; - } - - // - // Get gateway adderss list. - // - DataSize = 0; - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeGateway, - &DataSize, - (VOID **) &Data - ); - - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - goto Exit; - } - - if (DataSize > 0) { - // - // Convert the gateway address to string and draw it to UI. - // - Status = Ip6ConvertAddressListToString ( - IfrNvData->GatewayAddress, - HiiHandle, - Ip6ConfigNvGatewayAddress, - Data, - DataSize / sizeof (EFI_IPv6_ADDRESS) - ); - if (EFI_ERROR (Status)) { - goto Exit; - } - } - - Status = EFI_SUCCESS; - Exit: if (Data != NULL) { FreePool (Data); @@ -1111,8 +994,7 @@ Exit: /** Convert IFR data into IP6 configuration data. The policy, alternative interface - ID, and DAD transmit counts, and will be saved. If under manual policy, the configured - manual address, gateway address, and DNS server address will be saved. + ID, and DAD transmit counts, and will be saved. @param[in] IfrNvData The IFR NV data. @param[in, out] Instance The IP6 config instance data. @@ -1123,7 +1005,7 @@ Exit: **/ EFI_STATUS -Ip6ConvertIfrNvDataToConfigNvData ( +Ip6ConvertIfrNvDataToConfigNvDataGeneral ( IN IP6_CONFIG_IFR_NVDATA *IfrNvData, IN OUT IP6_CONFIG_INSTANCE *Instance ) @@ -1131,12 +1013,6 @@ Ip6ConvertIfrNvDataToConfigNvData ( IP6_CONFIG_NVDATA *Ip6NvData; EFI_IP6_CONFIG_PROTOCOL *Ip6Config; EFI_STATUS Status; - EFI_IP6_CONFIG_MANUAL_ADDRESS *ManualAddress; - EFI_IPv6_ADDRESS *Address; - BOOLEAN IsAddressOk; - EFI_EVENT SetAddressEvent; - EFI_EVENT TimeoutEvent; - UINTN DataSize; if ((IfrNvData == NULL) || (Instance == NULL)) { return EFI_INVALID_PARAMETER; @@ -1196,11 +1072,67 @@ Ip6ConvertIfrNvDataToConfigNvData ( return Status; } + return EFI_SUCCESS; +} - if (Ip6NvData->Policy == Ip6ConfigPolicyAutomatic) { +/** + Convert IFR data into IP6 configuration data. The policy, configured + manual address, gateway address, and DNS server address will be saved. + + @param[in] IfrNvData The IFR NV data. + @param[in, out] Instance The IP6 config instance data. + + @retval EFI_SUCCESS The operation finished successfully. + @retval EFI_INVALID_PARAMETER Any input parameter is invalid. + @retval Others Other errors as indicated. + +**/ +EFI_STATUS +Ip6ConvertIfrNvDataToConfigNvDataAdvanced ( + IN IP6_CONFIG_IFR_NVDATA *IfrNvData, + IN OUT IP6_CONFIG_INSTANCE *Instance + ) +{ + IP6_CONFIG_NVDATA *Ip6NvData; + EFI_IP6_CONFIG_PROTOCOL *Ip6Config; + EFI_STATUS Status; + EFI_IP6_CONFIG_MANUAL_ADDRESS *ManualAddress; + EFI_IPv6_ADDRESS *Address; + BOOLEAN IsAddressOk; + EFI_EVENT SetAddressEvent; + EFI_EVENT TimeoutEvent; + UINTN DataSize; + + if ((IfrNvData == NULL) || (Instance == NULL)) { + return EFI_INVALID_PARAMETER; + } + + if (IfrNvData->Policy == IP6_POLICY_AUTO) { return EFI_SUCCESS; } + NET_CHECK_SIGNATURE (Instance, IP6_CONFIG_INSTANCE_SIGNATURE); + Ip6NvData = &Instance->Ip6NvData; + Ip6Config = &Instance->Ip6Config; + + // + // Update those fields which don't have INTERACTIVE attribute. + // + Ip6NvData->Policy = Ip6ConfigPolicyManual; + + // + // Set the configured policy. + // + Status = Ip6Config->SetData ( + Ip6Config, + Ip6ConfigDataTypePolicy, + sizeof (EFI_IP6_CONFIG_POLICY), + &Ip6NvData->Policy + ); + if (EFI_ERROR (Status)) { + return Status; + } + // // Create events & timers for asynchronous settings. // @@ -1357,6 +1289,7 @@ Exit: return Status; } + /** This function allows the caller to request the current configuration for one or more named elements. The resulting @@ -1586,6 +1519,160 @@ Ip6FormRouteConfig ( return EFI_SUCCESS; } +/** + Display host addresses, route table, DNS addresses and gateway addresses in + "IPv6 Current Setting" page. + + @param[in] Instance The IP6 config instance data. + + @retval EFI_SUCCESS The operation finished successfully. + @retval Others Other errors as indicated. + +**/ +EFI_STATUS +Ip6GetCurrentSetting ( + IN IP6_CONFIG_INSTANCE *Instance + ) +{ + EFI_IP6_CONFIG_PROTOCOL *Ip6Config; + EFI_HII_HANDLE HiiHandle; + EFI_IP6_CONFIG_INTERFACE_INFO *Data; + UINTN DataSize; + EFI_STATUS Status; + CHAR16 PortString[ADDRESS_STR_MAX_SIZE]; + EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo; + + + Ip6Config = &Instance->Ip6Config; + HiiHandle = Instance->CallbackInfo.RegisteredHandle; + Data = NULL; + + // + // Get current interface info. + // + Status = Ip6ConfigNvGetData ( + Ip6Config, + Ip6ConfigDataTypeInterfaceInfo, + &DataSize, + (VOID **) &Data + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Generate dynamic text opcode for host address and draw it. + // + IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data; + Status = Ip6ConvertAddressListToString ( + PortString, + HiiHandle, + Ip6ConfigNvHostAddress, + IfInfo->AddressInfo, + IfInfo->AddressInfoCount + ); + if (EFI_ERROR (Status)) { + FreePool (Data); + return Status; + } + + // + // Generate the dynamic text opcode for route table and draw it. + // + Status = Ip6ConvertAddressListToString ( + PortString, + HiiHandle, + Ip6ConfigNvRouteTable, + IfInfo->RouteTable, + IfInfo->RouteCount + ); + if (EFI_ERROR (Status)) { + FreePool (Data); + return Status; + } + + // + // Get DNS server list. + // + FreePool (Data); + DataSize = 0; + Data = NULL; + Status = Ip6ConfigNvGetData ( + Ip6Config, + Ip6ConfigDataTypeDnsServer, + &DataSize, + (VOID **) &Data + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { + if (Data != NULL) { + FreePool (Data); + } + return Status; + } + + if (DataSize > 0) { + // + // Generate the dynamic text opcode for DNS server and draw it. + // + Status = Ip6ConvertAddressListToString ( + PortString, + HiiHandle, + Ip6ConfigNvDnsAddress, + Data, + DataSize / sizeof (EFI_IPv6_ADDRESS) + ); + if (EFI_ERROR (Status)) { + FreePool (Data); + return Status; + } + } + + // + // Get gateway adderss list. + // + if (Data != NULL) { + FreePool (Data); + } + + DataSize = 0; + Data = NULL; + Status = Ip6ConfigNvGetData ( + Ip6Config, + Ip6ConfigDataTypeGateway, + &DataSize, + (VOID **) &Data + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { + if (Data != NULL) { + FreePool (Data); + } + return Status; + } + + if (DataSize > 0) { + // + // Generate the dynamic text opcode for gateway and draw it. + // + Status = Ip6ConvertAddressListToString ( + PortString, + HiiHandle, + Ip6ConfigNvGatewayAddress, + Data, + DataSize / sizeof (EFI_IPv6_ADDRESS) + ); + if (EFI_ERROR (Status)) { + FreePool (Data); + return Status; + } + } + + if (Data != NULL) { + FreePool (Data); + } + + return EFI_SUCCESS; +} + /** This function is called to provide results data to the driver. This data consists of a unique key that is used to identify @@ -1627,17 +1714,10 @@ Ip6FormCallback ( IP6_FORM_CALLBACK_INFO *Private; UINTN BufferSize; IP6_CONFIG_IFR_NVDATA *IfrNvData; - IP6_CONFIG_IFR_NVDATA OldIfrNvData; EFI_STATUS Status; EFI_INPUT_KEY Key; IP6_CONFIG_INSTANCE *Instance; IP6_CONFIG_NVDATA *Ip6NvData; - EFI_IP6_CONFIG_PROTOCOL *Ip6Config; - EFI_IP6_CONFIG_INTERFACE_INFO *Data; - UINTN DataSize; - CHAR16 PortString[ADDRESS_STR_MAX_SIZE]; - EFI_HII_HANDLE HiiHandle; - EFI_IP6_CONFIG_INTERFACE_INFO *IfInfo; if (This == NULL) { return EFI_INVALID_PARAMETER; @@ -1651,7 +1731,7 @@ Ip6FormCallback ( return EFI_SUCCESS; } - if (Action != EFI_BROWSER_ACTION_CHANGING) { + if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) { return EFI_UNSUPPORTED; } @@ -1671,230 +1751,117 @@ Ip6FormCallback ( Status = EFI_SUCCESS; - ZeroMem (&OldIfrNvData, BufferSize); - HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData); - CopyMem (&OldIfrNvData, IfrNvData, BufferSize); - - switch (QuestionId) { - case KEY_INTERFACE_ID: - Status = Ip6ParseInterfaceIdFromString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId); - if (EFI_ERROR (Status)) { - CreatePopUp ( - EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, - &Key, - L"Invalid Interface ID!", - NULL - ); - } - - break; - - case KEY_MANUAL_ADDRESS: - Status = Ip6ParseAddressListFromString ( - IfrNvData->ManualAddress, - &Ip6NvData->ManualAddress, - &Ip6NvData->ManualAddressCount - ); - if (EFI_ERROR (Status)) { - CreatePopUp ( - EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, - &Key, - L"Invalid Host Addresses!", - NULL - ); - } - - break; - - case KEY_GATEWAY_ADDRESS: - Status = Ip6ParseAddressListFromString ( - IfrNvData->GatewayAddress, - &Ip6NvData->GatewayAddress, - &Ip6NvData->GatewayAddressCount - ); - if (EFI_ERROR (Status)) { - CreatePopUp ( - EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, - &Key, - L"Invalid Gateway Addresses!", - NULL - ); - } - - break; - - case KEY_DNS_ADDRESS: - Status = Ip6ParseAddressListFromString ( - IfrNvData->DnsAddress, - &Ip6NvData->DnsAddress, - &Ip6NvData->DnsAddressCount - ); - if (EFI_ERROR (Status)) { - CreatePopUp ( - EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, - &Key, - L"Invalid DNS Addresses!", - NULL - ); - } - - break; - - case KEY_SAVE_CONFIG_CHANGES: - CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA)); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; - break; - - case KEY_IGNORE_CONFIG_CHANGES: - CopyMem (IfrNvData, &OldIfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA)); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD; - break; + if (Action == EFI_BROWSER_ACTION_CHANGING) { + switch (QuestionId) { + case KEY_GET_CURRENT_SETTING: + Status = Ip6GetCurrentSetting (Instance); + break; - case KEY_SAVE_CHANGES: - Status = Ip6ConvertIfrNvDataToConfigNvData (IfrNvData, Instance); - if (EFI_ERROR (Status)) { + default: break; } + } else if (Action == EFI_BROWSER_ACTION_CHANGED) { + switch (QuestionId) { + case KEY_SAVE_CONFIG_CHANGES: + Status = Ip6ConvertIfrNvDataToConfigNvDataAdvanced (IfrNvData, Instance); + if (EFI_ERROR (Status)) { + break; + } - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT; - break; + Status = Ip6GetCurrentSetting (Instance); - case KEY_GET_CURRENT_SETTING: - Ip6Config = &Instance->Ip6Config; - HiiHandle = Instance->CallbackInfo.RegisteredHandle; - Data = NULL; + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; + break; - // - // Get current interface info. - // - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeInterfaceInfo, - &DataSize, - (VOID **) &Data - ); - if (EFI_ERROR (Status)) { - return Status; - } + case KEY_IGNORE_CONFIG_CHANGES: + Ip6FreeAddressInfoList (&Ip6NvData->ManualAddress); + Ip6FreeAddressInfoList (&Ip6NvData->GatewayAddress); + Ip6FreeAddressInfoList (&Ip6NvData->DnsAddress); - // - // Generate dynamic text opcode for host address and draw it. - // - IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data; - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvHostAddress, - IfInfo->AddressInfo, - IfInfo->AddressInfoCount - ); - if (EFI_ERROR (Status)) { - FreePool (Data); - return Status; - } + Ip6NvData->ManualAddressCount = 0; + Ip6NvData->GatewayAddressCount = 0; + Ip6NvData->DnsAddressCount = 0; - // - // Generate the dynamic text opcode for route table and draw it. - // - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvRouteTable, - IfInfo->RouteTable, - IfInfo->RouteCount - ); - if (EFI_ERROR (Status)) { - FreePool (Data); - return Status; - } + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; + break; - // - // Get DNS server list. - // - FreePool (Data); - DataSize = 0; - Data = NULL; - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeDnsServer, - &DataSize, - (VOID **) &Data - ); - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - if (Data != NULL) { - FreePool (Data); + case KEY_SAVE_CHANGES: + Status = Ip6ConvertIfrNvDataToConfigNvDataGeneral (IfrNvData, Instance); + if (EFI_ERROR (Status)) { + break; } - return Status; - } - - if (DataSize > 0) { - // - // Generate the dynamic text opcode for DNS server and draw it. - // - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvDnsAddress, - Data, - DataSize / sizeof (EFI_IPv6_ADDRESS) + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT; + break; + + case KEY_INTERFACE_ID: + Status = Ip6ParseInterfaceIdFromString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId); + if (EFI_ERROR (Status)) { + CreatePopUp ( + EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, + &Key, + L"Invalid Interface ID!", + NULL + ); + } + + break; + + case KEY_MANUAL_ADDRESS: + Status = Ip6ParseAddressListFromString ( + IfrNvData->ManualAddress, + &Ip6NvData->ManualAddress, + &Ip6NvData->ManualAddressCount ); if (EFI_ERROR (Status)) { - FreePool (Data); - return Status; + CreatePopUp ( + EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, + &Key, + L"Invalid Host Addresses!", + NULL + ); } - } - - // - // Get gateway adderss list. - // - if (Data != NULL) { - FreePool (Data); - } - - DataSize = 0; - Data = NULL; - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeGateway, - &DataSize, - (VOID **) &Data - ); - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - if (Data != NULL) { - FreePool (Data); + + break; + + case KEY_GATEWAY_ADDRESS: + Status = Ip6ParseAddressListFromString ( + IfrNvData->GatewayAddress, + &Ip6NvData->GatewayAddress, + &Ip6NvData->GatewayAddressCount + ); + if (EFI_ERROR (Status)) { + CreatePopUp ( + EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, + &Key, + L"Invalid Gateway Addresses!", + NULL + ); } - return Status; - } - - if (DataSize > 0) { - // - // Generate the dynamic text opcode for gateway and draw it. - // - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvGatewayAddress, - Data, - DataSize / sizeof (EFI_IPv6_ADDRESS) + + break; + + case KEY_DNS_ADDRESS: + Status = Ip6ParseAddressListFromString ( + IfrNvData->DnsAddress, + &Ip6NvData->DnsAddress, + &Ip6NvData->DnsAddressCount ); if (EFI_ERROR (Status)) { - FreePool (Data); - return Status; + CreatePopUp ( + EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, + &Key, + L"Invalid DNS Addresses!", + NULL + ); } - } + + break; - if (Data != NULL) { - FreePool (Data); + default: + break; } - - Status = EFI_SUCCESS; - - break; - - default: - break; } if (!EFI_ERROR (Status)) {