1 /*++ 2 3 Copyright (c) 2005 - 2006, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 Tcp4.h 15 16 Abstract: 17 18 UEFI TCPv4 Protocol Definition 19 20 --*/ 21 22 #ifndef _TCP4_H_ 23 #define _TCP4_H_ 24 25 #include EFI_PROTOCOL_DEFINITION (ServiceBinding) 26 #include EFI_PROTOCOL_DEFINITION (Ip4) 27 28 #define EFI_TCP4_SERVICE_BINDING_PROTOCOL_GUID \ 29 { \ 30 0x00720665, 0x67EB, 0x4a99, {0xBA, 0xF7, 0xD3, 0xC3, 0x3A, 0x1C, 0x7C, 0xC9} \ 31 } 32 33 extern EFI_GUID gEfiTcp4ServiceBindingProtocolGuid; 34 35 #define EFI_TCP4_PROTOCOL_GUID \ 36 { \ 37 0x65530BC7, 0xA359, 0x410f, {0xB0, 0x10, 0x5A, 0xAD, 0xC7, 0xEC, 0x2B, 0x62} \ 38 } 39 40 extern EFI_GUID gEfiTcp4ProtocolGuid; 41 42 EFI_FORWARD_DECLARATION (EFI_TCP4_PROTOCOL); 43 44 typedef struct { 45 EFI_HANDLE InstanceHandle; 46 EFI_IPv4_ADDRESS LocalAddress; 47 UINT16 LocalPort; 48 EFI_IPv4_ADDRESS RemoteAddress; 49 UINT16 RemotePort; 50 } EFI_TCP4_SERVICE_POINT; 51 52 typedef struct { 53 EFI_HANDLE DriverHandle; 54 UINT32 ServiceCount; 55 EFI_TCP4_SERVICE_POINT Services[1]; 56 } EFI_TCP4_VARIABLE_DATA; 57 58 typedef struct { 59 BOOLEAN UseDefaultAddress; 60 EFI_IPv4_ADDRESS StationAddress; 61 EFI_IPv4_ADDRESS SubnetMask; 62 UINT16 StationPort; 63 EFI_IPv4_ADDRESS RemoteAddress; 64 UINT16 RemotePort; 65 BOOLEAN ActiveFlag; 66 } EFI_TCP4_ACCESS_POINT; 67 68 typedef struct { 69 UINT32 ReceiveBufferSize; 70 UINT32 SendBufferSize; 71 UINT32 MaxSynBackLog; 72 UINT32 ConnectionTimeout; 73 UINT32 DataRetries; 74 UINT32 FinTimeout; 75 UINT32 TimeWaitTimeout; 76 UINT32 KeepAliveProbes; 77 UINT32 KeepAliveTime; 78 UINT32 KeepAliveInterval; 79 BOOLEAN EnableNagle; 80 BOOLEAN EnableTimeStamp; 81 BOOLEAN EnableWindowScaling; 82 BOOLEAN EnableSelectiveAck; 83 BOOLEAN EnablePathMtuDiscovery; 84 } EFI_TCP4_OPTION; 85 86 typedef struct { 87 UINT8 TypeOfService; 88 UINT8 TimeToLive; 89 EFI_TCP4_ACCESS_POINT AccessPoint; 90 EFI_TCP4_OPTION *ControlOption; 91 } EFI_TCP4_CONFIG_DATA; 92 93 typedef enum { 94 Tcp4StateClosed = 0, 95 Tcp4StateListen = 1, 96 Tcp4StateSynSent = 2, 97 Tcp4StateSynReceived= 3, 98 Tcp4StateEstablished= 4, 99 Tcp4StateFinWait1 = 5, 100 Tcp4StateFinWait2 = 6, 101 Tcp4StateClosing = 7, 102 Tcp4StateTimeWait = 8, 103 Tcp4StateCloseWait = 9, 104 Tcp4StateLastAck = 10 105 } EFI_TCP4_CONNECTION_STATE; 106 107 typedef struct { 108 EFI_EVENT Event; 109 EFI_STATUS Status; 110 } EFI_TCP4_COMPLETION_TOKEN; 111 112 typedef struct { 113 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 114 } EFI_TCP4_CONNECTION_TOKEN; 115 116 typedef struct { 117 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 118 EFI_HANDLE NewChildHandle; 119 } EFI_TCP4_LISTEN_TOKEN; 120 121 typedef struct { 122 UINT32 FragmentLength; 123 VOID *FragmentBuffer; 124 } EFI_TCP4_FRAGMENT_DATA; 125 126 typedef struct { 127 BOOLEAN UrgentFlag; 128 UINT32 DataLength; 129 UINT32 FragmentCount; 130 EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; 131 } EFI_TCP4_RECEIVE_DATA; 132 133 typedef struct { 134 BOOLEAN Push; 135 BOOLEAN Urgent; 136 UINT32 DataLength; 137 UINT32 FragmentCount; 138 EFI_TCP4_FRAGMENT_DATA FragmentTable[1]; 139 } EFI_TCP4_TRANSMIT_DATA; 140 141 typedef struct { 142 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 143 union { 144 EFI_TCP4_RECEIVE_DATA *RxData; 145 EFI_TCP4_TRANSMIT_DATA *TxData; 146 } Packet; 147 } EFI_TCP4_IO_TOKEN; 148 149 typedef struct { 150 EFI_TCP4_COMPLETION_TOKEN CompletionToken; 151 BOOLEAN AbortOnClose; 152 } EFI_TCP4_CLOSE_TOKEN; 153 154 typedef 155 EFI_STATUS 156 (EFIAPI *EFI_TCP4_GET_MODE_DATA) ( 157 IN EFI_TCP4_PROTOCOL *This, 158 OUT EFI_TCP4_CONNECTION_STATE *Tcp4State OPTIONAL, 159 OUT EFI_TCP4_CONFIG_DATA *Tcp4ConfigData OPTIONAL, 160 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 161 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 162 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 163 ); 164 165 typedef 166 EFI_STATUS 167 (EFIAPI *EFI_TCP4_CONFIGURE) ( 168 IN EFI_TCP4_PROTOCOL *This, 169 IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL 170 ); 171 172 typedef 173 EFI_STATUS 174 (EFIAPI *EFI_TCP4_ROUTES) ( 175 IN EFI_TCP4_PROTOCOL *This, 176 IN BOOLEAN DeleteRoute, 177 IN EFI_IPv4_ADDRESS *SubnetAddress, 178 IN EFI_IPv4_ADDRESS *SubnetMask, 179 IN EFI_IPv4_ADDRESS *GatewayAddress 180 ); 181 182 typedef 183 EFI_STATUS 184 (EFIAPI *EFI_TCP4_CONNECT) ( 185 IN EFI_TCP4_PROTOCOL *This, 186 IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken 187 ); 188 189 typedef 190 EFI_STATUS 191 (EFIAPI *EFI_TCP4_ACCEPT) ( 192 IN EFI_TCP4_PROTOCOL *This, 193 IN EFI_TCP4_LISTEN_TOKEN *ListenToken 194 ); 195 196 typedef 197 EFI_STATUS 198 (EFIAPI *EFI_TCP4_TRANSMIT) ( 199 IN EFI_TCP4_PROTOCOL *This, 200 IN EFI_TCP4_IO_TOKEN *Token 201 ); 202 203 typedef 204 EFI_STATUS 205 (EFIAPI *EFI_TCP4_RECEIVE) ( 206 IN EFI_TCP4_PROTOCOL *This, 207 IN EFI_TCP4_IO_TOKEN *Token 208 ); 209 210 typedef 211 EFI_STATUS 212 (EFIAPI *EFI_TCP4_CLOSE) ( 213 IN EFI_TCP4_PROTOCOL *This, 214 IN EFI_TCP4_CLOSE_TOKEN *CloseToken 215 ); 216 217 typedef 218 EFI_STATUS 219 (EFIAPI *EFI_TCP4_CANCEL) ( 220 IN EFI_TCP4_PROTOCOL *This, 221 IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL 222 ); 223 224 typedef 225 EFI_STATUS 226 (EFIAPI *EFI_TCP4_POLL) ( 227 IN EFI_TCP4_PROTOCOL *This 228 ); 229 230 struct _EFI_TCP4_PROTOCOL { 231 EFI_TCP4_GET_MODE_DATA GetModeData; 232 EFI_TCP4_CONFIGURE Configure; 233 EFI_TCP4_ROUTES Routes; 234 EFI_TCP4_CONNECT Connect; 235 EFI_TCP4_ACCEPT Accept; 236 EFI_TCP4_TRANSMIT Transmit; 237 EFI_TCP4_RECEIVE Receive; 238 EFI_TCP4_CLOSE Close; 239 EFI_TCP4_CANCEL Cancel; 240 EFI_TCP4_POLL Poll; 241 }; 242 243 #define EFI_CONNECTION_FIN EFIERR (104) 244 #define EFI_CONNECTION_RESET EFIERR (105) 245 #define EFI_CONNECTION_REFUSED EFIERR (106) 246 247 #endif 248