Home | History | Annotate | Download | only in Tcp4
      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