Signed-off-by: Tian, Hot <hot.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15155 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			254 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			7.8 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 - 2011, 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<BR>
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #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.
 | |
|   
 | |
|   @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
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   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.
 | |
| 
 | |
|   
 | |
|   @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
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   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.
 | |
| 
 | |
|   @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
 | |
|   );
 | |
| 
 | |
| #endif
 | |
| 
 |