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:
@@ -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