4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Common head file for TCP socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _SOCKET_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _SOCKET_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Tcp4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Tcp6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/NetLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiRuntimeServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DpcLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_SND_BUF 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_RCV_BUF 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_BUFF_LOW_WATER (2 * 1024)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_RCV_BUFF_SIZE (8 * 1024)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_SND_BUFF_SIZE (8 * 1024)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_BACKLOG 5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PROTO_RESERVED_LEN 20
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_NO_MORE_DATA 0x0001
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// When a socket is created it enters into SO_UNCONFIGURED,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// no actions can be taken on this socket, only after calling
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// SockConfigure. The state transition diagram of socket is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// as following:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// SO_UNCONFIGURED --- SO_CONFIGURED --- SO_CONNECTING
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// ^ | |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// | ---> SO_LISTENING |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// | |
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// |------------------SO_DISCONNECTING<-- SO_CONNECTED
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// A passive socket can only go into SO_LISTENING and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// SO_UNCONFIGURED state. SO_XXXING state is a middle state
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// when a socket is undergoing a protocol procedure such
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// as requesting a TCP connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Socket state
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_CLOSED 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_LISTENING 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_CONNECTING 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_CONNECTED 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_DISCONNECTING 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Socket configure state
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_UNCONFIGURED 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_CONFIGURED_ACTIVE 1
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_CONFIGURED_PASSIVE 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SO_NO_MAPPING 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The request issued from socket layer to protocol layer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_ATTACH 0 ///< Attach current socket to a new PCB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_DETACH 1 ///< Detach current socket from the PCB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_CONFIGURE 2 ///< Configure attached PCB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_FLUSH 3 ///< Flush attached PCB
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_SND 4 ///< Need protocol to send something
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_SNDPUSH 5 ///< Need protocol to send pushed data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_SNDURG 6 ///< Need protocol to send urgent data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_CONSUMED 7 ///< Application has retrieved data from socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_CONNECT 8 ///< Need to connect to a peer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_CLOSE 9 ///< Need to close the protocol process
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_ABORT 10 ///< Need to reset the protocol process
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_POLL 11 ///< Need to poll to the protocol layer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_ROUTE 12 ///< Need to add a route information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_MODE 13 ///< Need to get the mode data of the protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_GROUP 14 ///< Need to join a mcast group
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set socket SO_NO_MORE_DATA flag.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_NO_MORE_DATA(Sock) ((Sock)->Flag |= SO_NO_MORE_DATA)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is unconfigured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is unconfigued.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not unconfigued.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_UNCONFIGURED(Sock) ((Sock)->ConfigureState == SO_UNCONFIGURED)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is configued
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not configued
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_CONFIGURED(Sock) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((Sock)->ConfigureState == SO_CONFIGURED_ACTIVE) || \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ((Sock)->ConfigureState == SO_CONFIGURED_PASSIVE))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is configured to active mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is configued to active mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not configued to active mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_CONFIGURED_ACTIVE(Sock) ((Sock)->ConfigureState == SO_CONFIGURED_ACTIVE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is configured to passive mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is configued to passive mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not configued to passive mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_CONNECTED_PASSIVE(Sock) ((Sock)->ConfigureState == SO_CONFIGURED_PASSIVE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is mapped.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is not mapping.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is mapped.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_NO_MAPPING(Sock) ((Sock)->ConfigureState == SO_NO_MAPPING)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is closed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is closed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not closed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_CLOSED(Sock) ((Sock)->State == SO_CLOSED)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is listening.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is listening.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not listening.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_LISTENING(Sock) ((Sock)->State == SO_LISTENING)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is connecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is connecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not connecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_CONNECTING(Sock) ((Sock)->State == SO_CONNECTING)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket has connected.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket has connected.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket has not connected.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_CONNECTED(Sock) ((Sock)->State == SO_CONNECTED)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is disconnecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is disconnecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket is not disconnecting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_DISCONNECTING(Sock) ((Sock)->State == SO_DISCONNECTING)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Check whether the socket is no more data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval TRUE The socket is no more data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval FALSE The socket still has data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_IS_NO_MORE_DATA(Sock) (0 != ((Sock)->Flag & SO_NO_MORE_DATA))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the size of the receive buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Size The size to set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SET_RCV_BUFFSIZE(Sock, Size) ((Sock)->RcvBuffer.HighWater = (Size))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the size of the receive buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The receive buffer size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_RCV_BUFFSIZE(Sock) ((Sock)->RcvBuffer.HighWater)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the size of the receive data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The received data size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_RCV_DATASIZE(Sock) (((Sock)->RcvBuffer.DataQueue)->BufSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the size of the send buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Size The size to set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SET_SND_BUFFSIZE(Sock, Size) ((Sock)->SndBuffer.HighWater = (Size))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the size of the send buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The send buffer size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_SND_BUFFSIZE(Sock) ((Sock)->SndBuffer.HighWater)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the size of the send data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The send data size.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_SND_DATASIZE(Sock) (((Sock)->SndBuffer.DataQueue)->BufSize)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the backlog value of the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Value The value to set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SET_BACKLOG(Sock, Value) ((Sock)->BackLog = (Value))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the backlog value of the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The backlog value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GET_BACKLOG(Sock) ((Sock)->BackLog)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the socket with error state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Error The error state.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_ERROR(Sock, Error) ((Sock)->SockError = (Error))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_SIGNATURE SIGNATURE_32 ('S', 'O', 'C', 'K')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_FROM_THIS(a) CR ((a), SOCKET, NetProtocol, SOCK_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SOCK_FROM_TOKEN(Token) (((SOCK_TOKEN *) (Token))->Sock)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PROTO_TOKEN_FORM_SOCK(SockToken, Type) ((Type *) (((SOCK_TOKEN *) (SockToken))->Token))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TCP_SOCKET SOCKET;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Socket completion token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SOCK_COMPLETION_TOKEN {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT Event; ///< The event to be issued
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Status; ///< The status to be issued
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_COMPLETION_TOKEN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *RxData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *TxData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_IO_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The application token with data packet
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SOCK_IO_TOKEN {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_COMPLETION_TOKEN Token;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_IO_DATA Packet;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_IO_TOKEN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The socket type.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SockDgram, ///< This socket providing datagram service
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SockStream ///< This socket providing stream service
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The buffer structure of rcvd data and send data used by socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SOCK_BUFFER {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 HighWater; ///< The buffersize upper limit of sock_buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 LowWater; ///< The low warter mark of sock_buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NET_BUF_QUEUE *DataQueue; ///< The queue to buffer data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_BUFFER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The handler of protocol for request from socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Socket The socket issuing the request to protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Request The request issued by socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] RequestData The request related data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The socket request is completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval other The error status returned by the corresponding TCP
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync layer function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(*SOCK_PROTO_HANDLER) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Socket,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Request,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *RequestData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Callback funtion called after the TCP socket is created.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This Pointer to the socket just created.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context Context of the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS This protocol installed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval other Some error occured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(*SOCK_CREATE_CALLBACK) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The callback function called before the TCP socket is to be destroyed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This The TCP socket to be destroyed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context The context.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(*SOCK_DESTROY_CALLBACK) (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The initialize data for create a new socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SOCK_INIT_DATA {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_TYPE Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 State;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCKET *Parent; ///< The parent of this socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BackLog; ///< The connection limit for listening socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SndBufferSize; ///< The high warter mark of send buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RcvBufferSize; ///< The high warter mark of receive buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IpVersion;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Protocol; ///< The pointer to protocol function template
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< wanted to install on socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Callbacks after socket is created and before socket is to be destroyed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_CREATE_CALLBACK CreateCallback; ///< Callback after created
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_DESTROY_CALLBACK DestroyCallback; ///< Callback before destroied
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context; ///< The context of the callback
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Opaque protocol data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *ProtoData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 DataSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_PROTO_HANDLER ProtoHandler; ///< The handler of protocol for socket request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE DriverBinding; ///< The driver binding handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_INIT_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The union type of TCP and UDP protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union _NET_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_TCP4_PROTOCOL Tcp4Protocol; ///< Tcp4 protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_TCP6_PROTOCOL Tcp6Protocol; ///< Tcp6 protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} NET_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The socket structure representing a network service access point.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _TCP_SOCKET {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Socket description information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature; ///< Signature of the socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE SockHandle; ///< The virtual handle of the socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE DriverBinding; ///< Socket's driver binding protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ConfigureState;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_TYPE Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 State;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Flag;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LOCK Lock; ///< The lock of socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_BUFFER SndBuffer; ///< Send buffer of application's data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_BUFFER RcvBuffer; ///< Receive buffer of received data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS SockError; ///< The error returned by low layer protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsDestroyed;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Fields used to manage the connection request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 BackLog; ///< the limit of connection to this socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ConnCnt; ///< the current count of connections to it
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCKET *Parent; ///< listening parent that accept the connection
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY ConnectionList; ///< the connections maintained by this socket
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The queue to buffer application's asynchronous token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY ListenTokenList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY RcvTokenList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY SndTokenList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY ProcessingSndTokenList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_COMPLETION_TOKEN *ConnectionToken; ///< app's token to signal if connected
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_COMPLETION_TOKEN *CloseToken; ///< app's token to signal if closed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Interface for low level protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_PROTO_HANDLER ProtoHandler; ///< The request handler of protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ProtoReserved[PROTO_RESERVED_LEN]; ///< Data fields reserved for protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IpVersion;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NET_PROTOCOL NetProtocol; ///< TCP or UDP protocol socket used
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Callbacks after socket is created and before socket is to be destroyed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_CREATE_CALLBACK CreateCallback; ///< Callback after created
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_DESTROY_CALLBACK DestroyCallback; ///< Callback before destroied
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Context; ///< The context of the callback
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The token structure buffered in socket layer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _SOCK_TOKEN {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY TokenList; ///< The entry to add in the token list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCK_COMPLETION_TOKEN *Token; ///< The application's token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RemainDataLen; ///< Unprocessed data length
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SOCKET *Sock; ///< The poninter to the socket this token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< belongs to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} SOCK_TOKEN;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Reserved data to access the NET_BUF delivered by TCP driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _TCP_RSV_DATA {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 UrgLen;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} TCP_RSV_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Socket provided oprerations for low layer protocol implemented in SockImpl.c
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the state of the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] State The new socket state to be set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockSetState (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 State
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Clone a new socket including its associated protocol control block.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to be cloned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Pointer to the newly cloned socket. If NULL, an error condition occurred.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSOCKET *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockClone (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Called by the low layer protocol to indicate the socket a connection is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync established.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function just changes the socket's state to SO_CONNECTED
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and signals the token used for connection establishment.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket associated with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync established connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockConnEstablished (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Called by the low layer protocol to indicate that the connection is closed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function flushes the socket, sets the state to SO_CLOSED, and signals
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the close token.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket associated with the closed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockConnClosed (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Called by low layer protocol to indicate that some data is sent or processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function trims the sent data in the socket send buffer and signals the data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync token, if proper.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Count The length of the data processed or sent, in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockDataSent (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Called by the low layer protocol to copy some data in socket send
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer starting from the specific offset to a buffer provided by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the caller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Offset The start point of the data to be copied.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Len The length of the data to be copied.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Dest Pointer to the destination to copy the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The data size copied.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockGetDataToSend (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Offset,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Len,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT8 *Dest
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Called by the low layer protocol to deliver received data to socket layer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function appends the data to the socket receive buffer, set the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync urgent data length, then checks if any receive token can be signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] NetBuffer Pointer to the buffer that contains the received data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] UrgLen The length of the urgent data in the received data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockDataRcvd (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT NET_BUF *NetBuffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 UrgLen
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the length of the free space of the specific socket buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Which Flag to indicate which socket buffer to check:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync either send buffer or receive buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return The length of the free space, in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT32
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockGetFreeSpace (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Which
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Called by the low layer protocol to indicate that there will be no more data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from the communication peer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function sets the socket's state to SO_NO_MORE_DATA and signals all queued
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IO tokens with the error status EFI_CONNECTION_FIN.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockNoMoreData (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Socket provided operations for user interface implemented in SockInterface.c
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Create a socket and its associated protocol control block
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync with the intial data SockInitData and protocol specific
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync data ProtoData.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SockInitData Inital data to setting the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return Pointer to the newly created socket. If NULL, an error condition occured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSOCKET *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockCreateChild (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCK_INIT_DATA *SockInitData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Destory the socket Sock and its associated protocol control block.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock The socket to be destroyed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The socket Sock was destroyed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockDestroyChild (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Configure the specific socket Sock using configuration data ConfigData.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to be configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ConfigData Pointer to the configuration data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The socket configured successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket is already configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockConfigure (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *ConfigData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initiate a connection establishment process.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to initiate the initate the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token Pointer to the token used for the connection
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The connection initialized successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket is closed, or the socket is not configured to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be an active one, or the token is already in one of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync this socket's lists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The IP address configuration operation is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockConnect (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Issue a listen token to get an existed connected network instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or wait for a connection if there is none.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to accept connections.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token The token to accept a connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Either a connection is accepted or the Token is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffered for further acceptance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket is closed, or the socket is not configured to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be a passive one, or the token is already in one of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync this socket's lists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The IP address configuration operation is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCE Failed to buffer the Token due to memory limit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockAccept (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Issue a token with data to the socket to send out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to process the token with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token The token with data that needs to send out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The token processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket is closed, or the socket is not in a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync synchronized state , or the token is already in one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of this socket's lists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The IP address configuration operation is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCE Failed to buffer the token due to a memory limit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockSend (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Issue a token to get data from the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to get data from.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token The token to store the received data from the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The token processed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket is closed, or the socket is not in a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync synchronized state , or the token is already in one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of this socket's lists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The IP address configuration operation is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_CONNECTION_FIN The connection is closed and there is no more data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCE Failed to buffer the token due to a memory limit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockRcv (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Token
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reset the socket and its associated protocol control block.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket to be flushed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The socket flushed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockFlush (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Close or abort the socket associated connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Sock Pointer to the socket of the connection to close
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or abort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Token The token for close operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] OnAbort TRUE for aborting the connection, FALSE to close it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The close or abort operation initialized
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket, or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync socket is closed, or the socket is not in a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync synchronized state , or the token is already in one
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of this socket's lists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The IP address configuration operation is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockClose (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Token,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN OnAbort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the mode data of the low layer protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket to get mode data from.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Mode Pointer to the data to store the low layer mode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The mode data was obtained successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockGetMode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Mode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Configure the low level protocol to join a multicast group for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync this socket's connection.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket of the connection to join the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specific multicast group.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] GroupInfo Pointer to the multicast group information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The configuration completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockGroup (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *GroupInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Add or remove route information in IP route table associated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync with this socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Sock Pointer to the socket associated with the IP route
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync table to operate on.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] RouteInfo Pointer to the route information to be processed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The route table updated successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED Failed to get the lock to access the socket.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NO_MAPPING The IP address configuration operation is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync finished.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_STARTED The socket is not configured.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSockRoute (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN SOCKET *Sock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *RouteInfo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif