https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			248 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   This library is used to share code between UEFI network stack modules.
 | |
|   It provides the helper routines to access TCP service.
 | |
| 
 | |
| Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _TCP_IO_H_
 | |
| #define _TCP_IO_H_
 | |
| 
 | |
| 
 | |
| #include <Protocol/Tcp4.h>
 | |
| #include <Protocol/Tcp6.h>
 | |
| 
 | |
| #include <Library/NetLib.h>
 | |
| 
 | |
| #define TCP_VERSION_4 IP_VERSION_4
 | |
| #define TCP_VERSION_6 IP_VERSION_6
 | |
| 
 | |
| ///
 | |
| /// 10 seconds
 | |
| ///
 | |
| #define TCP_GET_MAPPING_TIMEOUT 100000000U
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_IPv4_ADDRESS          LocalIp;
 | |
|   EFI_IPv4_ADDRESS          SubnetMask;
 | |
|   EFI_IPv4_ADDRESS          Gateway;
 | |
| 
 | |
|   UINT16                    StationPort;
 | |
|   EFI_IPv4_ADDRESS          RemoteIp;
 | |
|   UINT16                    RemotePort;
 | |
|   BOOLEAN                   ActiveFlag;
 | |
| } TCP4_IO_CONFIG_DATA;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT16                    StationPort;
 | |
|   EFI_IPv6_ADDRESS          RemoteIp;
 | |
|   UINT16                    RemotePort;
 | |
|   BOOLEAN                   ActiveFlag;
 | |
| } TCP6_IO_CONFIG_DATA;
 | |
| 
 | |
| typedef union {
 | |
|   TCP4_IO_CONFIG_DATA       Tcp4IoConfigData;
 | |
|   TCP6_IO_CONFIG_DATA       Tcp6IoConfigData;
 | |
| } TCP_IO_CONFIG_DATA;
 | |
| 
 | |
| typedef union {
 | |
|   EFI_TCP4_PROTOCOL         *Tcp4;
 | |
|   EFI_TCP6_PROTOCOL         *Tcp6;
 | |
| } TCP_IO_PROTOCOL;
 | |
| 
 | |
| typedef union {
 | |
|   EFI_TCP4_CONNECTION_TOKEN Tcp4Token;
 | |
|   EFI_TCP6_CONNECTION_TOKEN Tcp6Token;
 | |
| } TCP_IO_CONNECTION_TOKEN;
 | |
| 
 | |
| typedef union {
 | |
|   EFI_TCP4_IO_TOKEN         Tcp4Token;
 | |
|   EFI_TCP6_IO_TOKEN         Tcp6Token;
 | |
| } TCP_IO_IO_TOKEN;
 | |
| 
 | |
| typedef union {
 | |
|   EFI_TCP4_CLOSE_TOKEN      Tcp4Token;
 | |
|   EFI_TCP6_CLOSE_TOKEN      Tcp6Token;
 | |
| } TCP_IO_CLOSE_TOKEN;
 | |
| 
 | |
| typedef union {
 | |
|   EFI_TCP4_LISTEN_TOKEN     Tcp4Token;
 | |
|   EFI_TCP6_LISTEN_TOKEN     Tcp6Token;
 | |
| } TCP_IO_LISTEN_TOKEN;
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8                     TcpVersion;
 | |
|   EFI_HANDLE                Image;
 | |
|   EFI_HANDLE                Controller;
 | |
|   EFI_HANDLE                Handle;
 | |
| 
 | |
|   TCP_IO_PROTOCOL           Tcp;
 | |
|   TCP_IO_PROTOCOL           NewTcp;
 | |
|   TCP_IO_CONNECTION_TOKEN   ConnToken;
 | |
|   TCP_IO_IO_TOKEN           TxToken;
 | |
|   TCP_IO_IO_TOKEN           RxToken;
 | |
|   TCP_IO_CLOSE_TOKEN        CloseToken;
 | |
|   TCP_IO_LISTEN_TOKEN       ListenToken;
 | |
| 
 | |
|   BOOLEAN                   IsConnDone;
 | |
|   BOOLEAN                   IsTxDone;
 | |
|   BOOLEAN                   IsRxDone;
 | |
|   BOOLEAN                   IsCloseDone;
 | |
|   BOOLEAN                   IsListenDone;
 | |
| } TCP_IO;
 | |
| 
 | |
| /**
 | |
|   Create a TCP socket with the specified configuration data.
 | |
| 
 | |
|   @param[in]  Image      The handle of the driver image.
 | |
|   @param[in]  Controller The handle of the controller.
 | |
|   @param[in]  TcpVersion The version of Tcp, TCP_VERSION_4 or TCP_VERSION_6.
 | |
|   @param[in]  ConfigData The Tcp configuration data.
 | |
|   @param[out] TcpIo      The TcpIo.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The TCP socket is created and configured.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_UNSUPPORTED        One or more of the control options are not
 | |
|                                  supported in the implementation.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | |
|   @retval Others                 Failed to create the TCP socket or configure it.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TcpIoCreateSocket (
 | |
|   IN EFI_HANDLE             Image,
 | |
|   IN EFI_HANDLE             Controller,
 | |
|   IN UINT8                  TcpVersion,
 | |
|   IN TCP_IO_CONFIG_DATA     *ConfigData,
 | |
|   OUT TCP_IO                *TcpIo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Destroy the socket.
 | |
| 
 | |
|   @param[in]  TcpIo The TcpIo which wraps the socket to be destroyed.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| TcpIoDestroySocket (
 | |
|   IN TCP_IO                 *TcpIo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Connect to the other endpoint of the TCP socket.
 | |
| 
 | |
|   @param[in, out]  TcpIo     The TcpIo wrapping the TCP socket.
 | |
|   @param[in]       Timeout   The time to wait for connection done. Set to NULL for infinite wait.
 | |
| 
 | |
|   @retval EFI_SUCCESS            Connect to the other endpoint of the TCP socket
 | |
|                                  successfully.
 | |
|   @retval EFI_TIMEOUT            Failed to connect to the other endpoint of the
 | |
|                                  TCP socket in the specified time period.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_UNSUPPORTED        One or more of the control options are not
 | |
|                                  supported in the implementation.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TcpIoConnect (
 | |
|   IN OUT TCP_IO             *TcpIo,
 | |
|   IN     EFI_EVENT          Timeout        OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Accept the incomding request from the other endpoint of the TCP socket.
 | |
| 
 | |
|   @param[in, out]  TcpIo     The TcpIo wrapping the TCP socket.
 | |
|   @param[in]       Timeout   The time to wait for connection done. Set to NULL for infinite wait.
 | |
| 
 | |
| 
 | |
|   @retval EFI_SUCCESS            Connect to the other endpoint of the TCP socket
 | |
|                                  successfully.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_UNSUPPORTED        One or more of the control options are not
 | |
|                                  supported in the implementation.
 | |
| 
 | |
|   @retval EFI_TIMEOUT            Failed to connect to the other endpoint of the
 | |
|                                  TCP socket in the specified time period.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TcpIoAccept (
 | |
|   IN OUT TCP_IO             *TcpIo,
 | |
|   IN     EFI_EVENT          Timeout        OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Reset the socket.
 | |
| 
 | |
|   @param[in, out]  TcpIo The TcpIo wrapping the TCP socket.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| TcpIoReset (
 | |
|   IN OUT TCP_IO             *TcpIo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Transmit the Packet to the other endpoint of the socket.
 | |
| 
 | |
|   @param[in]   TcpIo           The TcpIo wrapping the TCP socket.
 | |
|   @param[in]   Packet          The packet to transmit.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The packet is trasmitted.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_UNSUPPORTED        One or more of the control options are not
 | |
|                                  supported in the implementation.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | |
|   @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TcpIoTransmit (
 | |
|   IN TCP_IO                 *TcpIo,
 | |
|   IN NET_BUF                *Packet
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Receive data from the socket.
 | |
| 
 | |
|   @param[in, out]  TcpIo       The TcpIo which wraps the socket to be destroyed.
 | |
|   @param[in]       Packet      The buffer to hold the data copy from the socket rx buffer.
 | |
|   @param[in]       AsyncMode   Is this receive asyncronous or not.
 | |
|   @param[in]       Timeout     The time to wait for receiving the amount of data the Packet
 | |
|                                can hold. Set to NULL for infinite wait.
 | |
| 
 | |
|   @retval EFI_SUCCESS            The required amount of data is received from the socket.
 | |
|   @retval EFI_INVALID_PARAMETER  One or more parameters are invalid.
 | |
|   @retval EFI_DEVICE_ERROR       An unexpected network or system error occurred.
 | |
|   @retval EFI_OUT_OF_RESOURCES   Failed to allocate momery.
 | |
|   @retval EFI_TIMEOUT            Failed to receive the required amount of data in the
 | |
|                                  specified time period.
 | |
|   @retval Others                 Other errors as indicated.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| TcpIoReceive (
 | |
|   IN OUT TCP_IO             *TcpIo,
 | |
|   IN     NET_BUF            *Packet,
 | |
|   IN     BOOLEAN            AsyncMode,
 | |
|   IN     EFI_EVENT          Timeout       OPTIONAL
 | |
|   );
 | |
| 
 | |
| #endif
 | |
| 
 |