1. Update the UdpIo to a combined UdpIo to support both v4 and v6 stack.
2. Update Dhcp4 and Mtftp4 driver to adopt the combined UdpIo. 3. Clean up coding style problems in combined IpIoLib/NetLib. Update Tcp4 and Udp4 to adopt the changes. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9382 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -81,41 +81,36 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
extern EFI_IP4_CONFIG_DATA mIp4IoDefaultIpConfigData;
|
||||
extern EFI_IP6_CONFIG_DATA mIp6IoDefaultIpConfigData;
|
||||
|
||||
typedef enum {
|
||||
IP_VERSION_4 = 4,
|
||||
IP_VERSION_6 = 6
|
||||
} IP_VERSION;
|
||||
#define IP_VERSION_4 4
|
||||
#define IP_VERSION_6 6
|
||||
|
||||
///
|
||||
/// This error will be delivered to the
|
||||
/// listening transportation layer protocol
|
||||
/// that consumes IpIO.
|
||||
///
|
||||
typedef enum {
|
||||
ICMP_ERR_UNREACH_NET = 0,
|
||||
ICMP_ERR_UNREACH_HOST,
|
||||
ICMP_ERR_UNREACH_PROTOCOL,
|
||||
ICMP_ERR_UNREACH_PORT,
|
||||
ICMP_ERR_MSGSIZE,
|
||||
ICMP_ERR_UNREACH_SRCFAIL,
|
||||
ICMP_ERR_TIMXCEED_INTRANS,
|
||||
ICMP_ERR_TIMXCEED_REASS,
|
||||
ICMP_ERR_QUENCH,
|
||||
ICMP_ERR_PARAMPROB
|
||||
} ICMP_ERROR;
|
||||
|
||||
typedef enum {
|
||||
ICMP6_ERR_UNREACH_NET = 0,
|
||||
ICMP6_ERR_UNREACH_HOST,
|
||||
ICMP6_ERR_UNREACH_PROTOCOL,
|
||||
ICMP6_ERR_UNREACH_PORT,
|
||||
ICMP6_ERR_PACKAGE_TOOBIG,
|
||||
ICMP6_ERR_TIMXCEED_HOPLIMIT,
|
||||
ICMP6_ERR_TIMXCEED_REASS,
|
||||
ICMP6_ERR_PARAMPROB_HEADER,
|
||||
ICMP6_ERR_PARAMPROB_NEXHEADER,
|
||||
ICMP6_ERR_PARAMPROB_IPV6OPTION
|
||||
} ICMP6_ERROR;
|
||||
#define ICMP_ERR_UNREACH_NET 0
|
||||
#define ICMP_ERR_UNREACH_HOST 1
|
||||
#define ICMP_ERR_UNREACH_PROTOCOL 2
|
||||
#define ICMP_ERR_UNREACH_PORT 3
|
||||
#define ICMP_ERR_MSGSIZE 4
|
||||
#define ICMP_ERR_UNREACH_SRCFAIL 5
|
||||
#define ICMP_ERR_TIMXCEED_INTRANS 6
|
||||
#define ICMP_ERR_TIMXCEED_REASS 7
|
||||
#define ICMP_ERR_QUENCH 8
|
||||
#define ICMP_ERR_PARAMPROB 9
|
||||
|
||||
#define ICMP6_ERR_UNREACH_NET 0
|
||||
#define ICMP6_ERR_UNREACH_HOST 1
|
||||
#define ICMP6_ERR_UNREACH_PROTOCOL 2
|
||||
#define ICMP6_ERR_UNREACH_PORT 3
|
||||
#define ICMP6_ERR_PACKAGE_TOOBIG 4
|
||||
#define ICMP6_ERR_TIMXCEED_HOPLIMIT 5
|
||||
#define ICMP6_ERR_TIMXCEED_REASS 6
|
||||
#define ICMP6_ERR_PARAMPROB_HEADER 7
|
||||
#define ICMP6_ERR_PARAMPROB_NEXHEADER 8
|
||||
#define ICMP6_ERR_PARAMPROB_IPV6OPTION 9
|
||||
|
||||
///
|
||||
/// The helper struct for IpIoGetIcmpErrStatus(). It is for internal use only.
|
||||
@@ -150,17 +145,24 @@ typedef union {
|
||||
EFI_IP6_CONFIG_DATA Ip6CfgData;
|
||||
} IP_IO_IP_CONFIG_DATA;
|
||||
|
||||
typedef union {
|
||||
EFI_IP4_HEADER *Ip4Hdr;
|
||||
EFI_IP6_HEADER *Ip6Hdr;
|
||||
} IP_IO_IP_HEADER;
|
||||
|
||||
typedef union {
|
||||
IP4_ADDR SubnetMask;
|
||||
UINT8 PrefixLength;
|
||||
} IP_IO_IP_MASK;
|
||||
|
||||
///
|
||||
/// The IP session for an IP receive packet.
|
||||
///
|
||||
typedef struct _EFI_NET_SESSION_DATA {
|
||||
EFI_IP_ADDRESS Source; ///< Source IP of the received packet
|
||||
EFI_IP_ADDRESS Dest; ///< Destination IP of the received packet
|
||||
union {
|
||||
EFI_IP4_HEADER *Ip4Hdr; ///< IP4 header of the received packet
|
||||
EFI_IP6_HEADER *Ip6Hdr; ///< IP6 header of the received packet
|
||||
} IpHdr;
|
||||
IP_VERSION IpVersion; ///< The IP version of the received packet
|
||||
IP_IO_IP_HEADER IpHdr; ///< IP header of the received packet
|
||||
UINT8 IpVersion; ///< The IP version of the received packet
|
||||
} EFI_NET_SESSION_DATA;
|
||||
|
||||
/**
|
||||
@@ -178,7 +180,7 @@ typedef
|
||||
VOID
|
||||
(*PKT_RCVD_NOTIFY) (
|
||||
IN EFI_STATUS Status,
|
||||
IN ICMP_ERROR IcmpErr,
|
||||
IN UINT8 IcmpErr,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Pkt,
|
||||
IN VOID *Context
|
||||
@@ -249,10 +251,7 @@ typedef struct _IP_IO {
|
||||
VOID *SndContext; ///< See IP_IO_OPEN_DATA::SndContext
|
||||
PKT_RCVD_NOTIFY PktRcvdNotify; ///< See IP_IO_OPEN_DATA::PktRcvdNotify
|
||||
PKT_SENT_NOTIFY PktSentNotify; ///< See IP_IO_OPEN_DATA::PktSentNotify
|
||||
//
|
||||
// Ip Version
|
||||
//
|
||||
IP_VERSION IpVersion;
|
||||
UINT8 IpVersion;
|
||||
} IP_IO;
|
||||
|
||||
///
|
||||
@@ -289,16 +288,13 @@ typedef struct _IP_IO_SEND_ENTRY {
|
||||
///
|
||||
typedef struct _IP_IO_IP_INFO {
|
||||
EFI_IP_ADDRESS Addr;
|
||||
union {
|
||||
IP4_ADDR SubnetMask;
|
||||
UINT8 PrefixLength;
|
||||
} PreMask;
|
||||
IP_IO_IP_MASK PreMask;
|
||||
LIST_ENTRY Entry;
|
||||
EFI_HANDLE ChildHandle;
|
||||
VOID *Ip;
|
||||
IP_IO_IP_COMPLETION_TOKEN DummyRcvToken;
|
||||
INTN RefCnt;
|
||||
IP_VERSION IpVersion;
|
||||
UINT8 IpVersion;
|
||||
} IP_IO_IP_INFO;
|
||||
|
||||
/**
|
||||
@@ -322,7 +318,7 @@ EFIAPI
|
||||
IpIoCreate (
|
||||
IN EFI_HANDLE Image,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN IP_VERSION IpVersion
|
||||
IN UINT8 IpVersion
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -518,7 +514,7 @@ IP_IO_IP_INFO *
|
||||
EFIAPI
|
||||
IpIoFindSender (
|
||||
IN OUT IP_IO **IpIo,
|
||||
IN IP_VERSION IpVersion,
|
||||
IN UINT8 IpVersion,
|
||||
IN EFI_IP_ADDRESS *Src
|
||||
);
|
||||
|
||||
@@ -541,8 +537,8 @@ IpIoFindSender (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IpIoGetIcmpErrStatus (
|
||||
IN ICMP_ERROR IcmpError,
|
||||
IN IP_VERSION IpVersion,
|
||||
IN UINT8 IcmpError,
|
||||
IN UINT8 IpVersion,
|
||||
OUT BOOLEAN *IsHard OPTIONAL,
|
||||
OUT BOOLEAN *Notify OPTIONAL
|
||||
);
|
||||
|
@@ -22,34 +22,33 @@ typedef UINT32 IP4_ADDR;
|
||||
typedef UINT32 TCP_SEQNO;
|
||||
typedef UINT16 TCP_PORTNO;
|
||||
|
||||
typedef enum {
|
||||
NET_ETHER_ADDR_LEN = 6,
|
||||
NET_IFTYPE_ETHERNET = 0x01,
|
||||
|
||||
EFI_IP_PROTO_UDP = 0x11,
|
||||
EFI_IP_PROTO_TCP = 0x06,
|
||||
EFI_IP_PROTO_ICMP = 0x01,
|
||||
#define NET_ETHER_ADDR_LEN 6
|
||||
#define NET_IFTYPE_ETHERNET 0x01
|
||||
|
||||
//
|
||||
// The address classification
|
||||
//
|
||||
IP4_ADDR_CLASSA = 1,
|
||||
IP4_ADDR_CLASSB,
|
||||
IP4_ADDR_CLASSC,
|
||||
IP4_ADDR_CLASSD,
|
||||
IP4_ADDR_CLASSE,
|
||||
#define EFI_IP_PROTO_UDP 0x11
|
||||
#define EFI_IP_PROTO_TCP 0x06
|
||||
#define EFI_IP_PROTO_ICMP 0x01
|
||||
|
||||
IP4_MASK_NUM = 33
|
||||
} IP4_CLASS_TYPE;
|
||||
//
|
||||
// The address classification
|
||||
//
|
||||
#define IP4_ADDR_CLASSA 1
|
||||
#define IP4_ADDR_CLASSB 2
|
||||
#define IP4_ADDR_CLASSC 3
|
||||
#define IP4_ADDR_CLASSD 4
|
||||
#define IP4_ADDR_CLASSE 5
|
||||
|
||||
#define IP4_MASK_NUM 33
|
||||
|
||||
|
||||
#define IP6_HOP_BY_HOP 0
|
||||
#define IP6_DESTINATION 60
|
||||
#define IP6_FRAGMENT 44
|
||||
#define IP6_AH 51
|
||||
#define IP6_ESP 50
|
||||
#define IP6_NO_NEXT_HEADER 59
|
||||
|
||||
typedef enum {
|
||||
IP6_HOP_BY_HOP = 0,
|
||||
IP6_DESTINATION = 60,
|
||||
IP6_FRAGMENT = 44,
|
||||
IP6_AH = 51,
|
||||
IP6_ESP = 50,
|
||||
IP6_NO_NEXT_HEADER = 59
|
||||
} IP6_EXTENSION_HEADER_TYPE;
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
@@ -275,6 +274,23 @@ Ip6IsValidUnicast (
|
||||
IN EFI_IPv6_ADDRESS *Ip6
|
||||
);
|
||||
|
||||
/**
|
||||
Switches the endianess of an IPv6 address
|
||||
|
||||
This function swaps the bytes in a 128-bit IPv6 address to switch the value
|
||||
from little endian to big endian or vice versa. The byte swapped value is
|
||||
returned.
|
||||
|
||||
@param Ip6 Points to an IPv6 address
|
||||
|
||||
@return The byte swapped IPv6 address.
|
||||
|
||||
**/
|
||||
EFI_IPv6_ADDRESS *
|
||||
Ip6Swap128 (
|
||||
EFI_IPv6_ADDRESS *Ip6
|
||||
);
|
||||
|
||||
extern IP4_ADDR gIp4AllMasks[IP4_MASK_NUM];
|
||||
|
||||
|
||||
@@ -886,20 +902,19 @@ NetLibDefaultUnload (
|
||||
IN EFI_HANDLE ImageHandle
|
||||
);
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
//Various signatures
|
||||
//
|
||||
NET_BUF_SIGNATURE = SIGNATURE_32 ('n', 'b', 'u', 'f'),
|
||||
NET_VECTOR_SIGNATURE = SIGNATURE_32 ('n', 'v', 'e', 'c'),
|
||||
NET_QUE_SIGNATURE = SIGNATURE_32 ('n', 'b', 'q', 'u'),
|
||||
|
||||
//
|
||||
//Various signatures
|
||||
//
|
||||
#define NET_BUF_SIGNATURE SIGNATURE_32 ('n', 'b', 'u', 'f')
|
||||
#define NET_VECTOR_SIGNATURE SIGNATURE_32 ('n', 'v', 'e', 'c')
|
||||
#define NET_QUE_SIGNATURE SIGNATURE_32 ('n', 'b', 'q', 'u')
|
||||
|
||||
|
||||
NET_PROTO_DATA = 64, // Opaque buffer for protocols
|
||||
NET_BUF_HEAD = 1, // Trim or allocate space from head
|
||||
NET_BUF_TAIL = 0, // Trim or allocate space from tail
|
||||
NET_VECTOR_OWN_FIRST = 0x01 // We allocated the 1st block in the vector
|
||||
} NET_SIGNATURE_TYPE;
|
||||
#define NET_PROTO_DATA 64 // Opaque buffer for protocols
|
||||
#define NET_BUF_HEAD 1 // Trim or allocate space from head
|
||||
#define NET_BUF_TAIL 0 // Trim or allocate space from tail
|
||||
#define NET_VECTOR_OWN_FIRST 0x01 // We allocated the 1st block in the vector
|
||||
|
||||
#define NET_CHECK_SIGNATURE(PData, SIGNATURE) \
|
||||
ASSERT (((PData) != NULL) && ((PData)->Signature == (SIGNATURE)))
|
||||
|
@@ -2,7 +2,7 @@
|
||||
This library is used to share code between UEFI network stack modules.
|
||||
It provides the helper routines to access UDP service. It is used by both DHCP and MTFTP.
|
||||
|
||||
Copyright (c) 2006 - 2008, Intel Corporation.<BR>
|
||||
Copyright (c) 2006 - 2009, Intel Corporation.<BR>
|
||||
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<BR>
|
||||
@@ -13,33 +13,36 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _UDP4IO_H_
|
||||
#define _UDP4IO_H_
|
||||
#ifndef _UDP_IO_H_
|
||||
#define _UDP_IO_H_
|
||||
|
||||
#include <Protocol/Udp4.h>
|
||||
#include <Protocol/Udp6.h>
|
||||
|
||||
#include <Library/NetLib.h>
|
||||
|
||||
typedef struct _UDP_IO_PORT UDP_IO_PORT;
|
||||
typedef struct _UDP_IO UDP_IO;
|
||||
|
||||
///
|
||||
/// Signatures used by UdpIo Library.
|
||||
///
|
||||
typedef enum {
|
||||
UDP_IO_RX_SIGNATURE = SIGNATURE_32 ('U', 'D', 'P', 'R'),
|
||||
UDP_IO_TX_SIGNATURE = SIGNATURE_32 ('U', 'D', 'P', 'T'),
|
||||
UDP_IO_SIGNATURE = SIGNATURE_32 ('U', 'D', 'P', 'I')
|
||||
} UDP_IO_SIGNATURE_TYPE;
|
||||
|
||||
#define UDP_IO_RX_SIGNATURE SIGNATURE_32 ('U', 'D', 'P', 'R')
|
||||
#define UDP_IO_TX_SIGNATURE SIGNATURE_32 ('U', 'D', 'P', 'T')
|
||||
#define UDP_IO_SIGNATURE SIGNATURE_32 ('U', 'D', 'P', 'I')
|
||||
|
||||
#define UDP_IO_UDP4_VERSION 4
|
||||
#define UDP_IO_UDP6_VERSION 6
|
||||
|
||||
///
|
||||
/// The Udp4 address pair.
|
||||
/// The UDP address pair.
|
||||
///
|
||||
typedef struct {
|
||||
IP4_ADDR LocalAddr;
|
||||
EFI_IP_ADDRESS LocalAddr;
|
||||
UINT16 LocalPort;
|
||||
IP4_ADDR RemoteAddr;
|
||||
EFI_IP_ADDRESS RemoteAddr;
|
||||
UINT16 RemotePort;
|
||||
} UDP_POINTS;
|
||||
} UDP_END_POINT;
|
||||
|
||||
/**
|
||||
Prototype called when receiving or sending packets to or from a UDP point.
|
||||
@@ -50,7 +53,7 @@ typedef struct {
|
||||
provided to the callback as a reference.
|
||||
|
||||
@param[in] Packet Packet received or sent
|
||||
@param[in] Points The Udp4 address pair corresponds to the Udp4 IO
|
||||
@param[in] EndPoint The UDP address pair corresponds to the UDP IO
|
||||
@param[in] IoStatus Packet receiving or sending status
|
||||
@param[in] Context User-defined data when calling UdpIoRecvDatagram() or
|
||||
UdpIoSendDatagram()
|
||||
@@ -59,7 +62,7 @@ typedef
|
||||
VOID
|
||||
(*UDP_IO_CALLBACK) (
|
||||
IN NET_BUF *Packet,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
);
|
||||
@@ -72,17 +75,24 @@ VOID
|
||||
/// time. HeadLen gives the length of the application's header. UDP_IO will
|
||||
/// make the application's header continuous before delivering up.
|
||||
///
|
||||
typedef union {
|
||||
EFI_UDP4_COMPLETION_TOKEN Udp4;
|
||||
EFI_UDP6_COMPLETION_TOKEN Udp6;
|
||||
} UDP_COMPLETION_TOKEN;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
UDP_IO_PORT *UdpIo;
|
||||
UINT32 Signature;
|
||||
UDP_IO *UdpIo;
|
||||
|
||||
UDP_IO_CALLBACK CallBack;
|
||||
VOID *Context;
|
||||
UDP_IO_CALLBACK CallBack;
|
||||
VOID *Context;
|
||||
UINT32 HeadLen;
|
||||
|
||||
UINT32 HeadLen;
|
||||
EFI_UDP4_COMPLETION_TOKEN UdpToken;
|
||||
UDP_COMPLETION_TOKEN Token;
|
||||
} UDP_RX_TOKEN;
|
||||
|
||||
|
||||
|
||||
///
|
||||
/// This structure is used internally by UdpIo Library.
|
||||
///
|
||||
@@ -90,32 +100,41 @@ typedef struct {
|
||||
/// the CallBack will be called. There can be several transmit requests. All transmit requests
|
||||
/// are linked in a list.
|
||||
///
|
||||
|
||||
typedef union {
|
||||
EFI_UDP4_SESSION_DATA Udp4;
|
||||
EFI_UDP6_SESSION_DATA Udp6;
|
||||
} UDP_SESSION_DATA;
|
||||
|
||||
typedef union {
|
||||
EFI_UDP4_TRANSMIT_DATA Udp4;
|
||||
EFI_UDP6_TRANSMIT_DATA Udp6;
|
||||
} UDP_TRANSMIT_DATA;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
UDP_IO_PORT *UdpIo;
|
||||
|
||||
UDP_IO_CALLBACK CallBack;
|
||||
NET_BUF *Packet;
|
||||
VOID *Context;
|
||||
|
||||
EFI_UDP4_SESSION_DATA UdpSession;
|
||||
EFI_IPv4_ADDRESS Gateway;
|
||||
|
||||
EFI_UDP4_COMPLETION_TOKEN UdpToken;
|
||||
EFI_UDP4_TRANSMIT_DATA UdpTxData;
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
UDP_IO *UdpIo;
|
||||
UDP_IO_CALLBACK CallBack;
|
||||
NET_BUF *Packet;
|
||||
VOID *Context;
|
||||
EFI_IPv4_ADDRESS Gateway;
|
||||
UDP_SESSION_DATA Session;
|
||||
UDP_COMPLETION_TOKEN Token;
|
||||
UDP_TRANSMIT_DATA Data;
|
||||
} UDP_TX_TOKEN;
|
||||
|
||||
///
|
||||
/// Type defined as UDP_IO_PORT.
|
||||
/// Type defined as UDP_IO.
|
||||
///
|
||||
/// This data structure wraps the Udp4 instance and configuration.
|
||||
/// UdpIo Library uses this structure for all Udp4 operations.
|
||||
/// This data structure wraps the UDP instance and configuration.
|
||||
/// UdpIo Library uses this structure for all Udp4 or Udp6 operations.
|
||||
///
|
||||
struct _UDP_IO_PORT {
|
||||
struct _UDP_IO {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
INTN RefCnt;
|
||||
UINT8 UdpVersion;
|
||||
|
||||
//
|
||||
// Handle used to create/destory UDP child
|
||||
@@ -124,30 +143,38 @@ struct _UDP_IO_PORT {
|
||||
EFI_HANDLE Image;
|
||||
EFI_HANDLE UdpHandle;
|
||||
|
||||
EFI_UDP4_PROTOCOL *Udp; ///< The wrapped Udp4 instance.
|
||||
EFI_UDP4_CONFIG_DATA UdpConfig;
|
||||
EFI_SIMPLE_NETWORK_MODE SnpMode;
|
||||
|
||||
LIST_ENTRY SentDatagram; ///< A list of UDP_TX_TOKEN.
|
||||
UDP_RX_TOKEN *RecvRequest;
|
||||
|
||||
union {
|
||||
EFI_UDP4_PROTOCOL *Udp4;
|
||||
EFI_UDP6_PROTOCOL *Udp6;
|
||||
} Protocol;
|
||||
|
||||
union {
|
||||
EFI_UDP4_CONFIG_DATA Udp4;
|
||||
EFI_UDP6_CONFIG_DATA Udp6;
|
||||
} Config;
|
||||
};
|
||||
|
||||
/**
|
||||
Prototype called when UdpIo Library configures a Udp4 instance.
|
||||
Prototype called when UdpIo Library configures a UDP instance.
|
||||
|
||||
The prototype is set and called when creating a UDP_IO_PORT in UdpIoCreatePort().
|
||||
The prototype is set and called when creating a UDP_IO in UdpIoCreatePort().
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT to configure
|
||||
@param[in] UdpIo The UDP_IO to configure
|
||||
@param[in] Context User-defined data when calling UdpIoCreatePort()
|
||||
|
||||
@retval EFI_SUCCESS The configuration succeeded
|
||||
@retval Others The UDP_IO_PORT fails to configure indicating
|
||||
@retval Others The UDP_IO fails to configure indicating
|
||||
UdpIoCreatePort() should fail
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(*UDP_IO_CONFIG) (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
@@ -172,7 +199,7 @@ BOOLEAN
|
||||
Cancel all sent datagrams selected by the parameter ToCancel.
|
||||
If ToCancel is NULL, all the datagrams are cancelled.
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT to cancel packet.
|
||||
@param[in] UdpIo The UDP_IO to cancel packet.
|
||||
@param[in] IoStatus The IoStatus to return to the packet owners.
|
||||
@param[in] ToCancel Sets the criteria for canceling a packet.
|
||||
@param[in] Context The opaque parameter to the ToCancel.
|
||||
@@ -181,14 +208,14 @@ BOOLEAN
|
||||
VOID
|
||||
EFIAPI
|
||||
UdpIoCancelDgrams (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN UDP_IO_TO_CANCEL ToCancel, OPTIONAL
|
||||
IN UDP_IO_TO_CANCEL ToCancel OPTIONAL,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Creates a UDP_IO_PORT to access the UDP service. It creates and configures
|
||||
Creates a UDP_IO to access the UDP service. It creates and configures
|
||||
a UDP child.
|
||||
|
||||
This function:
|
||||
@@ -199,65 +226,67 @@ UdpIoCancelDgrams (
|
||||
|
||||
@param[in] Controller The controller that has the UDP service binding.
|
||||
protocol installed.
|
||||
@param[in] Image The image handle for the driver.
|
||||
@param[in] ImageHandle The image handle for the driver.
|
||||
@param[in] Configure The function to configure the created UDP child.
|
||||
@param[in] UdpVersion The UDP protocol version, UDP4 or UDP6.
|
||||
@param[in] Context The opaque parameter for the Configure funtion.
|
||||
|
||||
@return Newly-created UDP_IO_PORT or NULL if failed.
|
||||
@return Newly-created UDP_IO or NULL if failed.
|
||||
|
||||
**/
|
||||
UDP_IO_PORT *
|
||||
UDP_IO *
|
||||
EFIAPI
|
||||
UdpIoCreatePort (
|
||||
UdpIoCreateIo (
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_HANDLE Image,
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN UDP_IO_CONFIG Configure,
|
||||
IN UINT8 UdpVersion,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Free the UDP_IO_PORT and all its related resources.
|
||||
Free the UDP_IO and all its related resources.
|
||||
|
||||
The function cancels all sent datagrams and receive requests.
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT to free.
|
||||
@param[in] UdpIo The UDP_IO to free.
|
||||
|
||||
@retval EFI_SUCCESS The UDP_IO_PORT is freed.
|
||||
@retval EFI_SUCCESS The UDP_IO is freed.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UdpIoFreePort (
|
||||
IN UDP_IO_PORT *UdpIo
|
||||
UdpIoFreeIo (
|
||||
IN UDP_IO *UdpIo
|
||||
);
|
||||
|
||||
/**
|
||||
Cleans up the UDP_IO_PORT without freeing it. Call this function
|
||||
if you intend to later re-use the UDP_IO_PORT.
|
||||
Cleans up the UDP_IO without freeing it. Call this function
|
||||
if you intend to later re-use the UDP_IO.
|
||||
|
||||
This function releases all transmitted datagrams and receive requests and configures NULL for the UDP instance.
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT to clean up.
|
||||
@param[in] UdpIo The UDP_IO to clean up.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
UdpIoCleanPort (
|
||||
IN UDP_IO_PORT *UdpIo
|
||||
UdpIoCleanIo (
|
||||
IN UDP_IO *UdpIo
|
||||
);
|
||||
|
||||
/**
|
||||
Sends a packet through the UDP_IO_PORT.
|
||||
Send a packet through the UDP_IO.
|
||||
|
||||
The packet will be wrapped in UDP_TX_TOKEN. The function specific in the CallBack parameter will be called
|
||||
when the packet is sent. If specified, the optional parameter EndPoint overrides the default
|
||||
address pair.
|
||||
The packet will be wrapped in UDP_TX_TOKEN. Function Callback will be called
|
||||
when the packet is sent. The optional parameter EndPoint overrides the default
|
||||
address pair if specified.
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT to send the packet through.
|
||||
@param[in] UdpIo The UDP_IO to send the packet through.
|
||||
@param[in] Packet The packet to send.
|
||||
@param[in] EndPoint The local and remote access point. Overrides the
|
||||
@param[in] EndPoint The local and remote access point. Override the
|
||||
default address pair set during configuration.
|
||||
@param[in] Gateway The gateway to use.
|
||||
@param[in] Gateway The gateway to use.
|
||||
@param[in] CallBack The function being called when packet is
|
||||
transmitted or failed.
|
||||
@param[in] Context The opaque parameter passed to CallBack.
|
||||
@@ -270,10 +299,10 @@ UdpIoCleanPort (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UdpIoSendDatagram (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN NET_BUF *Packet,
|
||||
IN UDP_POINTS *EndPoint, OPTIONAL
|
||||
IN IP4_ADDR Gateway,
|
||||
IN UDP_END_POINT *EndPoint OPTIONAL,
|
||||
IN EFI_IP_ADDRESS *Gateway OPTIONAL,
|
||||
IN UDP_IO_CALLBACK CallBack,
|
||||
IN VOID *Context
|
||||
);
|
||||
@@ -281,43 +310,46 @@ UdpIoSendDatagram (
|
||||
/**
|
||||
Cancel a single sent datagram.
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT from which to cancel the packet
|
||||
@param[in] UdpIo The UDP_IO from which to cancel the packet
|
||||
@param[in] Packet The packet to cancel
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
UdpIoCancelSentDatagram (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN NET_BUF *Packet
|
||||
);
|
||||
|
||||
/**
|
||||
Issue a receive request to the UDP_IO_PORT.
|
||||
Issue a receive request to the UDP_IO.
|
||||
|
||||
This function is called when upper-layer needs packet from UDP for processing.
|
||||
Only one receive request is acceptable at a time. Therefore, one common usage model is
|
||||
to invoke this function inside its Callback function when the former packet
|
||||
is processed.
|
||||
|
||||
@param[in] UdpIo The UDP_IO_PORT to receive the packet from.
|
||||
@param[in] UdpIo The UDP_IO to receive the packet from.
|
||||
@param[in] CallBack The call back function to execute when the packet
|
||||
is received.
|
||||
@param[in] Context The opaque context passed to Callback.
|
||||
@param[in] HeadLen The length of the upper-layer's protocol header.
|
||||
@param[in] HeadLen The length of the upper-layer's protocol header.
|
||||
|
||||
@retval EFI_ALREADY_STARTED There is already a pending receive request. Only
|
||||
one receive request is supported at a time.
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate needed resources.
|
||||
@retval EFI_SUCCESS The receive request is issued successfully.
|
||||
@retval EFI_UNSUPPORTED The UDP version in UDP_IO is not supported.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
UdpIoRecvDatagram (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN UDP_IO_CALLBACK CallBack,
|
||||
IN VOID *Context,
|
||||
IN UINT32 HeadLen
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user