On 04/12/2016 09:16 PM, Jiaxin Wu wrote:
This patch is used to update ping command options to sync
with shell2.2 Spec.
Considering the backward compatible issue, the patch keeps
ā€˜-_sā€™ command option unchanged, only add the new option '-s'
and make the old option '-_s' function same as new one.

Cc: Ye Ting <ting...@intel.com>
Cc: Fu Siyuan <siyuan...@intel.com>
Cc: Jaben Carsey <jaben.car...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <jiaxin...@intel.com>
---
  .../Library/UefiShellNetwork1CommandsLib/Ping.c    | 12 ++++++++++--
  .../UefiShellNetwork1CommandsLib.uni               | 22 +++++++++-------------
  2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ping.c 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ping.c
index dbee764..13bcdde 100644
--- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ping.c
+++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ping.c
@@ -1,10 +1,10 @@
  /** @file
    The implementation for Ping shell command.

    (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
-  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, 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.
@@ -196,10 +196,14 @@ STATIC CONST SHELL_PARAM_ITEM    PingParamList[] = {
    {
      L"-n",
      TypeValue
    },
    {
+    L"-s",
+    TypeValue
+  },
+  {
      L"-_s",
      TypeValue
    },
    {
      L"-_ip6",
@@ -1510,11 +1514,15 @@ ShellCommandRunPing (
    ZeroMem (&DstAddress, sizeof (EFI_IPv6_ADDRESS));

    //
    // Parse the paramter of source ip address.
    //
-  ValueStr = ShellCommandLineGetValue (ParamPackage, L"-_s");
+  ValueStr = ShellCommandLineGetValue (ParamPackage, L"-s");
+  if (ValueStr == NULL) {
+    ValueStr = ShellCommandLineGetValue (ParamPackage, L"-_s");
+  }
+

What happens to ValueStr when neither "-s" nor "-_s" are specified from the command line, but there are multiple network interfaces active on the system? Will ValueStr be resolved to one of their IP's automatically?

In other words, if the system has two active network interfaces, will ping work with just the command:

ping <target ip>

(I would test here but I do not have a platform that will work, unfortunately).

I think this was (part of) Bhupesh's original issue (below from <http://thread.gmane.org/gmane.comp.bios.edk2.devel/10046>):

> We are facing an issue when we enable two SNP (Simple Network) drivers in our EDK2 setup over a ARMv8 based
> SoC - NXP LS2080A.
>
> <snip>
>
> Shell> ifconfig -l
>
> -----------------------------------------------------------------
>
> name         : eth0
> Media State  : Media present
> policy       : dhcp
> mac addr     : 68:05:CA:16:8C:5E
>
> <snip>
> -----------------------------------------------------------------
>
> name         : eth1
> Media State  : Media present
> policy       : static
> mac addr     : 6E:70:FE:EC:00:06
>
> <snip>
> -----------------------------------------------------------------
> C) Now, when I try to ping a server over a LAN cable, I get the following error message:
>
> Shell> ping 192.168.1.1
> InstallProtocolInterface: 41D94CD2-35B6-455A-8258-D4E51334AADD 8370DFD9E0
> InstallProtocolInterface: 8A219718-4EF5-4761-91C8-C0F04BDA9E56 8370DFF8A0
>
> Snp->undi.transmit()  8000h:Ah
> Config No mapping

Note that he did not specify an interface in the ping command, but the issue was resolved when he did (which started the "-_s"/"-s" discussion). In my experience, Linux's ping will choose an active interface when there are multiple active interfaces but the "-I" flag is unused. I don't know if automatic interface resolution is desired in the Shell's ping (perhaps Windows doesn't do this resolution), and if not that's fine, but I figure it's worth mentioning.

Thanks!

David

    if (ValueStr != NULL) {
      mSrcString = ValueStr;
      if (IpChoice == PING_IP_CHOICE_IP6) {
        Status = NetLibStrToIp6 (ValueStr, &SrcAddress);
      } else {
diff --git 
a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
 
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
index bc6acac..7d6f2da 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 - 2015, Intel Corporation. All rights reserved. <BR>
+// Copyright (c) 2010 - 2016, 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
  //
@@ -86,28 +86,27 @@
  #string STR_IFCONFIG_INFO_GATEWAY_HEAD        #language en-US    "\n%Hdefault 
gateway: %N"
  #string STR_IFCONFIG_INFO_DNS_ADDR_HEAD       #language en-US    "\n%HDNS server   
: %N\n"
  #string STR_IFCONFIG_INFO_IP_ADDR_BODY        #language en-US    
"%d.%d.%d.%d\n"

  #string STR_GET_HELP_PING         #language en-US ""
-".TH ping 0 "Pings the target host with an IPv4 or IPv6 stack."\r\n"
+".TH ping 0 "Ping the target host with an IPv4 stack."\r\n"
  ".SH NAME\r\n"
-"Pings the target host with an IPv4 or IPv6 stack.\r\n"
+"Ping the target host with an IPv4 stack.\r\n"
  ".SH SYNOPSIS\r\n"
  " \r\n"
-"PING [-_ip6] [-_s SourceIp] [-n count] [-l size] TargetIp\r\n"
+"PING [-n count] [-l size] [-s SourceIp] TargetIp\r\n"
  ".SH OPTIONS\r\n"
  " \r\n"
  "  -n       - Specifies the number of echo request datagrams to be sent.\r\n"
  "  -l       - Specifies the size of the data buffer in the echo request 
datagram.\r\n"
-"  -_ip6    - Specifies the IPv6 stack usage mode (Default is IPv4 stack).\r\n"
-"  -_s      - Specifies the source adapter as IPv4 or IPv6 address.\r\n"
-"  SourceIp - Specifies the IPv4 or IPv6 address of the source machine.\r\n"
-"  TargetIp - Specifies the IPv4 or IPv6 address of the target machine.\r\n"
+"  -s       - Specifies the source adapter as IPv4 address.\r\n"
+"  SourceIp - Specifies the IPv4 address of the source machine.\r\n"
+"  TargetIp - Specifies the IPv4 address of the target machine.\r\n"
  ".SH DESCRIPTION\r\n"
  " \r\n"
  "NOTES:\r\n"
-"  1. This command uses the ICMPv4 or ICMPv6 ECHO_REQUEST datagram to elicit 
an\r\n"
+"  1. This command uses the ICMPv4 ECHO_REQUEST datagram to elicit an\r\n"
  "     ECHO_REPLY from a host.\r\n"
  ".SH EXAMPLES\r\n"
  " \r\n"
  "EXAMPLES:\r\n"
  "  * To ping the target host with 64 bytes data:\r\n"
@@ -115,14 +114,11 @@
  " \r\n"
  "  * To ping the target host by sending 20 echo request datagrams:\r\n"
  "    fs0:\> ping -n 20 202.120.100.1\r\n"
  " \r\n"
  "  * To ping the target host by specifying the source adapter as IPv4 
address:\r\n"
-"    fs0:\> ping -_s 202.120.100.12 202.120.100.1\r\n"
-" \r\n"
-"  * To ping the target host by specifying the IPv6 stack usage mode:\r\n"
-"    fs0:\> ping -_ip6 2000:bbbb::8\r\n"
+"    fs0:\> ping -s 202.120.100.12 202.120.100.1\r\n"
  ".SH RETURNVALUES\r\n"
  " \r\n"
  "RETURN VALUES:\r\n"
  "  SHELL_SUCCESS             The action was completed as requested.\r\n"
  "  SHELL_INVALID_PARAMETER   One of the passed-in parameters was 
incorrectly\r\n"



--
Thanks,
David Van Arnem
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to