if we set a static IP using command
'ifconfig -s eth0 static 192.168.0.121 255.255.255.0 0.0.0.0'
The system says 'Failed to set address.' but using
'ifconfig -l', the static IP can be assigned successfully.
so we need to check the gateway validity before setting manual
address to keep the ifconfig -s command more consistent.

Signed-off-by: Zhang Lubo <lubo.zh...@intel.com>
Cc: Santhapur Naveen <nave...@amiindia.co.in>
Cc: Ye Ting <ting...@intel.com>
Cc: Fu Siyuan <siyuan...@intel.com>
Cc: Wu Jiaxin <jiaxin...@intel.com>
---
 .../Library/UefiShellNetwork1CommandsLib/Ifconfig.c   | 19 ++++++++++++++++++-
 .../UefiShellNetwork1CommandsLib.uni                  |  3 ++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
index 5e243d5..4db07b2 100644
--- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
+++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
@@ -1,10 +1,10 @@
 /** @file
   The implementation for Shell command ifconfig based on IP4Config2 protocol.
 
   (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
-  Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
   which accompanies this distribution.  The full text of the license may be 
found at
   http://opensource.org/licenses/bsd-license.php.
@@ -835,10 +835,12 @@ IfConfigSetInterfaceInfo (
 
   EFI_IP4_CONFIG2_POLICY           Policy;
   EFI_IP4_CONFIG2_MANUAL_ADDRESS   ManualAddress;
   UINTN                            DataSize;
   EFI_IPv4_ADDRESS                 Gateway;
+  IP4_ADDR                         SubnetMask;
+  IP4_ADDR                         TempGateway;
   EFI_IPv4_ADDRESS                 *Dns;
   ARG_LIST                         *Tmp;
   UINTN                            Index;
 
   CONST CHAR16* TempString;
@@ -1017,10 +1019,25 @@ IfConfigSetInterfaceInfo (
         ShellStatus = SHELL_INVALID_PARAMETER;
         goto ON_EXIT;
       }
 
       //
+      // Need to check the gateway validity before set Manual Address.
+      // In case we can set manual address but fail to configure Gateway.
+      //
+      CopyMem (&SubnetMask, &ManualAddress.SubnetMask, sizeof (IP4_ADDR));
+      CopyMem (&TempGateway, &Gateway, sizeof (IP4_ADDR));
+      SubnetMask  = NTOHL (SubnetMask);
+      TempGateway = NTOHL (TempGateway);
+      if ((SubnetMask != 0) &&
+          !NetIp4IsUnicast (TempGateway, SubnetMask)) {
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN 
(STR_IFCONFIG_INVALID_GATEWAY), gShellNetwork1HiiHandle, VarArg->Arg);
+        ShellStatus = SHELL_INVALID_PARAMETER;
+        goto ON_EXIT;
+      }
+
+      //
       // Set manual config policy.
       //
       Policy = Ip4Config2PolicyStatic;
       Status = IfCb->IfCfg->SetData (
                               IfCb->IfCfg,
diff --git 
a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
index 4566cd1..d9bbb20 100644
--- 
a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
+++ 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
@@ -1,9 +1,9 @@
 // /**
 //
 // (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
-// Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved. <BR>
+// Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved. <BR>
 // This program and the accompanying materials
 // are licensed and made available under the terms and conditions of the BSD 
License
 // which accompanies this distribution. The full text of the license may be 
found at
 // http://opensource.org/licenses/bsd-license.php
 //
@@ -64,10 +64,11 @@
 #string STR_IFCONFIG_LACK_OPTION              #language en-US    "Flags lack. 
Please type 'ifConfig -?' for help info.\n"
 #string STR_IFCONFIG_LACK_INTERFACE           #language en-US    "Lack 
interface name.\n"
 #string STR_IFCONFIG_LACK_COMMAND             #language en-US    "Lack 
interface config option.\n"
 #string STR_IFCONFIG_INVALID_INTERFACE        #language en-US    "Invalid 
interface name.\n"
 #string STR_IFCONFIG_INVALID_IPADDRESS        #language en-US    "Invalid ipv4 
address: '%H%s%N'\n"
+#string STR_IFCONFIG_INVALID_GATEWAY          #language en-US    "Invalid 
gateway address: '%H%s%N'\n"
 #string STR_IFCONFIG_DUPLICATE_COMMAND        #language en-US    "Duplicate 
commands. Bad command %H%s%N is skipped.\n"
 #string STR_IFCONFIG_CONFLICT_COMMAND         #language en-US    "Conflict 
commands. Bad command %H%s%N is skipped.\n"
 #string STR_IFCONFIG_UNKNOWN_COMMAND          #language en-US    "Unknown 
commands. Bad command %H%s%N is skipped.\n"
 #string STR_IFCONFIG_SET_ADDR_FAILED          #language en-US    "Failed to 
set address.\n"
 #string STR_IFCONFIG_ROUTES_SIZE              #language en-US           "\n%H  
Routes (%d entries):\n"
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to