That sounds like a good enhancement to me. -Jaben
> -----Original Message----- > From: Wu, Jiaxin > Sent: Thursday, April 14, 2016 8:52 PM > To: Carsey, Jaben <jaben.car...@intel.com>; David Van Arnem > <dvanar...@cmlab.biz>; Bhupesh Sharma <bhupesh.sha...@nxp.com>; > Laszlo Ersek <ler...@redhat.com>; edk2-devel@lists.01.org > Cc: Ye, Ting <ting...@intel.com>; Fu, Siyuan <siyuan...@intel.com> > Subject: RE: [edk2] [Patch] ShellPkg: Update ping command options to sync > with Spec > Importance: High > > Jaben , > > Do you agree to support no source IP specified case? After update, Ping will > select the first both connected and configured interface automatically instead > of always the first NIC. > If no objection, patch will be sent out for review. > > Thanks. > Jiaxin > > > > -----Original Message----- > > From: David Van Arnem [mailto:dvanar...@cmlab.biz] > > Sent: Friday, April 15, 2016 1:32 AM > > To: Wu, Jiaxin <jiaxin...@intel.com>; Bhupesh Sharma > > <bhupesh.sha...@nxp.com>; Laszlo Ersek <ler...@redhat.com>; edk2- > > de...@lists.01.org > > Cc: Ye, Ting <ting...@intel.com>; Carsey, Jaben <jaben.car...@intel.com>; > > Fu, Siyuan <siyuan...@intel.com> > > Subject: Re: [edk2] [Patch] ShellPkg: Update ping command options to sync > > with Spec > > > > On 04/13/2016 09:13 PM, Wu, Jiaxin wrote: > > > Hi David and Laszlo, > > > > > > This patch is not focused on the discussion about the multiple NICs > > > existed > > case, just use to update the ping command option. So, please don't > > misunderstand. > > > > > > > Ah, ok. Sorry to clutter up this patch discussion then, I wanted to make > > sure > > the multiple NIC case wasn't lost in the discussion about "-s"/"-_s". > > Thanks! > > > > > For the discussion in > > <http://thread.gmane.org/gmane.comp.bios.edk2.devel/10046>, If there > > are multiple NICs existed in the platform and no source IP is specified (no > > '-s' > > option), the first NIC will be selected as default interface to ping the > > target. '- > > s SourceIp' can be used to specify any interface you want. That's the > > current > > implementation choice. > > > > > > I agree your and Bhupesh 's option to support no source IP specified case, > > that's meaningful to improve the command's friendliness(Windows and > Linus > > do this resolution). How about selecting the first both connected and > > configured interface automatically? If so, I can create another patch to > > support that solution. > > > > > > > That sounds great to me, as long as it's not too much trouble :-) > > Alternately, > a > > more useful error message in that case might suffice (e.g. "Multiple > > configured interfaces found, please specify one with '-s'"). But, since > > Windows and Linux both do the automatic resolution, I think consistency > > would be beneficial. > > > > Thanks again! > > > > David > > > > > Thanks. > > > Jiaxin > > > > > >> -----Original Message----- > > >> From: David Van Arnem [mailto:dvanar...@cmlab.biz] > > >> Sent: Thursday, April 14, 2016 4:02 AM > > >> To: Wu, Jiaxin <jiaxin...@intel.com>; edk2-devel@lists.01.org > > >> Cc: Ye, Ting <ting...@intel.com>; Carsey, Jaben > > >> <jaben.car...@intel.com>; Fu, Siyuan <siyuan...@intel.com> > > >> Subject: Re: [edk2] [Patch] ShellPkg: Update ping command options to > > >> sync with Spec > > >> > > >> 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/UefiShellNetwork1Com > > >> ma > > >>> ndsLib.uni > > >>> > > >> > > b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1Com > > >> ma > > >>> ndsLib.uni > > >>> index bc6acac..7d6f2da 100644 > > >>> --- > > >>> > > >> > > a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1Com > > >> ma > > >>> ndsLib.uni > > >>> +++ > > >> b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1C > > >>> +++ ommandsLib.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 > > > > > > > > > -- > > Thanks, > > David Van Arnem _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel