X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FNetwork%2FMtftp4Dxe%2FMtftp4Impl.h;h=33393d42472ccca9b9f994626d1bd646d4655a5f;hp=c12b1dd0076fb8e88206078df3130f2dfc378e18;hb=c0fd7f734e2d33e22215899b40a47b843129541d;hpb=83cbd279b64f3081af5c06d50fa26e15a99fc066 diff --git a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h index c12b1dd007..33393d4247 100644 --- a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h +++ b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h @@ -1,46 +1,37 @@ /** @file -Copyright (c) 2006 - 2007, Intel Corporation -All rights reserved. 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 + Mtftp4 Implementation. -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - Mtftp4Impl.h - -Abstract: - - Mtftp4 Implementation, it supports the following RFCs: - RFC1350 - THE TFTP PROTOCOL (REVISION 2) - RFC2090 - TFTP Multicast Option - RFC2347 - TFTP Option Extension - RFC2348 - TFTP Blocksize Option - RFC2349 - TFTP Timeout Interval and Transfer Size Options + Mtftp4 Implementation, it supports the following RFCs: + RFC1350 - THE TFTP PROTOCOL (REVISION 2) + RFC2090 - TFTP Multicast Option + RFC2347 - TFTP Option Extension + RFC2348 - TFTP Blocksize Option + RFC2349 - TFTP Timeout Interval and Transfer Size Options + RFC7440 - TFTP Windowsize Option +Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent **/ + #ifndef __EFI_MTFTP4_IMPL_H__ #define __EFI_MTFTP4_IMPL_H__ -#include +#include #include #include #include -#include +#include +#include #include -#include -#include #include -#include -#include +#include + +extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate; typedef struct _MTFTP4_SERVICE MTFTP4_SERVICE; typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL; @@ -49,31 +40,36 @@ typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL; #include "Mtftp4Option.h" #include "Mtftp4Support.h" -enum { - MTFTP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('T', 'F', 'T', 'P'), - MTFTP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('t', 'f', 't', 'p'), - MTFTP4_DEFAULT_SERVER_PORT = 69, - MTFTP4_DEFAULT_TIMEOUT = 3, - MTFTP4_DEFAULT_RETRY = 5, - MTFTP4_DEFAULT_BLKSIZE = 512, - MTFTP4_TIME_TO_GETMAP = 5, +/// +/// Some constant value of Mtftp service. +/// +#define MTFTP4_SERVICE_SIGNATURE SIGNATURE_32 ('T', 'F', 'T', 'P') +#define MTFTP4_PROTOCOL_SIGNATURE SIGNATURE_32 ('t', 'f', 't', 'p') - MTFTP4_STATE_UNCONFIGED = 0, - MTFTP4_STATE_CONFIGED, - MTFTP4_STATE_DESTORY -}; +#define MTFTP4_DEFAULT_SERVER_PORT 69 +#define MTFTP4_DEFAULT_TIMEOUT 3 +#define MTFTP4_DEFAULT_RETRY 5 +#define MTFTP4_DEFAULT_BLKSIZE 512 +#define MTFTP4_DEFAULT_WINDOWSIZE 1 +#define MTFTP4_TIME_TO_GETMAP 5 + +#define MTFTP4_STATE_UNCONFIGED 0 +#define MTFTP4_STATE_CONFIGED 1 +#define MTFTP4_STATE_DESTROY 2 +/// +/// Mtftp service block +/// struct _MTFTP4_SERVICE { UINT32 Signature; EFI_SERVICE_BINDING_PROTOCOL ServiceBinding; - BOOLEAN InDestory; - UINT16 ChildrenNum; - NET_LIST_ENTRY Children; + LIST_ENTRY Children; - EFI_EVENT Timer; // Ticking timer for all the MTFTP clients + EFI_EVENT Timer; ///< Ticking timer for all the MTFTP clients to handle the packet timeout case. + EFI_EVENT TimerNotifyLevel; ///< Ticking timer for all the MTFTP clients to calculate the packet live time. EFI_EVENT TimerToGetMap; EFI_HANDLE Controller; @@ -83,9 +79,10 @@ struct _MTFTP4_SERVICE { // This UDP child is used to keep the connection between the UDP // and MTFTP, so MTFTP will be notified when UDP is uninstalled. // - UDP_IO_PORT *ConnectUdp; + UDP_IO *ConnectUdp; }; + typedef struct { EFI_MTFTP4_PACKET **Packet; UINT32 *PacketLen; @@ -94,11 +91,11 @@ typedef struct { struct _MTFTP4_PROTOCOL { UINT32 Signature; - NET_LIST_ENTRY Link; + LIST_ENTRY Link; EFI_MTFTP4_PROTOCOL Mtftp4; INTN State; - BOOLEAN Indestory; + BOOLEAN InDestroy; MTFTP4_SERVICE *Service; EFI_HANDLE Handle; @@ -118,7 +115,19 @@ struct _MTFTP4_PROTOCOL { // UINT16 BlkSize; UINT16 LastBlock; - NET_LIST_ENTRY Blocks; + LIST_ENTRY Blocks; + + UINT16 WindowSize; + + // + // Record the total received and saved block number. + // + UINT64 TotalBlock; + + // + // Record the acked block number. + // + UINT64 AckedBlock; // // The server's communication end point: IP and two ports. one for @@ -128,13 +137,14 @@ struct _MTFTP4_PROTOCOL { UINT16 ListeningPort; UINT16 ConnectedPort; IP4_ADDR Gateway; - UDP_IO_PORT *UnicastPort; + UDP_IO *UnicastPort; // // Timeout and retransmit status // NET_BUF *LastPacket; UINT32 PacketToLive; + BOOLEAN HasTimeout; UINT32 CurRetry; UINT32 MaxRetry; UINT32 Timeout; @@ -145,27 +155,66 @@ struct _MTFTP4_PROTOCOL { IP4_ADDR McastIp; UINT16 McastPort; BOOLEAN Master; - UDP_IO_PORT *McastUdpPort; - - MTFTP4_GETINFO_STATE GetInfoState; + UDP_IO *McastUdpPort; }; +typedef struct { + EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding; + UINTN NumberOfChildren; + EFI_HANDLE *ChildHandleBuffer; +} MTFTP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT; + +/** + Clean up the MTFTP session to get ready for new operation. + + @param Instance The MTFTP session to clean up + @param Result The result to return to the caller who initiated + the operation. +**/ VOID Mtftp4CleanOperation ( - IN MTFTP4_PROTOCOL *Instance, - IN EFI_STATUS Result + IN OUT MTFTP4_PROTOCOL *Instance, + IN EFI_STATUS Result ); +/** + Start the MTFTP session for upload. + + It will first init some states, then send the WRQ request packet, + and start receiving the packet. + + @param Instance The MTFTP session + @param Operation Redundant parameter, which is always + EFI_MTFTP4_OPCODE_WRQ here. + + @retval EFI_SUCCESS The upload process has been started. + @retval Others Failed to start the upload. + +**/ EFI_STATUS Mtftp4WrqStart ( - IN MTFTP4_PROTOCOL *Instance, - IN UINT16 Operation + IN MTFTP4_PROTOCOL *Instance, + IN UINT16 Operation ); +/** + Start the MTFTP session to download. + + It will first initialize some of the internal states then build and send a RRQ + reqeuest packet, at last, it will start receive for the downloading. + + @param Instance The Mtftp session + @param Operation The MTFTP opcode, it may be a EFI_MTFTP4_OPCODE_RRQ + or EFI_MTFTP4_OPCODE_DIR. + + @retval EFI_SUCCESS The mtftp download session is started. + @retval Others Failed to start downloading. + +**/ EFI_STATUS Mtftp4RrqStart ( - IN MTFTP4_PROTOCOL *Instance, - IN UINT16 Operation + IN MTFTP4_PROTOCOL *Instance, + IN UINT16 Operation ); #define MTFTP4_SERVICE_FROM_THIS(a) \ @@ -174,5 +223,4 @@ Mtftp4RrqStart ( #define MTFTP4_PROTOCOL_FROM_THIS(a) \ CR (a, MTFTP4_PROTOCOL, Mtftp4, MTFTP4_PROTOCOL_SIGNATURE) -extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate; #endif