]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
ShellPkg: Clean up source files
[mirror_edk2.git] / ShellPkg / Library / UefiShellNetwork1CommandsLib / Ifconfig.c
index fb6f57518422576e1d349fc3450906c5e6602333..52415e0ad0ca931f1c73eaad788041df3edbcbff 100644 (file)
@@ -2,7 +2,7 @@
   The implementation for Shell command ifconfig based on IP4Config2 protocol.\r
 \r
   (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>\r
   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 - 2015, 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
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -45,7 +45,7 @@ typedef struct _IFCONFIG_INTERFACE_CB {
   EFI_HANDLE                                  NicHandle;\r
   LIST_ENTRY                                  Link;\r
   EFI_IP4_CONFIG2_PROTOCOL                    *IfCfg;\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_INTERFACE_INFO              *IfInfo;\r
   EFI_IP4_CONFIG2_POLICY                      Policy;\r
   UINT32                                      DnsCnt;\r
   EFI_IPv4_ADDRESS                            DnsAddr[1];\r
   EFI_IP4_CONFIG2_POLICY                      Policy;\r
   UINT32                                      DnsCnt;\r
   EFI_IPv4_ADDRESS                            DnsAddr[1];\r
@@ -129,6 +129,26 @@ VAR_CHECK_ITEM  mSetCheckList[] = {
 \r
 STATIC CONST CHAR16 PermanentString[10] = L"PERMANENT";\r
 \r
 \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
+  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
 /**\r
   Split a string with specified separator and save the substring to a list.\r
 \r
@@ -157,14 +177,18 @@ SplitStrToList (
   // Copy the CONST string to a local copy.\r
   //\r
   Str = AllocateCopyPool (StrSize (String), String);\r
   // Copy the CONST string to a local copy.\r
   //\r
   Str = AllocateCopyPool (StrSize (String), String);\r
-  ASSERT (Str != NULL);\r
+  if (Str == NULL) {\r
+    return NULL;\r
+  }\r
   ArgStr  = Str;\r
 \r
   //\r
   // init a node for the list head.\r
   //\r
   ArgNode = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));\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
+  if (ArgNode == NULL) {\r
+    return NULL;\r
+  }\r
   ArgList = ArgNode;\r
 \r
   //\r
   ArgList = ArgNode;\r
 \r
   //\r
@@ -176,7 +200,14 @@ SplitStrToList (
       ArgNode->Arg  = ArgStr;\r
       ArgStr        = Str + 1;\r
       ArgNode->Next = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));\r
       ArgNode->Arg  = ArgStr;\r
       ArgStr        = Str + 1;\r
       ArgNode->Next = (ARG_LIST *) AllocateZeroPool (sizeof (ARG_LIST));\r
-      ASSERT (ArgNode->Next != NULL);\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
       ArgNode = ArgNode->Next;\r
     }\r
 \r
       ArgNode = ArgNode->Next;\r
     }\r
 \r
@@ -273,86 +304,6 @@ IfConfigManualAddressNotify (
   *((BOOLEAN *) Context) = TRUE;\r
 }\r
 \r
   *((BOOLEAN *) Context) = TRUE;\r
 }\r
 \r
-\r
-/**\r
-  Create an IP child, use it to start the auto configuration, then destroy it.\r
-\r
-  @param[in] Controller       The controller which has the service installed.\r
-  @param[in] Image            The image handle used to open service.\r
-\r
-  @retval EFI_SUCCESS         The configuration is done.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-IfConfigStartIp4(\r
-  IN  EFI_HANDLE            Controller,\r
-  IN  EFI_HANDLE            Image\r
-  )\r
-{\r
-  EFI_IP4_PROTOCOL              *Ip4;\r
-  EFI_HANDLE                    Ip4Handle;\r
-  EFI_IP4_CONFIG_DATA           Ip4ConfigData;\r
-  EFI_STATUS                    Status;\r
-\r
-  //\r
-  // Get the Ip4ServiceBinding Protocol\r
-  //\r
-  Ip4Handle     = NULL;\r
-  Ip4           = NULL;\r
-\r
-  Status = NetLibCreateServiceChild (\r
-             Controller,\r
-             Image,\r
-             &gEfiIp4ServiceBindingProtocolGuid,\r
-             &Ip4Handle\r
-             );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  Status = gBS->OpenProtocol (\r
-                 Ip4Handle,\r
-                 &gEfiIp4ProtocolGuid,\r
-                 (VOID **) &Ip4,\r
-                 Controller,\r
-                 Image,\r
-                 EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                 );\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto ON_EXIT;\r
-  }\r
-\r
-  Ip4ConfigData.DefaultProtocol          = EFI_IP_PROTO_ICMP;\r
-  Ip4ConfigData.AcceptAnyProtocol        = FALSE;\r
-  Ip4ConfigData.AcceptIcmpErrors         = FALSE;\r
-  Ip4ConfigData.AcceptBroadcast          = FALSE;\r
-  Ip4ConfigData.AcceptPromiscuous        = FALSE;\r
-  Ip4ConfigData.UseDefaultAddress        = TRUE;\r
-  ZeroMem (&Ip4ConfigData.StationAddress, sizeof (EFI_IPv4_ADDRESS));\r
-  ZeroMem (&Ip4ConfigData.SubnetMask, sizeof (EFI_IPv4_ADDRESS));\r
-  Ip4ConfigData.TypeOfService            = 0;\r
-  Ip4ConfigData.TimeToLive               = 1;\r
-  Ip4ConfigData.DoNotFragment            = FALSE;\r
-  Ip4ConfigData.RawData                  = FALSE;\r
-  Ip4ConfigData.ReceiveTimeout           = 0;\r
-  Ip4ConfigData.TransmitTimeout          = 0;\r
-\r
-  Ip4->Configure (Ip4, &Ip4ConfigData);\r
-  \r
-ON_EXIT: \r
-  NetLibDestroyServiceChild (\r
-    Controller,\r
-    Image,\r
-    &gEfiIp4ServiceBindingProtocolGuid,\r
-    Ip4Handle\r
-    );\r
-  \r
-  return Status;\r
-}\r
-\r
-\r
 /**\r
   Print MAC address.\r
 \r
 /**\r
   Print MAC address.\r
 \r
@@ -448,7 +399,7 @@ IfConfigGetInterfaceInfo (
     if (EFI_ERROR (Status)) {\r
       goto ON_ERROR;\r
     }\r
     if (EFI_ERROR (Status)) {\r
       goto ON_ERROR;\r
     }\r
-    \r
+\r
     //\r
     // Get the interface information size.\r
     //\r
     //\r
     // Get the interface information size.\r
     //\r
@@ -469,7 +420,7 @@ IfConfigGetInterfaceInfo (
       Status = EFI_OUT_OF_RESOURCES;\r
       goto ON_ERROR;\r
     }\r
       Status = EFI_OUT_OF_RESOURCES;\r
       goto ON_ERROR;\r
     }\r
-    \r
+\r
     //\r
     // Get the interface info.\r
     //\r
     //\r
     // Get the interface info.\r
     //\r
@@ -483,7 +434,7 @@ IfConfigGetInterfaceInfo (
     if (EFI_ERROR (Status)) {\r
       goto ON_ERROR;\r
     }\r
     if (EFI_ERROR (Status)) {\r
       goto ON_ERROR;\r
     }\r
-    \r
+\r
     //\r
     // Check the interface name if required.\r
     //\r
     //\r
     // Check the interface name if required.\r
     //\r
@@ -493,7 +444,7 @@ IfConfigGetInterfaceInfo (
     }\r
 \r
     DataSize = 0;\r
     }\r
 \r
     DataSize = 0;\r
-    \r
+\r
     //\r
     // Get the size of dns server list.\r
     //\r
     //\r
     // Get the size of dns server list.\r
     //\r
@@ -599,11 +550,11 @@ IfConfigShowInterfaceInfo (
   LIST_ENTRY                   *Entry;\r
   LIST_ENTRY                   *Next;\r
   IFCONFIG_INTERFACE_CB        *IfCb;\r
   LIST_ENTRY                   *Entry;\r
   LIST_ENTRY                   *Next;\r
   IFCONFIG_INTERFACE_CB        *IfCb;\r
-  BOOLEAN                       MediaPresent;\r
+  EFI_STATUS                    MediaStatus;\r
   EFI_IPv4_ADDRESS              Gateway;\r
   UINT32                        Index;\r
   EFI_IPv4_ADDRESS              Gateway;\r
   UINT32                        Index;\r
-  \r
-  MediaPresent = TRUE;\r
+\r
+  MediaStatus = EFI_SUCCESS;\r
 \r
   if (IsListEmpty (IfList)) {\r
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle);\r
 \r
   if (IsListEmpty (IfList)) {\r
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle);\r
@@ -620,16 +571,19 @@ IfConfigShowInterfaceInfo (
     //\r
     // Print interface name.\r
     //\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
 \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
     } 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
 \r
     //\r
@@ -657,10 +611,10 @@ IfConfigShowInterfaceInfo (
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_HEAD), gShellNetwork1HiiHandle);\r
 \r
     ShellPrintHiiEx(\r
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IP_ADDR_HEAD), gShellNetwork1HiiHandle);\r
 \r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
+      -1,\r
+      -1,\r
       NULL,\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
       gShellNetwork1HiiHandle,\r
       (UINTN)IfCb->IfInfo->StationAddress.Addr[0],\r
       (UINTN)IfCb->IfInfo->StationAddress.Addr[1],\r
@@ -674,10 +628,10 @@ IfConfigShowInterfaceInfo (
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_SUBNET_MASK_HEAD), gShellNetwork1HiiHandle);\r
 \r
     ShellPrintHiiEx(\r
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_SUBNET_MASK_HEAD), gShellNetwork1HiiHandle);\r
 \r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
+      -1,\r
+      -1,\r
       NULL,\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
       gShellNetwork1HiiHandle,\r
       (UINTN)IfCb->IfInfo->SubnetMask.Addr[0],\r
       (UINTN)IfCb->IfInfo->SubnetMask.Addr[1],\r
@@ -691,26 +645,26 @@ IfConfigShowInterfaceInfo (
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_GATEWAY_HEAD), gShellNetwork1HiiHandle);\r
 \r
     ZeroMem (&Gateway, sizeof (EFI_IPv4_ADDRESS));\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
         CopyMem (&Gateway, &IfCb->IfInfo->RouteTable[Index].GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\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
         CopyMem (&Gateway, &IfCb->IfInfo->RouteTable[Index].GatewayAddress, sizeof (EFI_IPv4_ADDRESS));\r
       }\r
-    }    \r
+    }\r
 \r
     ShellPrintHiiEx(\r
 \r
     ShellPrintHiiEx(\r
-      -1, \r
-      -1, \r
+      -1,\r
+      -1,\r
       NULL,\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
       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
     //\r
     // Print route table entry.\r
     //\r
@@ -720,11 +674,11 @@ IfConfigShowInterfaceInfo (
       ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_ROUTES_ENTRY_INDEX), gShellNetwork1HiiHandle, Index);\r
 \r
       ShellPrintHiiEx(\r
       ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_ROUTES_ENTRY_INDEX), gShellNetwork1HiiHandle, Index);\r
 \r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
+        -1,\r
+        -1,\r
         NULL,\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
         L"Subnet ",\r
         (UINTN)IfCb->IfInfo->RouteTable[Index].SubnetAddress.Addr[0],\r
         (UINTN)IfCb->IfInfo->RouteTable[Index].SubnetAddress.Addr[1],\r
@@ -733,11 +687,11 @@ IfConfigShowInterfaceInfo (
         );\r
 \r
       ShellPrintHiiEx(\r
         );\r
 \r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
+        -1,\r
+        -1,\r
         NULL,\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
         L"Netmask",\r
         (UINTN)IfCb->IfInfo->RouteTable[Index].SubnetMask.Addr[0],\r
         (UINTN)IfCb->IfInfo->RouteTable[Index].SubnetMask.Addr[1],\r
@@ -746,11 +700,11 @@ IfConfigShowInterfaceInfo (
         );\r
 \r
       ShellPrintHiiEx(\r
         );\r
 \r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
+        -1,\r
+        -1,\r
         NULL,\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
         L"Gateway",\r
         (UINTN)IfCb->IfInfo->RouteTable[Index].GatewayAddress.Addr[0],\r
         (UINTN)IfCb->IfInfo->RouteTable[Index].GatewayAddress.Addr[1],\r
@@ -766,10 +720,10 @@ IfConfigShowInterfaceInfo (
 \r
     for (Index = 0; Index < IfCb->DnsCnt; Index++) {\r
       ShellPrintHiiEx(\r
 \r
     for (Index = 0; Index < IfCb->DnsCnt; Index++) {\r
       ShellPrintHiiEx(\r
-        -1, \r
-        -1, \r
+        -1,\r
+        -1,\r
         NULL,\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
         gShellNetwork1HiiHandle,\r
         (UINTN) IfCb->DnsAddr[Index].Addr[0],\r
         (UINTN) IfCb->DnsAddr[Index].Addr[1],\r
@@ -780,7 +734,7 @@ IfConfigShowInterfaceInfo (
       ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_NEWLINE), gShellNetwork1HiiHandle);\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
   ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_BREAK), gShellNetwork1HiiHandle);\r
 \r
   return SHELL_SUCCESS;\r
@@ -790,6 +744,7 @@ IfConfigShowInterfaceInfo (
   The clean process of the ifconfig command to clear interface info.\r
 \r
   @param[in]   IfList    The pointer of IfList(interface list).\r
   The clean process of the ifconfig command to clear interface info.\r
 \r
   @param[in]   IfList    The pointer of IfList(interface list).\r
+  @param[in]   IfName    The pointer of interface name.\r
 \r
   @retval SHELL_SUCCESS  The ifconfig command clean processed successfully.\r
   @retval others         The ifconfig command clean process failed.\r
 \r
   @retval SHELL_SUCCESS  The ifconfig command clean processed successfully.\r
   @retval others         The ifconfig command clean process failed.\r
@@ -797,17 +752,17 @@ IfConfigShowInterfaceInfo (
 **/\r
 SHELL_STATUS\r
 IfConfigClearInterfaceInfo (\r
 **/\r
 SHELL_STATUS\r
 IfConfigClearInterfaceInfo (\r
-  IN LIST_ENTRY    *IfList\r
+  IN LIST_ENTRY    *IfList,\r
+  IN CHAR16        *IfName\r
   )\r
 {\r
   )\r
 {\r
-  EFI_STATUS                Status;  \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
   SHELL_STATUS              ShellStatus;\r
   LIST_ENTRY                *Entry;\r
   LIST_ENTRY                *Next;\r
   IFCONFIG_INTERFACE_CB     *IfCb;\r
   EFI_IP4_CONFIG2_POLICY    Policy;\r
 \r
-  Policy = Ip4Config2PolicyDhcp;\r
   Status = EFI_SUCCESS;\r
   ShellStatus = SHELL_SUCCESS;\r
 \r
   Status = EFI_SUCCESS;\r
   ShellStatus = SHELL_SUCCESS;\r
 \r
@@ -817,10 +772,30 @@ IfConfigClearInterfaceInfo (
 \r
   //\r
   // Go through the interface list.\r
 \r
   //\r
   // Go through the interface list.\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
     IfCb = NET_LIST_USER_STRUCT (Entry, IFCONFIG_INTERFACE_CB, Link);\r
   //\r
   NET_LIST_FOR_EACH_SAFE (Entry, Next, IfList) {\r
     IfCb = NET_LIST_USER_STRUCT (Entry, IFCONFIG_INTERFACE_CB, Link);\r
-    \r
+\r
+    if ((IfName != NULL) && (StrCmp (IfName, IfCb->IfInfo->Name) == 0)) {\r
+      Policy = Ip4Config2PolicyStatic;\r
+\r
+      Status = IfCb->IfCfg->SetData (\r
+                              IfCb->IfCfg,\r
+                              Ip4Config2DataTypePolicy,\r
+                              sizeof (EFI_IP4_CONFIG2_POLICY),\r
+                              &Policy\r
+                              );\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
+        break;\r
+      }\r
+    }\r
+\r
+    Policy = Ip4Config2PolicyDhcp;\r
+\r
     Status = IfCb->IfCfg->SetData (\r
                             IfCb->IfCfg,\r
                             Ip4Config2DataTypePolicy,\r
     Status = IfCb->IfCfg->SetData (\r
                             IfCb->IfCfg,\r
                             Ip4Config2DataTypePolicy,\r
@@ -828,6 +803,7 @@ IfConfigClearInterfaceInfo (
                             &Policy\r
                             );\r
     if (EFI_ERROR (Status)) {\r
                             &Policy\r
                             );\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
       break;\r
     }\r
       ShellStatus = SHELL_ACCESS_DENIED;\r
       break;\r
     }\r
@@ -864,6 +840,8 @@ IfConfigSetInterfaceInfo (
   EFI_IP4_CONFIG2_MANUAL_ADDRESS   ManualAddress;\r
   UINTN                            DataSize;\r
   EFI_IPv4_ADDRESS                 Gateway;\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
   EFI_IPv4_ADDRESS                 *Dns;\r
   ARG_LIST                         *Tmp;\r
   UINTN                            Index;\r
@@ -876,7 +854,7 @@ IfConfigSetInterfaceInfo (
     ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle);\r
     return SHELL_INVALID_PARAMETER;\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
   //\r
   // Make sure to set only one interface each time.\r
   //\r
@@ -904,6 +882,7 @@ IfConfigSetInterfaceInfo (
                   &TimeOutEvt\r
                   );\r
   if (EFI_ERROR (Status)) {\r
                   &TimeOutEvt\r
                   );\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
     ShellStatus = SHELL_ACCESS_DENIED;\r
     goto ON_EXIT;\r
   }\r
@@ -916,6 +895,7 @@ IfConfigSetInterfaceInfo (
                   &MappedEvt\r
                   );\r
   if (EFI_ERROR (Status)) {\r
                   &MappedEvt\r
                   );\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
     ShellStatus = SHELL_ACCESS_DENIED;\r
     goto ON_EXIT;\r
   }\r
@@ -964,43 +944,17 @@ IfConfigSetInterfaceInfo (
       }\r
 \r
       VarArg = VarArg->Next;\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
     }\r
 \r
     //\r
     // Process valid variables.\r
     //\r
     if (StrCmp(VarArg->Arg, L"dhcp") == 0) {\r
-      if (IfCb->Policy == Ip4Config2PolicyDhcp) {\r
-        Status = IfConfigStartIp4 (IfCb->NicHandle, gImageHandle);\r
-        if (EFI_ERROR(Status)) {\r
-          ShellStatus = SHELL_ACCESS_DENIED;\r
-          goto ON_EXIT;\r
-        }\r
-      } else {\r
-        //\r
-        // Set dhcp config policy\r
-        //\r
-        Policy = Ip4Config2PolicyDhcp;\r
-        Status = IfCb->IfCfg->SetData (\r
-                                IfCb->IfCfg,\r
-                                Ip4Config2DataTypePolicy,\r
-                                sizeof (EFI_IP4_CONFIG2_POLICY),\r
-                                &Policy\r
-                                );\r
-        if (EFI_ERROR(Status)) {\r
-          ShellStatus = SHELL_ACCESS_DENIED;\r
-          goto ON_EXIT;\r
-        }\r
-      }\r
-      \r
-      VarArg= VarArg->Next;    \r
-\r
-    } else if (StrCmp (VarArg->Arg, L"static") == 0) {\r
       //\r
       //\r
-      // Set manual config policy.\r
+      // Set dhcp config policy\r
       //\r
       //\r
-      Policy = Ip4Config2PolicyStatic;\r
+      Policy = Ip4Config2PolicyDhcp;\r
       Status = IfCb->IfCfg->SetData (\r
                               IfCb->IfCfg,\r
                               Ip4Config2DataTypePolicy,\r
       Status = IfCb->IfCfg->SetData (\r
                               IfCb->IfCfg,\r
                               Ip4Config2DataTypePolicy,\r
@@ -1008,29 +962,46 @@ IfConfigSetInterfaceInfo (
                               &Policy\r
                               );\r
       if (EFI_ERROR(Status)) {\r
                               &Policy\r
                               );\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
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r
 \r
-      VarArg= VarArg->Next;   \r
+      VarArg= VarArg->Next;\r
+\r
+    } else if (StrCmp (VarArg->Arg, L"static") == 0) {\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
       ZeroMem (&ManualAddress, sizeof (ManualAddress));\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
       //\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
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
 \r
       //\r
       // Get subnetmask.\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
 \r
       //\r
       // Get subnetmask.\r
-      //    \r
+      //\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
+        goto ON_EXIT;\r
+      }\r
+\r
       Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.SubnetMask);\r
       if (EFI_ERROR(Status)) {\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
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
@@ -1039,12 +1010,53 @@ IfConfigSetInterfaceInfo (
       // Get gateway.\r
       //\r
       VarArg = VarArg->Next;\r
       // Get gateway.\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
       Status = NetLibStrToIp4 (VarArg->Arg, &Gateway);\r
       if (EFI_ERROR(Status)) {\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
+        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
+          !NetIp4IsUnicast (TempGateway, SubnetMask)) {\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
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
-      \r
+\r
+      //\r
+      // Set manual config policy.\r
+      //\r
+      Policy = Ip4Config2PolicyStatic;\r
+      Status = IfCb->IfCfg->SetData (\r
+                              IfCb->IfCfg,\r
+                              Ip4Config2DataTypePolicy,\r
+                              sizeof (EFI_IP4_CONFIG2_POLICY),\r
+                              &Policy\r
+                              );\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
+      // Set Manual Address.\r
+      //\r
       IsAddressOk = FALSE;\r
 \r
       Status = IfCb->IfCfg->RegisterDataNotify (\r
       IsAddressOk = FALSE;\r
 \r
       Status = IfCb->IfCfg->RegisterDataNotify (\r
@@ -1053,6 +1065,7 @@ IfConfigSetInterfaceInfo (
                               MappedEvt\r
                               );\r
       if (EFI_ERROR (Status)) {\r
                               MappedEvt\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
         goto ON_EXIT;\r
       }\r
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r
@@ -1082,7 +1095,7 @@ IfConfigSetInterfaceInfo (
                      Ip4Config2DataTypeManualAddress,\r
                      MappedEvt\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
       if (EFI_ERROR (Status)) {\r
         ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status);\r
         ShellStatus = SHELL_ACCESS_DENIED;\r
@@ -1101,12 +1114,13 @@ IfConfigSetInterfaceInfo (
                               &Gateway\r
                               );\r
       if (EFI_ERROR (Status)) {\r
                               &Gateway\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
         goto ON_EXIT;\r
       }\r
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r
-      \r
+\r
       VarArg = VarArg->Next;\r
       VarArg = VarArg->Next;\r
-      \r
+\r
     } else if (StrCmp (VarArg->Arg, L"dns") == 0) {\r
       //\r
       // Get DNS addresses.\r
     } else if (StrCmp (VarArg->Arg, L"dns") == 0) {\r
       //\r
       // Get DNS addresses.\r
@@ -1120,19 +1134,24 @@ IfConfigSetInterfaceInfo (
       }\r
 \r
       Dns   = AllocatePool (Index * sizeof (EFI_IPv4_ADDRESS));\r
       }\r
 \r
       Dns   = AllocatePool (Index * sizeof (EFI_IPv4_ADDRESS));\r
-      ASSERT(Dns != NULL);\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
       Tmp   = VarArg;\r
       Index = 0;\r
       while (Tmp != NULL) {\r
         Status = NetLibStrToIp4 (Tmp->Arg, Dns + Index);\r
         if (EFI_ERROR(Status)) {\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
           ShellStatus = SHELL_INVALID_PARAMETER;\r
           goto ON_EXIT;\r
         }\r
         Index ++;\r
         Tmp = Tmp->Next;\r
       }\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
           goto ON_EXIT;\r
         }\r
         Index ++;\r
         Tmp = Tmp->Next;\r
       }\r
-      \r
+\r
       VarArg = Tmp;\r
 \r
       //\r
       VarArg = Tmp;\r
 \r
       //\r
@@ -1147,6 +1166,7 @@ IfConfigSetInterfaceInfo (
                               Dns\r
                               );\r
       if (EFI_ERROR (Status)) {\r
                               Dns\r
                               );\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
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r
@@ -1157,7 +1177,7 @@ ON_EXIT:
   if (Dns != NULL) {\r
     FreePool (Dns);\r
   }\r
   if (Dns != NULL) {\r
     FreePool (Dns);\r
   }\r
-  \r
+\r
   return ShellStatus;\r
 \r
 }\r
   return ShellStatus;\r
 \r
 }\r
@@ -1189,7 +1209,7 @@ IfConfig (
              &Private->IfList\r
              );\r
   if (EFI_ERROR (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
     goto ON_EXIT;\r
   }\r
 \r
@@ -1199,7 +1219,7 @@ IfConfig (
     break;\r
 \r
   case IfConfigOpClear:\r
     break;\r
 \r
   case IfConfigOpClear:\r
-    ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList);\r
+    ShellStatus = IfConfigClearInterfaceInfo (&Private->IfList, Private->IfName);\r
     break;\r
 \r
   case IfConfigOpSet:\r
     break;\r
 \r
   case IfConfigOpSet:\r
@@ -1228,8 +1248,6 @@ IfConfigCleanup (
   LIST_ENTRY                *Entry;\r
   LIST_ENTRY                *NextEntry;\r
   IFCONFIG_INTERFACE_CB     *IfCb;\r
   LIST_ENTRY                *Entry;\r
   LIST_ENTRY                *NextEntry;\r
   IFCONFIG_INTERFACE_CB     *IfCb;\r
-  ARG_LIST                  *ArgNode;\r
-  ARG_LIST                  *ArgHead;\r
 \r
   ASSERT (Private != NULL);\r
 \r
 \r
   ASSERT (Private != NULL);\r
 \r
@@ -1237,15 +1255,7 @@ IfConfigCleanup (
   // Clean the list which save the set config Args.\r
   //\r
   if (Private->VarArg != NULL) {\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
   }\r
 \r
   if (Private->IfName != NULL) {\r
@@ -1279,7 +1289,7 @@ IfConfigCleanup (
 \r
   @retval EFI_SUCCESS    ifconfig command processed successfully.\r
   @retval others         The ifconfig command process failed.\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
 **/\r
 SHELL_STATUS\r
 EFIAPI\r
@@ -1296,7 +1306,7 @@ ShellCommandRunIfconfig (
   ARG_LIST                  *ArgList;\r
   CHAR16                    *ProblemParam;\r
   CHAR16                    *Str;\r
   ARG_LIST                  *ArgList;\r
   CHAR16                    *ProblemParam;\r
   CHAR16                    *Str;\r
-  \r
+\r
   Status = EFI_INVALID_PARAMETER;\r
   Private = NULL;\r
   ShellStatus = SHELL_SUCCESS;\r
   Status = EFI_INVALID_PARAMETER;\r
   Private = NULL;\r
   ShellStatus = SHELL_SUCCESS;\r
@@ -1310,7 +1320,7 @@ ShellCommandRunIfconfig (
     } else {\r
       ASSERT(FALSE);\r
     }\r
     } else {\r
       ASSERT(FALSE);\r
     }\r
-    \r
+\r
     goto ON_EXIT;\r
   }\r
 \r
     goto ON_EXIT;\r
   }\r
 \r
@@ -1360,11 +1370,15 @@ ShellCommandRunIfconfig (
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");\r
     if (ValueStr != NULL) {\r
       Str = AllocateCopyPool (StrSize (ValueStr), ValueStr);\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
       Private->IfName = Str;\r
     }\r
   }\r
       Private->IfName = Str;\r
     }\r
   }\r
-  \r
+\r
   //\r
   // To get interface name for the clear option.\r
   //\r
   //\r
   // To get interface name for the clear option.\r
   //\r
@@ -1373,11 +1387,15 @@ ShellCommandRunIfconfig (
     ValueStr = ShellCommandLineGetValue (ParamPackage, L"-r");\r
     if (ValueStr != NULL) {\r
       Str = AllocateCopyPool (StrSize (ValueStr), ValueStr);\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
       Private->IfName = Str;\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
   //\r
   // To get interface name and corresponding Args for the set option.\r
   //\r
@@ -1388,12 +1406,16 @@ ShellCommandRunIfconfig (
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
       ShellStatus = SHELL_INVALID_PARAMETER;\r
       goto ON_EXIT;\r
     }\r
-    \r
+\r
     //\r
     // To split the configuration into multi-section.\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->OpCode = IfConfigOpSet;\r
     Private->IfName = ArgList->Arg;\r
@@ -1406,7 +1428,7 @@ ShellCommandRunIfconfig (
       goto ON_EXIT;\r
     }\r
   }\r
       goto ON_EXIT;\r
     }\r
   }\r
-  \r
+\r
   //\r
   // Main process of ifconfig.\r
   //\r
   //\r
   // Main process of ifconfig.\r
   //\r
@@ -1415,7 +1437,7 @@ ShellCommandRunIfconfig (
 ON_EXIT:\r
 \r
   ShellCommandLineFreeVarList (ParamPackage);\r
 ON_EXIT:\r
 \r
   ShellCommandLineFreeVarList (ParamPackage);\r
-  \r
+\r
   if (Private != NULL) {\r
     IfConfigCleanup (Private);\r
   }\r
   if (Private != NULL) {\r
     IfConfigCleanup (Private);\r
   }\r