mirror of https://github.com/acidanthera/audk.git
1338 lines
39 KiB
C
1338 lines
39 KiB
C
/** @file
|
|
Definitions for the Socket layer driver.
|
|
|
|
Copyright (c) 2011, Intel Corporation
|
|
All rights reserved. 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
|
|
http://opensource.org/licenses/bsd-license
|
|
|
|
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 _SOCKET_H_
|
|
#define _SOCKET_H_
|
|
|
|
#include <Efi/EfiSocketLib.h>
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Constants
|
|
//------------------------------------------------------------------------------
|
|
|
|
#define DEBUG_SOCKET 0x20000000 ///< Display Socket related messages
|
|
#define DEBUG_BIND 0x10000000 ///< Display bind related messages
|
|
#define DEBUG_LISTEN 0x08000000 ///< Display listen related messages
|
|
#define DEBUG_CONNECTION 0x04000000 ///< Display connection list related messages
|
|
#define DEBUG_POLL 0x02000000 ///< Display poll messages
|
|
#define DEBUG_ACCEPT 0x01000000 ///< Display accept related messages
|
|
#define DEBUG_RX 0x00800000 ///< Display receive messages
|
|
#define DEBUG_TX 0x00400000 ///< Display transmit messages
|
|
#define DEBUG_CLOSE 0x00200000 ///< Display close messages
|
|
#define DEBUG_CONNECT 0x00100000 ///< Display connect messages
|
|
|
|
#define MAX_PENDING_CONNECTIONS 1 ///< Maximum connection FIFO depth
|
|
#define MAX_RX_DATA 65536 ///< Maximum receive data size
|
|
#define MAX_TX_DATA ( MAX_RX_DATA * 2 )
|
|
#define RX_PACKET_DATA 16384 ///< Maximum number of bytes in a RX packet
|
|
|
|
#define LAYER_SIGNATURE SIGNATURE_32('S','k','t','L') ///< DT_LAYER memory signature
|
|
#define SERVICE_SIGNATURE SIGNATURE_32('S','k','t','S') ///< DT_SERVICE memory signature
|
|
#define SOCKET_SIGNATURE SIGNATURE_32('S','c','k','t') ///< DT_SOCKET memory signature
|
|
#define PORT_SIGNATURE SIGNATURE_32('P','o','r','t') ///< DT_PORT memory signature
|
|
|
|
typedef enum
|
|
{
|
|
NETWORK_TYPE_UNKNOWN = 0,
|
|
NETWORK_TYPE_RAW,
|
|
NETWORK_TYPE_TCP4,
|
|
NETWORK_TYPE_TCP6,
|
|
NETWORK_TYPE_UDP4,
|
|
NETWORK_TYPE_UDP6
|
|
} NETWORK_TYPE;
|
|
|
|
typedef enum
|
|
{
|
|
SOCKET_STATE_NOT_CONFIGURED = 0, ///< socket call was successful
|
|
SOCKET_STATE_BOUND, ///< bind call was successful
|
|
SOCKET_STATE_LISTENING, ///< listen call was successful
|
|
SOCKET_STATE_NO_PORTS, ///< No ports available
|
|
SOCKET_STATE_IN_FIFO, ///< Socket on FIFO
|
|
SOCKET_STATE_CONNECTING, ///< Connecting to a remote system
|
|
SOCKET_STATE_CONNECTED, ///< Accept or connect call was successful
|
|
|
|
//
|
|
// Close state must be the last in the list
|
|
//
|
|
SOCKET_STATE_CLOSED ///< Close call was successful
|
|
} SOCKET_STATE;
|
|
|
|
typedef enum
|
|
{
|
|
PORT_STATE_ALLOCATED = 0, ///< Port allocated
|
|
PORT_STATE_OPEN, ///< Port opened
|
|
PORT_STATE_RX_ERROR, ///< Receive error detected
|
|
|
|
//
|
|
// Close state must be last in the list
|
|
//
|
|
PORT_STATE_CLOSE_STARTED, ///< Close started on port
|
|
PORT_STATE_CLOSE_TX_DONE, ///< Transmits shutdown
|
|
PORT_STATE_CLOSE_RX_DONE, ///< Receives shutdown
|
|
PORT_STATE_CLOSE_DONE ///< Port close operation complete
|
|
} PORT_STATE;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Data Types
|
|
//------------------------------------------------------------------------------
|
|
|
|
typedef struct _DT_PACKET DT_PACKET; ///< Forward declaration
|
|
typedef struct _DT_PORT DT_PORT; ///< Forward declaration
|
|
typedef struct _DT_SOCKET DT_SOCKET; ///< Forward declaration
|
|
|
|
typedef struct
|
|
{
|
|
EFI_TCP4_RECEIVE_DATA RxData; ///< Receive operation description
|
|
size_t ValidBytes; ///< Length of valid data in bytes
|
|
UINT8 * pBuffer; ///< Current data pointer
|
|
UINT8 Buffer [ RX_PACKET_DATA ]; ///< Data buffer
|
|
} DT_TCP4_RX_DATA;
|
|
|
|
typedef struct
|
|
{
|
|
EFI_TCP4_TRANSMIT_DATA TxData; ///< Transmit operation description
|
|
UINT8 Buffer [ 1 ]; ///< Data buffer
|
|
} DT_TCP4_TX_DATA;
|
|
|
|
typedef struct
|
|
{
|
|
EFI_UDP4_SESSION_DATA Session; ///< * Remote network address
|
|
EFI_UDP4_RECEIVE_DATA * pRxData; ///< * Receive operation description
|
|
} DT_UDP4_RX_DATA;
|
|
|
|
typedef struct
|
|
{
|
|
EFI_UDP4_SESSION_DATA Session; ///< Remote network address
|
|
EFI_UDP4_TRANSMIT_DATA TxData; ///< Transmit operation description
|
|
UINT8 Buffer [ 1 ]; ///< Data buffer
|
|
} DT_UDP4_TX_DATA;
|
|
|
|
typedef struct _DT_PACKET {
|
|
DT_PACKET * pNext; ///< Next packet in the receive list
|
|
size_t PacketSize; ///< Size of this data structure
|
|
union {
|
|
DT_TCP4_RX_DATA Tcp4Rx; ///< Receive operation description
|
|
DT_TCP4_TX_DATA Tcp4Tx; ///< Transmit operation description
|
|
DT_UDP4_RX_DATA Udp4Rx; ///< Receive operation description
|
|
DT_UDP4_TX_DATA Udp4Tx; ///< Transmit operation description
|
|
} Op;
|
|
} GCC_DT_PACKET;
|
|
|
|
/**
|
|
Service control structure
|
|
|
|
The driver uses this structure to manage the network devices.
|
|
**/
|
|
typedef struct _DT_SERVICE {
|
|
UINTN Signature; ///< Structure identification
|
|
|
|
//
|
|
// Links
|
|
//
|
|
DT_SERVICE * pNext; ///< Next service in the service list
|
|
|
|
//
|
|
// Service data
|
|
//
|
|
CONST DT_SOCKET_BINDING * pSocketBinding; ///< Name and shutdown routine
|
|
EFI_HANDLE Controller; ///< Controller for the service
|
|
VOID * pInterface; ///< Network layer service binding interface
|
|
|
|
//
|
|
// Network data
|
|
//
|
|
NETWORK_TYPE NetworkType; ///< Type of network service
|
|
DT_PORT * pPortList; ///< List of ports using this service
|
|
}GCC_DT_SERVICE;
|
|
|
|
/**
|
|
Start the close operation on a TCP4 port.
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
@param [in] bAbort Set TRUE to abort active transfers
|
|
@param [in] DebugFlags Flags for debug messages
|
|
|
|
**/
|
|
typedef
|
|
EFI_STATUS
|
|
PFN_PORT_CLOSE_START (
|
|
IN DT_PORT * pPort,
|
|
IN BOOLEAN bAbort,
|
|
IN UINTN DebugFlags
|
|
);
|
|
|
|
/**
|
|
TCP4 context structure
|
|
|
|
The driver uses this structure to manage the TCP4 connections.
|
|
**/
|
|
typedef struct {
|
|
//
|
|
// TCP4 context
|
|
//
|
|
EFI_HANDLE Handle; ///< TCP4 port handle
|
|
EFI_TCP4_PROTOCOL * pProtocol; ///< TCP4 protocol pointer
|
|
EFI_TCP4_CONFIG_DATA ConfigData; ///< TCP4 configuration data
|
|
EFI_TCP4_OPTION Option; ///< TCP4 port options
|
|
BOOLEAN bConfigured; ///< TRUE if configuration was successful
|
|
|
|
//
|
|
// Tokens
|
|
//
|
|
EFI_TCP4_LISTEN_TOKEN ListenToken; ///< Listen control
|
|
EFI_TCP4_CONNECTION_TOKEN ConnectToken; ///< Connection control
|
|
EFI_TCP4_CLOSE_TOKEN CloseToken; ///< Close control
|
|
|
|
//
|
|
// Receive data management
|
|
//
|
|
EFI_TCP4_IO_TOKEN RxToken; ///< Receive token
|
|
DT_PACKET * pReceivePending; ///< Receive operation in progress
|
|
|
|
//
|
|
// Transmit data management
|
|
//
|
|
EFI_TCP4_IO_TOKEN TxOobToken; ///< Urgent data token
|
|
DT_PACKET * pTxOobPacket; ///< Urgent data in progress
|
|
|
|
EFI_TCP4_IO_TOKEN TxToken; ///< Normal data token
|
|
DT_PACKET * pTxPacket; ///< Normal transmit in progress
|
|
} DT_TCP4_CONTEXT;
|
|
|
|
/**
|
|
UDP4 context structure
|
|
|
|
The driver uses this structure to manage the UDP4 connections.
|
|
**/
|
|
typedef struct {
|
|
//
|
|
// UDP4 context
|
|
//
|
|
EFI_HANDLE Handle; ///< UDP4 port handle
|
|
EFI_UDP4_PROTOCOL * pProtocol; ///< UDP4 protocol pointer
|
|
EFI_UDP4_CONFIG_DATA ConfigData; ///< UDP4 configuration data
|
|
BOOLEAN bConfigured; ///< TRUE if configuration was successful
|
|
|
|
//
|
|
// Receive data management
|
|
//
|
|
EFI_UDP4_COMPLETION_TOKEN RxToken;///< Receive token
|
|
DT_PACKET * pReceivePending; ///< Receive operation in progress
|
|
|
|
//
|
|
// Transmit data management
|
|
//
|
|
EFI_UDP4_COMPLETION_TOKEN TxToken;///< Transmit token
|
|
DT_PACKET * pTxPacket; ///< Transmit in progress
|
|
} DT_UDP4_CONTEXT;
|
|
|
|
|
|
/**
|
|
Port control structure
|
|
|
|
The driver uses this structure to manager the socket's connection
|
|
with the network driver.
|
|
**/
|
|
typedef struct _DT_PORT {
|
|
UINTN Signature; ///< Structure identification
|
|
|
|
//
|
|
// List links
|
|
//
|
|
DT_PORT * pLinkService; ///< Link in service port list
|
|
DT_PORT * pLinkSocket; ///< Link in socket port list
|
|
|
|
//
|
|
// Structures
|
|
//
|
|
DT_SERVICE * pService; ///< Service for this port
|
|
DT_SOCKET * pSocket; ///< Socket for this port
|
|
// PFN_CLOSE_PORT pfnClosePort; ///< Routine to immediately close the port
|
|
PFN_PORT_CLOSE_START * pfnCloseStart; ///< Routine to start closing the port
|
|
|
|
//
|
|
// Protocol specific management data
|
|
//
|
|
PORT_STATE State; ///< State of the port
|
|
UINTN DebugFlags; ///< Debug flags used to close the port
|
|
BOOLEAN bCloseNow; ///< TRUE = Close the port immediately
|
|
|
|
union {
|
|
DT_TCP4_CONTEXT Tcp4; ///< TCPv4 management data
|
|
DT_UDP4_CONTEXT Udp4; ///< UDPv4 management data
|
|
} Context;
|
|
}GCC_DT_PORT;
|
|
|
|
/**
|
|
Socket control structure
|
|
|
|
The driver uses this structure to manage the socket.
|
|
**/
|
|
typedef struct _DT_SOCKET {
|
|
UINTN Signature; ///< Structure identification
|
|
|
|
//
|
|
// Protocol binding
|
|
//
|
|
EFI_SOCKET_PROTOCOL SocketProtocol; ///< Socket protocol declaration
|
|
|
|
//
|
|
// Socket management
|
|
//
|
|
DT_SOCKET * pNext; ///< Next socket in the list of sockets
|
|
int errno; ///< Error information for this socket
|
|
EFI_STATUS Status; ///< Asyncronous error information for this socket
|
|
SOCKET_STATE State; ///< Socket state
|
|
|
|
//
|
|
// Socket data
|
|
//
|
|
int Domain; ///< Specifies family of protocols
|
|
int Type; ///< Specifies how to make network connection
|
|
int Protocol; ///< Specifies lower layer protocol to use
|
|
BOOLEAN bConfigured; ///< Set after the socket is configured
|
|
|
|
BOOLEAN bRxDisable; ///< Receive disabled via shutdown
|
|
size_t RxBytes; ///< Total Rx bytes
|
|
size_t RxOobBytes; ///< Urgent Rx bytes
|
|
EFI_STATUS RxError; ///< Error during receive
|
|
|
|
BOOLEAN bTxDisable; ///< Transmit disabled via shutdown
|
|
size_t TxBytes; ///< Normal Tx bytes
|
|
size_t TxOobBytes; ///< Urgent Tx bytes
|
|
EFI_STATUS TxError; ///< Error during transmit
|
|
|
|
//
|
|
// Pending connection data
|
|
//
|
|
BOOLEAN bConnected; ///< Set when connected, cleared by poll
|
|
EFI_STATUS ConnectStatus; ///< Connection status
|
|
UINTN MaxFifoDepth; ///< Maximum FIFO depth
|
|
UINTN FifoDepth; ///< Number of sockets in the FIFO
|
|
DT_SOCKET * pFifoHead; ///< Head of the FIFO
|
|
DT_SOCKET * pFifoTail; ///< Tail of the FIFO
|
|
DT_SOCKET * pNextConnection; ///< Link in the FIFO
|
|
|
|
//
|
|
// Network use
|
|
//
|
|
DT_PORT * pPortList; ///< List of ports managed by this socket
|
|
EFI_EVENT WaitAccept; ///< Wait for accept completion
|
|
|
|
//
|
|
// Receive data management
|
|
//
|
|
UINT32 MaxRxBuf; ///< Maximum size of the receive buffer
|
|
struct timeval RxTimeout; ///< Receive timeout
|
|
DT_PACKET * pRxFree; ///< Free packet list
|
|
DT_PACKET * pRxOobPacketListHead; ///< Urgent data list head
|
|
DT_PACKET * pRxOobPacketListTail; ///< Urgent data list tail
|
|
DT_PACKET * pRxPacketListHead; ///< Normal data list head
|
|
DT_PACKET * pRxPacketListTail; ///< Normal data list tail
|
|
|
|
//
|
|
// Transmit data management
|
|
//
|
|
UINT32 MaxTxBuf; ///< Maximum size of the transmit buffer
|
|
DT_PACKET * pTxOobPacketListHead; ///< Urgent data list head
|
|
DT_PACKET * pTxOobPacketListTail; ///< Urgent data list tail
|
|
DT_PACKET * pTxPacketListHead; ///< Normal data list head
|
|
DT_PACKET * pTxPacketListTail; ///< Normal data list tail
|
|
}GCC_DT_SOCKET;
|
|
|
|
#define SOCKET_FROM_PROTOCOL(a) CR(a, DT_SOCKET, SocketProtocol, SOCKET_SIGNATURE) ///< Locate DT_SOCKET from protocol
|
|
|
|
/**
|
|
Socket layer control structure
|
|
|
|
The driver uses this structure to manage the driver.
|
|
**/
|
|
typedef struct {
|
|
UINTN Signature; ///< Structure identification
|
|
|
|
//
|
|
// Service binding interface
|
|
//
|
|
EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;///< Driver's binding
|
|
|
|
//
|
|
// Image data
|
|
//
|
|
EFI_HANDLE ImageHandle; ///< Image handle
|
|
|
|
//
|
|
// Network services
|
|
//
|
|
DT_SERVICE * pTcp4List; ///< List of Tcp4 services
|
|
DT_SERVICE * pUdp4List; ///< List of Udp4 services
|
|
|
|
//
|
|
// Socket management
|
|
//
|
|
DT_SOCKET * pSocketList; ///< List of sockets
|
|
|
|
//
|
|
// TCP4 service
|
|
//
|
|
UINTN TcpCloseMax4; ///< Number of entries in the ring buffer
|
|
UINTN TcpCloseIn4; ///< Offset into TcpClose4 ring buffer - Close request
|
|
UINTN TcpCloseOut4; ///< Offset into TcpClose4 ring buffer - Close operation
|
|
EFI_TCP4_PROTOCOL ** ppTcpClose4; ///< Ring buffer to close TCP4 ports
|
|
} DT_LAYER;
|
|
|
|
#define LAYER_FROM_SERVICE(a) CR(a, DT_LAYER, ServiceBinding, LAYER_SIGNATURE) ///< Locate DT_LAYER from service binding
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Data
|
|
//------------------------------------------------------------------------------
|
|
|
|
extern DT_LAYER mEslLayer;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Socket Support Routines
|
|
//------------------------------------------------------------------------------
|
|
|
|
/**
|
|
Allocate and initialize a DT_SOCKET structure.
|
|
|
|
The ::SocketAllocate() function allocates a DT_SOCKET structure
|
|
and installs a protocol on ChildHandle. If pChildHandle is a
|
|
pointer to NULL, then a new handle is created and returned in
|
|
pChildHandle. If pChildHandle is not a pointer to NULL, then
|
|
the protocol installs on the existing pChildHandle.
|
|
|
|
@param [in, out] pChildHandle Pointer to the handle of the child to create.
|
|
If it is NULL, then a new handle is created.
|
|
If it is a pointer to an existing UEFI handle,
|
|
then the protocol is added to the existing UEFI
|
|
handle.
|
|
@param [in] DebugFlags Flags for debug messages
|
|
@param [in, out] ppSocket The buffer to receive the DT_SOCKET structure address.
|
|
|
|
@retval EFI_SUCCESS The protocol was added to ChildHandle.
|
|
@retval EFI_INVALID_PARAMETER ChildHandle is NULL.
|
|
@retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to create
|
|
the child
|
|
@retval other The child handle was not created
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EslSocketAllocate (
|
|
IN OUT EFI_HANDLE * pChildHandle,
|
|
IN UINTN DebugFlags,
|
|
IN OUT DT_SOCKET ** ppSocket
|
|
);
|
|
|
|
/**
|
|
Allocate a packet for a receive or transmit operation
|
|
|
|
@param [in] ppPacket Address to receive the DT_PACKET structure
|
|
@param [in] LengthInBytes Length of the packet structure
|
|
@param [in] DebugFlags Flags for debug messages
|
|
|
|
@retval EFI_SUCCESS - The packet was allocated successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslSocketPacketAllocate (
|
|
IN DT_PACKET ** ppPacket,
|
|
IN size_t LengthInBytes,
|
|
IN UINTN DebugFlags
|
|
);
|
|
|
|
/**
|
|
Free a packet used for receive or transmit operation
|
|
|
|
@param [in] pPacket Address of the DT_PACKET structure
|
|
@param [in] DebugFlags Flags for debug messages
|
|
|
|
@retval EFI_SUCCESS - The packet was allocated successfully
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslSocketPacketFree (
|
|
IN DT_PACKET * pPacket,
|
|
IN UINTN DebugFlags
|
|
);
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Tcp4 Routines
|
|
//------------------------------------------------------------------------------
|
|
|
|
/**
|
|
Accept a network connection.
|
|
|
|
The SocketAccept routine waits for a network connection to the socket.
|
|
It is able to return the remote network address to the caller if
|
|
requested.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [in] pSockAddr Address of a buffer to receive the remote
|
|
network address.
|
|
|
|
@param [in, out] pSockAddrLength Length in bytes of the address buffer.
|
|
On output specifies the length of the
|
|
remote network address.
|
|
|
|
@retval EFI_SUCCESS Remote address is available
|
|
@retval Others Remote address not available
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpAccept4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN struct sockaddr * pSockAddr,
|
|
IN OUT socklen_t * pSockAddrLength
|
|
);
|
|
|
|
/**
|
|
Bind a name to a socket.
|
|
|
|
The ::TcpBind4 routine connects a name to A TCP4 stack on the local machine.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [in] pSockAddr Address of a sockaddr structure that contains the
|
|
connection point on the local machine. An IPv4 address
|
|
of INADDR_ANY specifies that the connection is made to
|
|
all of the network stacks on the platform. Specifying a
|
|
specific IPv4 address restricts the connection to the
|
|
network stack supporting that address. Specifying zero
|
|
for the port causes the network layer to assign a port
|
|
number from the dynamic range. Specifying a specific
|
|
port number causes the network layer to use that port.
|
|
|
|
@param [in] SockAddrLen Specifies the length in bytes of the sockaddr structure.
|
|
|
|
@retval EFI_SUCCESS - Socket successfully created
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpBind4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN const struct sockaddr * pSockAddr,
|
|
IN socklen_t SockAddrLength
|
|
);
|
|
|
|
/**
|
|
Poll for completion of the connection attempt.
|
|
|
|
The ::TcpConnectPoll4 routine determines when the connection
|
|
attempt transitions from being in process to being complete.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@retval EFI_SUCCESS The connection was successfully established.
|
|
@retval EFI_NOT_READY The connection is in progress, call this routine again.
|
|
@retval Others The connection attempt failed.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpConnectPoll4 (
|
|
IN DT_SOCKET * pSocket
|
|
);
|
|
|
|
/**
|
|
Connect to a remote system via the network.
|
|
|
|
The ::TcpConnectStart4= routine starts the connection processing
|
|
for a TCP4 port.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [in] pSockAddr Network address of the remote system.
|
|
|
|
@param [in] SockAddrLength Length in bytes of the network address.
|
|
|
|
@retval EFI_SUCCESS The connection was successfully established.
|
|
@retval EFI_NOT_READY The connection is in progress, call this routine again.
|
|
@retval Others The connection attempt failed.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpConnectStart4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN const struct sockaddr * pSockAddr,
|
|
IN socklen_t SockAddrLength
|
|
);
|
|
|
|
/**
|
|
Initialize the TCP4 service.
|
|
|
|
This routine initializes the TCP4 service after its service binding
|
|
protocol was located on a controller.
|
|
|
|
@param [in] pService DT_SERVICE structure address
|
|
|
|
@retval EFI_SUCCESS The service was properly initialized
|
|
@retval other A failure occurred during the service initialization
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EslTcpInitialize4 (
|
|
IN DT_SERVICE * pService
|
|
);
|
|
|
|
/**
|
|
Get the local socket address
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [out] pAddress Network address to receive the local system address
|
|
|
|
@param [in,out] pAddressLength Length of the local network address structure
|
|
|
|
@retval EFI_SUCCESS - Address available
|
|
@retval Other - Failed to get the address
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpGetLocalAddress4 (
|
|
IN DT_SOCKET * pSocket,
|
|
OUT struct sockaddr * pAddress,
|
|
IN OUT socklen_t * pAddressLength
|
|
);
|
|
|
|
/**
|
|
Get the remote socket address
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [out] pAddress Network address to receive the remote system address
|
|
|
|
@param [in,out] pAddressLength Length of the remote network address structure
|
|
|
|
@retval EFI_SUCCESS - Address available
|
|
@retval Other - Failed to get the address
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpGetRemoteAddress4 (
|
|
IN DT_SOCKET * pSocket,
|
|
OUT struct sockaddr * pAddress,
|
|
IN OUT socklen_t * pAddressLength
|
|
);
|
|
|
|
/**
|
|
Establish the known port to listen for network connections.
|
|
|
|
The ::Tcp4Listen routine places the port into a state that enables connection
|
|
attempts. Connections are placed into FIFO order in a queue to be serviced
|
|
by the application. The application calls the ::Tcp4Accept routine to remove
|
|
the next connection from the queue and get the associated socket. The
|
|
<a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.html">POSIX</a>
|
|
documentation for the listen routine is available online for reference.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@retval EFI_SUCCESS - Socket successfully created
|
|
@retval Other - Failed to enable the socket for listen
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpListen4 (
|
|
IN DT_SOCKET * pSocket
|
|
);
|
|
|
|
/**
|
|
Process the connection attempt
|
|
|
|
A system has initiated a connection attempt with a socket in the
|
|
listen state. Attempt to complete the connection.
|
|
|
|
@param Event The listeen completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslTcpListenComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Allocate and initialize a DT_PORT structure.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
@param [in] pService Address of the DT_SERVICE structure.
|
|
@param [in] ChildHandle TCP4 child handle
|
|
@param [in] pIpAddress Buffer containing IP4 network address of the local host
|
|
@param [in] PortNumber Tcp4 port number
|
|
@param [in] DebugFlags Flags for debug messages
|
|
@param [out] ppPort Buffer to receive new DT_PORT structure address
|
|
|
|
@retval EFI_SUCCESS - Socket successfully created
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpPortAllocate4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN DT_SERVICE * pService,
|
|
IN EFI_HANDLE ChildHandle,
|
|
IN CONST UINT8 *pIpAddress,
|
|
IN UINT16 PortNumber,
|
|
IN UINTN DebugFlags,
|
|
OUT DT_PORT ** ppPort
|
|
);
|
|
|
|
/**
|
|
Close a TCP4 port.
|
|
|
|
This routine releases the resources allocated by
|
|
::TcpPortAllocate4().
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
|
|
@retval EFI_SUCCESS The port is closed
|
|
@retval other Port close error
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpPortClose4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Process the port close completion
|
|
|
|
@param Event The close completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslTcpPortCloseComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Port close state 3
|
|
|
|
Continue the close operation after the receive is complete.
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
|
|
@retval EFI_SUCCESS The port is closed
|
|
@retval EFI_NOT_READY The port is still closing
|
|
@retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
|
|
most likely the routine was called already.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpPortCloseRxDone4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Start the close operation on a TCP4 port.
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
@param [in] bAbort Set TRUE to abort active transfers
|
|
@param [in] DebugFlags Flags for debug messages
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpPortCloseStart4 (
|
|
IN DT_PORT * pPort,
|
|
IN BOOLEAN bAbort,
|
|
IN UINTN DebugFlags
|
|
);
|
|
|
|
/**
|
|
Port close state 2
|
|
|
|
Continue the close operation after the transmission is complete.
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
|
|
@retval EFI_NOT_READY The port is still closing
|
|
@retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
|
|
most likely the routine was called already.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpPortCloseTxDone4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Receive data from a network connection.
|
|
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@param [in] Flags Message control flags
|
|
|
|
@param [in] BufferLength Length of the the buffer
|
|
|
|
@param [in] pBuffer Address of a buffer to receive the data.
|
|
|
|
@param [in] pDataLength Number of received data bytes in the buffer.
|
|
|
|
@param [out] pAddress Network address to receive the remote system address
|
|
|
|
@param [in,out] pAddressLength Length of the remote network address structure
|
|
|
|
@retval EFI_SUCCESS - Socket data successfully received
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpReceive4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN INT32 Flags,
|
|
IN size_t BufferLength,
|
|
IN UINT8 * pBuffer,
|
|
OUT size_t * pDataLength,
|
|
OUT struct sockaddr * pAddress,
|
|
IN OUT socklen_t * pAddressLength
|
|
);
|
|
|
|
/**
|
|
Cancel the receive operations
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@retval EFI_SUCCESS - The cancel was successful
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpRxCancel4 (
|
|
IN DT_SOCKET * pSocket
|
|
);
|
|
|
|
/**
|
|
Process the receive completion
|
|
|
|
Buffer the data that was just received.
|
|
|
|
@param Event The receive completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslTcpRxComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Start a receive operation
|
|
|
|
@param [in] pPort Address of the DT_PORT structure.
|
|
|
|
**/
|
|
VOID
|
|
EslTcpRxStart4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Shutdown the TCP4 service.
|
|
|
|
This routine undoes the work performed by ::TcpInitialize4.
|
|
|
|
@param [in] pService DT_SERVICE structure address
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
EslTcpShutdown4 (
|
|
IN DT_SERVICE * pService
|
|
);
|
|
|
|
/**
|
|
Determine if the socket is configured.
|
|
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@retval EFI_SUCCESS - The port is connected
|
|
@retval EFI_NOT_STARTED - The port is not connected
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpSocketIsConfigured4 (
|
|
IN DT_SOCKET * pSocket
|
|
);
|
|
|
|
/**
|
|
Buffer data for transmission over a network connection.
|
|
|
|
This routine is called by the socket layer API to buffer
|
|
data for transmission. When necessary, this routine will
|
|
start the transmit engine that performs the data transmission
|
|
on the network connection.
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@param [in] Flags Message control flags
|
|
|
|
@param [in] BufferLength Length of the the buffer
|
|
|
|
@param [in] pBuffer Address of a buffer to receive the data.
|
|
|
|
@param [in] pDataLength Number of received data bytes in the buffer.
|
|
|
|
@retval EFI_SUCCESS - Socket data successfully buffered
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslTcpTxBuffer4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN int Flags,
|
|
IN size_t BufferLength,
|
|
IN CONST UINT8 * pBuffer,
|
|
OUT size_t * pDataLength
|
|
);
|
|
|
|
/**
|
|
Process the normal data transmit completion
|
|
|
|
@param Event The normal transmit completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslTcpTxComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Process the urgent data transmit completion
|
|
|
|
@param Event The urgent transmit completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslTcpTxOobComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Transmit data using a network connection.
|
|
|
|
|
|
@param [in] pPort Address of a DT_PORT structure
|
|
@param [in] pToken Address of either the OOB or normal transmit token
|
|
@param [in] ppQueueHead Transmit queue head address
|
|
@param [in] ppQueueTail Transmit queue tail address
|
|
@param [in] ppPacket Active transmit packet address
|
|
|
|
**/
|
|
VOID
|
|
EslTcpTxStart4 (
|
|
IN DT_PORT * pPort,
|
|
IN EFI_TCP4_IO_TOKEN * pToken,
|
|
IN DT_PACKET ** ppQueueHead,
|
|
IN DT_PACKET ** ppQueueTail,
|
|
IN DT_PACKET ** ppPacket
|
|
);
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Udp4 Routines
|
|
//------------------------------------------------------------------------------
|
|
|
|
/**
|
|
Bind a name to a socket.
|
|
|
|
The ::UdpBind4 routine connects a name to a UDP4 stack on the local machine.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [in] pSockAddr Address of a sockaddr structure that contains the
|
|
connection point on the local machine. An IPv4 address
|
|
of INADDR_ANY specifies that the connection is made to
|
|
all of the network stacks on the platform. Specifying a
|
|
specific IPv4 address restricts the connection to the
|
|
network stack supporting that address. Specifying zero
|
|
for the port causes the network layer to assign a port
|
|
number from the dynamic range. Specifying a specific
|
|
port number causes the network layer to use that port.
|
|
|
|
@param [in] SockAddrLen Specifies the length in bytes of the sockaddr structure.
|
|
|
|
@retval EFI_SUCCESS - Socket successfully created
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpBind4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN const struct sockaddr * pSockAddr,
|
|
IN socklen_t SockAddrLength
|
|
);
|
|
|
|
/**
|
|
Initialize the UDP4 service.
|
|
|
|
This routine initializes the UDP4 service after its service binding
|
|
protocol was located on a controller.
|
|
|
|
@param [in] pService DT_SERVICE structure address
|
|
|
|
@retval EFI_SUCCESS The service was properly initialized
|
|
@retval other A failure occurred during the service initialization
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EslUdpInitialize4 (
|
|
IN DT_SERVICE * pService
|
|
);
|
|
|
|
/**
|
|
Allocate and initialize a DT_PORT structure.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
@param [in] pService Address of the DT_SERVICE structure.
|
|
@param [in] ChildHandle Udp4 child handle
|
|
@param [in] pIpAddress Buffer containing IP4 network address of the local host
|
|
@param [in] PortNumber Udp4 port number
|
|
@param [in] DebugFlags Flags for debug messages
|
|
@param [out] ppPort Buffer to receive new DT_PORT structure address
|
|
|
|
@retval EFI_SUCCESS - Socket successfully created
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpPortAllocate4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN DT_SERVICE * pService,
|
|
IN EFI_HANDLE ChildHandle,
|
|
IN CONST UINT8 * pIpAddress,
|
|
IN UINT16 PortNumber,
|
|
IN UINTN DebugFlags,
|
|
OUT DT_PORT ** ppPort
|
|
);
|
|
|
|
/**
|
|
Close a UDP4 port.
|
|
|
|
This routine releases the resources allocated by
|
|
::UdpPortAllocate4().
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
|
|
@retval EFI_SUCCESS The port is closed
|
|
@retval other Port close error
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpPortClose4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Start the close operation on a UDP4 port, state 1.
|
|
|
|
Closing a port goes through the following states:
|
|
1. Port close starting - Mark the port as closing and wait for transmission to complete
|
|
2. Port TX close done - Transmissions complete, close the port and abort the receives
|
|
3. Port RX close done - Receive operations complete, close the port
|
|
4. Port closed - Release the port resources
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
@param [in] bCloseNow Set TRUE to abort active transfers
|
|
@param [in] DebugFlags Flags for debug messages
|
|
|
|
@retval EFI_SUCCESS The port is closed, not normally returned
|
|
@retval EFI_NOT_READY The port has started the closing process
|
|
@retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
|
|
most likely the routine was called already.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpPortCloseStart4 (
|
|
IN DT_PORT * pPort,
|
|
IN BOOLEAN bCloseNow,
|
|
IN UINTN DebugFlags
|
|
);
|
|
|
|
/**
|
|
Port close state 2
|
|
|
|
Continue the close operation after the transmission is complete.
|
|
|
|
@param [in] pPort Address of the port structure.
|
|
|
|
@retval EFI_SUCCESS The port is closed, not normally returned
|
|
@retval EFI_NOT_READY The port is still closing
|
|
@retval EFI_ALREADY_STARTED Error, the port is in the wrong state,
|
|
most likely the routine was called already.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpPortCloseTxDone4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Connect to a remote system via the network.
|
|
|
|
The ::UdpConnectStart4= routine sets the remote address for the connection.
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [in] pSockAddr Network address of the remote system.
|
|
|
|
@param [in] SockAddrLength Length in bytes of the network address.
|
|
|
|
@retval EFI_SUCCESS The connection was successfully established.
|
|
@retval EFI_NOT_READY The connection is in progress, call this routine again.
|
|
@retval Others The connection attempt failed.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpConnect4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN const struct sockaddr * pSockAddr,
|
|
IN socklen_t SockAddrLength
|
|
);
|
|
|
|
/**
|
|
Get the local socket address
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [out] pAddress Network address to receive the local system address
|
|
|
|
@param [in,out] pAddressLength Length of the local network address structure
|
|
|
|
@retval EFI_SUCCESS - Address available
|
|
@retval Other - Failed to get the address
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpGetLocalAddress4 (
|
|
IN DT_SOCKET * pSocket,
|
|
OUT struct sockaddr * pAddress,
|
|
IN OUT socklen_t * pAddressLength
|
|
);
|
|
|
|
/**
|
|
Get the remote socket address
|
|
|
|
@param [in] pSocket Address of the socket structure.
|
|
|
|
@param [out] pAddress Network address to receive the remote system address
|
|
|
|
@param [in,out] pAddressLength Length of the remote network address structure
|
|
|
|
@retval EFI_SUCCESS - Address available
|
|
@retval Other - Failed to get the address
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpGetRemoteAddress4 (
|
|
IN DT_SOCKET * pSocket,
|
|
OUT struct sockaddr * pAddress,
|
|
IN OUT socklen_t * pAddressLength
|
|
);
|
|
|
|
/**
|
|
Receive data from a network connection.
|
|
|
|
To minimize the number of buffer copies, the ::UdpRxComplete4
|
|
routine queues the UDP4 driver's buffer to a list of datagrams
|
|
waiting to be received. The socket driver holds on to the
|
|
buffers from the UDP4 driver until the application layer requests
|
|
the data or the socket is closed.
|
|
|
|
The application calls this routine in the socket layer to
|
|
receive datagrams from one or more remote systems. This routine
|
|
removes the next available datagram from the list of datagrams
|
|
and copies the data from the UDP4 driver's buffer into the
|
|
application's buffer. The UDP4 driver's buffer is then returned.
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@param [in] Flags Message control flags
|
|
|
|
@param [in] BufferLength Length of the the buffer
|
|
|
|
@param [in] pBuffer Address of a buffer to receive the data.
|
|
|
|
@param [in] pDataLength Number of received data bytes in the buffer.
|
|
|
|
@param [out] pAddress Network address to receive the remote system address
|
|
|
|
@param [in,out] pAddressLength Length of the remote network address structure
|
|
|
|
@retval EFI_SUCCESS - Socket data successfully received
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpReceive4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN INT32 Flags,
|
|
IN size_t BufferLength,
|
|
IN UINT8 * pBuffer,
|
|
OUT size_t * pDataLength,
|
|
OUT struct sockaddr * pAddress,
|
|
IN OUT socklen_t * pAddressLength
|
|
);
|
|
|
|
/**
|
|
Cancel the receive operations
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@retval EFI_SUCCESS - The cancel was successful
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpRxCancel4 (
|
|
IN DT_SOCKET * pSocket
|
|
);
|
|
|
|
/**
|
|
Process the receive completion
|
|
|
|
Keep the UDP4 driver's buffer and append it to the list of
|
|
datagrams for the application to receive. The UDP4 driver's
|
|
buffer will be returned by either ::UdpReceive4 or
|
|
::UdpPortCloseTxDone4.
|
|
|
|
@param Event The receive completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslUdpRxComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Start a receive operation
|
|
|
|
@param [in] pPort Address of the DT_PORT structure.
|
|
|
|
**/
|
|
VOID
|
|
EslUdpRxStart4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Determine if the socket is configured.
|
|
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@retval EFI_SUCCESS - The port is connected
|
|
@retval EFI_NOT_STARTED - The port is not connected
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpSocketIsConfigured4 (
|
|
IN DT_SOCKET * pSocket
|
|
);
|
|
|
|
/**
|
|
Process the transmit completion
|
|
|
|
@param Event The normal transmit completion event
|
|
|
|
@param pPort The DT_PORT structure address
|
|
|
|
**/
|
|
VOID
|
|
EslUdpTxComplete4 (
|
|
IN EFI_EVENT Event,
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
/**
|
|
Shutdown the UDP4 service.
|
|
|
|
This routine undoes the work performed by ::UdpInitialize4.
|
|
|
|
@param [in] pService DT_SERVICE structure address
|
|
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
EslUdpShutdown4 (
|
|
IN DT_SERVICE * pService
|
|
);
|
|
|
|
/**
|
|
Buffer data for transmission over a network connection.
|
|
|
|
This routine is called by the socket layer API to buffer
|
|
data for transmission. The data is copied into a local buffer
|
|
freeing the application buffer for reuse upon return. When
|
|
necessary, this routine will start the transmit engine that
|
|
performs the data transmission on the network connection. The
|
|
transmit engine transmits the data a packet at a time over the
|
|
network connection.
|
|
|
|
Transmission errors are returned during the next transmission or
|
|
during the close operation. Only buffering errors are returned
|
|
during the current transmission attempt.
|
|
|
|
@param [in] pSocket Address of a DT_SOCKET structure
|
|
|
|
@param [in] Flags Message control flags
|
|
|
|
@param [in] BufferLength Length of the the buffer
|
|
|
|
@param [in] pBuffer Address of a buffer to receive the data.
|
|
|
|
@param [in] pDataLength Number of received data bytes in the buffer.
|
|
|
|
@param [in] pAddress Network address of the remote system address
|
|
|
|
@param [in] AddressLength Length of the remote network address structure
|
|
|
|
@retval EFI_SUCCESS - Socket data successfully buffered
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EslUdpTxBuffer4 (
|
|
IN DT_SOCKET * pSocket,
|
|
IN int Flags,
|
|
IN size_t BufferLength,
|
|
IN CONST UINT8 * pBuffer,
|
|
OUT size_t * pDataLength,
|
|
IN const struct sockaddr * pAddress,
|
|
IN socklen_t AddressLength
|
|
);
|
|
|
|
/**
|
|
Transmit data using a network connection.
|
|
|
|
@param [in] pPort Address of a DT_PORT structure
|
|
|
|
**/
|
|
VOID
|
|
EslUdpTxStart4 (
|
|
IN DT_PORT * pPort
|
|
);
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
#endif // _SOCKET_H_
|