/** @file\r
Vfr file for IP4 config.\r
\r
-Copyright (c) 2009, Intel Corporation.<BR>\r
+Copyright (c) 2009 - 2010, Intel Corporation.<BR>\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
form formid = FORMID_MAIN_FORM,\r
title = STRING_TOKEN(STR_IP4_DEVICE_FORM_TITLE);\r
\r
- checkbox varid = EfiNicIp4ConfigVariable.DhcpEnable,\r
- prompt = STRING_TOKEN(STR_IP4_ENABLE_DHCP),\r
- help = STRING_TOKEN(STR_IP4_ENABLE_DHCP),\r
+ checkbox varid = EfiNicIp4ConfigVariable.Configure,\r
+ prompt = STRING_TOKEN(STR_IP4_CONFIGURE),\r
+ help = STRING_TOKEN(STR_IP4_CONFIGURE),\r
flags = INTERACTIVE,\r
- key = KEY_DHCP_ENABLE,\r
+ key = KEY_ENABLE,\r
endcheckbox;\r
\r
- suppressif ideqval EfiNicIp4ConfigVariable.DhcpEnable == 0x01;\r
- string varid = EfiNicIp4ConfigVariable.StationAddress,\r
- prompt = STRING_TOKEN(STR_IP4_LOCAL_IP_ADDRESS),\r
- help = STRING_TOKEN(STR_IP4_IP_ADDRESS_HELP),\r
- flags = INTERACTIVE,\r
- key = KEY_LOCAL_IP,\r
- minsize = IP_MIN_SIZE,\r
- maxsize = IP_MAX_SIZE,\r
- endstring;\r
-\r
- string varid = EfiNicIp4ConfigVariable.SubnetMask,\r
- prompt = STRING_TOKEN(STR_IP4_LOCAL_MASK),\r
- help = STRING_TOKEN(STR_IP4_IP_ADDRESS_HELP),\r
- flags = INTERACTIVE,\r
- key = KEY_SUBNET_MASK,\r
- minsize = IP_MIN_SIZE,\r
- maxsize = IP_MAX_SIZE,\r
- endstring;\r
-\r
- string varid = EfiNicIp4ConfigVariable.GatewayAddress,\r
- prompt = STRING_TOKEN(STR_IP4_LOCAL_GATEWAY),\r
- help = STRING_TOKEN(STR_IP4_IP_ADDRESS_HELP),\r
- flags = INTERACTIVE,\r
- key = KEY_GATE_WAY,\r
- minsize = IP_MIN_SIZE,\r
- maxsize = IP_MAX_SIZE,\r
- endstring;\r
+ suppressif ideqval EfiNicIp4ConfigVariable.Configure == 0x00;\r
+\r
+ checkbox varid = EfiNicIp4ConfigVariable.DhcpEnable,\r
+ prompt = STRING_TOKEN(STR_IP4_ENABLE_DHCP),\r
+ help = STRING_TOKEN(STR_IP4_ENABLE_DHCP),\r
+ flags = INTERACTIVE,\r
+ key = KEY_DHCP_ENABLE,\r
+ endcheckbox;\r
+ endif;\r
+\r
+ suppressif ideqval EfiNicIp4ConfigVariable.DhcpEnable == 0x01 OR ideqval EfiNicIp4ConfigVariable.Configure == 0x00;\r
+\r
+ string varid = EfiNicIp4ConfigVariable.StationAddress,\r
+ prompt = STRING_TOKEN(STR_IP4_LOCAL_IP_ADDRESS),\r
+ help = STRING_TOKEN(STR_IP4_IP_ADDRESS_HELP),\r
+ flags = INTERACTIVE,\r
+ key = KEY_LOCAL_IP,\r
+ minsize = IP_MIN_SIZE,\r
+ maxsize = IP_MAX_SIZE,\r
+ endstring;\r
+\r
+ string varid = EfiNicIp4ConfigVariable.SubnetMask,\r
+ prompt = STRING_TOKEN(STR_IP4_LOCAL_MASK),\r
+ help = STRING_TOKEN(STR_IP4_IP_ADDRESS_HELP),\r
+ flags = INTERACTIVE,\r
+ key = KEY_SUBNET_MASK,\r
+ minsize = IP_MIN_SIZE,\r
+ maxsize = IP_MAX_SIZE,\r
+ endstring;\r
+\r
+ string varid = EfiNicIp4ConfigVariable.GatewayAddress,\r
+ prompt = STRING_TOKEN(STR_IP4_LOCAL_GATEWAY),\r
+ help = STRING_TOKEN(STR_IP4_IP_ADDRESS_HELP),\r
+ flags = INTERACTIVE,\r
+ key = KEY_GATE_WAY,\r
+ minsize = IP_MIN_SIZE,\r
+ maxsize = IP_MAX_SIZE,\r
+ endstring;\r
+\r
endif;\r
\r
subtitle text = STRING_TOKEN(STR_NULL);\r
flags = INTERACTIVE,\r
key = KEY_SAVE_CHANGES;\r
\r
- goto FORMID_MAIN_FORM,\r
- prompt = STRING_TOKEN (STR_RETURN_MAIN_FORM),\r
- help = STRING_TOKEN (STR_RETURN_MAIN_FORM),\r
- flags = 0;\r
-\r
endform;\r
\r
endformset;\r
/** @file\r
Helper functions for configuring or getting the parameters relating to Ip4.\r
\r
-Copyright (c) 2009, Intel Corporation.<BR>\r
+Copyright (c) 2009 - 2010, Intel Corporation.<BR>\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
NIC_IP4_CONFIG_INFO *NicConfig;\r
UINTN ConfigLen;\r
\r
- IfrFormNvData->DhcpEnable = 1;\r
-\r
ConfigLen = sizeof (NIC_IP4_CONFIG_INFO) + sizeof (EFI_IP4_ROUTE_TABLE) * 2;\r
NicConfig = AllocateZeroPool (ConfigLen);\r
ASSERT (NicConfig != NULL);\r
Status = EfiNicIp4ConfigGetInfo (Ip4ConfigInstance, &ConfigLen, NicConfig);\r
if (!EFI_ERROR (Status)) {\r
+ IfrFormNvData->Configure = 1;\r
if (NicConfig->Source == IP4_CONFIG_SOURCE_DHCP) {\r
IfrFormNvData->DhcpEnable = 1;\r
} else {\r
Ip4ConfigIpToStr (&NicConfig->Ip4Info.SubnetMask, IfrFormNvData->SubnetMask);\r
Ip4ConfigIpToStr (&NicConfig->Ip4Info.RouteTable[1].GatewayAddress, IfrFormNvData->GatewayAddress);\r
}\r
+ } else {\r
+ IfrFormNvData->Configure = 0;\r
}\r
+\r
FreePool (NicConfig);\r
}\r
\r
Convert the IFR data into the network configuration data and set the IP\r
configure parameters for the NIC.\r
\r
- @param[in] IfrFormNvData The IFR nv data.\r
@param[in, out] Ip4ConfigInstance The IP4Config instance.\r
- \r
- @retval EFI_SUCCESS The configure parameter for this NIC was \r
+\r
+ @retval EFI_SUCCESS The configure parameter for this NIC was\r
set successfully.\r
@retval EFI_ALREADY_STARTED There is a pending auto configuration.\r
@retval EFI_NOT_FOUND No auto configure parameter is found.\r
- \r
+\r
**/\r
EFI_STATUS\r
Ip4ConfigConvertIfrNvDataToDeviceConfigData (\r
- IN IP4_CONFIG_IFR_NVDATA *IfrFormNvData,\r
IN OUT IP4_CONFIG_INSTANCE *Ip4ConfigInstance\r
)\r
{\r
+ EFI_STATUS Status;\r
EFI_IP_ADDRESS HostIp;\r
EFI_IP_ADDRESS SubnetMask;\r
EFI_IP_ADDRESS Gateway;\r
NIC_IP4_CONFIG_INFO *NicInfo;\r
EFI_IP_ADDRESS Ip;\r
\r
+ if (!Ip4ConfigInstance->Ip4ConfigCallbackInfo.Configured) {\r
+ //\r
+ // Clear the variable\r
+ //\r
+ ZeroMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo, sizeof (IP4_SETTING_INFO));\r
+\r
+ Status = EfiNicIp4ConfigSetInfo (Ip4ConfigInstance, NULL, TRUE);\r
+ if (Status == EFI_NOT_FOUND) {\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ return Status;\r
+ }\r
+\r
NicInfo = AllocateZeroPool (sizeof (NIC_IP4_CONFIG_INFO) + 2 * sizeof (EFI_IP4_ROUTE_TABLE));\r
ASSERT (NicInfo != NULL);\r
\r
NicInfo->Ip4Info.RouteTable = (EFI_IP4_ROUTE_TABLE *) (NicInfo + 1);\r
\r
- if (!Ip4ConfigInstance->Ip4ConfigCallbackInfo.Enabled) {\r
+ if (!Ip4ConfigInstance->Ip4ConfigCallbackInfo.DhcpEnabled) {\r
CopyMem (&HostIp.v4, &Ip4ConfigInstance->Ip4ConfigCallbackInfo.LocalIp, sizeof (HostIp.v4));\r
CopyMem (&SubnetMask.v4, &Ip4ConfigInstance->Ip4ConfigCallbackInfo.SubnetMask, sizeof (SubnetMask.v4));\r
CopyMem (&Gateway.v4, &Ip4ConfigInstance->Ip4ConfigCallbackInfo.Gateway, sizeof (Gateway.v4));\r
\r
+ if (!NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ if (EFI_IP4_EQUAL (&SubnetMask, &mZeroIp4Addr)) {\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Subnet Mask!", NULL);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
if ((Gateway.Addr[0] != 0)) {\r
if (SubnetMask.Addr[0] == 0) {\r
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Gateway address is set but subnet mask is zero.", NULL);\r
CopyMem (&NicInfo->Ip4Info.RouteTable[0].SubnetAddress, &Ip.v4, sizeof (EFI_IPv4_ADDRESS));\r
CopyMem (&NicInfo->Ip4Info.RouteTable[0].SubnetMask, &SubnetMask.v4, sizeof (EFI_IPv4_ADDRESS));\r
CopyMem (&NicInfo->Ip4Info.RouteTable[1].GatewayAddress, &Gateway.v4, sizeof (EFI_IPv4_ADDRESS));\r
+\r
} else {\r
NicInfo->Source = IP4_CONFIG_SOURCE_DHCP;\r
+ ZeroMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.LocalIp, sizeof (EFI_IPv4_ADDRESS));\r
+ ZeroMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
+ ZeroMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.Gateway, sizeof (EFI_IPv4_ADDRESS));\r
}\r
\r
NicInfo->Perment = TRUE;\r
FreePool (IfrDeviceNvData);\r
return EFI_NOT_FOUND;\r
}\r
- \r
+\r
//\r
// Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
//\r
Results,\r
Progress\r
);\r
- \r
+\r
FreePool (IfrDeviceNvData);\r
\r
} else if (HiiIsConfigHdrMatch (Request, &mNicIp4ConfigNvDataGuid, EFI_NIC_IP4_CONFIG_VARIABLE)) {\r
if (IfrFormNvData == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- \r
+\r
Ip4ConfigConvertDeviceConfigDataToIfrNvData (Ip4ConfigInstance, IfrFormNvData);\r
- \r
+\r
//\r
// Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
//\r
Results,\r
Progress\r
);\r
- \r
+\r
FreePool (IfrFormNvData);\r
\r
} else {\r
EFI_STATUS Status;\r
UINTN BufferSize;\r
NIC_IP4_CONFIG_INFO *IfrDeviceNvData;\r
- IP4_CONFIG_IFR_NVDATA *IfrFormNvData; \r
+ IP4_CONFIG_IFR_NVDATA *IfrFormNvData;\r
NIC_IP4_CONFIG_INFO *NicInfo;\r
IP4_CONFIG_INSTANCE *Ip4ConfigInstance;\r
EFI_MAC_ADDRESS ZeroMac;\r
Progress\r
);\r
if (!EFI_ERROR (Status)) {\r
- Status = Ip4ConfigConvertIfrNvDataToDeviceConfigData (IfrFormNvData, Ip4ConfigInstance);\r
+ Status = Ip4ConfigConvertIfrNvDataToDeviceConfigData (Ip4ConfigInstance);\r
}\r
- \r
+\r
FreePool (IfrFormNvData);\r
\r
} else if (HiiIsConfigHdrMatch (Configuration, &gEfiNicIp4ConfigVariableGuid, EFI_NIC_IP4_CONFIG_VARIABLE)) {\r
ZeroMem (&ZeroMac, sizeof (EFI_MAC_ADDRESS));\r
if (CompareMem (&IfrDeviceNvData->NicAddr.MacAddr, &ZeroMac, IfrDeviceNvData->NicAddr.Len) != 0) {\r
BufferSize = sizeof (NIC_IP4_CONFIG_INFO) + sizeof (EFI_IP4_ROUTE_TABLE) * IfrDeviceNvData->Ip4Info.RouteTableSize;\r
- NicInfo = AllocateCopyPool (BufferSize, IfrDeviceNvData); \r
+ NicInfo = AllocateCopyPool (BufferSize, IfrDeviceNvData);\r
Status = EfiNicIp4ConfigSetInfo (Ip4ConfigInstance, NicInfo, TRUE);\r
} else {\r
+ ZeroMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo, sizeof (IP4_SETTING_INFO));\r
Status = EfiNicIp4ConfigSetInfo (Ip4ConfigInstance, NULL, TRUE);\r
}\r
}\r
\r
return EFI_NOT_FOUND;\r
}\r
- \r
+\r
return Status;\r
\r
}\r
\r
switch (QuestionId) {\r
\r
+ case KEY_ENABLE:\r
+ if (IfrFormNvData->Configure == 0) {\r
+ Ip4ConfigInstance->Ip4ConfigCallbackInfo.Configured = FALSE;\r
+ } else {\r
+ Ip4ConfigInstance->Ip4ConfigCallbackInfo.Configured = TRUE;\r
+ }\r
+ break;\r
+\r
case KEY_DHCP_ENABLE:\r
if (IfrFormNvData->DhcpEnable == 0) {\r
- Ip4ConfigInstance->Ip4ConfigCallbackInfo.Enabled = FALSE;\r
+ Ip4ConfigInstance->Ip4ConfigCallbackInfo.DhcpEnabled = FALSE;\r
} else {\r
- Ip4ConfigInstance->Ip4ConfigCallbackInfo.Enabled = TRUE;\r
+ Ip4ConfigInstance->Ip4ConfigCallbackInfo.DhcpEnabled = TRUE;\r
}\r
\r
break;\r
break;\r
\r
case KEY_SAVE_CHANGES:\r
- Status = Ip4ConfigConvertIfrNvDataToDeviceConfigData (IfrFormNvData, Ip4ConfigInstance);\r
- \r
+\r
+ Status = Ip4ConfigConvertIfrNvDataToDeviceConfigData (Ip4ConfigInstance);\r
+\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
\r
break;\r
\r
default:\r
- \r
+\r
break;\r
}\r
\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&Instance->ChildHandle,\r
&gEfiDevicePathProtocolGuid,\r
- Instance->HiiVendorDevicePath, \r
+ Instance->HiiVendorDevicePath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
ConfigAccess,\r
NULL\r
&gEfiManagedNetworkServiceBindingProtocolGuid,\r
(VOID **) &MnpSb,\r
Instance->Image,\r
- Instance->ChildHandle, \r
+ Instance->ChildHandle,\r
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
);\r
}\r
\r
ASSERT_EFI_ERROR (Status);\r
- \r
+\r
//\r
// Publish our HII data\r
//\r
OldMenuString = HiiGetString (Instance->RegisteredHandle, STRING_TOKEN (STR_IP4_CONFIG_FORM_TITLE), NULL);\r
UnicodeSPrint (MenuString, 128, L"%s (MAC:%s)", OldMenuString, MacString);\r
HiiSetString (Instance->RegisteredHandle, STRING_TOKEN (STR_IP4_CONFIG_FORM_TITLE), MenuString, NULL);\r
- \r
+\r
UnicodeSPrint (PortString, 128, L"MAC:%s", MacString);\r
HiiSetString (Instance->RegisteredHandle, STRING_TOKEN (STR_IP4_DEVICE_FORM_TITLE), PortString, NULL);\r
FreePool (MacString);\r
gBS->UninstallMultipleProtocolInterfaces (\r
Instance->ChildHandle,\r
&gEfiDevicePathProtocolGuid,\r
- Instance->HiiVendorDevicePath, \r
+ Instance->HiiVendorDevicePath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
&Instance->HiiConfigAccessProtocol,\r
NULL\r