On 04/14/16 05:13, 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, okay. Although this patch is worthwhile without any particular reasoning too (of course), I associated it with that other discussion, and I thought your motivation was Bhupesh's use case. If your "only" goal was to improve the shell's conformance to the spec, that makes the patch 100% justified as well, naturally. And it just happens to fix Bhupesh's use case on the side. (I still think that it would be nice to hear back from Bhupesh.) > 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's very kind of you, thank you -- I personally didn't mean to submit a new feature request :) I'm neutral on the question whether such an automatism should be added to the ping command, in the UEFI shell. Thank you! Laszlo > 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