X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FIp6Dxe%2FIp6ConfigNv.c;h=eaeb44b2a1cf803c6db3c8b494a8ce4af070db85;hp=8ee756e20198be055cb14e8c731e00f12934458e;hb=b7cc5bf180e9deefc91a5e66e0b80fd222503608;hpb=e07404fe3c328d4f34140efd1a2af1fd4c725e4a diff --git a/NetworkPkg/Ip6Dxe/Ip6ConfigNv.c b/NetworkPkg/Ip6Dxe/Ip6ConfigNv.c index 8ee756e201..eaeb44b2a1 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, Intel Corporation. All rights reserved.
+ Copyright (c) 2010 - 2013, 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 @@ -15,8 +15,6 @@ #include "Ip6Impl.h" -EFI_GUID mIp6HiiVendorDevicePathGuid = IP6_HII_VENDOR_DEVICE_PATH_GUID; -EFI_GUID mIp6ConfigNvDataGuid = IP6_CONFIG_NVDATA_GUID; CHAR16 mIp6ConfigStorageName[] = L"IP6_CONFIG_IFR_NVDATA"; /** @@ -556,7 +554,7 @@ Ip6ConvertAddressListToString ( Status = HiiUpdateForm ( HiiHandle, // HII handle - &mIp6ConfigNvDataGuid, // Formset GUID + &gIp6ConfigNvDataGuid, // Formset GUID FORMID_MAIN_FORM, // Form ID StartOpCodeHandle, // Label for where to insert opcodes EndOpCodeHandle // Replace data @@ -671,9 +669,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 @@ -695,11 +692,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; @@ -784,54 +779,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; } /** @@ -930,11 +878,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; @@ -946,6 +894,7 @@ Ip6ConvertConfigNvDataToIfrNvData ( NET_CHECK_SIGNATURE (Instance, IP6_CONFIG_INSTANCE_SIGNATURE); Ip6Config = &Instance->Ip6Config; + Ip6NvData = &Instance->Ip6NvData; Data = NULL; DataSize = 0; HiiHandle = Instance->CallbackInfo.RegisteredHandle; @@ -979,18 +928,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. @@ -1034,75 +983,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); @@ -1113,8 +993,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. @@ -1125,7 +1004,7 @@ Exit: **/ EFI_STATUS -Ip6ConvertIfrNvDataToConfigNvData ( +Ip6ConvertIfrNvDataToConfigNvDataGeneral ( IN IP6_CONFIG_IFR_NVDATA *IfrNvData, IN OUT IP6_CONFIG_INSTANCE *Instance ) @@ -1133,12 +1012,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; @@ -1198,11 +1071,67 @@ Ip6ConvertIfrNvDataToConfigNvData ( return Status; } + return EFI_SUCCESS; +} + +/** + 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 (Ip6NvData->Policy == Ip6ConfigPolicyAutomatic) { + 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. // @@ -1359,6 +1288,7 @@ Exit: return Status; } + /** This function allows the caller to request the current configuration for one or more named elements. The resulting @@ -1447,7 +1377,7 @@ Ip6FormExtractConfig ( *Progress = Request; if ((Request != NULL) && - !HiiIsConfigHdrMatch (Request, &mIp6ConfigNvDataGuid, mIp6ConfigStorageName)) { + !HiiIsConfigHdrMatch (Request, &gIp6ConfigNvDataGuid, mIp6ConfigStorageName)) { return EFI_NOT_FOUND; } @@ -1478,7 +1408,7 @@ Ip6FormExtractConfig ( // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator. // ConfigRequestHdr = HiiConstructConfigHdr ( - &mIp6ConfigNvDataGuid, + &gIp6ConfigNvDataGuid, mIp6ConfigStorageName, Private->ChildHandle ); @@ -1578,7 +1508,7 @@ Ip6FormRouteConfig ( // Check routing data in . // Note: if only one Storage is used, then this checking could be skipped. // - if (!HiiIsConfigHdrMatch (Configuration, &mIp6ConfigNvDataGuid, mIp6ConfigStorageName)) { + if (!HiiIsConfigHdrMatch (Configuration, &gIp6ConfigNvDataGuid, mIp6ConfigStorageName)) { *Progress = Configuration; return EFI_NOT_FOUND; } @@ -1588,6 +1518,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 @@ -1629,17 +1713,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; @@ -1649,130 +1726,12 @@ Ip6FormCallback ( Instance = IP6_CONFIG_INSTANCE_FROM_FORM_CALLBACK (Private); Ip6NvData = &Instance->Ip6NvData; - if (Action == EFI_BROWSER_ACTION_FORM_OPEN) { - // - // Update main Form when main Form is opened. - // This will be done only in FORM_OPEN CallBack of question with KEY_INTERFACE_ID from main Form. - // - if (QuestionId != KEY_INTERFACE_ID) { - return EFI_SUCCESS; - } - - Ip6Config = &Instance->Ip6Config; - HiiHandle = Instance->CallbackInfo.RegisteredHandle; - - // - // Get the current interface info. - // - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeInterfaceInfo, - &DataSize, - (VOID **) &Data - ); - if (EFI_ERROR (Status)) { - goto Exit; - } - - // - // Generate the 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)) { - goto Exit; - } - - // - // Generate the dynamic text opcode for route table and draw it. - // - Status = Ip6ConvertAddressListToString ( - PortString, - HiiHandle, - Ip6ConfigNvRouteTable, - IfInfo->RouteTable, - IfInfo->RouteCount - ); - if (EFI_ERROR (Status)) { - goto Exit; - } - - // - // Get DNS server list. - // - DataSize = 0; - Status = Ip6ConfigNvGetData ( - Ip6Config, - Ip6ConfigDataTypeDnsServer, - &DataSize, - (VOID **) &Data - ); - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - goto Exit; - } - - 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)) { - goto Exit; - } - } - - // - // 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) { - // - // 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)) { - goto Exit; - } - } - -Exit: - FreePool (Data); - return Status; + if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)){ + return EFI_SUCCESS; } - if (Action == EFI_BROWSER_ACTION_FORM_CLOSE) { - // - // Do nothing for UEFI FORM_CLOSE action - // - return EFI_SUCCESS; + if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) { + return EFI_UNSUPPORTED; } if ((Value == NULL) || (ActionRequest == NULL)) { @@ -1791,98 +1750,117 @@ Exit: 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; + if (Action == EFI_BROWSER_ACTION_CHANGING) { + switch (QuestionId) { + case KEY_GET_CURRENT_SETTING: + Status = Ip6GetCurrentSetting (Instance); + 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 - ); + 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; + } - break; + Status = Ip6GetCurrentSetting (Instance); - 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 - ); - } + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; + break; - break; + case KEY_IGNORE_CONFIG_CHANGES: + Ip6FreeAddressInfoList (&Ip6NvData->ManualAddress); + Ip6FreeAddressInfoList (&Ip6NvData->GatewayAddress); + Ip6FreeAddressInfoList (&Ip6NvData->DnsAddress); - 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 - ); - } + Ip6NvData->ManualAddressCount = 0; + Ip6NvData->GatewayAddressCount = 0; + Ip6NvData->DnsAddressCount = 0; - break; - - case KEY_SAVE_CONFIG_CHANGES: - CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA)); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT; - break; + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; + break; - case KEY_IGNORE_CONFIG_CHANGES: - CopyMem (IfrNvData, &OldIfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA)); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT; - break; + case KEY_SAVE_CHANGES: + Status = Ip6ConvertIfrNvDataToConfigNvDataGeneral (IfrNvData, Instance); + if (EFI_ERROR (Status)) { + break; + } + *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)) { + 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_CHANGES: - Status = Ip6ConvertIfrNvDataToConfigNvData (IfrNvData, Instance); - if (EFI_ERROR (Status)) { + default: break; } - - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT; - break; - - default: - break; } if (!EFI_ERROR (Status)) { @@ -1948,7 +1926,7 @@ Ip6ConfigFormInit ( VendorDeviceNode.Header.Type = HARDWARE_DEVICE_PATH; VendorDeviceNode.Header.SubType = HW_VENDOR_DP; - CopyGuid (&VendorDeviceNode.Guid, &mIp6HiiVendorDevicePathGuid); + CopyGuid (&VendorDeviceNode.Guid, &gEfiCallerIdGuid); SetDevicePathNodeLength (&VendorDeviceNode.Header, sizeof (VENDOR_DEVICE_PATH)); CallbackInfo->HiiVendorDevicePath = AppendDevicePathNode ( @@ -1998,7 +1976,7 @@ Ip6ConfigFormInit ( // Publish our HII data // CallbackInfo->RegisteredHandle = HiiAddPackages ( - &mIp6ConfigNvDataGuid, + &gIp6ConfigNvDataGuid, CallbackInfo->ChildHandle, Ip6DxeStrings, Ip6ConfigBin, @@ -2010,7 +1988,7 @@ Ip6ConfigFormInit ( } // - // Append MAC string in the menu string and tile string + // Append MAC string in the menu help string and tile help string // Status = NetLibGetMacString (IpSb->Controller, IpSb->Image, &MacString); if (!EFI_ERROR (Status)) {