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