The implementation for Shell command ifconfig based on IP4Config2 protocol.\r
\r
(C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
- Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2006 - 2018, 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
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "UefiShellNetwork1CommandsLib.h"\r
\r
typedef enum {\r
- IfConfigOpList = 1,\r
- IfConfigOpSet = 2,\r
- IfConfigOpClear = 3\r
+ IfConfigOpList = 1,\r
+ IfConfigOpSet = 2,\r
+ IfConfigOpClear = 3\r
} IFCONFIG_OPCODE;\r
\r
typedef enum {\r
- VarCheckReserved = -1,\r
- VarCheckOk = 0,\r
+ VarCheckReserved = -1,\r
+ VarCheckOk = 0,\r
VarCheckDuplicate,\r
VarCheckConflict,\r
VarCheckUnknown,\r
} VAR_CHECK_CODE;\r
\r
typedef enum {\r
- FlagTypeSingle = 0,\r
+ FlagTypeSingle = 0,\r
FlagTypeNeedVar,\r
FlagTypeNeedSet,\r
FlagTypeSkipUnknown\r
} VAR_CHECK_FLAG_TYPE;\r
\r
-#define MACADDRMAXSIZE 32\r
+#define MACADDRMAXSIZE 32\r
\r
typedef struct _IFCONFIG_INTERFACE_CB {\r
- EFI_HANDLE NicHandle;\r
- LIST_ENTRY Link;\r
- EFI_IP4_CONFIG2_PROTOCOL *IfCfg;\r
- EFI_IP4_CONFIG2_INTERFACE_INFO *IfInfo; \r
- EFI_IP4_CONFIG2_POLICY Policy;\r
- UINT32 DnsCnt;\r
- EFI_IPv4_ADDRESS DnsAddr[1];\r
+ EFI_HANDLE NicHandle;\r
+ LIST_ENTRY Link;\r
+ EFI_IP4_CONFIG2_PROTOCOL *IfCfg;\r
+ EFI_IP4_CONFIG2_INTERFACE_INFO *IfInfo;\r
+ EFI_IP4_CONFIG2_POLICY Policy;\r
+ UINT32 DnsCnt;\r
+ EFI_IPv4_ADDRESS DnsAddr[1];\r
} IFCONFIG_INTERFACE_CB;\r
\r
typedef struct _ARG_LIST ARG_LIST;\r
};\r
\r
typedef struct _IFCONFIG4_PRIVATE_DATA {\r
- LIST_ENTRY IfList;\r
+ LIST_ENTRY IfList;\r
\r
- UINT32 OpCode;\r
- CHAR16 *IfName;\r
- ARG_LIST *VarArg;\r
+ UINT32 OpCode;\r
+ CHAR16 *IfName;\r
+ ARG_LIST *VarArg;\r
} IFCONFIG_PRIVATE_DATA;\r
\r
-typedef struct _VAR_CHECK_ITEM{\r
+typedef struct _VAR_CHECK_ITEM {\r
CHAR16 *FlagStr;\r
UINT32 FlagID;\r
UINT32 ConflictMask;\r
VAR_CHECK_FLAG_TYPE FlagType;\r
} VAR_CHECK_ITEM;\r
\r
-SHELL_PARAM_ITEM mIfConfigCheckList[] = {\r
+SHELL_PARAM_ITEM mIfConfigCheckList[] = {\r
{\r
L"-b",\r
TypeFlag\r
\r
VAR_CHECK_ITEM mSetCheckList[] = {\r
{\r
- L"static",\r
+ L"static",\r
0x00000001,\r
0x00000001,\r
FlagTypeSingle\r
},\r
};\r
\r
-STATIC CONST CHAR16 PermanentString[10] = L"PERMANENT";\r
+STATIC CONST CHAR16 PermanentString[10] = L"PERMANENT";\r
+\r
+/**\r
+ Free the ARG_LIST.\r
+\r
+ @param List Pointer to ARG_LIST to free.\r
+**/\r
+VOID\r
+FreeArgList (\r
+ ARG_LIST *List\r
+ )\r
+{\r
+ ARG_LIST *Next;\r
+\r
+ while (List->Next != NULL) {\r
+ Next = List->Next;\r
+ FreePool (List);\r
+ List = Next;\r
+ }\r
+\r
+ FreePool (List);\r
+}\r
\r
/**\r
Split a string with specified separator and save the substring to a list.\r
**/\r
ARG_LIST *\r
SplitStrToList (\r
- IN CONST CHAR16 *String,\r
- IN CHAR16 Separator\r
+ IN CONST CHAR16 *String,\r
+ IN CHAR16 Separator\r
)\r
{\r
- CHAR16 *Str;\r
- CHAR16 *ArgStr;\r
- ARG_LIST *ArgList;\r
- ARG_LIST *ArgNode;\r
+ CHAR16 *Str;\r
+ CHAR16 *ArgStr;\r
+ ARG_LIST *ArgList;\r
+ ARG_LIST *ArgNode;\r
\r
if (*String == L'\0') {\r
return NULL;\r
// Copy the CONST string to a local copy.\r
//\r
Str = AllocateCopyPool (StrSize (String), String);\r
- ASSERT (Str != NULL);\r
- ArgStr = Str;\r
+ if (Str == NULL) {\r
+ return NULL;\r
+ }\r
+\r
+ ArgStr = Str;\r
\r
//\r
// init a node for the list head.\r
//\r
- ArgNode = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));\r
- ASSERT (ArgNode != NULL);\r
+ ArgNode = (ARG_LIST *)AllocateZeroPool (sizeof (ARG_LIST));\r
+ if (ArgNode == NULL) {\r
+ return NULL;\r
+ }\r
+\r
ArgList = ArgNode;\r
\r
//\r
*Str = L'\0';\r
ArgNode->Arg = ArgStr;\r
ArgStr = Str + 1;\r
- ArgNode->Next = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));\r
- ASSERT (ArgNode->Next != NULL);\r
+ ArgNode->Next = (ARG_LIST *)AllocateZeroPool (sizeof (ARG_LIST));\r
+ if (ArgNode->Next == NULL) {\r
+ //\r
+ // Free the local copy of string stored in the first node\r
+ //\r
+ FreePool (ArgList->Arg);\r
+ FreeArgList (ArgList);\r
+ return NULL;\r
+ }\r
+\r
ArgNode = ArgNode->Next;\r
}\r
\r
\r
**/\r
VAR_CHECK_CODE\r
-IfConfigRetriveCheckListByName(\r
- IN VAR_CHECK_ITEM *CheckList,\r
- IN CHAR16 *Name,\r
- IN BOOLEAN Init\r
-)\r
+IfConfigRetriveCheckListByName (\r
+ IN VAR_CHECK_ITEM *CheckList,\r
+ IN CHAR16 *Name,\r
+ IN BOOLEAN Init\r
+ )\r
{\r
- STATIC UINT32 CheckDuplicate;\r
- STATIC UINT32 CheckConflict;\r
- VAR_CHECK_CODE RtCode;\r
- UINT32 Index;\r
- VAR_CHECK_ITEM Arg;\r
+ STATIC UINT32 CheckDuplicate;\r
+ STATIC UINT32 CheckConflict;\r
+ VAR_CHECK_CODE RtCode;\r
+ UINT32 Index;\r
+ VAR_CHECK_ITEM Arg;\r
\r
if (Init) {\r
CheckDuplicate = 0;\r
return VarCheckOk;\r
}\r
\r
- RtCode = VarCheckOk;\r
- Index = 0;\r
- Arg = CheckList[Index];\r
+ RtCode = VarCheckOk;\r
+ Index = 0;\r
+ Arg = CheckList[Index];\r
\r
//\r
// Check the Duplicated/Conflicted/Unknown input Args.\r
//\r
while (Arg.FlagStr != NULL) {\r
if (StrCmp (Arg.FlagStr, Name) == 0) {\r
-\r
if (CheckDuplicate & Arg.FlagID) {\r
RtCode = VarCheckDuplicate;\r
break;\r
VOID\r
EFIAPI\r
IfConfigManualAddressNotify (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- *((BOOLEAN *) Context) = TRUE;\r
+ *((BOOLEAN *)Context) = TRUE;\r
}\r
\r
/**\r
**/\r
VOID\r
IfConfigPrintMacAddr (\r
- IN UINT8 *Node,\r
- IN UINT32 Size\r
+ IN UINT8 *Node,\r
+ IN UINT32 Size\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
ASSERT (Size <= MACADDRMAXSIZE);\r
\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_NEWLINE), gShellNetwork1HiiHandle);\r
}\r
\r
-\r
/**\r
The get current status of all handles.\r
\r
**/\r
EFI_STATUS\r
IfConfigGetInterfaceInfo (\r
- IN CHAR16 *IfName,\r
- IN LIST_ENTRY *IfList\r
+ IN CHAR16 *IfName,\r
+ IN LIST_ENTRY *IfList\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN HandleIndex;\r
- UINTN HandleNum;\r
- EFI_HANDLE *HandleBuffer;\r
- EFI_IP4_CONFIG2_PROTOCOL *Ip4Cfg2;\r
- EFI_IP4_CONFIG2_INTERFACE_INFO *IfInfo;\r
- IFCONFIG_INTERFACE_CB *IfCb;\r
- UINTN DataSize;\r
+ EFI_STATUS Status;\r
+ UINTN HandleIndex;\r
+ UINTN HandleNum;\r
+ EFI_HANDLE *HandleBuffer;\r
+ EFI_IP4_CONFIG2_PROTOCOL *Ip4Cfg2;\r
+ EFI_IP4_CONFIG2_INTERFACE_INFO *IfInfo;\r
+ IFCONFIG_INTERFACE_CB *IfCb;\r
+ UINTN DataSize;\r
\r
HandleBuffer = NULL;\r
HandleNum = 0;\r
\r
- IfInfo = NULL;\r
- IfCb = NULL;\r
+ IfInfo = NULL;\r
+ IfCb = NULL;\r
\r
//\r
// Locate all the handles with ip4 service binding protocol.\r
NULL,\r
&HandleNum,\r
&HandleBuffer\r
- );\r
+ );\r
if (EFI_ERROR (Status) || (HandleNum == 0)) {\r
return Status;\r
}\r
// Enumerate all handles that installed with ip4 service binding protocol.\r
//\r
for (HandleIndex = 0; HandleIndex < HandleNum; HandleIndex++) {\r
- IfCb = NULL;\r
- IfInfo = NULL;\r
- DataSize = 0;\r
+ IfCb = NULL;\r
+ IfInfo = NULL;\r
+ DataSize = 0;\r
\r
//\r
// Ip4config protocol and ip4 service binding protocol are installed\r
Status = gBS->HandleProtocol (\r
HandleBuffer[HandleIndex],\r
&gEfiIp4Config2ProtocolGuid,\r
- (VOID **) &Ip4Cfg2\r
+ (VOID **)&Ip4Cfg2\r
);\r
\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
}\r
- \r
+\r
//\r
// Get the interface information size.\r
//\r
Status = Ip4Cfg2->GetData (\r
- Ip4Cfg2,\r
- Ip4Config2DataTypeInterfaceInfo,\r
- &DataSize,\r
- NULL\r
- );\r
+ Ip4Cfg2,\r
+ Ip4Config2DataTypeInterfaceInfo,\r
+ &DataSize,\r
+ NULL\r
+ );\r
\r
if (Status != EFI_BUFFER_TOO_SMALL) {\r
goto ON_ERROR;\r
Status = EFI_OUT_OF_RESOURCES;\r
goto ON_ERROR;\r
}\r
- \r
+\r
//\r
// Get the interface info.\r
//\r
Status = Ip4Cfg2->GetData (\r
- Ip4Cfg2,\r
- Ip4Config2DataTypeInterfaceInfo,\r
- &DataSize,\r
- IfInfo\r
- );\r
+ Ip4Cfg2,\r
+ Ip4Config2DataTypeInterfaceInfo,\r
+ &DataSize,\r
+ IfInfo\r
+ );\r
\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
}\r
- \r
+\r
//\r
// Check the interface name if required.\r
//\r
}\r
\r
DataSize = 0;\r
- \r
+\r
//\r
// Get the size of dns server list.\r
//\r
Status = Ip4Cfg2->GetData (\r
- Ip4Cfg2,\r
- Ip4Config2DataTypeDnsServer,\r
- &DataSize,\r
- NULL\r
- );\r
+ Ip4Cfg2,\r
+ Ip4Config2DataTypeDnsServer,\r
+ &DataSize,\r
+ NULL\r
+ );\r
\r
if ((Status != EFI_BUFFER_TOO_SMALL) && (Status != EFI_NOT_FOUND)) {\r
goto ON_ERROR;\r
IfCb->NicHandle = HandleBuffer[HandleIndex];\r
IfCb->IfInfo = IfInfo;\r
IfCb->IfCfg = Ip4Cfg2;\r
- IfCb->DnsCnt = (UINT32) (DataSize / sizeof (EFI_IPv4_ADDRESS));\r
+ IfCb->DnsCnt = (UINT32)(DataSize / sizeof (EFI_IPv4_ADDRESS));\r
\r
//\r
// Get the dns server list if has.\r
//\r
if (DataSize > 0) {\r
Status = Ip4Cfg2->GetData (\r
- Ip4Cfg2,\r
- Ip4Config2DataTypeDnsServer,\r
- &DataSize,\r
- IfCb->DnsAddr\r
- );\r
+ Ip4Cfg2,\r
+ Ip4Config2DataTypeDnsServer,\r
+ &DataSize,\r
+ IfCb->DnsAddr\r
+ );\r
\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
//\r
DataSize = sizeof (EFI_IP4_CONFIG2_POLICY);\r
Status = Ip4Cfg2->GetData (\r
- Ip4Cfg2,\r
- Ip4Config2DataTypePolicy,\r
- &DataSize,\r
- &IfCb->Policy\r
- );\r
+ Ip4Cfg2,\r
+ Ip4Config2DataTypePolicy,\r
+ &DataSize,\r
+ &IfCb->Policy\r
+ );\r
\r
if (EFI_ERROR (Status)) {\r
goto ON_ERROR;\r
**/\r
SHELL_STATUS\r
IfConfigShowInterfaceInfo (\r
- IN LIST_ENTRY *IfList\r
+ IN LIST_ENTRY *IfList\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IFCONFIG_INTERFACE_CB *IfCb;\r
- BOOLEAN MediaPresent;\r
- EFI_IPv4_ADDRESS Gateway;\r
- UINT32 Index;\r
- \r
- MediaPresent = TRUE;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IFCONFIG_INTERFACE_CB *IfCb;\r
+ EFI_STATUS MediaStatus;\r
+ EFI_IPv4_ADDRESS Gateway;\r
+ UINT32 Index;\r
+\r
+ MediaStatus = EFI_SUCCESS;\r
\r
if (IsListEmpty (IfList)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle);\r
//\r
// Print interface name.\r
//\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IF_NAME), gShellNetwork1HiiHandle, IfCb->IfInfo->Name); \r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IF_NAME), gShellNetwork1HiiHandle, IfCb->IfInfo->Name);\r
\r
//\r
// Get Media State.\r
//\r
- NetLibDetectMedia (IfCb->NicHandle, &MediaPresent);\r
- if (!MediaPresent) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media disconnected");\r
+ if (EFI_SUCCESS == NetLibDetectMediaWaitTimeout (IfCb->NicHandle, 0, &MediaStatus)) {\r
+ if (MediaStatus != EFI_SUCCESS) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media disconnected");\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media present");\r
+ }\r
} else {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media present");\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media state unknown");\r
}\r
\r
//\r
//\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_HEAD), gShellNetwork1HiiHandle);\r
\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_BODY), \r
+ STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_BODY),\r
gShellNetwork1HiiHandle,\r
(UINTN)IfCb->IfInfo->StationAddress.Addr[0],\r
(UINTN)IfCb->IfInfo->StationAddress.Addr[1],\r
//\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_SUBNET_MASK_HEAD), gShellNetwork1HiiHandle);\r
\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_BODY), \r
+ STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_BODY),\r
gShellNetwork1HiiHandle,\r
(UINTN)IfCb->IfInfo->SubnetMask.Addr[0],\r
(UINTN)IfCb->IfInfo->SubnetMask.Addr[1],\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_GATEWAY_HEAD), gShellNetwork1HiiHandle);\r
\r
ZeroMem (&Gateway, sizeof (EFI_IPv4_ADDRESS));\r
- \r
+\r
for (Index = 0; Index < IfCb->IfInfo->RouteTableSize; Index++) {\r
if ((CompareMem (&IfCb->IfInfo->RouteTable[Index].SubnetAddress, &mZeroIp4Addr, sizeof (EFI_IPv4_ADDRESS)) == 0) &&\r
- (CompareMem (&IfCb->IfInfo->RouteTable[Index].SubnetMask , &mZeroIp4Addr, sizeof (EFI_IPv4_ADDRESS)) == 0) ){\r
+ (CompareMem (&IfCb->IfInfo->RouteTable[Index].SubnetMask, &mZeroIp4Addr, sizeof (EFI_IPv4_ADDRESS)) == 0))\r
+ {\r
CopyMem (&Gateway, &IfCb->IfInfo->RouteTable[Index].GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
}\r
- } \r
+ }\r
\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_BODY), \r
+ STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_BODY),\r
gShellNetwork1HiiHandle,\r
(UINTN)Gateway.Addr[0],\r
(UINTN)Gateway.Addr[1],\r
(UINTN)Gateway.Addr[2],\r
(UINTN)Gateway.Addr[3]\r
);\r
- \r
+\r
//\r
// Print route table entry.\r
//\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_ROUTES_SIZE), gShellNetwork1HiiHandle, IfCb->IfInfo->RouteTableSize);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_ROUTES_SIZE), gShellNetwork1HiiHandle, IfCb->IfInfo->RouteTableSize);\r
\r
for (Index = 0; Index < IfCb->IfInfo->RouteTableSize; Index++) {\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_ROUTES_ENTRY_INDEX), gShellNetwork1HiiHandle, Index);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_ROUTES_ENTRY_INDEX), gShellNetwork1HiiHandle, Index);\r
\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_SHOW_IP_ADDR), \r
- gShellNetwork1HiiHandle, \r
+ STRING_TOKEN (STR_IFCONFIG_SHOW_IP_ADDR),\r
+ gShellNetwork1HiiHandle,\r
L"Subnet ",\r
(UINTN)IfCb->IfInfo->RouteTable[Index].SubnetAddress.Addr[0],\r
(UINTN)IfCb->IfInfo->RouteTable[Index].SubnetAddress.Addr[1],\r
(UINTN)IfCb->IfInfo->RouteTable[Index].SubnetAddress.Addr[3]\r
);\r
\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_SHOW_IP_ADDR), \r
- gShellNetwork1HiiHandle, \r
+ STRING_TOKEN (STR_IFCONFIG_SHOW_IP_ADDR),\r
+ gShellNetwork1HiiHandle,\r
L"Netmask",\r
(UINTN)IfCb->IfInfo->RouteTable[Index].SubnetMask.Addr[0],\r
(UINTN)IfCb->IfInfo->RouteTable[Index].SubnetMask.Addr[1],\r
(UINTN)IfCb->IfInfo->RouteTable[Index].SubnetMask.Addr[3]\r
);\r
\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_SHOW_IP_ADDR), \r
- gShellNetwork1HiiHandle, \r
+ STRING_TOKEN (STR_IFCONFIG_SHOW_IP_ADDR),\r
+ gShellNetwork1HiiHandle,\r
L"Gateway",\r
(UINTN)IfCb->IfInfo->RouteTable[Index].GatewayAddress.Addr[0],\r
(UINTN)IfCb->IfInfo->RouteTable[Index].GatewayAddress.Addr[1],\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_DNS_ADDR_HEAD), gShellNetwork1HiiHandle);\r
\r
for (Index = 0; Index < IfCb->DnsCnt; Index++) {\r
- ShellPrintHiiEx(\r
- -1, \r
- -1, \r
+ ShellPrintHiiEx (\r
+ -1,\r
+ -1,\r
NULL,\r
- STRING_TOKEN (STR_IFCONFIG_INFO_DNS_ADDR_BODY), \r
+ STRING_TOKEN (STR_IFCONFIG_INFO_DNS_ADDR_BODY),\r
gShellNetwork1HiiHandle,\r
- (UINTN) IfCb->DnsAddr[Index].Addr[0],\r
- (UINTN) IfCb->DnsAddr[Index].Addr[1],\r
- (UINTN) IfCb->DnsAddr[Index].Addr[2],\r
- (UINTN) IfCb->DnsAddr[Index].Addr[3]\r
+ (UINTN)IfCb->DnsAddr[Index].Addr[0],\r
+ (UINTN)IfCb->DnsAddr[Index].Addr[1],\r
+ (UINTN)IfCb->DnsAddr[Index].Addr[2],\r
+ (UINTN)IfCb->DnsAddr[Index].Addr[3]\r
);\r
\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_NEWLINE), gShellNetwork1HiiHandle);\r
}\r
}\r
- \r
+\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_BREAK), gShellNetwork1HiiHandle);\r
\r
return SHELL_SUCCESS;\r
**/\r
SHELL_STATUS\r
IfConfigClearInterfaceInfo (\r
- IN LIST_ENTRY *IfList,\r
- IN CHAR16 *IfName\r
+ IN LIST_ENTRY *IfList,\r
+ IN CHAR16 *IfName\r
)\r
{\r
- EFI_STATUS Status; \r
- SHELL_STATUS ShellStatus;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *Next;\r
- IFCONFIG_INTERFACE_CB *IfCb;\r
- EFI_IP4_CONFIG2_POLICY Policy;\r
- \r
- Status = EFI_SUCCESS;\r
+ EFI_STATUS Status;\r
+ SHELL_STATUS ShellStatus;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *Next;\r
+ IFCONFIG_INTERFACE_CB *IfCb;\r
+ EFI_IP4_CONFIG2_POLICY Policy;\r
+\r
+ Status = EFI_SUCCESS;\r
ShellStatus = SHELL_SUCCESS;\r
\r
if (IsListEmpty (IfList)) {\r
\r
//\r
// Go through the interface list.\r
- // If the interface name is specified, DHCP DORA process will be \r
+ // If the interface name is specified, DHCP DORA process will be\r
// triggered by the policy transition (static -> dhcp).\r
//\r
NET_LIST_FOR_EACH_SAFE (Entry, Next, IfList) {\r
\r
if ((IfName != NULL) && (StrCmp (IfName, IfCb->IfInfo->Name) == 0)) {\r
Policy = Ip4Config2PolicyStatic;\r
- \r
+\r
Status = IfCb->IfCfg->SetData (\r
IfCb->IfCfg,\r
Ip4Config2DataTypePolicy,\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
ShellStatus = SHELL_ACCESS_DENIED;\r
break;\r
- } \r
+ }\r
}\r
\r
Policy = Ip4Config2PolicyDhcp;\r
- \r
+\r
Status = IfCb->IfCfg->SetData (\r
IfCb->IfCfg,\r
Ip4Config2DataTypePolicy,\r
**/\r
SHELL_STATUS\r
IfConfigSetInterfaceInfo (\r
- IN LIST_ENTRY *IfList,\r
- IN ARG_LIST *VarArg\r
+ IN LIST_ENTRY *IfList,\r
+ IN ARG_LIST *VarArg\r
)\r
{\r
- EFI_STATUS Status;\r
- SHELL_STATUS ShellStatus;\r
- IFCONFIG_INTERFACE_CB *IfCb;\r
- VAR_CHECK_CODE CheckCode;\r
- EFI_EVENT TimeOutEvt;\r
- EFI_EVENT MappedEvt;\r
- BOOLEAN IsAddressOk;\r
-\r
- EFI_IP4_CONFIG2_POLICY Policy;\r
- EFI_IP4_CONFIG2_MANUAL_ADDRESS ManualAddress;\r
- UINTN DataSize;\r
- EFI_IPv4_ADDRESS Gateway;\r
- EFI_IPv4_ADDRESS *Dns;\r
- ARG_LIST *Tmp;\r
- UINTN Index;\r
-\r
- CONST CHAR16* TempString;\r
+ EFI_STATUS Status;\r
+ SHELL_STATUS ShellStatus;\r
+ IFCONFIG_INTERFACE_CB *IfCb;\r
+ VAR_CHECK_CODE CheckCode;\r
+ EFI_EVENT TimeOutEvt;\r
+ EFI_EVENT MappedEvt;\r
+ BOOLEAN IsAddressOk;\r
+\r
+ EFI_IP4_CONFIG2_POLICY Policy;\r
+ EFI_IP4_CONFIG2_MANUAL_ADDRESS ManualAddress;\r
+ UINTN DataSize;\r
+ EFI_IPv4_ADDRESS Gateway;\r
+ IP4_ADDR SubnetMask;\r
+ IP4_ADDR TempGateway;\r
+ EFI_IPv4_ADDRESS *Dns;\r
+ ARG_LIST *Tmp;\r
+ UINTN Index;\r
+\r
+ CONST CHAR16 *TempString;\r
\r
Dns = NULL;\r
\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle);\r
return SHELL_INVALID_PARAMETER;\r
}\r
- \r
+\r
//\r
// Make sure to set only one interface each time.\r
//\r
- IfCb = NET_LIST_USER_STRUCT (IfList->ForwardLink, IFCONFIG_INTERFACE_CB, Link);\r
- Status = EFI_SUCCESS;\r
+ IfCb = NET_LIST_USER_STRUCT (IfList->ForwardLink, IFCONFIG_INTERFACE_CB, Link);\r
+ Status = EFI_SUCCESS;\r
ShellStatus = SHELL_SUCCESS;\r
\r
//\r
// Initialize check list mechanism.\r
//\r
- CheckCode = IfConfigRetriveCheckListByName(\r
+ CheckCode = IfConfigRetriveCheckListByName (\r
NULL,\r
NULL,\r
TRUE\r
//\r
// Check invalid parameters (duplication & unknown & conflict).\r
//\r
- CheckCode = IfConfigRetriveCheckListByName(\r
+ CheckCode = IfConfigRetriveCheckListByName (\r
mSetCheckList,\r
VarArg->Arg,\r
FALSE\r
// To handle unsupported option.\r
//\r
TempString = PermanentString;\r
- if (StringNoCaseCompare(&VarArg->Arg, &TempString) == 0) {\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_UNSUPPORTED_OPTION), gShellNetwork1HiiHandle, PermanentString);\r
+ if (StringNoCaseCompare (&VarArg->Arg, &TempString) == 0) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_UNSUPPORTED_OPTION), gShellNetwork1HiiHandle, PermanentString);\r
goto ON_EXIT;\r
}\r
\r
}\r
\r
VarArg = VarArg->Next;\r
- continue; \r
+ continue;\r
}\r
\r
//\r
// Process valid variables.\r
//\r
- if (StrCmp(VarArg->Arg, L"dhcp") == 0) {\r
+ if (StrCmp (VarArg->Arg, L"dhcp") == 0) {\r
//\r
// Set dhcp config policy\r
//\r
sizeof (EFI_IP4_CONFIG2_POLICY),\r
&Policy\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
ShellStatus = SHELL_ACCESS_DENIED;\r
goto ON_EXIT;\r
}\r
- \r
- VarArg= VarArg->Next; \r
\r
+ VarArg = VarArg->Next;\r
} else if (StrCmp (VarArg->Arg, L"static") == 0) {\r
- VarArg= VarArg->Next;\r
+ VarArg = VarArg->Next;\r
if (VarArg == NULL) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
}\r
\r
ZeroMem (&ManualAddress, sizeof (ManualAddress));\r
- \r
+\r
//\r
// Get manual IP address.\r
//\r
Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.Address);\r
- if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
+ if (EFI_ERROR (Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
\r
//\r
// Get subnetmask.\r
- // \r
+ //\r
VarArg = VarArg->Next;\r
if (VarArg == NULL) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- \r
+\r
Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.SubnetMask);\r
- if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
+ if (EFI_ERROR (Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- \r
+\r
Status = NetLibStrToIp4 (VarArg->Arg, &Gateway);\r
- if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
+ if (EFI_ERROR (Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ //\r
+ // Need to check the gateway validity before set Manual Address.\r
+ // In case we can set manual address but fail to configure Gateway.\r
+ //\r
+ CopyMem (&SubnetMask, &ManualAddress.SubnetMask, sizeof (IP4_ADDR));\r
+ CopyMem (&TempGateway, &Gateway, sizeof (IP4_ADDR));\r
+ SubnetMask = NTOHL (SubnetMask);\r
+ TempGateway = NTOHL (TempGateway);\r
+ if ((SubnetMask != 0) &&\r
+ (SubnetMask != 0xFFFFFFFFu) &&\r
+ !NetIp4IsUnicast (TempGateway, SubnetMask))\r
+ {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_GATEWAY), gShellNetwork1HiiHandle, VarArg->Arg);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
sizeof (EFI_IP4_CONFIG2_POLICY),\r
&Policy\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
ShellStatus = SHELL_ACCESS_DENIED;\r
goto ON_EXIT;\r
}\r
- \r
+\r
//\r
// Set Manual Address.\r
//\r
Ip4Config2DataTypeManualAddress,\r
MappedEvt\r
);\r
- \r
+\r
if (EFI_ERROR (Status)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status);\r
ShellStatus = SHELL_ACCESS_DENIED;\r
ShellStatus = SHELL_ACCESS_DENIED;\r
goto ON_EXIT;\r
}\r
- \r
+\r
VarArg = VarArg->Next;\r
- \r
} else if (StrCmp (VarArg->Arg, L"dns") == 0) {\r
//\r
// Get DNS addresses.\r
Tmp = VarArg;\r
Index = 0;\r
while (Tmp != NULL) {\r
- Index ++;\r
+ Index++;\r
Tmp = Tmp->Next;\r
}\r
\r
- Dns = AllocatePool (Index * sizeof (EFI_IPv4_ADDRESS));\r
- ASSERT(Dns != NULL);\r
+ Dns = AllocatePool (Index * sizeof (EFI_IPv4_ADDRESS));\r
+ if (Dns == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellNetwork1HiiHandle, L"ifconfig");\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+\r
Tmp = VarArg;\r
Index = 0;\r
while (Tmp != NULL) {\r
Status = NetLibStrToIp4 (Tmp->Arg, Dns + Index);\r
- if (EFI_ERROR(Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, Tmp->Arg);\r
+ if (EFI_ERROR (Status)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, Tmp->Arg);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- Index ++;\r
+\r
+ Index++;\r
Tmp = Tmp->Next;\r
}\r
- \r
+\r
VarArg = Tmp;\r
\r
//\r
if (Dns != NULL) {\r
FreePool (Dns);\r
}\r
- \r
- return ShellStatus;\r
\r
+ return ShellStatus;\r
}\r
\r
/**\r
**/\r
SHELL_STATUS\r
IfConfig (\r
- IN IFCONFIG_PRIVATE_DATA *Private\r
+ IN IFCONFIG_PRIVATE_DATA *Private\r
)\r
{\r
EFI_STATUS Status;\r
&Private->IfList\r
);\r
if (EFI_ERROR (Status)) {\r
- ShellStatus = SHELL_NOT_FOUND; \r
+ ShellStatus = SHELL_NOT_FOUND;\r
goto ON_EXIT;\r
}\r
\r
switch (Private->OpCode) {\r
- case IfConfigOpList:\r
- ShellStatus = IfConfigShowInterfaceInfo (&Private->IfList);\r
- break;\r
+ case IfConfigOpList:\r
+ ShellStatus = IfConfigShowInterfaceInfo (&Private->IfList);\r
+ break;\r
\r
- case IfConfigOpClear:\r
- ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList, Private->IfName);\r
- break;\r
+ case IfConfigOpClear:\r
+ ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList, Private->IfName);\r
+ break;\r
\r
- case IfConfigOpSet:\r
- ShellStatus = IfConfigSetInterfaceInfo (&Private->IfList, Private->VarArg);\r
- break;\r
+ case IfConfigOpSet:\r
+ ShellStatus = IfConfigSetInterfaceInfo (&Private->IfList, Private->VarArg);\r
+ break;\r
\r
- default:\r
- ShellStatus = SHELL_UNSUPPORTED;\r
+ default:\r
+ ShellStatus = SHELL_UNSUPPORTED;\r
}\r
\r
ON_EXIT:\r
IN IFCONFIG_PRIVATE_DATA *Private\r
)\r
{\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
- IFCONFIG_INTERFACE_CB *IfCb;\r
- ARG_LIST *ArgNode;\r
- ARG_LIST *ArgHead;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
+ IFCONFIG_INTERFACE_CB *IfCb;\r
\r
ASSERT (Private != NULL);\r
\r
// Clean the list which save the set config Args.\r
//\r
if (Private->VarArg != NULL) {\r
- ArgHead = Private->VarArg;\r
-\r
- while (ArgHead->Next != NULL) {\r
- ArgNode = ArgHead->Next;\r
- FreePool (ArgHead);\r
- ArgHead = ArgNode;\r
- }\r
-\r
- FreePool (ArgHead);\r
+ FreeArgList (Private->VarArg);\r
}\r
\r
if (Private->IfName != NULL) {\r
RemoveEntryList (&IfCb->Link);\r
\r
if (IfCb->IfInfo != NULL) {\r
-\r
FreePool (IfCb->IfInfo);\r
}\r
\r
\r
@retval EFI_SUCCESS ifconfig command processed successfully.\r
@retval others The ifconfig command process failed.\r
- \r
+\r
**/\r
SHELL_STATUS\r
EFIAPI\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- IFCONFIG_PRIVATE_DATA *Private;\r
- LIST_ENTRY *ParamPackage;\r
- SHELL_STATUS ShellStatus;\r
- CONST CHAR16 *ValueStr;\r
- ARG_LIST *ArgList;\r
- CHAR16 *ProblemParam;\r
- CHAR16 *Str;\r
- \r
- Status = EFI_INVALID_PARAMETER;\r
- Private = NULL;\r
+ EFI_STATUS Status;\r
+ IFCONFIG_PRIVATE_DATA *Private;\r
+ LIST_ENTRY *ParamPackage;\r
+ SHELL_STATUS ShellStatus;\r
+ CONST CHAR16 *ValueStr;\r
+ ARG_LIST *ArgList;\r
+ CHAR16 *ProblemParam;\r
+ CHAR16 *Str;\r
+\r
+ Status = EFI_INVALID_PARAMETER;\r
+ Private = NULL;\r
ShellStatus = SHELL_SUCCESS;\r
\r
Status = ShellCommandLineParseEx (mIfConfigCheckList, &ParamPackage, &ProblemParam, TRUE, FALSE);\r
if (EFI_ERROR (Status)) {\r
- if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
+ if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellNetwork1HiiHandle, L"ifconfig", ProblemParam);\r
- FreePool(ProblemParam);\r
+ FreePool (ProblemParam);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- ASSERT(FALSE);\r
+ ASSERT (FALSE);\r
}\r
- \r
+\r
goto ON_EXIT;\r
}\r
\r
// To handle unsupported option.\r
//\r
if (ShellCommandLineGetFlag (ParamPackage, L"-c")) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_UNSUPPORTED_OPTION), gShellNetwork1HiiHandle,L"-c");\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_UNSUPPORTED_OPTION), gShellNetwork1HiiHandle, L"-c");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
// To handle no option.\r
//\r
if (!ShellCommandLineGetFlag (ParamPackage, L"-r") && !ShellCommandLineGetFlag (ParamPackage, L"-s") &&\r
- !ShellCommandLineGetFlag (ParamPackage, L"-l")) {\r
+ !ShellCommandLineGetFlag (ParamPackage, L"-l"))\r
+ {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_OPTION), gShellNetwork1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
//\r
if (((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-s"))) ||\r
((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))) ||\r
- ((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-l")))) {\r
+ ((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))))\r
+ {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CON), gShellNetwork1HiiHandle, L"ifconfig");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
//\r
if (ShellCommandLineGetFlag (ParamPackage, L"-l")) {\r
Private->OpCode = IfConfigOpList;\r
- ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");\r
+ ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");\r
if (ValueStr != NULL) {\r
Str = AllocateCopyPool (StrSize (ValueStr), ValueStr);\r
- ASSERT (Str != NULL);\r
+ if (Str == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellNetwork1HiiHandle, L"ifconfig");\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+\r
Private->IfName = Str;\r
}\r
}\r
- \r
+\r
//\r
// To get interface name for the clear option.\r
//\r
if (ShellCommandLineGetFlag (ParamPackage, L"-r")) {\r
Private->OpCode = IfConfigOpClear;\r
- ValueStr = ShellCommandLineGetValue (ParamPackage, L"-r");\r
+ ValueStr = ShellCommandLineGetValue (ParamPackage, L"-r");\r
if (ValueStr != NULL) {\r
Str = AllocateCopyPool (StrSize (ValueStr), ValueStr);\r
- ASSERT (Str != NULL);\r
+ if (Str == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellNetwork1HiiHandle, L"ifconfig");\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
+\r
Private->IfName = Str;\r
}\r
}\r
- \r
+\r
//\r
// To get interface name and corresponding Args for the set option.\r
//\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- \r
+\r
//\r
// To split the configuration into multi-section.\r
//\r
- ArgList = SplitStrToList (ValueStr, L' ');\r
- ASSERT (ArgList != NULL);\r
+ ArgList = SplitStrToList (ValueStr, L' ');\r
+ if (ArgList == NULL) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellNetwork1HiiHandle, L"ifconfig");\r
+ ShellStatus = SHELL_OUT_OF_RESOURCES;\r
+ goto ON_EXIT;\r
+ }\r
\r
Private->OpCode = IfConfigOpSet;\r
Private->IfName = ArgList->Arg;\r
\r
Private->VarArg = ArgList->Next;\r
\r
- if (Private->IfName == NULL || Private->VarArg == NULL) {\r
+ if ((Private->IfName == NULL) || (Private->VarArg == NULL)) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
}\r
- \r
+\r
//\r
// Main process of ifconfig.\r
//\r
ON_EXIT:\r
\r
ShellCommandLineFreeVarList (ParamPackage);\r
- \r
+\r
if (Private != NULL) {\r
IfConfigCleanup (Private);\r
}\r