1 /** @file 2 This library is used to share code between UEFI network stack modules. 3 It provides the helper routines to access TCP service. 4 5 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR> 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at<BR> 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef _TCP_IO_H_ 17 #define _TCP_IO_H_ 18 19 20 #include <Protocol/Tcp4.h> 21 #include <Protocol/Tcp6.h> 22 23 #include <Library/NetLib.h> 24 25 #define TCP_VERSION_4 IP_VERSION_4 26 #define TCP_VERSION_6 IP_VERSION_6 27 28 /// 29 /// 10 seconds 30 /// 31 #define TCP_GET_MAPPING_TIMEOUT 100000000U 32 33 34 typedef struct { 35 EFI_IPv4_ADDRESS LocalIp; 36 EFI_IPv4_ADDRESS SubnetMask; 37 EFI_IPv4_ADDRESS Gateway; 38 39 UINT16 StationPort; 40 EFI_IPv4_ADDRESS RemoteIp; 41 UINT16 RemotePort; 42 BOOLEAN ActiveFlag; 43 } TCP4_IO_CONFIG_DATA; 44 45 typedef struct { 46 UINT16 StationPort; 47 EFI_IPv6_ADDRESS RemoteIp; 48 UINT16 RemotePort; 49 BOOLEAN ActiveFlag; 50 } TCP6_IO_CONFIG_DATA; 51 52 typedef union { 53 TCP4_IO_CONFIG_DATA Tcp4IoConfigData; 54 TCP6_IO_CONFIG_DATA Tcp6IoConfigData; 55 } TCP_IO_CONFIG_DATA; 56 57 typedef union { 58 EFI_TCP4_PROTOCOL *Tcp4; 59 EFI_TCP6_PROTOCOL *Tcp6; 60 } TCP_IO_PROTOCOL; 61 62 typedef union { 63 EFI_TCP4_CONNECTION_TOKEN Tcp4Token; 64 EFI_TCP6_CONNECTION_TOKEN Tcp6Token; 65 } TCP_IO_CONNECTION_TOKEN; 66 67 typedef union { 68 EFI_TCP4_IO_TOKEN Tcp4Token; 69 EFI_TCP6_IO_TOKEN Tcp6Token; 70 } TCP_IO_IO_TOKEN; 71 72 typedef union { 73 EFI_TCP4_CLOSE_TOKEN Tcp4Token; 74 EFI_TCP6_CLOSE_TOKEN Tcp6Token; 75 } TCP_IO_CLOSE_TOKEN; 76 77 typedef union { 78 EFI_TCP4_LISTEN_TOKEN Tcp4Token; 79 EFI_TCP6_LISTEN_TOKEN Tcp6Token; 80 } TCP_IO_LISTEN_TOKEN; 81 82 83 typedef struct { 84 UINT8 TcpVersion; 85 EFI_HANDLE Image; 86 EFI_HANDLE Controller; 87 EFI_HANDLE Handle; 88 89 TCP_IO_PROTOCOL Tcp; 90 TCP_IO_PROTOCOL NewTcp; 91 TCP_IO_CONNECTION_TOKEN ConnToken; 92 TCP_IO_IO_TOKEN TxToken; 93 TCP_IO_IO_TOKEN RxToken; 94 TCP_IO_CLOSE_TOKEN CloseToken; 95 TCP_IO_LISTEN_TOKEN ListenToken; 96 97 BOOLEAN IsConnDone; 98 BOOLEAN IsTxDone; 99 BOOLEAN IsRxDone; 100 BOOLEAN IsCloseDone; 101 BOOLEAN IsListenDone; 102 } TCP_IO; 103 104 /** 105 Create a TCP socket with the specified configuration data. 106 107 @param[in] Image The handle of the driver image. 108 @param[in] Controller The handle of the controller. 109 @param[in] TcpVersion The version of Tcp, TCP_VERSION_4 or TCP_VERSION_6. 110 @param[in] ConfigData The Tcp configuration data. 111 @param[out] TcpIo The TcpIo. 112 113 @retval EFI_SUCCESS The TCP socket is created and configured. 114 @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 115 @retval EFI_UNSUPPORTED One or more of the control options are not 116 supported in the implementation. 117 @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. 118 @retval Others Failed to create the TCP socket or configure it. 119 120 **/ 121 EFI_STATUS 122 EFIAPI 123 TcpIoCreateSocket ( 124 IN EFI_HANDLE Image, 125 IN EFI_HANDLE Controller, 126 IN UINT8 TcpVersion, 127 IN TCP_IO_CONFIG_DATA *ConfigData, 128 OUT TCP_IO *TcpIo 129 ); 130 131 /** 132 Destroy the socket. 133 134 @param[in] TcpIo The TcpIo which wraps the socket to be destroyed. 135 136 **/ 137 VOID 138 EFIAPI 139 TcpIoDestroySocket ( 140 IN TCP_IO *TcpIo 141 ); 142 143 /** 144 Connect to the other endpoint of the TCP socket. 145 146 @param[in, out] TcpIo The TcpIo wrapping the TCP socket. 147 @param[in] Timeout The time to wait for connection done. 148 149 @retval EFI_SUCCESS Connect to the other endpoint of the TCP socket 150 successfully. 151 @retval EFI_TIMEOUT Failed to connect to the other endpoint of the 152 TCP socket in the specified time period. 153 @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 154 @retval EFI_UNSUPPORTED One or more of the control options are not 155 supported in the implementation. 156 @retval Others Other errors as indicated. 157 158 **/ 159 EFI_STATUS 160 EFIAPI 161 TcpIoConnect ( 162 IN OUT TCP_IO *TcpIo, 163 IN EFI_EVENT Timeout 164 ); 165 166 /** 167 Accept the incomding request from the other endpoint of the TCP socket. 168 169 @param[in, out] TcpIo The TcpIo wrapping the TCP socket. 170 @param[in] Timeout The time to wait for connection done. 171 172 173 @retval EFI_SUCCESS Connect to the other endpoint of the TCP socket 174 successfully. 175 @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 176 @retval EFI_UNSUPPORTED One or more of the control options are not 177 supported in the implementation. 178 179 @retval EFI_TIMEOUT Failed to connect to the other endpoint of the 180 TCP socket in the specified time period. 181 @retval Others Other errors as indicated. 182 183 **/ 184 EFI_STATUS 185 EFIAPI 186 TcpIoAccept ( 187 IN OUT TCP_IO *TcpIo, 188 IN EFI_EVENT Timeout 189 ); 190 191 /** 192 Reset the socket. 193 194 @param[in, out] TcpIo The TcpIo wrapping the TCP socket. 195 196 **/ 197 VOID 198 EFIAPI 199 TcpIoReset ( 200 IN OUT TCP_IO *TcpIo 201 ); 202 203 /** 204 Transmit the Packet to the other endpoint of the socket. 205 206 @param[in] TcpIo The TcpIo wrapping the TCP socket. 207 @param[in] Packet The packet to transmit. 208 209 @retval EFI_SUCCESS The packet is trasmitted. 210 @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 211 @retval EFI_UNSUPPORTED One or more of the control options are not 212 supported in the implementation. 213 @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. 214 @retval EFI_DEVICE_ERROR An unexpected network or system error occurred. 215 @retval Others Other errors as indicated. 216 217 **/ 218 EFI_STATUS 219 EFIAPI 220 TcpIoTransmit ( 221 IN TCP_IO *TcpIo, 222 IN NET_BUF *Packet 223 ); 224 225 /** 226 Receive data from the socket. 227 228 @param[in, out] TcpIo The TcpIo which wraps the socket to be destroyed. 229 @param[in] Packet The buffer to hold the data copy from the socket rx buffer. 230 @param[in] AsyncMode Is this receive asyncronous or not. 231 @param[in] Timeout The time to wait for receiving the amount of data the Packet 232 can hold. 233 234 @retval EFI_SUCCESS The required amount of data is received from the socket. 235 @retval EFI_INVALID_PARAMETER One or more parameters are invalid. 236 @retval EFI_DEVICE_ERROR An unexpected network or system error occurred. 237 @retval EFI_OUT_OF_RESOURCES Failed to allocate momery. 238 @retval EFI_TIMEOUT Failed to receive the required amount of data in the 239 specified time period. 240 @retval Others Other errors as indicated. 241 242 **/ 243 EFI_STATUS 244 EFIAPI 245 TcpIoReceive ( 246 IN OUT TCP_IO *TcpIo, 247 IN NET_BUF *Packet, 248 IN BOOLEAN AsyncMode, 249 IN EFI_EVENT Timeout 250 ); 251 252 #endif 253 254