mirror of https://github.com/acidanthera/audk.git
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:
parent
72f01d4b4a
commit
b45b45b2d2
|
@ -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,63 +226,65 @@ 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] CallBack The function being called when packet is
|
||||
|
@ -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
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ IpIoCreateIpChildOpenProtocol (
|
|||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_HANDLE *ChildHandle,
|
||||
IN IP_VERSION IpVersion,
|
||||
IN UINT8 IpVersion,
|
||||
OUT VOID **Interface
|
||||
)
|
||||
{
|
||||
|
@ -213,7 +213,7 @@ IpIoCloseProtocolDestroyIpChild (
|
|||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_HANDLE ChildHandle,
|
||||
IN IP_VERSION IpVersion
|
||||
IN UINT8 IpVersion
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
@ -274,7 +274,7 @@ IpIoIcmpv4Handler (
|
|||
{
|
||||
IP4_ICMP_ERROR_HEAD *IcmpHdr;
|
||||
EFI_IP4_HEADER *IpHdr;
|
||||
ICMP_ERROR IcmpErr;
|
||||
UINT8 IcmpErr;
|
||||
UINT8 *PayLoadHdr;
|
||||
UINT8 Type;
|
||||
UINT8 Code;
|
||||
|
@ -307,7 +307,7 @@ IpIoIcmpv4Handler (
|
|||
case ICMP_CODE_UNREACH_PROTOCOL:
|
||||
case ICMP_CODE_UNREACH_PORT:
|
||||
case ICMP_CODE_UNREACH_SRCFAIL:
|
||||
IcmpErr = (ICMP_ERROR) (ICMP_ERR_UNREACH_NET + Code);
|
||||
IcmpErr = (UINT8) (ICMP_ERR_UNREACH_NET + Code);
|
||||
|
||||
break;
|
||||
|
||||
|
@ -342,7 +342,7 @@ IpIoIcmpv4Handler (
|
|||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
IcmpErr = (ICMP_ERROR) (Code + ICMP_ERR_TIMXCEED_INTRANS);
|
||||
IcmpErr = (UINT8) (Code + ICMP_ERR_TIMXCEED_INTRANS);
|
||||
|
||||
break;
|
||||
|
||||
|
@ -403,7 +403,7 @@ IpIoIcmpv6Handler (
|
|||
{
|
||||
IP6_ICMP_ERROR_HEAD *IcmpHdr;
|
||||
EFI_IP6_HEADER *IpHdr;
|
||||
ICMP6_ERROR IcmpErr;
|
||||
UINT8 IcmpErr;
|
||||
UINT8 *PayLoadHdr;
|
||||
UINT8 Type;
|
||||
UINT8 Code;
|
||||
|
@ -470,7 +470,7 @@ IpIoIcmpv6Handler (
|
|||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
IcmpErr = (ICMP6_ERROR) (ICMP6_ERR_TIMXCEED_HOPLIMIT + Code);
|
||||
IcmpErr = (UINT8) (ICMP6_ERR_TIMXCEED_HOPLIMIT + Code);
|
||||
|
||||
break;
|
||||
|
||||
|
@ -479,7 +479,7 @@ IpIoIcmpv6Handler (
|
|||
return EFI_ABORTED;
|
||||
}
|
||||
|
||||
IcmpErr = (ICMP6_ERROR) (ICMP6_ERR_PARAMPROB_HEADER + Code);
|
||||
IcmpErr = (UINT8) (ICMP6_ERR_PARAMPROB_HEADER + Code);
|
||||
|
||||
break;
|
||||
|
||||
|
@ -538,7 +538,7 @@ IpIoIcmpv6Handler (
|
|||
|
||||
NetbufTrim (Pkt, TrimBytes, TRUE);
|
||||
|
||||
IpIo->PktRcvdNotify (EFI_ICMP_ERROR, (ICMP_ERROR) IcmpErr, Session, Pkt, IpIo->RcvdContext);
|
||||
IpIo->PktRcvdNotify (EFI_ICMP_ERROR, IcmpErr, Session, Pkt, IpIo->RcvdContext);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@ -1098,7 +1098,7 @@ IpIoListenHandlerDpc (
|
|||
|
||||
if (EFI_SUCCESS == Status) {
|
||||
|
||||
IpIo->PktRcvdNotify (EFI_SUCCESS, (ICMP_ERROR) 0, &Session, Pkt, IpIo->RcvdContext);
|
||||
IpIo->PktRcvdNotify (EFI_SUCCESS, 0, &Session, Pkt, IpIo->RcvdContext);
|
||||
} else {
|
||||
//
|
||||
// Status is EFI_ICMP_ERROR
|
||||
|
@ -1170,7 +1170,7 @@ EFIAPI
|
|||
IpIoCreate (
|
||||
IN EFI_HANDLE Image,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN IP_VERSION IpVersion
|
||||
IN UINT8 IpVersion
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
@ -1264,7 +1264,7 @@ IpIoOpen (
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
VOID *Ip;
|
||||
IP_VERSION IpVersion;
|
||||
UINT8 IpVersion;
|
||||
|
||||
if (IpIo->IsConfigured) {
|
||||
return EFI_ACCESS_DENIED;
|
||||
|
@ -1379,7 +1379,7 @@ IpIoStop (
|
|||
EFI_STATUS Status;
|
||||
VOID *Ip;
|
||||
IP_IO_IP_INFO *IpInfo;
|
||||
IP_VERSION IpVersion;
|
||||
UINT8 IpVersion;
|
||||
|
||||
if (!IpIo->IsConfigured) {
|
||||
return EFI_SUCCESS;
|
||||
|
@ -1728,7 +1728,7 @@ IpIoConfigIp (
|
|||
{
|
||||
EFI_STATUS Status;
|
||||
VOID *Ip;
|
||||
IP_VERSION IpVersion;
|
||||
UINT8 IpVersion;
|
||||
EFI_IP4_MODE_DATA Ip4ModeData;
|
||||
EFI_IP6_MODE_DATA Ip6ModeData;
|
||||
|
||||
|
@ -1885,7 +1885,7 @@ IpIoRemoveIp (
|
|||
)
|
||||
{
|
||||
|
||||
IP_VERSION IpVersion;
|
||||
UINT8 IpVersion;
|
||||
|
||||
ASSERT (IpInfo->RefCnt > 0);
|
||||
|
||||
|
@ -1957,7 +1957,7 @@ IP_IO_IP_INFO *
|
|||
EFIAPI
|
||||
IpIoFindSender (
|
||||
IN OUT IP_IO **IpIo,
|
||||
IN IP_VERSION IpVersion,
|
||||
IN UINT8 IpVersion,
|
||||
IN EFI_IP_ADDRESS *Src
|
||||
)
|
||||
{
|
||||
|
@ -2021,14 +2021,14 @@ 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
|
||||
)
|
||||
{
|
||||
if (IpVersion == IP_VERSION_4 ) {
|
||||
ASSERT ((IcmpError >= ICMP_ERR_UNREACH_NET) && (IcmpError <= ICMP_ERR_PARAMPROB));
|
||||
ASSERT (IcmpError <= ICMP_ERR_PARAMPROB);
|
||||
|
||||
if (IsHard != NULL) {
|
||||
*IsHard = mIcmpErrMap[IcmpError].IsHard;
|
||||
|
@ -2066,7 +2066,7 @@ IpIoGetIcmpErrStatus (
|
|||
|
||||
} else if (IpVersion == IP_VERSION_6) {
|
||||
|
||||
ASSERT ((IcmpError >= ICMP6_ERR_UNREACH_NET) && (IcmpError <= ICMP6_ERR_PARAMPROB_IPV6OPTION));
|
||||
ASSERT (IcmpError <= ICMP6_ERR_PARAMPROB_IPV6OPTION);
|
||||
|
||||
if (IsHard != NULL) {
|
||||
*IsHard = mIcmp6ErrMap[IcmpError].IsHard;
|
||||
|
|
|
@ -222,28 +222,60 @@ Ip6IsValidUnicast (
|
|||
IN EFI_IPv6_ADDRESS *Ip6
|
||||
)
|
||||
{
|
||||
UINT8 t;
|
||||
UINT8 i;
|
||||
UINT8 Byte;
|
||||
UINT8 Index;
|
||||
|
||||
if (Ip6->Addr[0] == 0xFF) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 15; i++) {
|
||||
if (Ip6->Addr[i] != 0) {
|
||||
for (Index = 0; Index < 15; Index++) {
|
||||
if (Ip6->Addr[Index] != 0) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
t = Ip6->Addr[i];
|
||||
Byte = Ip6->Addr[Index];
|
||||
|
||||
if (t == 0x0 || t == 0x1) {
|
||||
if (Byte == 0x0 || Byte == 0x1) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
)
|
||||
{
|
||||
UINT64 High;
|
||||
UINT64 Low;
|
||||
|
||||
CopyMem (&High, Ip6, sizeof (UINT64));
|
||||
CopyMem (&Low, &Ip6->Addr[8], sizeof (UINT64));
|
||||
|
||||
High = SwapBytes64 (High);
|
||||
Low = SwapBytes64 (Low);
|
||||
|
||||
CopyMem (Ip6, &Low, sizeof (UINT64));
|
||||
CopyMem (&Ip6->Addr[8], &High, sizeof (UINT64));
|
||||
|
||||
return Ip6;
|
||||
}
|
||||
|
||||
/**
|
||||
Initialize a random seed using current time.
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -106,16 +106,16 @@ Dhcp4DriverBindingSupported (
|
|||
Configure the default UDP child to receive all the DHCP traffics
|
||||
on this network interface.
|
||||
|
||||
@param[in] UdpIo The UDP IO port to configure
|
||||
@param[in] UdpIo The UDP IO to configure
|
||||
@param[in] Context The context to the function
|
||||
|
||||
@retval EFI_SUCCESS The UDP IO port is successfully configured.
|
||||
@retval EFI_SUCCESS The UDP IO is successfully configured.
|
||||
@retval Others Failed to configure the UDP child.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpConfigUdpIo (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
|
@ -139,7 +139,7 @@ DhcpConfigUdpIo (
|
|||
ZeroMem (&UdpConfigData.SubnetMask, sizeof (EFI_IPv4_ADDRESS));
|
||||
ZeroMem (&UdpConfigData.RemoteAddress, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
return UdpIo->Udp->Configure (UdpIo->Udp, &UdpConfigData);;
|
||||
return UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, &UdpConfigData);;
|
||||
}
|
||||
|
||||
|
||||
|
@ -162,7 +162,7 @@ Dhcp4CloseService (
|
|||
DhcpCleanLease (DhcpSb);
|
||||
|
||||
if (DhcpSb->UdpIo != NULL) {
|
||||
UdpIoFreePort (DhcpSb->UdpIo);
|
||||
UdpIoFreeIo (DhcpSb->UdpIo);
|
||||
DhcpSb->UdpIo = NULL;
|
||||
}
|
||||
|
||||
|
@ -237,7 +237,13 @@ Dhcp4CreateService (
|
|||
goto ON_ERROR;
|
||||
}
|
||||
|
||||
DhcpSb->UdpIo = UdpIoCreatePort (Controller, ImageHandle, DhcpConfigUdpIo, NULL);
|
||||
DhcpSb->UdpIo = UdpIoCreateIo (
|
||||
Controller,
|
||||
ImageHandle,
|
||||
DhcpConfigUdpIo,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (DhcpSb->UdpIo == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#/** @file
|
||||
# Component name for module Dhcp4
|
||||
#
|
||||
# Copyright (c) 2007, Intel Corporation
|
||||
# Copyright (c) 2007 - 2009, Intel Corporation
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -63,4 +63,6 @@
|
|||
gEfiDhcp4ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiDhcp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp6ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp6ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
|
||||
|
|
|
@ -826,7 +826,7 @@ EfiDhcp4Start (
|
|||
|
||||
if (CompletionEvent == NULL) {
|
||||
while (DhcpSb->IoStatus == EFI_ALREADY_STARTED) {
|
||||
DhcpSb->UdpIo->Udp->Poll (DhcpSb->UdpIo->Udp);
|
||||
DhcpSb->UdpIo->Protocol.Udp4->Poll (DhcpSb->UdpIo->Protocol.Udp4);
|
||||
}
|
||||
|
||||
return DhcpSb->IoStatus;
|
||||
|
@ -951,7 +951,8 @@ EfiDhcp4RenewRebind (
|
|||
|
||||
if (CompletionEvent == NULL) {
|
||||
while (DhcpSb->IoStatus == EFI_ALREADY_STARTED) {
|
||||
DhcpSb->UdpIo->Udp->Poll (DhcpSb->UdpIo->Udp);
|
||||
DhcpSb->UdpIo->Protocol.Udp4->Poll (DhcpSb->UdpIo->Protocol.Udp4);
|
||||
|
||||
}
|
||||
|
||||
return DhcpSb->IoStatus;
|
||||
|
@ -1173,7 +1174,7 @@ EfiDhcp4Build (
|
|||
**/
|
||||
EFI_STATUS
|
||||
Dhcp4InstanceConfigUdpIo (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
|
@ -1206,7 +1207,7 @@ Dhcp4InstanceConfigUdpIo (
|
|||
UdpConfigData.StationPort = Token->ListenPoints[0].ListenPort;
|
||||
}
|
||||
|
||||
return UdpIo->Udp->Configure (UdpIo->Udp, &UdpConfigData);
|
||||
return UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, &UdpConfigData);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1228,7 +1229,13 @@ Dhcp4InstanceCreateUdpIo (
|
|||
ASSERT (Instance->Token != NULL);
|
||||
|
||||
DhcpSb = Instance->Service;
|
||||
Instance->UdpIo = UdpIoCreatePort (DhcpSb->Controller, DhcpSb->Image, Dhcp4InstanceConfigUdpIo, Instance);
|
||||
Instance->UdpIo = UdpIoCreateIo (
|
||||
DhcpSb->Controller,
|
||||
DhcpSb->Image,
|
||||
Dhcp4InstanceConfigUdpIo,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
Instance
|
||||
);
|
||||
if (Instance->UdpIo == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
} else {
|
||||
|
@ -1256,7 +1263,7 @@ DhcpDummyExtFree (
|
|||
sent out. The packet will be queued to the response queue.
|
||||
|
||||
@param UdpPacket The Dhcp4 packet.
|
||||
@param Points Udp4 address pair.
|
||||
@param EndPoint Udp4 address pair.
|
||||
@param IoStatus Status of the input.
|
||||
@param Context Extra info for the input.
|
||||
|
||||
|
@ -1264,7 +1271,7 @@ DhcpDummyExtFree (
|
|||
VOID
|
||||
PxeDhcpInput (
|
||||
NET_BUF *UdpPacket,
|
||||
UDP_POINTS *Points,
|
||||
UDP_END_POINT *EndPoint,
|
||||
EFI_STATUS IoStatus,
|
||||
VOID *Context
|
||||
)
|
||||
|
@ -1397,8 +1404,8 @@ SIGNAL_USER:
|
|||
// Clean up the resources dedicated for this transmit receive transaction.
|
||||
//
|
||||
NetbufQueFlush (&Instance->ResponseQueue);
|
||||
UdpIoCleanPort (Instance->UdpIo);
|
||||
UdpIoFreePort (Instance->UdpIo);
|
||||
UdpIoCleanIo (Instance->UdpIo);
|
||||
UdpIoFreeIo (Instance->UdpIo);
|
||||
Instance->UdpIo = NULL;
|
||||
Instance->Token = NULL;
|
||||
|
||||
|
@ -1439,10 +1446,10 @@ EfiDhcp4TransmitReceive (
|
|||
EFI_STATUS Status;
|
||||
NET_FRAGMENT Frag;
|
||||
NET_BUF *Wrap;
|
||||
UDP_POINTS EndPoint;
|
||||
UDP_END_POINT EndPoint;
|
||||
IP4_ADDR Ip;
|
||||
DHCP_SERVICE *DhcpSb;
|
||||
IP4_ADDR Gateway;
|
||||
EFI_IP_ADDRESS Gateway;
|
||||
IP4_ADDR SubnetMask;
|
||||
|
||||
if ((This == NULL) || (Token == NULL) || (Token->Packet == NULL)) {
|
||||
|
@ -1516,16 +1523,15 @@ EfiDhcp4TransmitReceive (
|
|||
}
|
||||
|
||||
//
|
||||
// Set the local address and local port.
|
||||
// Set the local address and local port to ZERO.
|
||||
//
|
||||
EndPoint.LocalAddr = 0;
|
||||
EndPoint.LocalPort = 0;
|
||||
ZeroMem (&EndPoint, sizeof (UDP_END_POINT));
|
||||
|
||||
//
|
||||
// Set the destination address and destination port.
|
||||
//
|
||||
CopyMem (&Ip, &Token->RemoteAddress, sizeof (EFI_IPv4_ADDRESS));
|
||||
EndPoint.RemoteAddr = NTOHL (Ip);
|
||||
EndPoint.RemoteAddr.Addr[0] = NTOHL (Ip);
|
||||
|
||||
if (Token->RemotePort == 0) {
|
||||
EndPoint.RemotePort = DHCP_SERVER_PORT;
|
||||
|
@ -1537,16 +1543,16 @@ EfiDhcp4TransmitReceive (
|
|||
// Get the gateway.
|
||||
//
|
||||
SubnetMask = DhcpSb->Netmask;
|
||||
Gateway = 0;
|
||||
if (!IP4_NET_EQUAL (DhcpSb->ClientAddr, EndPoint.RemoteAddr, SubnetMask)) {
|
||||
CopyMem (&Gateway, &Token->GatewayAddress, sizeof (EFI_IPv4_ADDRESS));
|
||||
Gateway = NTOHL (Gateway);
|
||||
ZeroMem (&Gateway, sizeof (Gateway));
|
||||
if (!IP4_NET_EQUAL (DhcpSb->ClientAddr, EndPoint.RemoteAddr.Addr[0], SubnetMask)) {
|
||||
CopyMem (&Gateway.v4, &Token->GatewayAddress, sizeof (EFI_IPv4_ADDRESS));
|
||||
Gateway.Addr[0] = NTOHL (Gateway.Addr[0]);
|
||||
}
|
||||
|
||||
//
|
||||
// Transmit the DHCP packet.
|
||||
//
|
||||
Status = UdpIoSendDatagram (Instance->UdpIo, Wrap, &EndPoint, Gateway, DhcpOnPacketSent, NULL);
|
||||
Status = UdpIoSendDatagram (Instance->UdpIo, Wrap, &EndPoint, &Gateway, DhcpOnPacketSent, NULL);
|
||||
if (EFI_ERROR (Status)) {
|
||||
NetbufFree (Wrap);
|
||||
goto ON_ERROR;
|
||||
|
@ -1563,8 +1569,8 @@ EfiDhcp4TransmitReceive (
|
|||
ON_ERROR:
|
||||
|
||||
if (EFI_ERROR (Status) && (Instance->UdpIo != NULL)) {
|
||||
UdpIoCleanPort (Instance->UdpIo);
|
||||
UdpIoFreePort (Instance->UdpIo);
|
||||
UdpIoCleanIo (Instance->UdpIo);
|
||||
UdpIoFreeIo (Instance->UdpIo);
|
||||
Instance->UdpIo = NULL;
|
||||
Instance->Token = NULL;
|
||||
}
|
||||
|
@ -1583,7 +1589,7 @@ ON_ERROR:
|
|||
// free it when timeout.
|
||||
//
|
||||
if (Instance->Timeout > 0) {
|
||||
Instance->UdpIo->Udp->Poll (Instance->UdpIo->Udp);
|
||||
Instance->UdpIo->Protocol.Udp4->Poll (Instance->UdpIo->Protocol.Udp4);
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
} else {
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
|
|
|
@ -69,7 +69,7 @@ struct _DHCP_PROTOCOL {
|
|||
EFI_EVENT RenewRebindEvent;
|
||||
|
||||
EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN *Token;
|
||||
UDP_IO_PORT *UdpIo; // The UDP IO used for TransmitReceive.
|
||||
UDP_IO *UdpIo; // The UDP IO used for TransmitReceive.
|
||||
UINT32 Timeout;
|
||||
NET_BUF_QUEUE ResponseQueue;
|
||||
};
|
||||
|
@ -108,8 +108,8 @@ struct _DHCP_SERVICE {
|
|||
UINT32 T2;
|
||||
INTN ExtraRefresh; // This refresh is reqested by user
|
||||
|
||||
UDP_IO_PORT *UdpIo; // Udp child receiving all DHCP message
|
||||
UDP_IO_PORT *LeaseIoPort; // Udp child with lease IP
|
||||
UDP_IO *UdpIo; // Udp child receiving all DHCP message
|
||||
UDP_IO *LeaseIoPort; // Udp child with lease IP
|
||||
EFI_DHCP4_PACKET *LastPacket; // The last sent packet for retransmission
|
||||
EFI_MAC_ADDRESS Mac;
|
||||
UINT8 HwType;
|
||||
|
|
|
@ -305,7 +305,7 @@ DhcpComputeLease (
|
|||
DHCP driver needs this port to unicast packet to the server
|
||||
such as DHCP release.
|
||||
|
||||
@param[in] UdpIo The UDP IO port to configure
|
||||
@param[in] UdpIo The UDP IO to configure
|
||||
@param[in] Context Dhcp service instance.
|
||||
|
||||
@retval EFI_SUCCESS The UDP IO port is successfully configured.
|
||||
|
@ -314,7 +314,7 @@ DhcpComputeLease (
|
|||
**/
|
||||
EFI_STATUS
|
||||
DhcpConfigLeaseIoPort (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
|
@ -349,7 +349,7 @@ DhcpConfigLeaseIoPort (
|
|||
|
||||
ZeroMem (&UdpConfigData.RemoteAddress, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
Status = UdpIo->Udp->Configure (UdpIo->Udp, &UdpConfigData);
|
||||
Status = UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, &UdpConfigData);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
|
@ -364,7 +364,7 @@ DhcpConfigLeaseIoPort (
|
|||
Ip = HTONL (DhcpSb->Para->Router);
|
||||
CopyMem (&Gateway, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
UdpIo->Udp->Routes (UdpIo->Udp, FALSE, &Subnet, &Subnet, &Gateway);
|
||||
UdpIo->Protocol.Udp4->Routes (UdpIo->Protocol.Udp4, FALSE, &Subnet, &Subnet, &Gateway);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
@ -402,7 +402,7 @@ DhcpLeaseAcquired (
|
|||
}
|
||||
|
||||
if (DhcpSb->LeaseIoPort != NULL) {
|
||||
UdpIoFreePort (DhcpSb->LeaseIoPort);
|
||||
UdpIoFreeIo (DhcpSb->LeaseIoPort);
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -410,10 +410,11 @@ DhcpLeaseAcquired (
|
|||
// and transmit unicast packet with it as source address. Don't
|
||||
// start receive on this port, the queued packet will be timeout.
|
||||
//
|
||||
DhcpSb->LeaseIoPort = UdpIoCreatePort (
|
||||
DhcpSb->LeaseIoPort = UdpIoCreateIo (
|
||||
DhcpSb->Controller,
|
||||
DhcpSb->Image,
|
||||
DhcpConfigLeaseIoPort,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
DhcpSb
|
||||
);
|
||||
|
||||
|
@ -467,7 +468,7 @@ DhcpCleanLease (
|
|||
DhcpSb->ExtraRefresh = FALSE;
|
||||
|
||||
if (DhcpSb->LeaseIoPort != NULL) {
|
||||
UdpIoFreePort (DhcpSb->LeaseIoPort);
|
||||
UdpIoFreeIo (DhcpSb->LeaseIoPort);
|
||||
DhcpSb->LeaseIoPort = NULL;
|
||||
}
|
||||
|
||||
|
@ -935,7 +936,7 @@ ON_EXIT:
|
|||
state machine.
|
||||
|
||||
@param UdpPacket The UDP packets received.
|
||||
@param Points The local/remote UDP access points
|
||||
@param EndPoint The local/remote UDP access point
|
||||
@param IoStatus The status of the UDP receive
|
||||
@param Context The opaque parameter to the function.
|
||||
|
||||
|
@ -943,7 +944,7 @@ ON_EXIT:
|
|||
VOID
|
||||
DhcpInput (
|
||||
NET_BUF *UdpPacket,
|
||||
UDP_POINTS *Points,
|
||||
UDP_END_POINT *EndPoint,
|
||||
EFI_STATUS IoStatus,
|
||||
VOID *Context
|
||||
)
|
||||
|
@ -1106,7 +1107,7 @@ DhcpReleasePacket (
|
|||
Release the net buffer when packet is sent.
|
||||
|
||||
@param UdpPacket The UDP packets received.
|
||||
@param Points The local/remote UDP access points
|
||||
@param EndPoint The local/remote UDP access point
|
||||
@param IoStatus The status of the UDP receive
|
||||
@param Context The opaque parameter to the function.
|
||||
|
||||
|
@ -1114,7 +1115,7 @@ DhcpReleasePacket (
|
|||
VOID
|
||||
DhcpOnPacketSent (
|
||||
NET_BUF *Packet,
|
||||
UDP_POINTS *Points,
|
||||
UDP_END_POINT *EndPoint,
|
||||
EFI_STATUS IoStatus,
|
||||
VOID *Context
|
||||
)
|
||||
|
@ -1157,8 +1158,8 @@ DhcpSendMessage (
|
|||
EFI_DHCP4_PACKET *NewPacket;
|
||||
EFI_DHCP4_HEADER *Head;
|
||||
EFI_DHCP4_HEADER *SeedHead;
|
||||
UDP_IO_PORT *UdpIo;
|
||||
UDP_POINTS EndPoint;
|
||||
UDP_IO *UdpIo;
|
||||
UDP_END_POINT EndPoint;
|
||||
NET_BUF *Wrap;
|
||||
NET_FRAGMENT Frag;
|
||||
EFI_STATUS Status;
|
||||
|
@ -1363,16 +1364,16 @@ DhcpSendMessage (
|
|||
// Broadcast the message, unless we know the server address.
|
||||
// Use the lease UdpIo port to send the unicast packet.
|
||||
//
|
||||
EndPoint.RemoteAddr = 0xffffffff;
|
||||
EndPoint.LocalAddr = 0;
|
||||
EndPoint.RemotePort = DHCP_SERVER_PORT;
|
||||
EndPoint.LocalPort = DHCP_CLIENT_PORT;
|
||||
UdpIo = DhcpSb->UdpIo;
|
||||
EndPoint.RemoteAddr.Addr[0] = 0xffffffff;
|
||||
EndPoint.LocalAddr.Addr[0] = 0;
|
||||
EndPoint.RemotePort = DHCP_SERVER_PORT;
|
||||
EndPoint.LocalPort = DHCP_CLIENT_PORT;
|
||||
UdpIo = DhcpSb->UdpIo;
|
||||
|
||||
if ((DhcpSb->DhcpState == Dhcp4Renewing) || (Type == DHCP_MSG_RELEASE)) {
|
||||
EndPoint.RemoteAddr = DhcpSb->ServerAddr;
|
||||
EndPoint.LocalAddr = DhcpSb->ClientAddr;
|
||||
UdpIo = DhcpSb->LeaseIoPort;
|
||||
EndPoint.RemoteAddr.Addr[0] = DhcpSb->ServerAddr;
|
||||
EndPoint.LocalAddr.Addr[0] = DhcpSb->ClientAddr;
|
||||
UdpIo = DhcpSb->LeaseIoPort;
|
||||
}
|
||||
|
||||
ASSERT (UdpIo != NULL);
|
||||
|
@ -1382,7 +1383,7 @@ DhcpSendMessage (
|
|||
UdpIo,
|
||||
Wrap,
|
||||
&EndPoint,
|
||||
0,
|
||||
NULL,
|
||||
DhcpOnPacketSent,
|
||||
DhcpSb
|
||||
);
|
||||
|
@ -1411,8 +1412,8 @@ DhcpRetransmit (
|
|||
IN DHCP_SERVICE *DhcpSb
|
||||
)
|
||||
{
|
||||
UDP_IO_PORT *UdpIo;
|
||||
UDP_POINTS EndPoint;
|
||||
UDP_IO *UdpIo;
|
||||
UDP_END_POINT EndPoint;
|
||||
NET_BUF *Wrap;
|
||||
NET_FRAGMENT Frag;
|
||||
EFI_STATUS Status;
|
||||
|
@ -1435,16 +1436,16 @@ DhcpRetransmit (
|
|||
//
|
||||
// Broadcast the message, unless we know the server address.
|
||||
//
|
||||
EndPoint.RemotePort = DHCP_SERVER_PORT;
|
||||
EndPoint.LocalPort = DHCP_CLIENT_PORT;
|
||||
EndPoint.RemoteAddr = 0xffffffff;
|
||||
EndPoint.LocalAddr = 0;
|
||||
UdpIo = DhcpSb->UdpIo;
|
||||
EndPoint.RemotePort = DHCP_SERVER_PORT;
|
||||
EndPoint.LocalPort = DHCP_CLIENT_PORT;
|
||||
EndPoint.RemoteAddr.Addr[0] = 0xffffffff;
|
||||
EndPoint.LocalAddr.Addr[0] = 0;
|
||||
UdpIo = DhcpSb->UdpIo;
|
||||
|
||||
if (DhcpSb->DhcpState == Dhcp4Renewing) {
|
||||
EndPoint.RemoteAddr = DhcpSb->ServerAddr;
|
||||
EndPoint.LocalAddr = DhcpSb->ClientAddr;
|
||||
UdpIo = DhcpSb->LeaseIoPort;
|
||||
EndPoint.RemoteAddr.Addr[0] = DhcpSb->ServerAddr;
|
||||
EndPoint.LocalAddr.Addr[0] = DhcpSb->ClientAddr;
|
||||
UdpIo = DhcpSb->LeaseIoPort;
|
||||
}
|
||||
|
||||
ASSERT (UdpIo != NULL);
|
||||
|
@ -1454,7 +1455,7 @@ DhcpRetransmit (
|
|||
UdpIo,
|
||||
Wrap,
|
||||
&EndPoint,
|
||||
0,
|
||||
NULL,
|
||||
DhcpOnPacketSent,
|
||||
DhcpSb
|
||||
);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
The DHCP4 protocol implementation.
|
||||
|
||||
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
|
||||
|
@ -140,7 +140,7 @@ DhcpOnTimerTick (
|
|||
state machine.
|
||||
|
||||
@param UdpPacket The UDP packets received.
|
||||
@param Points The local/remote UDP access points
|
||||
@param EndPoint The local/remote UDP access point
|
||||
@param IoStatus The status of the UDP receive
|
||||
@param Context The opaque parameter to the function.
|
||||
|
||||
|
@ -148,7 +148,7 @@ DhcpOnTimerTick (
|
|||
VOID
|
||||
DhcpInput (
|
||||
NET_BUF *UdpPacket,
|
||||
UDP_POINTS *Points,
|
||||
UDP_END_POINT *EndPoint,
|
||||
EFI_STATUS IoStatus,
|
||||
VOID *Context
|
||||
);
|
||||
|
@ -183,7 +183,7 @@ DhcpCleanLease (
|
|||
Release the net buffer when packet is sent.
|
||||
|
||||
@param UdpPacket The UDP packets received.
|
||||
@param Points The local/remote UDP access points
|
||||
@param EndPoint The local/remote UDP access point
|
||||
@param IoStatus The status of the UDP receive
|
||||
@param Context The opaque parameter to the function.
|
||||
|
||||
|
@ -191,7 +191,7 @@ DhcpCleanLease (
|
|||
VOID
|
||||
DhcpOnPacketSent (
|
||||
NET_BUF *Packet,
|
||||
UDP_POINTS *Points,
|
||||
UDP_END_POINT *EndPoint,
|
||||
EFI_STATUS IoStatus,
|
||||
VOID *Context
|
||||
);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Implementation of Mtftp drivers.
|
||||
|
||||
Copyright (c) 2006 - 2007, 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
|
||||
|
@ -107,7 +107,7 @@ Mtftp4DriverBindingSupported (
|
|||
Just leave the Udp child unconfigured. When UDP is unloaded,
|
||||
MTFTP will be informed with DriverBinding Stop.
|
||||
|
||||
@param UdpIo The UDP port to configure
|
||||
@param UdpIo The UDP_IO to configure
|
||||
@param Context The opaque parameter to the callback
|
||||
|
||||
@retval EFI_SUCCESS It always return EFI_SUCCESS directly.
|
||||
|
@ -115,7 +115,7 @@ Mtftp4DriverBindingSupported (
|
|||
**/
|
||||
EFI_STATUS
|
||||
Mtftp4ConfigNullUdp (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
|
@ -201,7 +201,13 @@ Mtftp4CreateService (
|
|||
return Status;
|
||||
}
|
||||
|
||||
MtftpSb->ConnectUdp = UdpIoCreatePort (Controller, Image, Mtftp4ConfigNullUdp, NULL);
|
||||
MtftpSb->ConnectUdp = UdpIoCreateIo (
|
||||
Controller,
|
||||
Image,
|
||||
Mtftp4ConfigNullUdp,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (MtftpSb->ConnectUdp == NULL) {
|
||||
gBS->CloseEvent (MtftpSb->TimerToGetMap);
|
||||
|
@ -226,7 +232,7 @@ Mtftp4CleanService (
|
|||
IN MTFTP4_SERVICE *MtftpSb
|
||||
)
|
||||
{
|
||||
UdpIoFreePort (MtftpSb->ConnectUdp);
|
||||
UdpIoFreeIo (MtftpSb->ConnectUdp);
|
||||
gBS->CloseEvent (MtftpSb->TimerToGetMap);
|
||||
gBS->CloseEvent (MtftpSb->Timer);
|
||||
}
|
||||
|
@ -467,10 +473,11 @@ Mtftp4ServiceBindingCreateChild (
|
|||
|
||||
Mtftp4InitProtocol (MtftpSb, Instance);
|
||||
|
||||
Instance->UnicastPort = UdpIoCreatePort (
|
||||
Instance->UnicastPort = UdpIoCreateIo (
|
||||
MtftpSb->Controller,
|
||||
MtftpSb->Image,
|
||||
Mtftp4ConfigNullUdp,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
Instance
|
||||
);
|
||||
|
||||
|
@ -530,7 +537,7 @@ Mtftp4ServiceBindingCreateChild (
|
|||
ON_ERROR:
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
UdpIoFreePort (Instance->UnicastPort);
|
||||
UdpIoFreeIo (Instance->UnicastPort);
|
||||
gBS->FreePool (Instance);
|
||||
}
|
||||
|
||||
|
@ -623,7 +630,7 @@ Mtftp4ServiceBindingDestroyChild (
|
|||
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
||||
|
||||
Mtftp4CleanOperation (Instance, EFI_DEVICE_ERROR);
|
||||
UdpIoFreePort (Instance->UnicastPort);
|
||||
UdpIoFreeIo (Instance->UnicastPort);
|
||||
|
||||
RemoveEntryList (&Instance->Link);
|
||||
MtftpSb->ChildrenNum--;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#/** @file
|
||||
# Component name for module Mtftp4
|
||||
#
|
||||
# Copyright (c) 2007, Intel Corporation
|
||||
# Copyright (c) 2007 - 2009, Intel Corporation
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -67,4 +67,6 @@
|
|||
gEfiMtftp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp4ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp4ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp6ServiceBindingProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEfiUdp6ProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ Mtftp4CleanOperation (
|
|||
}
|
||||
|
||||
ASSERT (Instance->UnicastPort != NULL);
|
||||
UdpIoCleanPort (Instance->UnicastPort);
|
||||
UdpIoCleanIo (Instance->UnicastPort);
|
||||
|
||||
if (Instance->LastPacket != NULL) {
|
||||
NetbufFree (Instance->LastPacket);
|
||||
|
@ -58,7 +58,7 @@ Mtftp4CleanOperation (
|
|||
}
|
||||
|
||||
if (Instance->McastUdpPort != NULL) {
|
||||
UdpIoFreePort (Instance->McastUdpPort);
|
||||
UdpIoFreeIo (Instance->McastUdpPort);
|
||||
Instance->McastUdpPort = NULL;
|
||||
}
|
||||
|
||||
|
@ -211,9 +211,8 @@ Mtftp4OverrideValid (
|
|||
the UDP is reconfigured.
|
||||
|
||||
@param Instance The Mtftp instance
|
||||
@param UdpPort The UDP port to poll
|
||||
@param UdpCfgData The UDP configure data to reconfigure the UDP
|
||||
port.
|
||||
@param UdpIo The UDP_IO to poll
|
||||
@param UdpCfgData The UDP configure data to reconfigure the UDP_IO
|
||||
|
||||
@retval TRUE The default address is retrieved and UDP is reconfigured.
|
||||
@retval FALSE Some error occured.
|
||||
|
@ -222,7 +221,7 @@ Mtftp4OverrideValid (
|
|||
BOOLEAN
|
||||
Mtftp4GetMapping (
|
||||
IN MTFTP4_PROTOCOL *Instance,
|
||||
IN UDP_IO_PORT *UdpPort,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN EFI_UDP4_CONFIG_DATA *UdpCfgData
|
||||
)
|
||||
{
|
||||
|
@ -234,7 +233,7 @@ Mtftp4GetMapping (
|
|||
ASSERT (Instance->Config.UseDefaultSetting);
|
||||
|
||||
Service = Instance->Service;
|
||||
Udp = UdpPort->Udp;
|
||||
Udp = UdpIo->Protocol.Udp4;
|
||||
|
||||
Status = gBS->SetTimer (
|
||||
Service->TimerToGetMap,
|
||||
|
@ -263,7 +262,7 @@ Mtftp4GetMapping (
|
|||
/**
|
||||
Configure the UDP port for unicast receiving.
|
||||
|
||||
@param UdpIo The UDP port
|
||||
@param UdpIo The UDP_IO instance
|
||||
@param Instance The MTFTP session
|
||||
|
||||
@retval EFI_SUCCESS The UDP port is successfully configured for the
|
||||
|
@ -272,7 +271,7 @@ Mtftp4GetMapping (
|
|||
**/
|
||||
EFI_STATUS
|
||||
Mtftp4ConfigUnicastPort (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
IN UDP_IO *UdpIo,
|
||||
IN MTFTP4_PROTOCOL *Instance
|
||||
)
|
||||
{
|
||||
|
@ -301,7 +300,7 @@ Mtftp4ConfigUnicastPort (
|
|||
Ip = HTONL (Instance->ServerIp);
|
||||
CopyMem (&UdpConfig.RemoteAddress, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
Status = UdpIo->Udp->Configure (UdpIo->Udp, &UdpConfig);
|
||||
Status = UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, &UdpConfig);
|
||||
|
||||
if ((Status == EFI_NO_MAPPING) && Mtftp4GetMapping (Instance, UdpIo, &UdpConfig)) {
|
||||
return EFI_SUCCESS;
|
||||
|
@ -312,9 +311,15 @@ Mtftp4ConfigUnicastPort (
|
|||
// The station IP address is manually configured and the Gateway IP is not 0.
|
||||
// Add the default route for this UDP instance.
|
||||
//
|
||||
Status = UdpIo->Udp->Routes (UdpIo->Udp, FALSE, &mZeroIp4Addr, &mZeroIp4Addr, &Config->GatewayIp);
|
||||
Status = UdpIo->Protocol.Udp4->Routes (
|
||||
UdpIo->Protocol.Udp4,
|
||||
FALSE,
|
||||
&mZeroIp4Addr,
|
||||
&mZeroIp4Addr,
|
||||
&Config->GatewayIp
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
UdpIo->Udp->Configure (UdpIo->Udp, NULL);
|
||||
UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, NULL);
|
||||
}
|
||||
}
|
||||
return Status;
|
||||
|
@ -1070,7 +1075,7 @@ EfiMtftp4Poll (
|
|||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
Udp = Instance->UnicastPort->Udp;
|
||||
Udp = Instance->UnicastPort->Protocol.Udp4;
|
||||
return Udp->Poll (Udp);
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ struct _MTFTP4_SERVICE {
|
|||
// This UDP child is used to keep the connection between the UDP
|
||||
// and MTFTP, so MTFTP will be notified when UDP is uninstalled.
|
||||
//
|
||||
UDP_IO_PORT *ConnectUdp;
|
||||
UDP_IO *ConnectUdp;
|
||||
};
|
||||
|
||||
|
||||
|
@ -131,7 +131,7 @@ struct _MTFTP4_PROTOCOL {
|
|||
UINT16 ListeningPort;
|
||||
UINT16 ConnectedPort;
|
||||
IP4_ADDR Gateway;
|
||||
UDP_IO_PORT *UnicastPort;
|
||||
UDP_IO *UnicastPort;
|
||||
|
||||
//
|
||||
// Timeout and retransmit status
|
||||
|
@ -148,7 +148,7 @@ struct _MTFTP4_PROTOCOL {
|
|||
IP4_ADDR McastIp;
|
||||
UINT16 McastPort;
|
||||
BOOLEAN Master;
|
||||
UDP_IO_PORT *McastUdpPort;
|
||||
UDP_IO *McastUdpPort;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,7 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
The packet process callback for MTFTP download.
|
||||
|
||||
@param UdpPacket The packet received
|
||||
@param Points The local/remote access point of the packet
|
||||
@param EndPoint The local/remote access point of the packet
|
||||
@param IoStatus The status of the receiving
|
||||
@param Context Opaque parameter, which is the MTFTP session
|
||||
|
||||
|
@ -28,7 +28,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
VOID
|
||||
Mtftp4RrqInput (
|
||||
IN NET_BUF *UdpPacket,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
@ -370,7 +370,7 @@ Mtftp4RrqOackValid (
|
|||
/**
|
||||
Configure a UDP IO port to receive the multicast.
|
||||
|
||||
@param McastIo The UDP IO port to configure
|
||||
@param McastIo The UDP IO to configure
|
||||
@param Context The opaque parameter to the function which is the
|
||||
MTFTP session.
|
||||
|
||||
|
@ -380,7 +380,7 @@ Mtftp4RrqOackValid (
|
|||
**/
|
||||
EFI_STATUS
|
||||
Mtftp4RrqConfigMcastPort (
|
||||
IN UDP_IO_PORT *McastIo,
|
||||
IN UDP_IO *McastIo,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
|
@ -412,7 +412,7 @@ Mtftp4RrqConfigMcastPort (
|
|||
Ip = HTONL (Instance->ServerIp);
|
||||
CopyMem (&UdpConfig.RemoteAddress, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
Status = McastIo->Udp->Configure (McastIo->Udp, &UdpConfig);
|
||||
Status = McastIo->Protocol.Udp4->Configure (McastIo->Protocol.Udp4, &UdpConfig);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
|
@ -424,16 +424,16 @@ Mtftp4RrqConfigMcastPort (
|
|||
// The station IP address is manually configured and the Gateway IP is not 0.
|
||||
// Add the default route for this UDP instance.
|
||||
//
|
||||
Status = McastIo->Udp->Routes (
|
||||
McastIo->Udp,
|
||||
FALSE,
|
||||
&mZeroIp4Addr,
|
||||
&mZeroIp4Addr,
|
||||
&Config->GatewayIp
|
||||
);
|
||||
Status = McastIo->Protocol.Udp4->Routes (
|
||||
McastIo->Protocol.Udp4,
|
||||
FALSE,
|
||||
&mZeroIp4Addr,
|
||||
&mZeroIp4Addr,
|
||||
&Config->GatewayIp
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
McastIo->Udp->Configure (McastIo->Udp, NULL);
|
||||
McastIo->Protocol.Udp4->Configure (McastIo->Protocol.Udp4, NULL);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
@ -444,7 +444,7 @@ Mtftp4RrqConfigMcastPort (
|
|||
Ip = HTONL (Instance->McastIp);
|
||||
CopyMem (&Group, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
||||
|
||||
return McastIo->Udp->Groups (McastIo->Udp, TRUE, &Group);
|
||||
return McastIo->Protocol.Udp4->Groups (McastIo->Protocol.Udp4, TRUE, &Group);
|
||||
}
|
||||
|
||||
|
||||
|
@ -539,10 +539,11 @@ Mtftp4RrqHandleOack (
|
|||
//
|
||||
Instance->McastIp = Reply.McastIp;
|
||||
Instance->McastPort = Reply.McastPort;
|
||||
Instance->McastUdpPort = UdpIoCreatePort (
|
||||
Instance->McastUdpPort = UdpIoCreateIo (
|
||||
Instance->Service->Controller,
|
||||
Instance->Service->Image,
|
||||
Mtftp4RrqConfigMcastPort,
|
||||
UDP_IO_UDP4_VERSION,
|
||||
Instance
|
||||
);
|
||||
|
||||
|
@ -598,7 +599,7 @@ Mtftp4RrqHandleOack (
|
|||
The packet process callback for MTFTP download.
|
||||
|
||||
@param UdpPacket The packet received
|
||||
@param Points The local/remote access point of the packet
|
||||
@param EndPoint The local/remote access point of the packet
|
||||
@param IoStatus The status of the receiving
|
||||
@param Context Opaque parameter, which is the MTFTP session
|
||||
|
||||
|
@ -606,7 +607,7 @@ Mtftp4RrqHandleOack (
|
|||
VOID
|
||||
Mtftp4RrqInput (
|
||||
IN NET_BUF *UdpPacket,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
)
|
||||
|
@ -637,7 +638,7 @@ Mtftp4RrqInput (
|
|||
//
|
||||
// Find the port this packet is from to restart receive correctly.
|
||||
//
|
||||
Multicast = (BOOLEAN) (Points->LocalAddr == Instance->McastIp);
|
||||
Multicast = (BOOLEAN) (EndPoint->LocalAddr.Addr[0] == Instance->McastIp);
|
||||
|
||||
if (UdpPacket->TotalSize < MTFTP4_OPCODE_LEN) {
|
||||
goto ON_EXIT;
|
||||
|
@ -649,11 +650,11 @@ Mtftp4RrqInput (
|
|||
// is required to use the same port as RemotePort to multicast the
|
||||
// data.
|
||||
//
|
||||
if (Points->RemotePort != Instance->ConnectedPort) {
|
||||
if (EndPoint->RemotePort != Instance->ConnectedPort) {
|
||||
if (Instance->ConnectedPort != 0) {
|
||||
goto ON_EXIT;
|
||||
} else {
|
||||
Instance->ConnectedPort = Points->RemotePort;
|
||||
Instance->ConnectedPort = EndPoint->RemotePort;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -359,7 +359,7 @@ Mtftp4SendError (
|
|||
It simply frees the packet.
|
||||
|
||||
@param Packet The transmitted (or failed to) packet
|
||||
@param Points The local and remote UDP access point
|
||||
@param EndPoint The local and remote UDP access point
|
||||
@param IoStatus The result of the transmission
|
||||
@param Context Opaque parameter to the callback
|
||||
|
||||
|
@ -367,7 +367,7 @@ Mtftp4SendError (
|
|||
VOID
|
||||
Mtftp4OnPacketSent (
|
||||
IN NET_BUF *Packet,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
)
|
||||
|
@ -415,7 +415,7 @@ Mtftp4SendPacket (
|
|||
IN OUT NET_BUF *Packet
|
||||
)
|
||||
{
|
||||
UDP_POINTS UdpPoint;
|
||||
UDP_END_POINT UdpPoint;
|
||||
EFI_STATUS Status;
|
||||
UINT16 OpCode;
|
||||
UINT16 Value;
|
||||
|
@ -427,14 +427,13 @@ Mtftp4SendPacket (
|
|||
NetbufFree (Instance->LastPacket);
|
||||
}
|
||||
|
||||
Instance->LastPacket = Packet;
|
||||
Instance->LastPacket = Packet;
|
||||
|
||||
Instance->CurRetry = 0;
|
||||
Instance->CurRetry = 0;
|
||||
Mtftp4SetTimeout (Instance);
|
||||
|
||||
UdpPoint.LocalAddr = 0;
|
||||
UdpPoint.LocalPort = 0;
|
||||
UdpPoint.RemoteAddr = Instance->ServerIp;
|
||||
ZeroMem (&UdpPoint, sizeof (UdpPoint));
|
||||
UdpPoint.RemoteAddr.Addr[0] = Instance->ServerIp;
|
||||
|
||||
//
|
||||
// Send the requests to the listening port, other packets
|
||||
|
@ -457,7 +456,7 @@ Mtftp4SendPacket (
|
|||
Instance->UnicastPort,
|
||||
Packet,
|
||||
&UdpPoint,
|
||||
0,
|
||||
NULL,
|
||||
Mtftp4OnPacketSent,
|
||||
Instance
|
||||
);
|
||||
|
@ -484,16 +483,15 @@ Mtftp4Retransmit (
|
|||
IN MTFTP4_PROTOCOL *Instance
|
||||
)
|
||||
{
|
||||
UDP_POINTS UdpPoint;
|
||||
UDP_END_POINT UdpPoint;
|
||||
EFI_STATUS Status;
|
||||
UINT16 OpCode;
|
||||
UINT16 Value;
|
||||
|
||||
ASSERT (Instance->LastPacket != NULL);
|
||||
|
||||
UdpPoint.LocalAddr = 0;
|
||||
UdpPoint.LocalPort = 0;
|
||||
UdpPoint.RemoteAddr = Instance->ServerIp;
|
||||
ZeroMem (&UdpPoint, sizeof (UdpPoint));
|
||||
UdpPoint.RemoteAddr.Addr[0] = Instance->ServerIp;
|
||||
|
||||
//
|
||||
// Set the requests to the listening port, other packets to the connected port
|
||||
|
@ -514,7 +512,7 @@ Mtftp4Retransmit (
|
|||
Instance->UnicastPort,
|
||||
Instance->LastPacket,
|
||||
&UdpPoint,
|
||||
0,
|
||||
NULL,
|
||||
Mtftp4OnPacketSent,
|
||||
Instance
|
||||
);
|
||||
|
|
|
@ -329,7 +329,7 @@ Mtftp4WrqHandleOack (
|
|||
The input process routine for MTFTP upload.
|
||||
|
||||
@param UdpPacket The received MTFTP packet.
|
||||
@param Points The local/remote access point
|
||||
@param EndPoint The local/remote access point
|
||||
@param IoStatus The result of the packet receiving
|
||||
@param Context Opaque parameter for the callback, which is the
|
||||
MTFTP session.
|
||||
|
@ -337,7 +337,7 @@ Mtftp4WrqHandleOack (
|
|||
VOID
|
||||
Mtftp4WrqInput (
|
||||
IN NET_BUF *UdpPacket,
|
||||
IN UDP_POINTS *Points,
|
||||
IN UDP_END_POINT *EndPoint,
|
||||
IN EFI_STATUS IoStatus,
|
||||
IN VOID *Context
|
||||
)
|
||||
|
@ -371,11 +371,11 @@ Mtftp4WrqInput (
|
|||
// Client send initial request to server's listening port. Server
|
||||
// will select a UDP port to communicate with the client.
|
||||
//
|
||||
if (Points->RemotePort != Instance->ConnectedPort) {
|
||||
if (EndPoint->RemotePort != Instance->ConnectedPort) {
|
||||
if (Instance->ConnectedPort != 0) {
|
||||
goto ON_EXIT;
|
||||
} else {
|
||||
Instance->ConnectedPort = Points->RemotePort;
|
||||
Instance->ConnectedPort = EndPoint->RemotePort;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Tcp driver function header.
|
||||
|
||||
Copyright (c) 2005 - 2006, Intel Corporation<BR>
|
||||
Copyright (c) 2005 - 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
|
||||
|
@ -78,7 +78,7 @@ typedef struct _TCP4_PROTO_DATA {
|
|||
VOID
|
||||
Tcp4RxCallback (
|
||||
IN EFI_STATUS Status,
|
||||
IN ICMP_ERROR IcmpErr,
|
||||
IN UINT8 IcmpErr,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Pkt,
|
||||
IN VOID *Context OPTIONAL
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Tcp function header file.
|
||||
|
||||
Copyright (c) 2005 - 2006, Intel Corporation<BR>
|
||||
Copyright (c) 2005 - 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
|
||||
|
@ -433,7 +433,7 @@ TcpGetMaxSndNxt (
|
|||
VOID
|
||||
TcpIcmpInput (
|
||||
IN NET_BUF *Nbuf,
|
||||
IN ICMP_ERROR IcmpErr,
|
||||
IN UINT8 IcmpErr,
|
||||
IN UINT32 Src,
|
||||
IN UINT32 Dst
|
||||
);
|
||||
|
|
|
@ -1407,7 +1407,7 @@ DISCARD:
|
|||
VOID
|
||||
TcpIcmpInput (
|
||||
IN NET_BUF *Nbuf,
|
||||
IN ICMP_ERROR IcmpErr,
|
||||
IN UINT8 IcmpErr,
|
||||
IN UINT32 Src,
|
||||
IN UINT32 Dst
|
||||
)
|
||||
|
|
|
@ -30,7 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
VOID
|
||||
Tcp4RxCallback (
|
||||
IN EFI_STATUS Status,
|
||||
IN ICMP_ERROR IcmpErr,
|
||||
IN UINT8 IcmpErr,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Pkt,
|
||||
IN VOID *Context OPTIONAL
|
||||
|
|
|
@ -86,7 +86,7 @@ Udp4DgramSent (
|
|||
VOID
|
||||
Udp4DgramRcvd (
|
||||
IN EFI_STATUS Status,
|
||||
IN ICMP_ERROR IcmpError,
|
||||
IN UINT8 IcmpError,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Packet,
|
||||
IN VOID *Context
|
||||
|
@ -227,7 +227,7 @@ Udp4Demultiplex (
|
|||
VOID
|
||||
Udp4IcmpHandler (
|
||||
IN UDP4_SERVICE_DATA *Udp4Service,
|
||||
IN ICMP_ERROR IcmpError,
|
||||
IN UINT8 IcmpError,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Packet
|
||||
);
|
||||
|
@ -1029,7 +1029,7 @@ Udp4DgramSent (
|
|||
VOID
|
||||
Udp4DgramRcvd (
|
||||
IN EFI_STATUS Status,
|
||||
IN ICMP_ERROR IcmpError,
|
||||
IN UINT8 IcmpError,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Packet,
|
||||
IN VOID *Context
|
||||
|
@ -1780,7 +1780,7 @@ Udp4SendPortUnreach (
|
|||
VOID
|
||||
Udp4IcmpHandler (
|
||||
IN UDP4_SERVICE_DATA *Udp4Service,
|
||||
IN ICMP_ERROR IcmpError,
|
||||
IN UINT8 IcmpError,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Packet
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue