From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 7C00380386 for ; Tue, 21 Mar 2017 00:14:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1490080451; x=1521616451; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=iLUqXay37peXJaujnPhUYtID6GMaJH15eMGRUBuTJ+Q=; b=bHetNdZdkE9gQsJACqqZXcGdKWKlRpguyN2Ts1ubg+cprkSSUAAcqyBf igcmmdsBycRtMPbSh1F8v29qzFP+PA==; Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Mar 2017 00:14:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,198,1486454400"; d="scan'208";a="78840286" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga005.fm.intel.com with ESMTP; 21 Mar 2017 00:14:10 -0700 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 21 Mar 2017 00:14:10 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 21 Mar 2017 00:14:10 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.20]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.204]) with mapi id 14.03.0248.002; Tue, 21 Mar 2017 15:14:06 +0800 From: "Ye, Ting" To: "Wu, Jiaxin" , "edk2-devel@lists.01.org" CC: "Fu, Siyuan" , "Carsey, Jaben" Thread-Topic: [PATCH v2] ShellPkg/tftp: Add one option for tftp command to specify windowsize Thread-Index: AQHSnrz6hmOtApH2V0Gms73VL7yiL6Ge5+kA Date: Tue, 21 Mar 2017 07:14:06 +0000 Message-ID: References: <1489713743-16028-1-git-send-email-jiaxin.wu@intel.com> In-Reply-To: <1489713743-16028-1-git-send-email-jiaxin.wu@intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2] ShellPkg/tftp: Add one option for tftp command to specify windowsize X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Mar 2017 07:14:11 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ye Ting =20 -----Original Message----- From: Wu, Jiaxin=20 Sent: Friday, March 17, 2017 9:22 AM To: edk2-devel@lists.01.org Cc: Ye, Ting ; Fu, Siyuan ; Carsey,= Jaben ; Wu, Jiaxin Subject: [PATCH v2] ShellPkg/tftp: Add one option for tftp command to speci= fy windowsize v2: * Refine the constants definitions. Define -w option for tftp shell command to specify the TFTP windowsize opti= on. That will benefit the big file download for tftp server. Cc: Ye Ting Cc: Fu Siyuan Cc: Carsey Jaben Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Wu Jiaxin --- ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c | 67 ++++++++++++++++++= ---- .../UefiShellTftpCommandLib.uni | 6 +- 2 files changed, 60 insertions(+), 13 deletions(-) diff --git a/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c b/ShellPkg/Lib= rary/UefiShellTftpCommandLib/Tftp.c index 5c50797..9b47839 100755 --- a/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c +++ b/ShellPkg/Library/UefiShellTftpCommandLib/Tftp.c @@ -1,10 +1,10 @@ /** @file The implementation for the 'tftp' Shell command. =20 Copyright (c) 2015, ARM Ltd. All rights reserved.
- Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.=20 +
(C) Copyright 2015 Hewlett Packard Enterprise Development LP
=20 This program and the accompanying materials are licensed and made available under the terms and conditions of the BS= D License which accompanies this distribution. The full text of the license may b= e found at @@ -180,10 +180,11 @@ DownloadFile ( IN EFI_MTFTP4_PROTOCOL *Mtftp4, IN CONST CHAR16 *FilePath, IN CONST CHAR8 *AsciiFilePath, IN UINTN FileSize, IN UINT16 BlockSize, + IN UINT16 WindowSize, OUT VOID **Data ); =20 /** Update the progress of a file download @@ -224,10 +225,11 @@ STATIC CONS= T SHELL_PARAM_ITEM ParamList[] =3D { {L"-l", TypeValue}, {L"-r", TypeValue}, {L"-c", TypeValue}, {L"-t", TypeValue}, {L"-s", TypeValue}, + {L"-w", TypeValue}, {NULL , TypeMax} }; =20 /// /// The default block size (512) of tftp is defined in the RFC1350. @@ -236,11 +238,21 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] =3D { /// = /// The valid range of block size option is defined in the RFC2348. /// #define MTFTP_MIN_BLKSIZE 8 #define MTFTP_MAX_BLKSIZE 65464 - +/// +/// The default windowsize (1) of tftp. +/// +#define MTFTP_DEFAULT_WINDOWSIZE 1 +/// +/// The valid range of window size option.=20 +/// Note that: RFC 7440 does not mention max window size value, but for=20 +the /// stability reason, the value is limited to 64. +/// +#define MTFTP_MIN_WINDOWSIZE 1 +#define MTFTP_MAX_WINDOWSIZE 64 =20 /** Function for 'tftp' command. =20 @param[in] ImageHandle Handle to the Image (NULL if Internal). @@ -285,18 +297,20 @@ ShellCommandRunTftp ( EFI_MTFTP4_PROTOCOL *Mtftp4; UINTN FileSize; VOID *Data; SHELL_FILE_HANDLE FileHandle; UINT16 BlockSize; + UINT16 WindowSize; =20 ShellStatus =3D SHELL_INVALID_PARAMETER; ProblemParam =3D NULL; NicFound =3D FALSE; AsciiRemoteFilePath =3D NULL; Handles =3D NULL; FileSize =3D 0; BlockSize =3D MTFTP_DEFAULT_BLKSIZE; + WindowSize =3D MTFTP_DEFAULT_WINDOWSIZE; =20 // // Initialize the Shell library (we must be in non-auto-init...) // Status =3D ShellInitialize (); @@ -432,10 +446,24 @@ ShellCommandRunTftp ( ); goto Error; } } =20 + ValueStr =3D ShellCommandLineGetValue (CheckPackage, L"-w"); if=20 + (ValueStr !=3D NULL) { + if (!StringToUint16 (ValueStr, &WindowSize)) { + goto Error; + } + if (WindowSize < MTFTP_MIN_WINDOWSIZE || WindowSize > MTFTP_MAX_WINDOW= SIZE) { + ShellPrintHiiEx ( + -1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), + gShellTftpHiiHandle, L"tftp", ValueStr + ); + goto Error; + } + } + // // Locate all MTFTP4 Service Binding protocols // ShellStatus =3D SHELL_NOT_FOUND; Status =3D gBS->LocateHandleBuffer ( @@ -506,11 +534,11 @@ ShellCommandRunTftp ( gShellTftpHiiHandle, RemoteFilePath, NicName, Status ); goto NextHandle; } =20 - Status =3D DownloadFile (Mtftp4, RemoteFilePath, AsciiRemoteFilePath, = FileSize, BlockSize, &Data); + Status =3D DownloadFile (Mtftp4, RemoteFilePath, AsciiRemoteFilePath,= =20 + FileSize, BlockSize, WindowSize, &Data); if (EFI_ERROR (Status)) { ShellPrintHiiEx ( -1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_DOWNLOAD), gShellTftpHiiHandle, RemoteFilePath, NicName, Status ); @@ -890,20 +918,21 @@ DownloadFile ( IN EFI_MTFTP4_PROTOCOL *Mtftp4, IN CONST CHAR16 *FilePath, IN CONST CHAR8 *AsciiFilePath, IN UINTN FileSize, IN UINT16 BlockSize, + IN UINT16 WindowSize, OUT VOID **Data ) { EFI_STATUS Status; EFI_PHYSICAL_ADDRESS PagesAddress; VOID *Buffer; DOWNLOAD_CONTEXT *TftpContext; EFI_MTFTP4_TOKEN Mtftp4Token; - EFI_MTFTP4_OPTION ReqOpt; - UINT8 OptBuf[10]; + UINT8 BlksizeBuf[10]; + UINT8 WindowsizeBuf[10]; =20 // Downloaded file can be large. BS.AllocatePages() is more faster // than AllocatePool() and avoid fragmentation. // The downloaded file could be an EFI application. Marking the // allocated page as EfiBootServicesCode would allow to execute a @@ -93= 2,17 +961,29 @@ DownloadFile ( Mtftp4Token.Filename =3D (UINT8*)AsciiFilePath; Mtftp4Token.BufferSize =3D FileSize; Mtftp4Token.Buffer =3D Buffer; Mtftp4Token.CheckPacket =3D CheckPacket; Mtftp4Token.Context =3D (VOID*)TftpContext; + Mtftp4Token.OptionCount =3D 0; + Mtftp4Token.OptionList =3D AllocatePool (sizeof (EFI_MTFTP4_OPTION) *=20 + 2); if (Mtftp4Token.OptionList =3D=3D NULL) { + Status =3D EFI_OUT_OF_RESOURCES; + goto Error; + } + if (BlockSize !=3D MTFTP_DEFAULT_BLKSIZE) { - ReqOpt.OptionStr =3D (UINT8 *) "blksize"; - AsciiSPrint ((CHAR8 *)OptBuf, sizeof (OptBuf), "%d", BlockSize); - ReqOpt.ValueStr =3D OptBuf; + Mtftp4Token.OptionList[Mtftp4Token.OptionCount].OptionStr =3D (UINT8 *= ) "blksize"; + AsciiSPrint ((CHAR8 *) BlksizeBuf, sizeof (BlksizeBuf), "%d", BlockSiz= e); + Mtftp4Token.OptionList[Mtftp4Token.OptionCount].ValueStr =3D BlksizeB= uf; + Mtftp4Token.OptionCount ++; + } =20 - Mtftp4Token.OptionCount =3D 1; - Mtftp4Token.OptionList =3D &ReqOpt; + if (WindowSize !=3D MTFTP_DEFAULT_WINDOWSIZE) { + Mtftp4Token.OptionList[Mtftp4Token.OptionCount].OptionStr =3D (UINT8 *= ) "windowsize"; + AsciiSPrint ((CHAR8 *) WindowsizeBuf, sizeof (WindowsizeBuf), "%d", Wi= ndowSize); + Mtftp4Token.OptionList[Mtftp4Token.OptionCount].ValueStr =3D Windowsi= zeBuf; + Mtftp4Token.OptionCount ++; } =20 ShellPrintHiiEx ( -1, -1, NULL, STRING_TOKEN (STR_TFTP_DOWNLOADING), gShellTftpHiiHandle, FilePath @@ -954,14 +995,18 @@ DownloadFile ( gShellTftpHiiHandle ); =20 Error : =20 - if (TftpContext =3D=3D NULL) { + if (TftpContext !=3D NULL) { FreePool (TftpContext); } =20 + if (Mtftp4Token.OptionList !=3D NULL) { + FreePool (Mtftp4Token.OptionList); + } + if (EFI_ERROR (Status)) { gBS->FreePages (PagesAddress, EFI_SIZE_TO_PAGES (FileSize)); return Status; } =20 diff --git a/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandL= ib.uni b/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.u= ni index 4f4447d..ca6fa44 100644 --- a/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.uni +++ b/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.u +++ ni @@ -1,9 +1,9 @@ // /** // // (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP
-= // Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.
+// Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.=20 +
// This program and the accompanying materials // are licensed and made a= vailable under the terms and conditions of the BSD License // which accomp= anies this distribution. The full text of the license may be found at // h= ttp://opensource.org/licenses/bsd-license.php // @@ -48,11 +48,11 @@ ".SH NAME\r\n" "Download a file from TFTP server.\r\n" ".SH SYNOPSIS\r\n" " \r\n" "TFTP [-i interface] [-l ] [-r ] [-c ] [-t ]\r\n" -" [-s ] host remotefilepath [localfilepath]\r\n" +" [-s ] [-w ] host remotefilepath [localfilep= ath]\r\n" ".SH OPTIONS\r\n" " \r\n" " -i interface - Specifies an adapter name, i.e., eth0.\r\n" " -l port - Specifies the local port number. Default value is 0\= r\n" " and the port number is automatically assigned.\r\n" @@ -61,10 +61,12 @@ " wait for a response. The default value is 6.\r\n" " -t - The number of seconds to wait for a response after\r= \n" " sending a request packet. Default value is 4s.\r\n" " -s - Specifies the TFTP blksize option as defined in RFC = 2348.\r\n" " Valid range is between 8 and 65464, default value is= 512.\r\n" +" -w - Specifies the TFTP windowsize option as defined in R= FC 7440.\r\n" +" Valid range is between 1 and 64, default value is 1.= \r\n" " host - Specify TFTP Server IPv4 address.\r\n" " remotefilepath - TFTP server file path to download the file.\r\n" " localfilepath - Local destination file path.\r\n" ".SH DESCRIPTION\r\n" " \r\n" -- 1.9.5.msysgit.1