From 07135c12205805fa0ffcc0d0f347c3d4de37188b Mon Sep 17 00:00:00 2001 From: Liming Gao Date: Wed, 15 May 2019 20:02:19 +0800 Subject: NetworkPkg: Move Network library header file from MdeModulePkg to NetworkPkg Signed-off-by: Liming Gao Cc: Siyuan Fu Cc: Jiaxin Wu Reviewed-by: Jiaxin Wu Reviewed-by: Siyuan Fu --- MdeModulePkg/Include/Library/DpcLib.h | 53 - MdeModulePkg/Include/Library/HttpLib.h | 481 ------- MdeModulePkg/Include/Library/IpIoLib.h | 607 --------- MdeModulePkg/Include/Library/NetLib.h | 2266 ------------------------------- MdeModulePkg/Include/Library/TcpIoLib.h | 247 ---- MdeModulePkg/Include/Library/UdpIoLib.h | 363 ----- 6 files changed, 4017 deletions(-) delete mode 100644 MdeModulePkg/Include/Library/DpcLib.h delete mode 100644 MdeModulePkg/Include/Library/HttpLib.h delete mode 100644 MdeModulePkg/Include/Library/IpIoLib.h delete mode 100644 MdeModulePkg/Include/Library/NetLib.h delete mode 100644 MdeModulePkg/Include/Library/TcpIoLib.h delete mode 100644 MdeModulePkg/Include/Library/UdpIoLib.h (limited to 'MdeModulePkg') diff --git a/MdeModulePkg/Include/Library/DpcLib.h b/MdeModulePkg/Include/Library/DpcLib.h deleted file mode 100644 index a70af1d127..0000000000 --- a/MdeModulePkg/Include/Library/DpcLib.h +++ /dev/null @@ -1,53 +0,0 @@ -/** @file - DpcLib.h. - -Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _DPC_LIB_H_ -#define _DPC_LIB_H_ - -#include - -/** - Add a Deferred Procedure Call to the end of the DPC queue. - - @param[in] DpcTpl The EFI_TPL that the DPC should invoke. - @param[in] DpcProcedure The pointer to the DPC's function. - @param[in] DpcContext The pointer to the DPC's context. Passed to DpcProcedure - when DpcProcedure is invoked. - - @retval EFI_SUCCESS The DPC was queued. - @retval EFI_INVALID_PARAMETER DpcTpl is not a valid EFI_TPL. - @retval EFI_INVALID_PARAMETER DpcProcedure is NULL. - @retval EFI_OUT_OF_RESOURCES There are not enough resources available to - add the DPC to the queue. - -**/ -EFI_STATUS -EFIAPI -QueueDpc ( - IN EFI_TPL DpcTpl, - IN EFI_DPC_PROCEDURE DpcProcedure, - IN VOID *DpcContext OPTIONAL - ); - -/** - Dispatch the queue of DPCs. All DPCs that have been queued with a DpcTpl - value greater than or equal to the current TPL are invoked in the order that - they were queued. DPCs with higher DpcTpl values are invoked before DPCs with - lower DpcTpl values. - - @retval EFI_SUCCESS One or more DPCs were invoked. - @retval EFI_NOT_FOUND No DPCs were invoked. - -**/ -EFI_STATUS -EFIAPI -DispatchDpc ( - VOID - ); - -#endif diff --git a/MdeModulePkg/Include/Library/HttpLib.h b/MdeModulePkg/Include/Library/HttpLib.h deleted file mode 100644 index 93100eb350..0000000000 --- a/MdeModulePkg/Include/Library/HttpLib.h +++ /dev/null @@ -1,481 +0,0 @@ -/** @file - This library is used to share code between UEFI network stack modules. - It provides the helper routines to parse the HTTP message byte stream. - -Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.
-(C) Copyright 2016 Hewlett Packard Enterprise Development LP
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _HTTP_LIB_H_ -#define _HTTP_LIB_H_ - -#include - - -/** - Decode a percent-encoded URI component to the ASCII character. - - Decode the input component in Buffer according to RFC 3986. The caller is responsible to make - sure ResultBuffer points to a buffer with size equal or greater than ((AsciiStrSize (Buffer)) - in bytes. - - @param[in] Buffer The pointer to a percent-encoded URI component. - @param[in] BufferLength Length of Buffer in bytes. - @param[out] ResultBuffer Point to the buffer to store the decode result. - @param[out] ResultLength Length of decoded string in ResultBuffer in bytes. - - @retval EFI_SUCCESS Successfully decoded the URI. - @retval EFI_INVALID_PARAMETER Buffer is not a valid percent-encoded string. - -**/ -EFI_STATUS -EFIAPI -UriPercentDecode ( - IN CHAR8 *Buffer, - IN UINT32 BufferLength, - OUT CHAR8 *ResultBuffer, - OUT UINT32 *ResultLength - ); - -/** - Create a URL parser for the input URL string. - - This function will parse and dereference the input HTTP URL into it components. The original - content of the URL won't be modified and the result will be returned in UrlParser, which can - be used in other functions like NetHttpUrlGetHostName(). It is the caller's responsibility to - free the buffer returned in *UrlParser by HttpUrlFreeParser(). - - @param[in] Url The pointer to a HTTP URL string. - @param[in] Length Length of Url in bytes. - @param[in] IsConnectMethod Whether the Url is used in HTTP CONNECT method or not. - @param[out] UrlParser Pointer to the returned buffer to store the parse result. - - @retval EFI_SUCCESS Successfully dereferenced the HTTP URL. - @retval EFI_INVALID_PARAMETER UrlParser is NULL or Url is not a valid HTTP URL. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - -**/ -EFI_STATUS -EFIAPI -HttpParseUrl ( - IN CHAR8 *Url, - IN UINT32 Length, - IN BOOLEAN IsConnectMethod, - OUT VOID **UrlParser - ); - -/** - Get the Hostname from a HTTP URL. - - This function will return the HostName according to the Url and previous parse result ,and - it is the caller's responsibility to free the buffer returned in *HostName. - - @param[in] Url The pointer to a HTTP URL string. - @param[in] UrlParser URL Parse result returned by NetHttpParseUrl(). - @param[out] HostName Pointer to a buffer to store the HostName. - - @retval EFI_SUCCESS Successfully get the required component. - @retval EFI_INVALID_PARAMETER Uri is NULL or HostName is NULL or UrlParser is invalid. - @retval EFI_NOT_FOUND No hostName component in the URL. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - -**/ -EFI_STATUS -EFIAPI -HttpUrlGetHostName ( - IN CHAR8 *Url, - IN VOID *UrlParser, - OUT CHAR8 **HostName - ); - -/** - Get the IPv4 address from a HTTP URL. - - This function will return the IPv4 address according to the Url and previous parse result. - - @param[in] Url The pointer to a HTTP URL string. - @param[in] UrlParser URL Parse result returned by NetHttpParseUrl(). - @param[out] Ip4Address Pointer to a buffer to store the IP address. - - @retval EFI_SUCCESS Successfully get the required component. - @retval EFI_INVALID_PARAMETER Uri is NULL or Ip4Address is NULL or UrlParser is invalid. - @retval EFI_NOT_FOUND No IPv4 address component in the URL. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - -**/ -EFI_STATUS -EFIAPI -HttpUrlGetIp4 ( - IN CHAR8 *Url, - IN VOID *UrlParser, - OUT EFI_IPv4_ADDRESS *Ip4Address - ); - -/** - Get the IPv6 address from a HTTP URL. - - This function will return the IPv6 address according to the Url and previous parse result. - - @param[in] Url The pointer to a HTTP URL string. - @param[in] UrlParser URL Parse result returned by NetHttpParseUrl(). - @param[out] Ip6Address Pointer to a buffer to store the IP address. - - @retval EFI_SUCCESS Successfully get the required component. - @retval EFI_INVALID_PARAMETER Uri is NULL or Ip6Address is NULL or UrlParser is invalid. - @retval EFI_NOT_FOUND No IPv6 address component in the URL. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - -**/ -EFI_STATUS -EFIAPI -HttpUrlGetIp6 ( - IN CHAR8 *Url, - IN VOID *UrlParser, - OUT EFI_IPv6_ADDRESS *Ip6Address - ); - -/** - Get the port number from a HTTP URL. - - This function will return the port number according to the Url and previous parse result. - - @param[in] Url The pointer to a HTTP URL string. - @param[in] UrlParser URL Parse result returned by NetHttpParseUrl(). - @param[out] Port Pointer to a buffer to store the port number. - - @retval EFI_SUCCESS Successfully get the required component. - @retval EFI_INVALID_PARAMETER Uri is NULL or Port is NULL or UrlParser is invalid. - @retval EFI_NOT_FOUND No port number in the URL. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - -**/ -EFI_STATUS -EFIAPI -HttpUrlGetPort ( - IN CHAR8 *Url, - IN VOID *UrlParser, - OUT UINT16 *Port - ); - -/** - Get the Path from a HTTP URL. - - This function will return the Path according to the Url and previous parse result,and - it is the caller's responsibility to free the buffer returned in *Path. - - @param[in] Url The pointer to a HTTP URL string. - @param[in] UrlParser URL Parse result returned by NetHttpParseUrl(). - @param[out] Path Pointer to a buffer to store the Path. - - @retval EFI_SUCCESS Successfully get the required component. - @retval EFI_INVALID_PARAMETER Uri is NULL or HostName is NULL or UrlParser is invalid. - @retval EFI_NOT_FOUND No hostName component in the URL. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - -**/ -EFI_STATUS -EFIAPI -HttpUrlGetPath ( - IN CHAR8 *Url, - IN VOID *UrlParser, - OUT CHAR8 **Path - ); - -/** - Release the resource of the URL parser. - - @param[in] UrlParser Pointer to the parser. - -**/ -VOID -EFIAPI -HttpUrlFreeParser ( - IN VOID *UrlParser - ); - -// -// HTTP body parser interface. -// - -typedef enum { - // - // Part of entity data. - // Length of entity body in Data. - // - BodyParseEventOnData, - // - // End of message body. - // Length is 0 and Data points to next byte after the end of the message. - // - BodyParseEventOnComplete -} HTTP_BODY_PARSE_EVENT; - -/** - A callback function to intercept events during message parser. - - This function will be invoked during HttpParseMessageBody() with various events type. An error - return status of the callback function will cause the HttpParseMessageBody() aborted. - - @param[in] EventType Event type of this callback call. - @param[in] Data A pointer to data buffer. - @param[in] Length Length in bytes of the Data. - @param[in] Context Callback context set by HttpInitMsgParser(). - - @retval EFI_SUCCESS Continue to parser the message body. - @retval Others Abort the parse. - -**/ -typedef -EFI_STATUS -(EFIAPI *HTTP_BODY_PARSER_CALLBACK) ( - IN HTTP_BODY_PARSE_EVENT EventType, - IN CHAR8 *Data, - IN UINTN Length, - IN VOID *Context -); - -/** - Initialize a HTTP message-body parser. - - This function will create and initialize a HTTP message parser according to caller provided HTTP message - header information. It is the caller's responsibility to free the buffer returned in *UrlParser by HttpFreeMsgParser(). - - @param[in] Method The HTTP method (e.g. GET, POST) for this HTTP message. - @param[in] StatusCode Response status code returned by the remote host. - @param[in] HeaderCount Number of HTTP header structures in Headers. - @param[in] Headers Array containing list of HTTP headers. - @param[in] Callback Callback function that is invoked when parsing the HTTP message-body, - set to NULL to ignore all events. - @param[in] Context Pointer to the context that will be passed to Callback. - @param[out] MsgParser Pointer to the returned buffer to store the message parser. - - @retval EFI_SUCCESS Successfully initialized the parser. - @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. - @retval EFI_INVALID_PARAMETER MsgParser is NULL or HeaderCount is not NULL but Headers is NULL. - @retval Others Failed to initialize the parser. - -**/ -EFI_STATUS -EFIAPI -HttpInitMsgParser ( - IN EFI_HTTP_METHOD Method, - IN EFI_HTTP_STATUS_CODE StatusCode, - IN UINTN HeaderCount, - IN EFI_HTTP_HEADER *Headers, - IN HTTP_BODY_PARSER_CALLBACK Callback, - IN VOID *Context, - OUT VOID **MsgParser - ); - -/** - Parse message body. - - Parse BodyLength of message-body. This function can be called repeatedly to parse the message-body partially. - - @param[in, out] MsgParser Pointer to the message parser. - @param[in] BodyLength Length in bytes of the Body. - @param[in] Body Pointer to the buffer of the message-body to be parsed. - - @retval EFI_SUCCESS Successfully parse the message-body. - @retval EFI_INVALID_PARAMETER MsgParser is NULL or Body is NULL or BodyLength is 0. - @retval EFI_ABORTED Operation aborted. - @retval Other Error happened while parsing message body. - -**/ -EFI_STATUS -EFIAPI -HttpParseMessageBody ( - IN OUT VOID *MsgParser, - IN UINTN BodyLength, - IN CHAR8 *Body - ); - -/** - Check whether the message-body is complete or not. - - @param[in] MsgParser Pointer to the message parser. - - @retval TRUE Message-body is complete. - @retval FALSE Message-body is not complete. - -**/ -BOOLEAN -EFIAPI -HttpIsMessageComplete ( - IN VOID *MsgParser - ); - -/** - Get the content length of the entity. - - Note that in trunk transfer, the entity length is not valid until the whole message body is received. - - @param[in] MsgParser Pointer to the message parser. - @param[out] ContentLength Pointer to store the length of the entity. - - @retval EFI_SUCCESS Successfully to get the entity length. - @retval EFI_NOT_READY Entity length is not valid yet. - @retval EFI_INVALID_PARAMETER MsgParser is NULL or ContentLength is NULL. - -**/ -EFI_STATUS -EFIAPI -HttpGetEntityLength ( - IN VOID *MsgParser, - OUT UINTN *ContentLength - ); - -/** - Release the resource of the message parser. - - @param[in] MsgParser Pointer to the message parser. - -**/ -VOID -EFIAPI -HttpFreeMsgParser ( - IN VOID *MsgParser - ); - - -/** - Find a specified header field according to the field name. - - @param[in] HeaderCount Number of HTTP header structures in Headers list. - @param[in] Headers Array containing list of HTTP headers. - @param[in] FieldName Null terminated string which describes a field name. - - @return Pointer to the found header or NULL. - -**/ -EFI_HTTP_HEADER * -EFIAPI -HttpFindHeader ( - IN UINTN HeaderCount, - IN EFI_HTTP_HEADER *Headers, - IN CHAR8 *FieldName - ); - -/** - Set FieldName and FieldValue into specified HttpHeader. - - @param[in,out] HttpHeader Specified HttpHeader. - @param[in] FieldName FieldName of this HttpHeader, a NULL terminated ASCII string. - @param[in] FieldValue FieldValue of this HttpHeader, a NULL terminated ASCII string. - - - @retval EFI_SUCCESS The FieldName and FieldValue are set into HttpHeader successfully. - @retval EFI_INVALID_PARAMETER The parameter is invalid. - @retval EFI_OUT_OF_RESOURCES Failed to allocate resources. - -**/ -EFI_STATUS -EFIAPI -HttpSetFieldNameAndValue ( - IN OUT EFI_HTTP_HEADER *HttpHeader, - IN CONST CHAR8 *FieldName, - IN CONST CHAR8 *FieldValue - ); - -/** - Get one key/value header pair from the raw string. - - @param[in] String Pointer to the raw string. - @param[out] FieldName Points directly to field name within 'HttpHeader'. - @param[out] FieldValue Points directly to field value within 'HttpHeader'. - - @return Pointer to the next raw string. - @return NULL if no key/value header pair from this raw string. - -**/ -CHAR8 * -EFIAPI -HttpGetFieldNameAndValue ( - IN CHAR8 *String, - OUT CHAR8 **FieldName, - OUT CHAR8 **FieldValue - ); - -/** - Free existing HeaderFields. - - @param[in] HeaderFields Pointer to array of key/value header pairs waiting for free. - @param[in] FieldCount The number of header pairs in HeaderFields. - -**/ -VOID -EFIAPI -HttpFreeHeaderFields ( - IN EFI_HTTP_HEADER *HeaderFields, - IN UINTN FieldCount - ); - -/** - Generate HTTP request message. - - This function will allocate memory for the whole HTTP message and generate a - well formatted HTTP Request message in it, include the Request-Line, header - fields and also the message body. It is the caller's responsibility to free - the buffer returned in *RequestMsg. - - @param[in] Message Pointer to the EFI_HTTP_MESSAGE structure which - contains the required information to generate - the HTTP request message. - @param[in] Url The URL of a remote host. - @param[out] RequestMsg Pointer to the created HTTP request message. - NULL if any error occured. - @param[out] RequestMsgSize Size of the RequestMsg (in bytes). - - @retval EFI_SUCCESS If HTTP request string was created successfully. - @retval EFI_OUT_OF_RESOURCES Failed to allocate resources. - @retval EFI_INVALID_PARAMETER The input arguments are invalid. - -**/ -EFI_STATUS -EFIAPI -HttpGenRequestMessage ( - IN CONST EFI_HTTP_MESSAGE *Message, - IN CONST CHAR8 *Url, - OUT CHAR8 **RequestMsg, - OUT UINTN *RequestMsgSize - ); - -/** - Translate the status code in HTTP message to EFI_HTTP_STATUS_CODE defined - in UEFI 2.5 specification. - - @param[in] StatusCode The status code value in HTTP message. - - @return Value defined in EFI_HTTP_STATUS_CODE . - -**/ -EFI_HTTP_STATUS_CODE -EFIAPI -HttpMappingToStatusCode ( - IN UINTN StatusCode - ); - -/** - Check whether header field called FieldName is in DeleteList. - - @param[in] DeleteList Pointer to array of key/value header pairs. - @param[in] DeleteCount The number of header pairs. - @param[in] FieldName Pointer to header field's name. - - @return TRUE if FieldName is not in DeleteList, that means this header field is valid. - @return FALSE if FieldName is in DeleteList, that means this header field is invalid. - -**/ -BOOLEAN -EFIAPI -HttpIsValidHttpHeader ( - IN CHAR8 *DeleteList[], - IN UINTN DeleteCount, - IN CHAR8 *FieldName - ); - - -#endif - diff --git a/MdeModulePkg/Include/Library/IpIoLib.h b/MdeModulePkg/Include/Library/IpIoLib.h deleted file mode 100644 index 2d6e090f75..0000000000 --- a/MdeModulePkg/Include/Library/IpIoLib.h +++ /dev/null @@ -1,607 +0,0 @@ -/** @file - This library is only intended to be used by UEFI network stack modules. - It provides the combined IpIo layer on the EFI IP4 Protocol and EFI IP6 protocol. - -Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _IP_IO_H_ -#define _IP_IO_H_ - -#include -#include - -#include - -// -// type and code define for ICMP protocol error -// from IP -// -#define ICMP_TYPE_UNREACH 3 -#define ICMP_TYPE_TIMXCEED 11 -#define ICMP_TYPE_PARAMPROB 12 -#define ICMP_TYPE_SOURCEQUENCH 4 - -#define ICMP_CODE_UNREACH_NET 0 -#define ICMP_CODE_UNREACH_HOST 1 -#define ICMP_CODE_UNREACH_PROTOCOL 2 -#define ICMP_CODE_UNREACH_PORT 3 -#define ICMP_CODE_UNREACH_NEEDFRAG 4 -#define ICMP_CODE_UNREACH_SRCFAIL 5 -#define ICMP_CODE_UNREACH_NET_UNKNOWN 6 -#define ICMP_CODE_UNREACH_HOST_UNKNOWN 7 -#define ICMP_CODE_UNREACH_ISOLATED 8 -#define ICMP_CODE_UNREACH_NET_PROHIB 9 -#define ICMP_CODE_UNREACH_HOST_PROHIB 10 -#define ICMP_CODE_UNREACH_TOSNET 11 -#define ICMP_CODE_UNREACH_TOSHOST 12 - -/** - Get the IP header length from the struct EFI_IP4_HEADER. HeaderLength is - Internet header length in 32-bit words, so HeaderLength<<2 is the real - length of IP header. - - @param[out] HdrPtr A pointer to EFI_IP4_HEADER. - - @return The IP header length. -**/ -#define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2) - -/** - To types of ICMP error which consist of ICMP header, IP header and original - datagram's data, get length from sum of ICMP header length, IP header length - and first 64 bits of datagram's data length. - - @param[in] IpHdr A pointer to EFI_IP4_HEADER. - - @return The ICMP error length. -**/ -#define ICMP_ERRLEN(IpHdr) \ - (sizeof(IP4_ICMP_HEAD) + EFI_IP4_HEADER_LEN(IpHdr) + 8) - -/** - Get the packet header from NET_BUF. - - @param[out] Buf A pointer to NET_BUF. - @param[in] Type Header type. - - @return The pointer to packet header. -**/ -#define NET_PROTO_HDR(Buf, Type) ((Type *) ((Buf)->BlockOp[0].Head)) - - -extern EFI_IP4_CONFIG_DATA mIp4IoDefaultIpConfigData; -extern EFI_IP6_CONFIG_DATA mIp6IoDefaultIpConfigData; - - -/// -/// This error will be delivered to the -/// listening transportation layer protocol -/// that consumes IpIO. -/// - -#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. -/// -typedef struct { - BOOLEAN IsHard; - BOOLEAN Notify; -} ICMP_ERROR_INFO; - -typedef union { - EFI_IP4_COMPLETION_TOKEN Ip4Token; - EFI_IP6_COMPLETION_TOKEN Ip6Token; -} IP_IO_IP_COMPLETION_TOKEN; - -typedef union { - EFI_IP4_TRANSMIT_DATA Ip4TxData; - EFI_IP6_TRANSMIT_DATA Ip6TxData; -} IP_IO_IP_TX_DATA; - -typedef union { - EFI_IP4_RECEIVE_DATA Ip4RxData; - EFI_IP6_RECEIVE_DATA Ip6RxData; -} IP_IO_IP_RX_DATA; - -typedef union { - EFI_IP4_OVERRIDE_DATA Ip4OverrideData; - EFI_IP6_OVERRIDE_DATA Ip6OverrideData; -} IP_IO_OVERRIDE; - -typedef union { - EFI_IP4_CONFIG_DATA Ip4CfgData; - 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; - -typedef union { - EFI_IP4_PROTOCOL *Ip4; - EFI_IP6_PROTOCOL *Ip6; -} IP_IO_IP_PROTOCOL; - -/// -/// 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. - IP_IO_IP_HEADER IpHdr; ///< IP header of the received packet. - UINT32 IpHdrLen; ///< IP header length of the received packet. - ///< For IPv6, it includes the IP6 header - ///< length and extension header length. For - ///< IPv4, it includes the IP4 header length - ///< and options length. - UINT8 IpVersion; ///< The IP version of the received packet. -} EFI_NET_SESSION_DATA; - -/** - The prototype is called back when an IP packet is received. - - @param[in] Status The result of the receive request. - @param[in] IcmpErr Valid when Status is EFI_ICMP_ERROR. - @param[in] NetSession The IP session for the received packet. - @param[in] Pkt The packet received. - @param[in] Context The data provided by the user for the received packet when - the callback is registered in IP_IO_OPEN_DATA::RcvdContext. - -**/ -typedef -VOID -(EFIAPI *PKT_RCVD_NOTIFY) ( - IN EFI_STATUS Status, - IN UINT8 IcmpErr, - IN EFI_NET_SESSION_DATA *NetSession, - IN NET_BUF *Pkt, - IN VOID *Context - ); - -/** - The prototype is called back when an IP packet is sent. - - @param[in] Status Result of the IP packet being sent. - @param[in] Context The data provided by user for the received packet when - the callback is registered in IP_IO_OPEN_DATA::SndContext. - @param[in] Sender A Union type to specify a pointer of EFI_IP4_PROTOCOL - or EFI_IP6_PROTOCOL. - @param[in] NotifyData The Context data specified when calling IpIoSend() - -**/ -typedef -VOID -(EFIAPI *PKT_SENT_NOTIFY) ( - IN EFI_STATUS Status, - IN VOID *Context, - IN IP_IO_IP_PROTOCOL Sender, - IN VOID *NotifyData - ); - -/// -/// This data structure wraps Ip4/Ip6 instances. The IpIo Library uses it for all -/// Ip4/Ip6 operations. -/// -typedef struct _IP_IO { - /// - /// The node used to link this IpIo to the active IpIo list. - /// - LIST_ENTRY Entry; - - /// - /// The list used to maintain the IP instance for different sending purpose. - /// - LIST_ENTRY IpList; - - EFI_HANDLE Controller; - EFI_HANDLE Image; - EFI_HANDLE ChildHandle; - // - // The IP instance consumed by this IP_IO - // - IP_IO_IP_PROTOCOL Ip; - BOOLEAN IsConfigured; - - /// - /// Some ip configuration data can be changed. - /// - UINT8 Protocol; - - /// - /// Token and event used to get data from IP. - /// - IP_IO_IP_COMPLETION_TOKEN RcvToken; - - /// - /// List entry used to link the token passed to IP_IO. - /// - LIST_ENTRY PendingSndList; - - // - // User interface used to get notify from IP_IO - // - VOID *RcvdContext; ///< See IP_IO_OPEN_DATA::RcvdContext. - 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. - UINT8 IpVersion; - IP4_ADDR StationIp; - IP4_ADDR SubnetMask; -} IP_IO; - -/// -/// The struct is for the user to pass IP configuration and callbacks to IP_IO. -/// It is used by IpIoOpen(). -/// -typedef struct _IP_IO_OPEN_DATA { - IP_IO_IP_CONFIG_DATA IpConfigData; ///< Configuration of the IP instance. - VOID *RcvdContext; ///< Context data used by receive callback. - VOID *SndContext; ///< Context data used by send callback. - PKT_RCVD_NOTIFY PktRcvdNotify; ///< Receive callback. - PKT_SENT_NOTIFY PktSentNotify; ///< Send callback. -} IP_IO_OPEN_DATA; - -/// -/// Internal struct book-keeping send request of IP_IO. -/// -/// An IP_IO_SEND_ENTRY will be created each time a send request is issued to -/// IP_IO via IpIoSend(). -/// -typedef struct _IP_IO_SEND_ENTRY { - LIST_ENTRY Entry; - IP_IO *IpIo; - VOID *Context; - VOID *NotifyData; - IP_IO_IP_PROTOCOL Ip; - NET_BUF *Pkt; - IP_IO_IP_COMPLETION_TOKEN SndToken; -} IP_IO_SEND_ENTRY; - -/// -/// The IP_IO_IP_INFO is used in IpIoSend() to override the default IP instance -/// in IP_IO. -/// -typedef struct _IP_IO_IP_INFO { - EFI_IP_ADDRESS Addr; - IP_IO_IP_MASK PreMask; - LIST_ENTRY Entry; - EFI_HANDLE ChildHandle; - IP_IO_IP_PROTOCOL Ip; - IP_IO_IP_COMPLETION_TOKEN DummyRcvToken; - INTN RefCnt; - UINT8 IpVersion; -} IP_IO_IP_INFO; - -/** - Create a new IP_IO instance. - - If IpVersion is not IP_VERSION_4 or IP_VERSION_6, then ASSERT(). - - This function uses IP4/IP6 service binding protocol in Controller to create - an IP4/IP6 child (aka IP4/IP6 instance). - - @param[in] Image The image handle of the driver or application that - consumes IP_IO. - @param[in] Controller The controller handle that has IP4 or IP6 service - binding protocol installed. - @param[in] IpVersion The version of the IP protocol to use, either - IPv4 or IPv6. - - @return The pointer to a newly created IP_IO instance, or NULL if failed. - -**/ -IP_IO * -EFIAPI -IpIoCreate ( - IN EFI_HANDLE Image, - IN EFI_HANDLE Controller, - IN UINT8 IpVersion - ); - -/** - Destroy an IP_IO instance. - - This function is paired with IpIoCreate(). The IP_IO will be closed first. - Resource will be freed afterwards. See IpIoClose(). - - @param[in, out] IpIo The pointer to the IP_IO instance that needs to be - destroyed. - - @retval EFI_SUCCESS The IP_IO instance was destroyed successfully. - @retval Others An error condition occurred. - -**/ -EFI_STATUS -EFIAPI -IpIoDestroy ( - IN OUT IP_IO *IpIo - ); - -/** - Stop an IP_IO instance. - - If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT(). - - This function is paired with IpIoOpen(). The IP_IO will be unconfigured, and all - pending send/receive tokens will be canceled. - - @param[in, out] IpIo The pointer to the IP_IO instance that needs to stop. - - @retval EFI_SUCCESS The IP_IO instance stopped successfully. - @retval EFI_INVALID_PARAMETER Invalid input parameter. - @retval Others Anrror condition occurred. - -**/ -EFI_STATUS -EFIAPI -IpIoStop ( - IN OUT IP_IO *IpIo - ); - -/** - Open an IP_IO instance for use. - - If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT(). - - This function is called after IpIoCreate(). It is used for configuring the IP - instance and register the callbacks and their context data for sending and - receiving IP packets. - - @param[in, out] IpIo The pointer to an IP_IO instance that needs - to open. - @param[in] OpenData The configuration data and callbacks for - the IP_IO instance. - - @retval EFI_SUCCESS The IP_IO instance opened with OpenData - successfully. - @retval EFI_ACCESS_DENIED The IP_IO instance is configured, avoid to - reopen it. - @retval EFI_UNSUPPORTED IPv4 RawData mode is no supported. - @retval EFI_INVALID_PARAMETER Invalid input parameter. - @retval Others Error condition occurred. - -**/ -EFI_STATUS -EFIAPI -IpIoOpen ( - IN OUT IP_IO *IpIo, - IN IP_IO_OPEN_DATA *OpenData - ); - -/** - Send out an IP packet. - - This function is called after IpIoOpen(). The data to be sent is wrapped in - Pkt. The IP instance wrapped in IpIo is used for sending by default but can be - overriden by Sender. Other sending configs, like source address and gateway - address etc., are specified in OverrideData. - - @param[in, out] IpIo Pointer to an IP_IO instance used for sending IP - packet. - @param[in, out] Pkt Pointer to the IP packet to be sent. - @param[in] Sender The IP protocol instance used for sending. - @param[in] Context Optional context data. - @param[in] NotifyData Optional notify data. - @param[in] Dest The destination IP address to send this packet to. - This parameter is optional when using IPv6. - @param[in] OverrideData The data to override some configuration of the IP - instance used for sending. - - @retval EFI_SUCCESS The operation is completed successfully. - @retval EFI_INVALID_PARAMETER The input parameter is not correct. - @retval EFI_NOT_STARTED The IpIo is not configured. - @retval EFI_OUT_OF_RESOURCES Failed due to resource limit. - @retval Others Error condition occurred. - -**/ -EFI_STATUS -EFIAPI -IpIoSend ( - IN OUT IP_IO *IpIo, - IN OUT NET_BUF *Pkt, - IN IP_IO_IP_INFO *Sender OPTIONAL, - IN VOID *Context OPTIONAL, - IN VOID *NotifyData OPTIONAL, - IN EFI_IP_ADDRESS *Dest OPTIONAL, - IN IP_IO_OVERRIDE *OverrideData OPTIONAL - ); - -/** - Cancel the IP transmit token that wraps this Packet. - - If IpIo is NULL, then ASSERT(). - If Packet is NULL, then ASSERT(). - - @param[in] IpIo The pointer to the IP_IO instance. - @param[in] Packet The pointer to the packet of NET_BUF to cancel. - -**/ -VOID -EFIAPI -IpIoCancelTxToken ( - IN IP_IO *IpIo, - IN VOID *Packet - ); - -/** - Add a new IP instance for sending data. - - If IpIo is NULL, then ASSERT(). - If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT(). - - The function is used to add the IP_IO to the IP_IO sending list. The caller - can later use IpIoFindSender() to get the IP_IO and call IpIoSend() to send - data. - - @param[in, out] IpIo The pointer to an IP_IO instance to add a new IP - instance for sending purposes. - - @return The pointer to the created IP_IO_IP_INFO structure; NULL if failed. - -**/ -IP_IO_IP_INFO * -EFIAPI -IpIoAddIp ( - IN OUT IP_IO *IpIo - ); - -/** - Configure the IP instance of this IpInfo and start the receiving if IpConfigData - is not NULL. - - If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT(). - - @param[in, out] IpInfo The pointer to the IP_IO_IP_INFO instance. - @param[in, out] IpConfigData The IP4 or IP6 configure data used to configure - the IP instance. If NULL, the IP instance is reset. - If UseDefaultAddress is set to TRUE, and the configure - operation succeeds, the default address information - is written back in this IpConfigData. - - @retval EFI_SUCCESS The IP instance of this IpInfo was configured successfully, - or there is no need to reconfigure it. - @retval Others The configuration failed. - -**/ -EFI_STATUS -EFIAPI -IpIoConfigIp ( - IN OUT IP_IO_IP_INFO *IpInfo, - IN OUT VOID *IpConfigData OPTIONAL - ); - -/** - Destroy an IP instance maintained in IpIo->IpList for - sending purpose. - - If Ip version is not IP_VERSION_4 or IP_VERSION_6, then ASSERT(). - - This function pairs with IpIoAddIp(). The IpInfo is previously created by - IpIoAddIp(). The IP_IO_IP_INFO::RefCnt is decremented and the IP instance - will be dstroyed if the RefCnt is zero. - - @param[in] IpIo The pointer to the IP_IO instance. - @param[in] IpInfo The pointer to the IpInfo to be removed. - -**/ -VOID -EFIAPI -IpIoRemoveIp ( - IN IP_IO *IpIo, - IN IP_IO_IP_INFO *IpInfo - ); - -/** - Find the first IP protocol maintained in IpIo whose local - address is the same as Src. - - This function is called when the caller needs the IpIo to send data to the - specified Src. The IpIo was added previously by IpIoAddIp(). - - @param[in, out] IpIo The pointer to the pointer of the IP_IO instance. - @param[in] IpVersion The version of the IP protocol to use, either - IPv4 or IPv6. - @param[in] Src The local IP address. - - @return The pointer to the IP protocol can be used for sending purpose and its local - address is the same with Src. NULL if failed. - -**/ -IP_IO_IP_INFO * -EFIAPI -IpIoFindSender ( - IN OUT IP_IO **IpIo, - IN UINT8 IpVersion, - IN EFI_IP_ADDRESS *Src - ); - -/** - Get the ICMP error map information. - - The ErrorStatus will be returned. The IsHard and Notify are optional. If they - are not NULL, this routine will fill them. - - @param[in] IcmpError IcmpError Type. - @param[in] IpVersion The version of the IP protocol to use, - either IPv4 or IPv6. - @param[out] IsHard If TRUE, indicates that it is a hard error. - @param[out] Notify If TRUE, SockError needs to be notified. - - @retval EFI_UNSUPPORTED Unrecognizable ICMP error code - @return The ICMP Error Status, such as EFI_NETWORK_UNREACHABLE. - -**/ -EFI_STATUS -EFIAPI -IpIoGetIcmpErrStatus ( - IN UINT8 IcmpError, - IN UINT8 IpVersion, - OUT BOOLEAN *IsHard OPTIONAL, - OUT BOOLEAN *Notify OPTIONAL - ); - -/** - Refresh the remote peer's Neighbor Cache entries. - - This function is called when the caller needs the IpIo to refresh the existing - IPv6 neighbor cache entries since the neighbor is considered reachable by the - node has recently received a confirmation that packets sent recently to the - neighbor were received by its IP layer. - - @param[in] IpIo The pointer to an IP_IO instance - @param[in] Neighbor The IP address of the neighbor - @param[in] Timeout The time in 100-ns units that this entry will - remain in the neighbor cache. A value of - zero means that the entry is permanent. - A value of non-zero means that the entry is - dynamic and will be deleted after Timeout. - - @retval EFI_SUCCESS The operation completed successfully. - @retval EFI_NOT_STARTED The IpIo is not configured. - @retval EFI_INVALID_PARAMETER The Neighbor Address is invalid. - @retval EFI_NOT_FOUND The neighbor cache entry is not in the - neighbor table. - @retval EFI_UNSUPPORTED IP version is IPv4, which doesn't support neighbor cache refresh. - @retval EFI_OUT_OF_RESOURCES Failed due to resource limitations. - -**/ -EFI_STATUS -EFIAPI -IpIoRefreshNeighbor ( - IN IP_IO *IpIo, - IN EFI_IP_ADDRESS *Neighbor, - IN UINT32 Timeout - ); - -#endif - diff --git a/MdeModulePkg/Include/Library/NetLib.h b/MdeModulePkg/Include/Library/NetLib.h deleted file mode 100644 index 786382a1fc..0000000000 --- a/MdeModulePkg/Include/Library/NetLib.h +++ /dev/null @@ -1,2266 +0,0 @@ -/** @file - This library is only intended to be used by UEFI network stack modules. - It provides basic functions for the UEFI network stack. - -Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _NET_LIB_H_ -#define _NET_LIB_H_ - -#include - -#include -#include - -typedef UINT32 IP4_ADDR; -typedef UINT32 TCP_SEQNO; -typedef UINT16 TCP_PORTNO; - - -#define NET_ETHER_ADDR_LEN 6 -#define NET_IFTYPE_ETHERNET 0x01 - -#define NET_VLAN_TAG_LEN 4 -#define ETHER_TYPE_VLAN 0x8100 - -#define EFI_IP_PROTO_UDP 0x11 -#define EFI_IP_PROTO_TCP 0x06 -#define EFI_IP_PROTO_ICMP 0x01 -#define IP4_PROTO_IGMP 0x02 -#define IP6_ICMP 58 -#define DNS_MAX_NAME_SIZE 255 -#define DNS_MAX_MESSAGE_SIZE 512 - -// -// The address classification -// -#define IP4_ADDR_CLASSA 1 // Deprecated -#define IP4_ADDR_CLASSB 2 // Deprecated -#define IP4_ADDR_CLASSC 3 // Deprecated -#define IP4_ADDR_CLASSD 4 -#define IP4_ADDR_CLASSE 5 - -#define IP4_MASK_NUM 33 -#define IP6_PREFIX_NUM 129 - -#define IP4_MASK_MAX 32 -#define IP6_PREFIX_MAX 128 - -#define IP6_HOP_BY_HOP 0 -#define IP6_DESTINATION 60 -#define IP6_ROUTING 43 -#define IP6_FRAGMENT 44 -#define IP6_AH 51 -#define IP6_ESP 50 -#define IP6_NO_NEXT_HEADER 59 - -#define IP_VERSION_4 4 -#define IP_VERSION_6 6 - -#define IP6_PREFIX_LENGTH 64 - -// -// DNS QTYPE values -// -#define DNS_TYPE_A 1 -#define DNS_TYPE_NS 2 -#define DNS_TYPE_CNAME 5 -#define DNS_TYPE_SOA 6 -#define DNS_TYPE_WKS 11 -#define DNS_TYPE_PTR 12 -#define DNS_TYPE_HINFO 13 -#define DNS_TYPE_MINFO 14 -#define DNS_TYPE_MX 15 -#define DNS_TYPE_TXT 16 -#define DNS_TYPE_AAAA 28 -#define DNS_TYPE_SRV_RR 33 -#define DNS_TYPE_AXFR 252 -#define DNS_TYPE_MAILB 253 -#define DNS_TYPE_ANY 255 - -// -// DNS QCLASS values -// -#define DNS_CLASS_INET 1 -#define DNS_CLASS_CH 3 -#define DNS_CLASS_HS 4 -#define DNS_CLASS_ANY 255 - -// -// Number of 100ns units time Interval for network media state detect -// -#define MEDIA_STATE_DETECT_TIME_INTERVAL 1000000U - - -#pragma pack(1) - -// -// Ethernet head definition -// -typedef struct { - UINT8 DstMac [NET_ETHER_ADDR_LEN]; - UINT8 SrcMac [NET_ETHER_ADDR_LEN]; - UINT16 EtherType; -} ETHER_HEAD; - -// -// 802.1Q VLAN Tag Control Information -// -typedef union { - struct { - UINT16 Vid : 12; // Unique VLAN identifier (0 to 4094) - UINT16 Cfi : 1; // Canonical Format Indicator - UINT16 Priority : 3; // 802.1Q priority level (0 to 7) - } Bits; - UINT16 Uint16; -} VLAN_TCI; - -#define VLAN_TCI_CFI_CANONICAL_MAC 0 -#define VLAN_TCI_CFI_NON_CANONICAL_MAC 1 - -// -// The EFI_IP4_HEADER is hard to use because the source and -// destination address are defined as EFI_IPv4_ADDRESS, which -// is a structure. Two structures can't be compared or masked -// directly. This is why there is an internal representation. -// -typedef struct { - UINT8 HeadLen : 4; - UINT8 Ver : 4; - UINT8 Tos; - UINT16 TotalLen; - UINT16 Id; - UINT16 Fragment; - UINT8 Ttl; - UINT8 Protocol; - UINT16 Checksum; - IP4_ADDR Src; - IP4_ADDR Dst; -} IP4_HEAD; - - -// -// ICMP head definition. Each ICMP message is categorized as either an error -// message or query message. Two message types have their own head format. -// -typedef struct { - UINT8 Type; - UINT8 Code; - UINT16 Checksum; -} IP4_ICMP_HEAD; - -typedef struct { - IP4_ICMP_HEAD Head; - UINT32 Fourth; // 4th filed of the head, it depends on Type. - IP4_HEAD IpHead; -} IP4_ICMP_ERROR_HEAD; - -typedef struct { - IP4_ICMP_HEAD Head; - UINT16 Id; - UINT16 Seq; -} IP4_ICMP_QUERY_HEAD; - -typedef struct { - UINT8 Type; - UINT8 Code; - UINT16 Checksum; -} IP6_ICMP_HEAD; - -typedef struct { - IP6_ICMP_HEAD Head; - UINT32 Fourth; - EFI_IP6_HEADER IpHead; -} IP6_ICMP_ERROR_HEAD; - -typedef struct { - IP6_ICMP_HEAD Head; - UINT32 Fourth; -} IP6_ICMP_INFORMATION_HEAD; - -// -// UDP header definition -// -typedef struct { - UINT16 SrcPort; - UINT16 DstPort; - UINT16 Length; - UINT16 Checksum; -} EFI_UDP_HEADER; - -// -// TCP header definition -// -typedef struct { - TCP_PORTNO SrcPort; - TCP_PORTNO DstPort; - TCP_SEQNO Seq; - TCP_SEQNO Ack; - UINT8 Res : 4; - UINT8 HeadLen : 4; - UINT8 Flag; - UINT16 Wnd; - UINT16 Checksum; - UINT16 Urg; -} TCP_HEAD; - -#pragma pack() - -#define NET_MAC_EQUAL(pMac1, pMac2, Len) \ - (CompareMem ((pMac1), (pMac2), Len) == 0) - -#define NET_MAC_IS_MULTICAST(Mac, BMac, Len) \ - (((*((UINT8 *) Mac) & 0x01) == 0x01) && (!NET_MAC_EQUAL (Mac, BMac, Len))) - -#define NTOHL(x) SwapBytes32 (x) - -#define HTONL(x) NTOHL(x) - -#define NTOHS(x) SwapBytes16 (x) - -#define HTONS(x) NTOHS(x) -#define NTOHLL(x) SwapBytes64 (x) -#define HTONLL(x) NTOHLL(x) -#define NTOHLLL(x) Ip6Swap128 (x) -#define HTONLLL(x) NTOHLLL(x) - -// -// Test the IP's attribute, All the IPs are in host byte order. -// -#define IP4_IS_MULTICAST(Ip) (((Ip) & 0xF0000000) == 0xE0000000) -#define IP4_IS_UNSPECIFIED(Ip) ((Ip) == 0) -#define IP4_IS_LOCAL_BROADCAST(Ip) ((Ip) == 0xFFFFFFFF) -#define IP4_NET_EQUAL(Ip1, Ip2, NetMask) (((Ip1) & (NetMask)) == ((Ip2) & (NetMask))) -#define IP4_IS_VALID_NETMASK(Ip) (NetGetMaskLength (Ip) != (IP4_MASK_MAX + 1)) - -#define IP6_IS_MULTICAST(Ip6) (((Ip6)->Addr[0]) == 0xFF) - -// -// Convert the EFI_IP4_ADDRESS to plain UINT32 IP4 address. -// -#define EFI_IP4(EfiIpAddr) (*(IP4_ADDR *) ((EfiIpAddr).Addr)) -#define EFI_NTOHL(EfiIp) (NTOHL (EFI_IP4 ((EfiIp)))) -#define EFI_IP4_EQUAL(Ip1, Ip2) (CompareMem ((Ip1), (Ip2), sizeof (EFI_IPv4_ADDRESS)) == 0) - -#define EFI_IP6_EQUAL(Ip1, Ip2) (CompareMem ((Ip1), (Ip2), sizeof (EFI_IPv6_ADDRESS)) == 0) - -#define IP4_COPY_ADDRESS(Dest, Src) (CopyMem ((Dest), (Src), sizeof (EFI_IPv4_ADDRESS))) -#define IP6_COPY_ADDRESS(Dest, Src) (CopyMem ((Dest), (Src), sizeof (EFI_IPv6_ADDRESS))) -#define IP6_COPY_LINK_ADDRESS(Mac1, Mac2) (CopyMem ((Mac1), (Mac2), sizeof (EFI_MAC_ADDRESS))) - -// -// The debug level definition. This value is also used as the -// syslog's severity level. Don't change it. -// -#define NETDEBUG_LEVEL_TRACE 5 -#define NETDEBUG_LEVEL_WARNING 4 -#define NETDEBUG_LEVEL_ERROR 3 - -// -// Network debug message is sent out as syslog packet. -// -#define NET_SYSLOG_FACILITY 16 // Syslog local facility local use -#define NET_SYSLOG_PACKET_LEN 512 -#define NET_SYSLOG_TX_TIMEOUT (500 * 1000 * 10) // 500ms -#define NET_DEBUG_MSG_LEN 470 // 512 - (ether+ip4+udp4 head length) - -// -// The debug output expects the ASCII format string, Use %a to print ASCII -// string, and %s to print UNICODE string. PrintArg must be enclosed in (). -// For example: NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name)); -// -#define NET_DEBUG_TRACE(Module, PrintArg) \ - NetDebugOutput ( \ - NETDEBUG_LEVEL_TRACE, \ - Module, \ - __FILE__, \ - __LINE__, \ - NetDebugASPrint PrintArg \ - ) - -#define NET_DEBUG_WARNING(Module, PrintArg) \ - NetDebugOutput ( \ - NETDEBUG_LEVEL_WARNING, \ - Module, \ - __FILE__, \ - __LINE__, \ - NetDebugASPrint PrintArg \ - ) - -#define NET_DEBUG_ERROR(Module, PrintArg) \ - NetDebugOutput ( \ - NETDEBUG_LEVEL_ERROR, \ - Module, \ - __FILE__, \ - __LINE__, \ - NetDebugASPrint PrintArg \ - ) - -/** - Allocate a buffer, then format the message to it. This is a - help function for the NET_DEBUG_XXX macros. The PrintArg of - these macros treats the variable length print parameters as a - single parameter, and pass it to the NetDebugASPrint. For - example, NET_DEBUG_TRACE ("Tcp", ("State transit to %a\n", Name)) - if extracted to: - - NetDebugOutput ( - NETDEBUG_LEVEL_TRACE, - "Tcp", - __FILE__, - __LINE__, - NetDebugASPrint ("State transit to %a\n", Name) - ) - - @param Format The ASCII format string. - @param ... The variable length parameter whose format is determined - by the Format string. - - @return The buffer containing the formatted message, - or NULL if memory allocation failed. - -**/ -CHAR8 * -EFIAPI -NetDebugASPrint ( - IN CHAR8 *Format, - ... - ); - -/** - Builds an UDP4 syslog packet and send it using SNP. - - This function will locate a instance of SNP then send the message through it. - Because it isn't open the SNP BY_DRIVER, apply caution when using it. - - @param Level The severity level of the message. - @param Module The Module that generates the log. - @param File The file that contains the log. - @param Line The exact line that contains the log. - @param Message The user message to log. - - @retval EFI_INVALID_PARAMETER Any input parameter is invalid. - @retval EFI_OUT_OF_RESOURCES Failed to allocate memory for the packet - @retval EFI_SUCCESS The log is discard because that it is more verbose - than the mNetDebugLevelMax. Or, it has been sent out. -**/ -EFI_STATUS -EFIAPI -NetDebugOutput ( - IN UINT32 Level, - IN UINT8 *Module, - IN UINT8 *File, - IN UINT32 Line, - IN UINT8 *Message - ); - - -/** - Return the length of the mask. - - Return the length of the mask. Valid values are 0 to 32. - If the mask is invalid, return the invalid length 33, which is IP4_MASK_NUM. - NetMask is in the host byte order. - - @param[in] NetMask The netmask to get the length from. - - @return The length of the netmask, or IP4_MASK_NUM (33) if the mask is invalid. - -**/ -INTN -EFIAPI -NetGetMaskLength ( - IN IP4_ADDR NetMask - ); - -/** - Return the class of the IP address, such as class A, B, C. - Addr is in host byte order. - - [ATTENTION] - Classful addressing (IP class A/B/C) has been deprecated according to RFC4632. - Caller of this function could only check the returned value against - IP4_ADDR_CLASSD (multicast) or IP4_ADDR_CLASSE (reserved) now. - - The address of class A starts with 0. - If the address belong to class A, return IP4_ADDR_CLASSA. - The address of class B starts with 10. - If the address belong to class B, return IP4_ADDR_CLASSB. - The address of class C starts with 110. - If the address belong to class C, return IP4_ADDR_CLASSC. - The address of class D starts with 1110. - If the address belong to class D, return IP4_ADDR_CLASSD. - The address of class E starts with 1111. - If the address belong to class E, return IP4_ADDR_CLASSE. - - - @param[in] Addr The address to get the class from. - - @return IP address class, such as IP4_ADDR_CLASSA. - -**/ -INTN -EFIAPI -NetGetIpClass ( - IN IP4_ADDR Addr - ); - -/** - Check whether the IP is a valid unicast address according to - the netmask. - - ASSERT if NetMask is zero. - - If all bits of the host address of IP are 0 or 1, IP is also not a valid unicast address, - except when the originator is one of the endpoints of a point-to-point link with a 31-bit - mask (RFC3021), or a 32bit NetMask (all 0xFF) is used for special network environment (e.g. - PPP link). - - @param[in] Ip The IP to check against. - @param[in] NetMask The mask of the IP. - - @return TRUE if IP is a valid unicast address on the network, otherwise FALSE. - -**/ -BOOLEAN -EFIAPI -NetIp4IsUnicast ( - IN IP4_ADDR Ip, - IN IP4_ADDR NetMask - ); - -/** - Check whether the incoming IPv6 address is a valid unicast address. - - ASSERT if Ip6 is NULL. - - If the address is a multicast address has binary 0xFF at the start, it is not - a valid unicast address. If the address is unspecified ::, it is not a valid - unicast address to be assigned to any node. If the address is loopback address - ::1, it is also not a valid unicast address to be assigned to any physical - interface. - - @param[in] Ip6 The IPv6 address to check against. - - @return TRUE if Ip6 is a valid unicast address on the network, otherwise FALSE. - -**/ -BOOLEAN -EFIAPI -NetIp6IsValidUnicast ( - IN EFI_IPv6_ADDRESS *Ip6 - ); - - -/** - Check whether the incoming Ipv6 address is the unspecified address or not. - - ASSERT if Ip6 is NULL. - - @param[in] Ip6 - Ip6 address, in network order. - - @retval TRUE - Yes, incoming Ipv6 address is the unspecified address. - @retval FALSE - The incoming Ipv6 address is not the unspecified address - -**/ -BOOLEAN -EFIAPI -NetIp6IsUnspecifiedAddr ( - IN EFI_IPv6_ADDRESS *Ip6 - ); - -/** - Check whether the incoming Ipv6 address is a link-local address. - - ASSERT if Ip6 is NULL. - - @param[in] Ip6 - Ip6 address, in network order. - - @retval TRUE - The incoming Ipv6 address is a link-local address. - @retval FALSE - The incoming Ipv6 address is not a link-local address. - -**/ -BOOLEAN -EFIAPI -NetIp6IsLinkLocalAddr ( - IN EFI_IPv6_ADDRESS *Ip6 - ); - -/** - Check whether the Ipv6 address1 and address2 are on the connected network. - - ASSERT if Ip1 or Ip2 is NULL. - ASSERT if PrefixLength exceeds or equals to IP6_PREFIX_MAX. - - @param[in] Ip1 - Ip6 address1, in network order. - @param[in] Ip2 - Ip6 address2, in network order. - @param[in] PrefixLength - The prefix length of the checking net. - - @retval TRUE - Yes, the Ipv6 address1 and address2 are connected. - @retval FALSE - No the Ipv6 address1 and address2 are not connected. - -**/ -BOOLEAN -EFIAPI -NetIp6IsNetEqual ( - EFI_IPv6_ADDRESS *Ip1, - EFI_IPv6_ADDRESS *Ip2, - UINT8 PrefixLength - ); - -/** - Switches the endianess of an IPv6 address. - - ASSERT if Ip6 is NULL. - - 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 * -EFIAPI -Ip6Swap128 ( - EFI_IPv6_ADDRESS *Ip6 - ); - -extern IP4_ADDR gIp4AllMasks[IP4_MASK_NUM]; - - -extern EFI_IPv4_ADDRESS mZeroIp4Addr; - -#define NET_IS_DIGIT(Ch) (('0' <= (Ch)) && ((Ch) <= '9')) -#define NET_IS_HEX(Ch) ((('0' <= (Ch)) && ((Ch) <= '9')) || (('A' <= (Ch)) && ((Ch) <= 'F')) || (('a' <= (Ch)) && ((Ch) <= 'f'))) -#define NET_ROUNDUP(size, unit) (((size) + (unit) - 1) & (~((unit) - 1))) -#define NET_IS_LOWER_CASE_CHAR(Ch) (('a' <= (Ch)) && ((Ch) <= 'z')) -#define NET_IS_UPPER_CASE_CHAR(Ch) (('A' <= (Ch)) && ((Ch) <= 'Z')) - -#define TICKS_PER_MS 10000U -#define TICKS_PER_SECOND 10000000U - -#define NET_RANDOM(Seed) ((UINT32) ((UINT32) (Seed) * 1103515245UL + 12345) % 4294967295UL) - -/** - Extract a UINT32 from a byte stream. - - ASSERT if Buf is NULL. - - This function copies a UINT32 from a byte stream, and then converts it from Network - byte order to host byte order. Use this function to avoid alignment error. - - @param[in] Buf The buffer to extract the UINT32. - - @return The UINT32 extracted. - -**/ -UINT32 -EFIAPI -NetGetUint32 ( - IN UINT8 *Buf - ); - -/** - Puts a UINT32 into the byte stream in network byte order. - - ASSERT if Buf is NULL. - - Converts a UINT32 from host byte order to network byte order, then copies it to the - byte stream. - - @param[in, out] Buf The buffer in which to put the UINT32. - @param[in] Data The data to be converted and put into the byte stream. - -**/ -VOID -EFIAPI -NetPutUint32 ( - IN OUT UINT8 *Buf, - IN UINT32 Data - ); - -/** - Initialize a random seed using current time and monotonic count. - - Get current time and monotonic count first. Then initialize a random seed - based on some basic mathematics operation on the hour, day, minute, second, - nanosecond and year of the current time and the monotonic count value. - - @return The random seed initialized with current time. - -**/ -UINT32 -EFIAPI -NetRandomInitSeed ( - VOID - ); - - -#define NET_LIST_USER_STRUCT(Entry, Type, Field) \ - BASE_CR(Entry, Type, Field) - -#define NET_LIST_USER_STRUCT_S(Entry, Type, Field, Sig) \ - CR(Entry, Type, Field, Sig) - -// -// Iterate through the double linked list. It is NOT delete safe -// -#define NET_LIST_FOR_EACH(Entry, ListHead) \ - for(Entry = (ListHead)->ForwardLink; Entry != (ListHead); Entry = Entry->ForwardLink) - -// -// Iterate through the double linked list. This is delete-safe. -// Don't touch NextEntry. Also, don't use this macro if list -// entries other than the Entry may be deleted when processing -// the current Entry. -// -#define NET_LIST_FOR_EACH_SAFE(Entry, NextEntry, ListHead) \ - for(Entry = (ListHead)->ForwardLink, NextEntry = Entry->ForwardLink; \ - Entry != (ListHead); \ - Entry = NextEntry, NextEntry = Entry->ForwardLink \ - ) - -// -// Make sure the list isn't empty before getting the first/last record. -// -#define NET_LIST_HEAD(ListHead, Type, Field) \ - NET_LIST_USER_STRUCT((ListHead)->ForwardLink, Type, Field) - -#define NET_LIST_TAIL(ListHead, Type, Field) \ - NET_LIST_USER_STRUCT((ListHead)->BackLink, Type, Field) - - -/** - Remove the first node entry on the list, and return the removed node entry. - - Removes the first node entry from a doubly linked list. It is up to the caller of - this function to release the memory used by the first node, if that is required. On - exit, the removed node is returned. - - If Head is NULL, then ASSERT(). - If Head was not initialized, then ASSERT(). - If PcdMaximumLinkedListLength is not zero, and the number of nodes in the - linked list including the head node is greater than or equal to PcdMaximumLinkedListLength, - then ASSERT(). - - @param[in, out] Head The list header. - - @return The first node entry that is removed from the list, NULL if the list is empty. - -**/ -LIST_ENTRY * -EFIAPI -NetListRemoveHead ( - IN OUT LIST_ENTRY *Head - ); - -/** - Remove the last node entry on the list and return the removed node entry. - - Removes the last node entry from a doubly linked list. It is up to the caller of - this function to release the memory used by the first node, if that is required. On - exit, the removed node is returned. - - If Head is NULL, then ASSERT(). - If Head was not initialized, then ASSERT(). - If PcdMaximumLinkedListLength is not zero, and the number of nodes in the - linked list including the head node is greater than or equal to PcdMaximumLinkedListLength, - then ASSERT(). - - @param[in, out] Head The list head. - - @return The last node entry that is removed from the list, NULL if the list is empty. - -**/ -LIST_ENTRY * -EFIAPI -NetListRemoveTail ( - IN OUT LIST_ENTRY *Head - ); - -/** - Insert a new node entry after a designated node entry of a doubly linked list. - - ASSERT if PrevEntry or NewEntry is NULL. - - Inserts a new node entry designated by NewEntry after the node entry designated by PrevEntry - of the doubly linked list. - - @param[in, out] PrevEntry The entry after which to insert. - @param[in, out] NewEntry The new entry to insert. - -**/ -VOID -EFIAPI -NetListInsertAfter ( - IN OUT LIST_ENTRY *PrevEntry, - IN OUT LIST_ENTRY *NewEntry - ); - -/** - Insert a new node entry before a designated node entry of a doubly linked list. - - ASSERT if PostEntry or NewEntry is NULL. - - Inserts a new node entry designated by NewEntry before the node entry designated by PostEntry - of the doubly linked list. - - @param[in, out] PostEntry The entry to insert before. - @param[in, out] NewEntry The new entry to insert. - -**/ -VOID -EFIAPI -NetListInsertBefore ( - IN OUT LIST_ENTRY *PostEntry, - IN OUT LIST_ENTRY *NewEntry - ); - -/** - Callback function which provided by user to remove one node in NetDestroyLinkList process. - - @param[in] Entry The entry to be removed. - @param[in] Context Pointer to the callback context corresponds to the Context in NetDestroyLinkList. - - @retval EFI_SUCCESS The entry has been removed successfully. - @retval Others Fail to remove the entry. - -**/ -typedef -EFI_STATUS -(EFIAPI *NET_DESTROY_LINK_LIST_CALLBACK) ( - IN LIST_ENTRY *Entry, - IN VOID *Context OPTIONAL - ); - -/** - Safe destroy nodes in a linked list, and return the length of the list after all possible operations finished. - - Destroy network children list by list traversals is not safe due to graph dependencies between nodes. - This function performs a safe traversal to destroy these nodes by checking to see if the node being destroyed - has been removed from the list or not. - If it has been removed, then restart the traversal from the head. - If it hasn't been removed, then continue with the next node directly. - This function will end the iterate and return the CallBack's last return value if error happens, - or retrun EFI_SUCCESS if 2 complete passes are made with no changes in the number of children in the list. - - @param[in] List The head of the list. - @param[in] CallBack Pointer to the callback function to destroy one node in the list. - @param[in] Context Pointer to the callback function's context: corresponds to the - parameter Context in NET_DESTROY_LINK_LIST_CALLBACK. - @param[out] ListLength The length of the link list if the function returns successfully. - - @retval EFI_SUCCESS Two complete passes are made with no changes in the number of children. - @retval EFI_INVALID_PARAMETER The input parameter is invalid. - @retval Others Return the CallBack's last return value. - -**/ -EFI_STATUS -EFIAPI -NetDestroyLinkList ( - IN LIST_ENTRY *List, - IN NET_DESTROY_LINK_LIST_CALLBACK CallBack, - IN VOID *Context, OPTIONAL - OUT UINTN *ListLength OPTIONAL - ); - -/** - This function checks the input Handle to see if it's one of these handles in ChildHandleBuffer. - - @param[in] Handle Handle to be checked. - @param[in] NumberOfChildren Number of Handles in ChildHandleBuffer. - @param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL - if NumberOfChildren is 0. - - @retval TRUE Found the input Handle in ChildHandleBuffer. - @retval FALSE Can't find the input Handle in ChildHandleBuffer. - -**/ -BOOLEAN -EFIAPI -NetIsInHandleBuffer ( - IN EFI_HANDLE Handle, - IN UINTN NumberOfChildren, - IN EFI_HANDLE *ChildHandleBuffer OPTIONAL - ); - -// -// Object container: EFI network stack spec defines various kinds of -// tokens. The drivers can share code to manage those objects. -// -typedef struct { - LIST_ENTRY Link; - VOID *Key; - VOID *Value; -} NET_MAP_ITEM; - -typedef struct { - LIST_ENTRY Used; - LIST_ENTRY Recycled; - UINTN Count; -} NET_MAP; - -#define NET_MAP_INCREAMENT 64 - -/** - Initialize the netmap. Netmap is a reposity to keep the pairs. - - Initialize the forward and backward links of two head nodes donated by Map->Used - and Map->Recycled of two doubly linked lists. - Initializes the count of the pairs in the netmap to zero. - - If Map is NULL, then ASSERT(). - If the address of Map->Used is NULL, then ASSERT(). - If the address of Map->Recycled is NULl, then ASSERT(). - - @param[in, out] Map The netmap to initialize. - -**/ -VOID -EFIAPI -NetMapInit ( - IN OUT NET_MAP *Map - ); - -/** - To clean up the netmap, that is, release allocated memories. - - Removes all nodes of the Used doubly linked list and frees memory of all related netmap items. - Removes all nodes of the Recycled doubly linked list and free memory of all related netmap items. - The number of the pairs in the netmap is set to zero. - - If Map is NULL, then ASSERT(). - - @param[in, out] Map The netmap to clean up. - -**/ -VOID -EFIAPI -NetMapClean ( - IN OUT NET_MAP *Map - ); - -/** - Test whether the netmap is empty and return true if it is. - - If the number of the pairs in the netmap is zero, return TRUE. - - If Map is NULL, then ASSERT(). - - @param[in] Map The net map to test. - - @return TRUE if the netmap is empty, otherwise FALSE. - -**/ -BOOLEAN -EFIAPI -NetMapIsEmpty ( - IN NET_MAP *Map - ); - -/** - Return the number of the pairs in the netmap. - - If Map is NULL, then ASSERT(). - - @param[in] Map The netmap to get the entry number. - - @return The entry number in the netmap. - -**/ -UINTN -EFIAPI -NetMapGetCount ( - IN NET_MAP *Map - ); - -/** - Allocate an item to save the pair to the head of the netmap. - - Allocate an item to save the pair and add corresponding node entry - to the beginning of the Used doubly linked list. The number of the - pairs in the netmap increase by 1. - - If Map is NULL, then ASSERT(). - If Key is NULL, then ASSERT(). - - @param[in, out] Map The netmap to insert into. - @param[in] Key The user's key. - @param[in] Value The user's value for the key. - - @retval EFI_OUT_OF_RESOURCES Failed to allocate the memory for the item. - @retval EFI_SUCCESS The item is inserted to the head. - -**/ -EFI_STATUS -EFIAPI -NetMapInsertHead ( - IN OUT NET_MAP *Map, - IN VOID *Key, - IN VOID *Value OPTIONAL - ); - -/** - Allocate an item to save the pair to the tail of the netmap. - - Allocate an item to save the pair and add corresponding node entry - to the tail of the Used doubly linked list. The number of the - pairs in the netmap increase by 1. - - If Map is NULL, then ASSERT(). - If Key is NULL, then ASSERT(). - - @param[in, out] Map The netmap to insert into. - @param[in] Key The user's key. - @param[in] Value The user's value for the key. - - @retval EFI_OUT_OF_RESOURCES Failed to allocate the memory for the item. - @retval EFI_SUCCESS The item is inserted to the tail. - -**/ -EFI_STATUS -EFIAPI -NetMapInsertTail ( - IN OUT NET_MAP *Map, - IN VOID *Key, - IN VOID *Value OPTIONAL - ); - -/** - Finds the key in the netmap and returns the point to the item containing the Key. - - Iterate the Used doubly linked list of the netmap to get every item. Compare the key of every - item with the key to search. It returns the point to the item contains the Key if found. - - If Map is NULL, then ASSERT(). - If Key is NULL, then ASSERT(). - - @param[in] Map The netmap to search within. - @param[in] Key The key to search. - - @return The point to the item contains the Key, or NULL if Key isn't in the map. - -**/ -NET_MAP_ITEM * -EFIAPI -NetMapFindKey ( - IN NET_MAP *Map, - IN VOID *Key - ); - -/** - Remove the node entry of the item from the netmap and return the key of the removed item. - - Remove the node entry of the item from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node - entry of the item to the Recycled doubly linked list of the netmap. If Value is not NULL, - Value will point to the value of the item. It returns the key of the removed item. - - If Map is NULL, then ASSERT(). - If Item is NULL, then ASSERT(). - if item in not in the netmap, then ASSERT(). - - @param[in, out] Map The netmap to remove the item from. - @param[in, out] Item The item to remove. - @param[out] Value The variable to receive the value if not NULL. - - @return The key of the removed item. - -**/ -VOID * -EFIAPI -NetMapRemoveItem ( - IN OUT NET_MAP *Map, - IN OUT NET_MAP_ITEM *Item, - OUT VOID **Value OPTIONAL - ); - -/** - Remove the first node entry on the netmap and return the key of the removed item. - - Remove the first node entry from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node - entry to the Recycled doubly linked list of the netmap. If parameter Value is not NULL, - parameter Value will point to the value of the item. It returns the key of the removed item. - - If Map is NULL, then ASSERT(). - If the Used doubly linked list is empty, then ASSERT(). - - @param[in, out] Map The netmap to remove the head from. - @param[out] Value The variable to receive the value if not NULL. - - @return The key of the item removed. - -**/ -VOID * -EFIAPI -NetMapRemoveHead ( - IN OUT NET_MAP *Map, - OUT VOID **Value OPTIONAL - ); - -/** - Remove the last node entry on the netmap and return the key of the removed item. - - Remove the last node entry from the Used doubly linked list of the netmap. - The number of the pairs in the netmap decrease by 1. Then add the node - entry to the Recycled doubly linked list of the netmap. If parameter Value is not NULL, - parameter Value will point to the value of the item. It returns the key of the removed item. - - If Map is NULL, then ASSERT(). - If the Used doubly linked list is empty, then ASSERT(). - - @param[in, out] Map The netmap to remove the tail from. - @param[out] Value The variable to receive the value if not NULL. - - @return The key of the item removed. - -**/ -VOID * -EFIAPI -NetMapRemoveTail ( - IN OUT NET_MAP *Map, - OUT VOID **Value OPTIONAL - ); - -typedef -EFI_STATUS -(EFIAPI *NET_MAP_CALLBACK) ( - IN NET_MAP *Map, - IN NET_MAP_ITEM *Item, - IN VOID *Arg - ); - -/** - Iterate through the netmap and call CallBack for each item. - - It will continue the traverse if CallBack returns EFI_SUCCESS, otherwise, break - from the loop. It returns the CallBack's last return value. This function is - delete safe for the current item. - - If Map is NULL, then ASSERT(). - If CallBack is NULL, then ASSERT(). - - @param[in] Map The Map to iterate through. - @param[in] CallBack The callback function to call for each item. - @param[in] Arg The opaque parameter to the callback. - - @retval EFI_SUCCESS There is no item in the netmap, or CallBack for each item - returns EFI_SUCCESS. - @retval Others It returns the CallBack's last return value. - -**/ -EFI_STATUS -EFIAPI -NetMapIterate ( - IN NET_MAP *Map, - IN NET_MAP_CALLBACK CallBack, - IN VOID *Arg OPTIONAL - ); - - -// -// Helper functions to implement driver binding and service binding protocols. -// -/** - Create a child of the service that is identified by ServiceBindingGuid. - - Get the ServiceBinding Protocol first, then use it to create a child. - - If ServiceBindingGuid is NULL, then ASSERT(). - If ChildHandle is NULL, then ASSERT(). - - @param[in] Controller The controller which has the service installed. - @param[in] Image The image handle used to open service. - @param[in] ServiceBindingGuid The service's Guid. - @param[in, out] ChildHandle The handle to receive the created child. - - @retval EFI_SUCCESS The child was successfully created. - @retval Others Failed to create the child. - -**/ -EFI_STATUS -EFIAPI -NetLibCreateServiceChild ( - IN EFI_HANDLE Controller, - IN EFI_HANDLE Image, - IN EFI_GUID *ServiceBindingGuid, - IN OUT EFI_HANDLE *ChildHandle - ); - -/** - Destroy a child of the service that is identified by ServiceBindingGuid. - - Get the ServiceBinding Protocol first, then use it to destroy a child. - - If ServiceBindingGuid is NULL, then ASSERT(). - - @param[in] Controller The controller which has the service installed. - @param[in] Image The image handle used to open service. - @param[in] ServiceBindingGuid The service's Guid. - @param[in] ChildHandle The child to destroy. - - @retval EFI_SUCCESS The child was destroyed. - @retval Others Failed to destroy the child. - -**/ -EFI_STATUS -EFIAPI -NetLibDestroyServiceChild ( - IN EFI_HANDLE Controller, - IN EFI_HANDLE Image, - IN EFI_GUID *ServiceBindingGuid, - IN EFI_HANDLE ChildHandle - ); - -/** - Get handle with Simple Network Protocol installed on it. - - There should be MNP Service Binding Protocol installed on the input ServiceHandle. - If Simple Network Protocol is already installed on the ServiceHandle, the - ServiceHandle will be returned. If SNP is not installed on the ServiceHandle, - try to find its parent handle with SNP installed. - - @param[in] ServiceHandle The handle where network service binding protocols are - installed on. - @param[out] Snp The pointer to store the address of the SNP instance. - This is an optional parameter that may be NULL. - - @return The SNP handle, or NULL if not found. - -**/ -EFI_HANDLE -EFIAPI -NetLibGetSnpHandle ( - IN EFI_HANDLE ServiceHandle, - OUT EFI_SIMPLE_NETWORK_PROTOCOL **Snp OPTIONAL - ); - -/** - Retrieve VLAN ID of a VLAN device handle. - - Search VLAN device path node in Device Path of specified ServiceHandle and - return its VLAN ID. If no VLAN device path node found, then this ServiceHandle - is not a VLAN device handle, and 0 will be returned. - - @param[in] ServiceHandle The handle where network service binding protocols are - installed on. - - @return VLAN ID of the device handle, or 0 if not a VLAN device. - -**/ -UINT16 -EFIAPI -NetLibGetVlanId ( - IN EFI_HANDLE ServiceHandle - ); - -/** - Find VLAN device handle with specified VLAN ID. - - The VLAN child device handle is created by VLAN Config Protocol on ControllerHandle. - This function will append VLAN device path node to the parent device path, - and then use LocateDevicePath() to find the correct VLAN device handle. - - @param[in] ControllerHandle The handle where network service binding protocols are - installed on. - @param[in] VlanId The configured VLAN ID for the VLAN device. - - @return The VLAN device handle, or NULL if not found. - -**/ -EFI_HANDLE -EFIAPI -NetLibGetVlanHandle ( - IN EFI_HANDLE ControllerHandle, - IN UINT16 VlanId - ); - -/** - Get MAC address associated with the network service handle. - - If MacAddress is NULL, then ASSERT(). - If AddressSize is NULL, then ASSERT(). - - There should be MNP Service Binding Protocol installed on the input ServiceHandle. - If SNP is installed on the ServiceHandle or its parent handle, MAC address will - be retrieved from SNP. If no SNP found, try to get SNP mode data use MNP. - - @param[in] ServiceHandle The handle where network service binding protocols are - installed on. - @param[out] MacAddress The pointer to store the returned MAC address. - @param[out] AddressSize The length of returned MAC address. - - @retval EFI_SUCCESS MAC address was returned successfully. - @retval Others Failed to get SNP mode data. - -**/ -EFI_STATUS -EFIAPI -NetLibGetMacAddress ( - IN EFI_HANDLE ServiceHandle, - OUT EFI_MAC_ADDRESS *MacAddress, - OUT UINTN *AddressSize - ); - -/** - Convert MAC address of the NIC associated with specified Service Binding Handle - to a unicode string. Callers are responsible for freeing the string storage. - - If MacString is NULL, then ASSERT(). - - Locate simple network protocol associated with the Service Binding Handle and - get the mac address from SNP. Then convert the mac address into a unicode - string. It takes 2 unicode characters to represent a 1 byte binary buffer. - Plus one unicode character for the null-terminator. - - @param[in] ServiceHandle The handle where network service binding protocol is - installed. - @param[in] ImageHandle The image handle used to act as the agent handle to - get the simple network protocol. This parameter is - optional and may be NULL. - @param[out] MacString The pointer to store the address of the string - representation of the mac address. - - @retval EFI_SUCCESS Converted the mac address a unicode string successfully. - @retval EFI_OUT_OF_RESOURCES There are not enough memory resources. - @retval Others Failed to open the simple network protocol. - -**/ -EFI_STATUS -EFIAPI -NetLibGetMacString ( - IN EFI_HANDLE ServiceHandle, - IN EFI_HANDLE ImageHandle, OPTIONAL - OUT CHAR16 **MacString - ); - -/** - Detect media status for specified network device. - - If MediaPresent is NULL, then ASSERT(). - - The underlying UNDI driver may or may not support reporting media status from - GET_STATUS command (PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED). This routine - will try to invoke Snp->GetStatus() to get the media status. If media is already - present, it returns directly. If media is not present, it will stop SNP and then - restart SNP to get the latest media status. This provides an opportunity to get - the correct media status for old UNDI driver, which doesn't support reporting - media status from GET_STATUS command. - Note: there are two limitations for the current algorithm: - 1) For UNDI with this capability, when the cable is not attached, there will - be an redundant Stop/Start() process. - 2) for UNDI without this capability, in case that network cable is attached when - Snp->Initialize() is invoked while network cable is unattached later, - NetLibDetectMedia() will report MediaPresent as TRUE, causing upper layer - apps to wait for timeout time. - - @param[in] ServiceHandle The handle where network service binding protocols are - installed. - @param[out] MediaPresent The pointer to store the media status. - - @retval EFI_SUCCESS Media detection success. - @retval EFI_INVALID_PARAMETER ServiceHandle is not a valid network device handle. - @retval EFI_UNSUPPORTED The network device does not support media detection. - @retval EFI_DEVICE_ERROR SNP is in an unknown state. - -**/ -EFI_STATUS -EFIAPI -NetLibDetectMedia ( - IN EFI_HANDLE ServiceHandle, - OUT BOOLEAN *MediaPresent - ); - -/** - Detect media state for a network device. This routine will wait for a period of time at - a specified checking interval when a certain network is under connecting until connection - process finishes or timeout. If Aip protocol is supported by low layer drivers, three kinds - of media states can be detected: EFI_SUCCESS, EFI_NOT_READY and EFI_NO_MEDIA, represents - connected state, connecting state and no media state respectively. When function detects - the current state is EFI_NOT_READY, it will loop to wait for next time's check until state - turns to be EFI_SUCCESS or EFI_NO_MEDIA. If Aip protocol is not supported, function will - call NetLibDetectMedia() and return state directly. - - @param[in] ServiceHandle The handle where network service binding protocols are - installed on. - @param[in] Timeout The maximum number of 100ns units to wait when network - is connecting. Zero value means detect once and return - immediately. - @param[out] MediaState The pointer to the detected media state. - - @retval EFI_SUCCESS Media detection success. - @retval EFI_INVALID_PARAMETER ServiceHandle is not a valid network device handle or - MediaState pointer is NULL. - @retval EFI_DEVICE_ERROR A device error occurred. - @retval EFI_TIMEOUT Network is connecting but timeout. - -**/ -EFI_STATUS -EFIAPI -NetLibDetectMediaWaitTimeout ( - IN EFI_HANDLE ServiceHandle, - IN UINT64 Timeout, - OUT EFI_STATUS *MediaState - ); - - -/** - Create an IPv4 device path node. - - If Node is NULL, then ASSERT(). - - The header type of IPv4 device path node is MESSAGING_DEVICE_PATH. - The header subtype of IPv4 device path node is MSG_IPv4_DP. - The length of the IPv4 device path node in bytes is 19. - Get other information from parameters to make up the whole IPv4 device path node. - - @param[in, out] Node The pointer to the IPv4 device path node. - @param[in] Controller The controller handle. - @param[in] LocalIp The local IPv4 address. - @param[in] LocalPort The local port. - @param[in] RemoteIp The remote IPv4 address. - @param[in] RemotePort The remote port. - @param[in] Protocol The protocol type in the IP header. - @param[in] UseDefaultAddress Whether this instance is using default address or not. - -**/ -VOID -EFIAPI -NetLibCreateIPv4DPathNode ( - IN OUT IPv4_DEVICE_PATH *Node, - IN EFI_HANDLE Controller, - IN IP4_ADDR LocalIp, - IN UINT16 LocalPort, - IN IP4_ADDR RemoteIp, - IN UINT16 RemotePort, - IN UINT16 Protocol, - IN BOOLEAN UseDefaultAddress - ); - -/** - Create an IPv6 device path node. - - If Node is NULL, then ASSERT(). - If LocalIp is NULL, then ASSERT(). - If RemoteIp is NULL, then ASSERT(). - - The header type of IPv6 device path node is MESSAGING_DEVICE_PATH. - The header subtype of IPv6 device path node is MSG_IPv6_DP. - The length of the IPv6 device path node in bytes is 43. - Get other information from parameters to make up the whole IPv6 device path node. - - @param[in, out] Node The pointer to the IPv6 device path node. - @param[in] Controller The controller handle. - @param[in] LocalIp The local IPv6 address. - @param[in] LocalPort The local port. - @param[in] RemoteIp The remote IPv6 address. - @param[in] RemotePort The remote port. - @param[in] Protocol The protocol type in the IP header. - -**/ -VOID -EFIAPI -NetLibCreateIPv6DPathNode ( - IN OUT IPv6_DEVICE_PATH *Node, - IN EFI_HANDLE Controller, - IN EFI_IPv6_ADDRESS *LocalIp, - IN UINT16 LocalPort, - IN EFI_IPv6_ADDRESS *RemoteIp, - IN UINT16 RemotePort, - IN UINT16 Protocol - ); - - -/** - Find the UNDI/SNP handle from controller and protocol GUID. - - If ProtocolGuid is NULL, then ASSERT(). - - For example, IP will open an MNP child to transmit/receive - packets. When MNP is stopped, IP should also be stopped. IP - needs to find its own private data that is related the IP's - service binding instance that is installed on the UNDI/SNP handle. - The controller is then either an MNP or an ARP child handle. Note that - IP opens these handles using BY_DRIVER. Use that information to get the - UNDI/SNP handle. - - @param[in] Controller The protocol handle to check. - @param[in] ProtocolGuid The protocol that is related with the handle. - - @return The UNDI/SNP handle or NULL for errors. - -**/ -EFI_HANDLE -EFIAPI -NetLibGetNicHandle ( - IN EFI_HANDLE Controller, - IN EFI_GUID *ProtocolGuid - ); - -/** - This is the default unload handle for all the network drivers. - - Disconnect the driver specified by ImageHandle from all the devices in the handle database. - Uninstall all the protocols installed in the driver entry point. - - @param[in] ImageHandle The drivers' driver image. - - @retval EFI_SUCCESS The image is unloaded. - @retval Others Failed to unload the image. - -**/ -EFI_STATUS -EFIAPI -NetLibDefaultUnload ( - IN EFI_HANDLE ImageHandle - ); - -/** - Convert one Null-terminated ASCII string (decimal dotted) to EFI_IPv4_ADDRESS. - - @param[in] String The pointer to the Ascii string. - @param[out] Ip4Address The pointer to the converted IPv4 address. - - @retval EFI_SUCCESS Converted to an IPv4 address successfully. - @retval EFI_INVALID_PARAMETER The string is malformatted, or Ip4Address is NULL. - -**/ -EFI_STATUS -EFIAPI -NetLibAsciiStrToIp4 ( - IN CONST CHAR8 *String, - OUT EFI_IPv4_ADDRESS *Ip4Address - ); - -/** - Convert one Null-terminated ASCII string to EFI_IPv6_ADDRESS. The format of the - string is defined in RFC 4291 - Text Representation of Addresses. - - @param[in] String The pointer to the Ascii string. - @param[out] Ip6Address The pointer to the converted IPv6 address. - - @retval EFI_SUCCESS Converted to an IPv6 address successfully. - @retval EFI_INVALID_PARAMETER The string is malformatted, or Ip6Address is NULL. - -**/ -EFI_STATUS -EFIAPI -NetLibAsciiStrToIp6 ( - IN CONST CHAR8 *String, - OUT EFI_IPv6_ADDRESS *Ip6Address - ); - -/** - Convert one Null-terminated Unicode string (decimal dotted) to EFI_IPv4_ADDRESS. - - @param[in] String The pointer to the Ascii string. - @param[out] Ip4Address The pointer to the converted IPv4 address. - - @retval EFI_SUCCESS Converted to an IPv4 address successfully. - @retval EFI_INVALID_PARAMETER The string is mal-formatted or Ip4Address is NULL. - -**/ -EFI_STATUS -EFIAPI -NetLibStrToIp4 ( - IN CONST CHAR16 *String, - OUT EFI_IPv4_ADDRESS *Ip4Address - ); - -/** - Convert one Null-terminated Unicode string to EFI_IPv6_ADDRESS. The format of - the string is defined in RFC 4291 - Text Representation of Addresses. - - @param[in] String The pointer to the Ascii string. - @param[out] Ip6Address The pointer to the converted IPv6 address. - - @retval EFI_SUCCESS Converted to an IPv6 address successfully. - @retval EFI_INVALID_PARAMETER The string is malformatted or Ip6Address is NULL. - -**/ -EFI_STATUS -EFIAPI -NetLibStrToIp6 ( - IN CONST CHAR16 *String, - OUT EFI_IPv6_ADDRESS *Ip6Address - ); - -/** - Convert one Null-terminated Unicode string to EFI_IPv6_ADDRESS and prefix length. - The format of the string is defined in RFC 4291 - Text Representation of Addresses - Prefixes: ipv6-address/prefix-length. - - @param[in] String The pointer to the Ascii string. - @param[out] Ip6Address The pointer to the converted IPv6 address. - @param[out] PrefixLength The pointer to the converted prefix length. - - @retval EFI_SUCCESS Converted to an IPv6 address successfully. - @retval EFI_INVALID_PARAMETER The string is malformatted, or Ip6Address is NULL. - -**/ -EFI_STATUS -EFIAPI -NetLibStrToIp6andPrefix ( - IN CONST CHAR16 *String, - OUT EFI_IPv6_ADDRESS *Ip6Address, - OUT UINT8 *PrefixLength - ); - -/** - - Convert one EFI_IPv6_ADDRESS to Null-terminated Unicode string. - The text representation of address is defined in RFC 4291. - - @param[in] Ip6Address The pointer to the IPv6 address. - @param[out] String The buffer to return the converted string. - @param[in] StringSize The length in bytes of the input String. - - @retval EFI_SUCCESS Convert to string successfully. - @retval EFI_INVALID_PARAMETER The input parameter is invalid. - @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small for the result. BufferSize has been - updated with the size needed to complete the request. -**/ -EFI_STATUS -EFIAPI -NetLibIp6ToStr ( - IN EFI_IPv6_ADDRESS *Ip6Address, - OUT CHAR16 *String, - IN UINTN StringSize - ); - -// -// 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') - - -#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))) - -// -// Single memory block in the vector. -// -typedef struct { - UINT32 Len; // The block's length - UINT8 *Bulk; // The block's Data -} NET_BLOCK; - -typedef VOID (EFIAPI *NET_VECTOR_EXT_FREE) (VOID *Arg); - -// -//NET_VECTOR contains several blocks to hold all packet's -//fragments and other house-keeping stuff for sharing. It -//doesn't specify the where actual packet fragment begins. -// -typedef struct { - UINT32 Signature; - INTN RefCnt; // Reference count to share NET_VECTOR. - NET_VECTOR_EXT_FREE Free; // external function to free NET_VECTOR - VOID *Arg; // opaque argument to Free - UINT32 Flag; // Flags, NET_VECTOR_OWN_FIRST - UINT32 Len; // Total length of the associated BLOCKs - - UINT32 BlockNum; - NET_BLOCK Block[1]; -} NET_VECTOR; - -// -//NET_BLOCK_OP operates on the NET_BLOCK. It specifies -//where the actual fragment begins and ends -// -typedef struct { - UINT8 *BlockHead; // Block's head, or the smallest valid Head - UINT8 *BlockTail; // Block's tail. BlockTail-BlockHead=block length - UINT8 *Head; // 1st byte of the data in the block - UINT8 *Tail; // Tail of the data in the block, Tail-Head=Size - UINT32 Size; // The size of the data -} NET_BLOCK_OP; - -typedef union { - IP4_HEAD *Ip4; - EFI_IP6_HEADER *Ip6; -} NET_IP_HEAD; - -// -//NET_BUF is the buffer manage structure used by the -//network stack. Every network packet may be fragmented. The Vector points to -//memory blocks used by each fragment, and BlockOp -//specifies where each fragment begins and ends. -// -//It also contains an opaque area for the protocol to store -//per-packet information. Protocol must be careful not -//to overwrite the members after that. -// -typedef struct { - UINT32 Signature; - INTN RefCnt; - LIST_ENTRY List; // The List this NET_BUF is on - - NET_IP_HEAD Ip; // Network layer header, for fast access - TCP_HEAD *Tcp; // Transport layer header, for fast access - EFI_UDP_HEADER *Udp; // User Datagram Protocol header - UINT8 ProtoData [NET_PROTO_DATA]; //Protocol specific data - - NET_VECTOR *Vector; // The vector containing the packet - - UINT32 BlockOpNum; // Total number of BlockOp in the buffer - UINT32 TotalSize; // Total size of the actual packet - NET_BLOCK_OP BlockOp[1]; // Specify the position of actual packet -} NET_BUF; - -// -//A queue of NET_BUFs. It is a thin extension of -//NET_BUF functions. -// -typedef struct { - UINT32 Signature; - INTN RefCnt; - LIST_ENTRY List; // The List this buffer queue is on - - LIST_ENTRY BufList; // list of queued buffers - UINT32 BufSize; // total length of DATA in the buffers - UINT32 BufNum; // total number of buffers on the chain -} NET_BUF_QUEUE; - -// -// Pseudo header for TCP and UDP checksum -// -#pragma pack(1) -typedef struct { - IP4_ADDR SrcIp; - IP4_ADDR DstIp; - UINT8 Reserved; - UINT8 Protocol; - UINT16 Len; -} NET_PSEUDO_HDR; - -typedef struct { - EFI_IPv6_ADDRESS SrcIp; - EFI_IPv6_ADDRESS DstIp; - UINT32 Len; - UINT32 Reserved:24; - UINT32 NextHeader:8; -} NET_IP6_PSEUDO_HDR; -#pragma pack() - -// -// The fragment entry table used in network interfaces. This is -// the same as NET_BLOCK now. Use two different to distinguish -// the two in case that NET_BLOCK be enhanced later. -// -typedef struct { - UINT32 Len; - UINT8 *Bulk; -} NET_FRAGMENT; - -#define NET_GET_REF(PData) ((PData)->RefCnt++) -#define NET_PUT_REF(PData) ((PData)->RefCnt--) -#define NETBUF_FROM_PROTODATA(Info) BASE_CR((Info), NET_BUF, ProtoData) - -#define NET_BUF_SHARED(Buf) \ - (((Buf)->RefCnt > 1) || ((Buf)->Vector->RefCnt > 1)) - -#define NET_VECTOR_SIZE(BlockNum) \ - (sizeof (NET_VECTOR) + ((BlockNum) - 1) * sizeof (NET_BLOCK)) - -#define NET_BUF_SIZE(BlockOpNum) \ - (sizeof (NET_BUF) + ((BlockOpNum) - 1) * sizeof (NET_BLOCK_OP)) - -#define NET_HEADSPACE(BlockOp) \ - ((UINTN)((BlockOp)->Head) - (UINTN)((BlockOp)->BlockHead)) - -#define NET_TAILSPACE(BlockOp) \ - ((UINTN)((BlockOp)->BlockTail) - (UINTN)((BlockOp)->Tail)) - -/** - Allocate a single block NET_BUF. Upon allocation, all the - free space is in the tail room. - - @param[in] Len The length of the block. - - @return The pointer to the allocated NET_BUF, or NULL if the - allocation failed due to resource limitations. - -**/ -NET_BUF * -EFIAPI -NetbufAlloc ( - IN UINT32 Len - ); - -/** - Free the net buffer and its associated NET_VECTOR. - - Decrease the reference count of the net buffer by one. Free the associated net - vector and itself if the reference count of the net buffer is decreased to 0. - The net vector free operation decreases the reference count of the net - vector by one, and performs the resource free operation when the reference count - of the net vector is 0. - - @param[in] Nbuf The pointer to the NET_BUF to be freed. - -**/ -VOID -EFIAPI -NetbufFree ( - IN NET_BUF *Nbuf - ); - -/** - Get the index of NET_BLOCK_OP that contains the byte at Offset in the net - buffer. - - For example, this function can be used to retrieve the IP header in the packet. It - also can be used to get the fragment that contains the byte used - mainly by the library implementation itself. - - @param[in] Nbuf The pointer to the net buffer. - @param[in] Offset The offset of the byte. - @param[out] Index Index of the NET_BLOCK_OP that contains the byte at - Offset. - - @return The pointer to the Offset'th byte of data in the net buffer, or NULL - if there is no such data in the net buffer. - -**/ -UINT8 * -EFIAPI -NetbufGetByte ( - IN NET_BUF *Nbuf, - IN UINT32 Offset, - OUT UINT32 *Index OPTIONAL - ); - -/** - Create a copy of the net buffer that shares the associated net vector. - - The reference count of the newly created net buffer is set to 1. The reference - count of the associated net vector is increased by one. - - @param[in] Nbuf The pointer to the net buffer to be cloned. - - @return The pointer to the cloned net buffer, or NULL if the - allocation failed due to resource limitations. - -**/ -NET_BUF * -EFIAPI -NetbufClone ( - IN NET_BUF *Nbuf - ); - -/** - Create a duplicated copy of the net buffer with data copied and HeadSpace - bytes of head space reserved. - - The duplicated net buffer will allocate its own memory to hold the data of the - source net buffer. - - @param[in] Nbuf The pointer to the net buffer to be duplicated from. - @param[in, out] Duplicate The pointer to the net buffer to duplicate to. If - NULL, a new net buffer is allocated. - @param[in] HeadSpace The length of the head space to reserve. - - @return The pointer to the duplicated net buffer, or NULL if - the allocation failed due to resource limitations. - -**/ -NET_BUF * -EFIAPI -NetbufDuplicate ( - IN NET_BUF *Nbuf, - IN OUT NET_BUF *Duplicate OPTIONAL, - IN UINT32 HeadSpace - ); - -/** - Create a NET_BUF structure which contains Len byte data of Nbuf starting from - Offset. - - A new NET_BUF structure will be created but the associated data in NET_VECTOR - is shared. This function exists to perform IP packet fragmentation. - - @param[in] Nbuf The pointer to the net buffer to be extracted. - @param[in] Offset Starting point of the data to be included in the new - net buffer. - @param[in] Len The bytes of data to be included in the new net buffer. - @param[in] HeadSpace The bytes of the head space to reserve for the protocol header. - - @return The pointer to the cloned net buffer, or NULL if the - allocation failed due to resource limitations. - -**/ -NET_BUF * -EFIAPI -NetbufGetFragment ( - IN NET_BUF *Nbuf, - IN UINT32 Offset, - IN UINT32 Len, - IN UINT32 HeadSpace - ); - -/** - Reserve some space in the header room of the net buffer. - - Upon allocation, all the space is in the tail room of the buffer. Call this - function to move space to the header room. This function is quite limited - in that it can only reserve space from the first block of an empty NET_BUF not - built from the external. However, it should be enough for the network stack. - - @param[in, out] Nbuf The pointer to the net buffer. - @param[in] Len The length of buffer to be reserved from the header. - -**/ -VOID -EFIAPI -NetbufReserve ( - IN OUT NET_BUF *Nbuf, - IN UINT32 Len - ); - -/** - Allocate Len bytes of space from the header or tail of the buffer. - - @param[in, out] Nbuf The pointer to the net buffer. - @param[in] Len The length of the buffer to be allocated. - @param[in] FromHead The flag to indicate whether to reserve the data - from head (TRUE) or tail (FALSE). - - @return The pointer to the first byte of the allocated buffer, - or NULL, if there is no sufficient space. - -**/ -UINT8* -EFIAPI -NetbufAllocSpace ( - IN OUT NET_BUF *Nbuf, - IN UINT32 Len, - IN BOOLEAN FromHead - ); - -/** - Trim Len bytes from the header or the tail of the net buffer. - - @param[in, out] Nbuf The pointer to the net buffer. - @param[in] Len The length of the data to be trimmed. - @param[in] FromHead The flag to indicate whether trim data is from the - head (TRUE) or the tail (FALSE). - - @return The length of the actual trimmed data, which may be less - than Len if the TotalSize of Nbuf is less than Len. - -**/ -UINT32 -EFIAPI -NetbufTrim ( - IN OUT NET_BUF *Nbuf, - IN UINT32 Len, - IN BOOLEAN FromHead - ); - -/** - Copy Len bytes of data from the specific offset of the net buffer to the - destination memory. - - The Len bytes of data may cross several fragments of the net buffer. - - @param[in] Nbuf The pointer to the net buffer. - @param[in] Offset The sequence number of the first byte to copy. - @param[in] Len The length of the data to copy. - @param[in] Dest The destination of the data to copy to. - - @return The length of the actual copied data, or 0 if the offset - specified exceeds the total size of net buffer. - -**/ -UINT32 -EFIAPI -NetbufCopy ( - IN NET_BUF *Nbuf, - IN UINT32 Offset, - IN UINT32 Len, - IN UINT8 *Dest - ); - -/** - Build a NET_BUF from external blocks. - - A new NET_BUF structure will be created from external blocks. An additional block - of memory will be allocated to hold reserved HeadSpace bytes of header room - and existing HeadLen bytes of header, but the external blocks are shared by the - net buffer to avoid data copying. - - @param[in] ExtFragment The pointer to the data block. - @param[in] ExtNum The number of the data blocks. - @param[in] HeadSpace The head space to be reserved. - @param[in] HeadLen The length of the protocol header. The function - pulls this amount of data into a linear block. - @param[in] ExtFree The pointer to the caller-provided free function. - @param[in] Arg The argument passed to ExtFree when ExtFree is - called. - - @return The pointer to the net buffer built from the data blocks, - or NULL if the allocation failed due to resource - limit. - -**/ -NET_BUF * -EFIAPI -NetbufFromExt ( - IN NET_FRAGMENT *ExtFragment, - IN UINT32 ExtNum, - IN UINT32 HeadSpace, - IN UINT32 HeadLen, - IN NET_VECTOR_EXT_FREE ExtFree, - IN VOID *Arg OPTIONAL - ); - -/** - Build a fragment table to contain the fragments in the net buffer. This is the - opposite operation of the NetbufFromExt. - - @param[in] Nbuf Points to the net buffer. - @param[in, out] ExtFragment The pointer to the data block. - @param[in, out] ExtNum The number of the data blocks. - - @retval EFI_BUFFER_TOO_SMALL The number of non-empty blocks is bigger than - ExtNum. - @retval EFI_SUCCESS The fragment table was built successfully. - -**/ -EFI_STATUS -EFIAPI -NetbufBuildExt ( - IN NET_BUF *Nbuf, - IN OUT NET_FRAGMENT *ExtFragment, - IN OUT UINT32 *ExtNum - ); - -/** - Build a net buffer from a list of net buffers. - - All the fragments will be collected from the list of NEW_BUF, and then a new - net buffer will be created through NetbufFromExt. - - @param[in] BufList A List of the net buffer. - @param[in] HeadSpace The head space to be reserved. - @param[in] HeaderLen The length of the protocol header. The function - pulls this amount of data into a linear block. - @param[in] ExtFree The pointer to the caller provided free function. - @param[in] Arg The argument passed to ExtFree when ExtFree is called. - - @return The pointer to the net buffer built from the list of net - buffers. - -**/ -NET_BUF * -EFIAPI -NetbufFromBufList ( - IN LIST_ENTRY *BufList, - IN UINT32 HeadSpace, - IN UINT32 HeaderLen, - IN NET_VECTOR_EXT_FREE ExtFree, - IN VOID *Arg OPTIONAL - ); - -/** - Free a list of net buffers. - - @param[in, out] Head The pointer to the head of linked net buffers. - -**/ -VOID -EFIAPI -NetbufFreeList ( - IN OUT LIST_ENTRY *Head - ); - -/** - Initiate the net buffer queue. - - @param[in, out] NbufQue The pointer to the net buffer queue to be initialized. - -**/ -VOID -EFIAPI -NetbufQueInit ( - IN OUT NET_BUF_QUEUE *NbufQue - ); - -/** - Allocate and initialize a net buffer queue. - - @return The pointer to the allocated net buffer queue, or NULL if the - allocation failed due to resource limit. - -**/ -NET_BUF_QUEUE * -EFIAPI -NetbufQueAlloc ( - VOID - ); - -/** - Free a net buffer queue. - - Decrease the reference count of the net buffer queue by one. The real resource - free operation isn't performed until the reference count of the net buffer - queue is decreased to 0. - - @param[in] NbufQue The pointer to the net buffer queue to be freed. - -**/ -VOID -EFIAPI -NetbufQueFree ( - IN NET_BUF_QUEUE *NbufQue - ); - -/** - Remove a net buffer from the head in the specific queue and return it. - - @param[in, out] NbufQue The pointer to the net buffer queue. - - @return The pointer to the net buffer removed from the specific queue, - or NULL if there is no net buffer in the specific queue. - -**/ -NET_BUF * -EFIAPI -NetbufQueRemove ( - IN OUT NET_BUF_QUEUE *NbufQue - ); - -/** - Append a net buffer to the net buffer queue. - - @param[in, out] NbufQue The pointer to the net buffer queue. - @param[in, out] Nbuf The pointer to the net buffer to be appended. - -**/ -VOID -EFIAPI -NetbufQueAppend ( - IN OUT NET_BUF_QUEUE *NbufQue, - IN OUT NET_BUF *Nbuf - ); - -/** - Copy Len bytes of data from the net buffer queue at the specific offset to the - destination memory. - - The copying operation is the same as NetbufCopy, but applies to the net buffer - queue instead of the net buffer. - - @param[in] NbufQue The pointer to the net buffer queue. - @param[in] Offset The sequence number of the first byte to copy. - @param[in] Len The length of the data to copy. - @param[out] Dest The destination of the data to copy to. - - @return The length of the actual copied data, or 0 if the offset - specified exceeds the total size of net buffer queue. - -**/ -UINT32 -EFIAPI -NetbufQueCopy ( - IN NET_BUF_QUEUE *NbufQue, - IN UINT32 Offset, - IN UINT32 Len, - OUT UINT8 *Dest - ); - -/** - Trim Len bytes of data from the buffer queue and free any net buffer - that is completely trimmed. - - The trimming operation is the same as NetbufTrim but applies to the net buffer - queue instead of the net buffer. - - @param[in, out] NbufQue The pointer to the net buffer queue. - @param[in] Len The length of the data to trim. - - @return The actual length of the data trimmed. - -**/ -UINT32 -EFIAPI -NetbufQueTrim ( - IN OUT NET_BUF_QUEUE *NbufQue, - IN UINT32 Len - ); - - -/** - Flush the net buffer queue. - - @param[in, out] NbufQue The pointer to the queue to be flushed. - -**/ -VOID -EFIAPI -NetbufQueFlush ( - IN OUT NET_BUF_QUEUE *NbufQue - ); - -/** - Compute the checksum for a bulk of data. - - @param[in] Bulk The pointer to the data. - @param[in] Len The length of the data, in bytes. - - @return The computed checksum. - -**/ -UINT16 -EFIAPI -NetblockChecksum ( - IN UINT8 *Bulk, - IN UINT32 Len - ); - -/** - Add two checksums. - - @param[in] Checksum1 The first checksum to be added. - @param[in] Checksum2 The second checksum to be added. - - @return The new checksum. - -**/ -UINT16 -EFIAPI -NetAddChecksum ( - IN UINT16 Checksum1, - IN UINT16 Checksum2 - ); - -/** - Compute the checksum for a NET_BUF. - - @param[in] Nbuf The pointer to the net buffer. - - @return The computed checksum. - -**/ -UINT16 -EFIAPI -NetbufChecksum ( - IN NET_BUF *Nbuf - ); - -/** - Compute the checksum for TCP/UDP pseudo header. - - Src and Dst are in network byte order, and Len is in host byte order. - - @param[in] Src The source address of the packet. - @param[in] Dst The destination address of the packet. - @param[in] Proto The protocol type of the packet. - @param[in] Len The length of the packet. - - @return The computed checksum. - -**/ -UINT16 -EFIAPI -NetPseudoHeadChecksum ( - IN IP4_ADDR Src, - IN IP4_ADDR Dst, - IN UINT8 Proto, - IN UINT16 Len - ); - -/** - Compute the checksum for the TCP6/UDP6 pseudo header. - - Src and Dst are in network byte order, and Len is in host byte order. - - @param[in] Src The source address of the packet. - @param[in] Dst The destination address of the packet. - @param[in] NextHeader The protocol type of the packet. - @param[in] Len The length of the packet. - - @return The computed checksum. - -**/ -UINT16 -EFIAPI -NetIp6PseudoHeadChecksum ( - IN EFI_IPv6_ADDRESS *Src, - IN EFI_IPv6_ADDRESS *Dst, - IN UINT8 NextHeader, - IN UINT32 Len - ); - -/** - The function frees the net buffer which allocated by the IP protocol. It releases - only the net buffer and doesn't call the external free function. - - This function should be called after finishing the process of mIpSec->ProcessExt() - for outbound traffic. The (EFI_IPSEC2_PROTOCOL)->ProcessExt() allocates a new - buffer for the ESP, so there needs a function to free the old net buffer. - - @param[in] Nbuf The network buffer to be freed. - -**/ -VOID -NetIpSecNetbufFree ( - NET_BUF *Nbuf - ); - -/** - This function obtains the system guid from the smbios table. - - If SystemGuid is NULL, then ASSERT(). - - @param[out] SystemGuid The pointer of the returned system guid. - - @retval EFI_SUCCESS Successfully obtained the system guid. - @retval EFI_NOT_FOUND Did not find the SMBIOS table. - -**/ -EFI_STATUS -EFIAPI -NetLibGetSystemGuid ( - OUT EFI_GUID *SystemGuid - ); - -/** - Create Dns QName according the queried domain name. - - If DomainName is NULL, then ASSERT(). - - QName is a domain name represented as a sequence of labels, - where each label consists of a length octet followed by that - number of octets. The QName terminates with the zero - length octet for the null label of the root. Caller should - take responsibility to free the buffer in returned pointer. - - @param DomainName The pointer to the queried domain name string. - - @retval NULL Failed to fill QName. - @return QName filled successfully. - -**/ -CHAR8 * -EFIAPI -NetLibCreateDnsQName ( - IN CHAR16 *DomainName - ); - -#endif diff --git a/MdeModulePkg/Include/Library/TcpIoLib.h b/MdeModulePkg/Include/Library/TcpIoLib.h deleted file mode 100644 index 63872f615c..0000000000 --- a/MdeModulePkg/Include/Library/TcpIoLib.h +++ /dev/null @@ -1,247 +0,0 @@ -/** @file - This library is used to share code between UEFI network stack modules. - It provides the helper routines to access TCP service. - -Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _TCP_IO_H_ -#define _TCP_IO_H_ - - -#include -#include - -#include - -#define TCP_VERSION_4 IP_VERSION_4 -#define TCP_VERSION_6 IP_VERSION_6 - -/// -/// 10 seconds -/// -#define TCP_GET_MAPPING_TIMEOUT 100000000U - - -typedef struct { - EFI_IPv4_ADDRESS LocalIp; - EFI_IPv4_ADDRESS SubnetMask; - EFI_IPv4_ADDRESS Gateway; - - UINT16 StationPort; - EFI_IPv4_ADDRESS RemoteIp; - UINT16 RemotePort; - BOOLEAN ActiveFlag; -} TCP4_IO_CONFIG_DATA; - -typedef struct { - UINT16 StationPort; - EFI_IPv6_ADDRESS RemoteIp; - UINT16 RemotePort; - BOOLEAN ActiveFlag; -} TCP6_IO_CONFIG_DATA; - -typedef union { - TCP4_IO_CONFIG_DATA Tcp4IoConfigData; - TCP6_IO_CONFIG_DATA Tcp6IoConfigData; -} TCP_IO_CONFIG_DATA; - -typedef union { - EFI_TCP4_PROTOCOL *Tcp4; - EFI_TCP6_PROTOCOL *Tcp6; -} TCP_IO_PROTOCOL; - -typedef union { - EFI_TCP4_CONNECTION_TOKEN Tcp4Token; - EFI_TCP6_CONNECTION_TOKEN Tcp6Token; -} TCP_IO_CONNECTION_TOKEN; - -typedef union { - EFI_TCP4_IO_TOKEN Tcp4Token; - EFI_TCP6_IO_TOKEN Tcp6Token; -} TCP_IO_IO_TOKEN; - -typedef union { - EFI_TCP4_CLOSE_TOKEN Tcp4Token; - EFI_TCP6_CLOSE_TOKEN Tcp6Token; -} TCP_IO_CLOSE_TOKEN; - -typedef union { - EFI_TCP4_LISTEN_TOKEN Tcp4Token; - EFI_TCP6_LISTEN_TOKEN Tcp6Token; -} TCP_IO_LISTEN_TOKEN; - - -typedef struct { - UINT8 TcpVersion; - EFI_HANDLE Image; - EFI_HANDLE Controller; - EFI_HANDLE Handle; - - TCP_IO_PROTOCOL Tcp; - TCP_IO_PROTOCOL NewTcp; - TCP_IO_CONNECTION_TOKEN ConnToken; - TCP_IO_IO_TOKEN TxToken; - TCP_IO_IO_TOKEN RxToken; - TCP_IO_CLOSE_TOKEN CloseToken; - TCP_IO_LISTEN_TOKEN ListenToken; - - BOOLEAN IsConnDone; - BOOLEAN IsTxDone; - BOOLEAN IsRxDone; - BOOLEAN IsCloseDone; - BOOLEAN IsListenDone; -} TCP_IO; - -/** - Create a TCP socket with the specified configuration data. - - @param[in] Image The handle of the driver image. - @param[in] Controller The handle of the controller. - @param[in] TcpVersion The version of Tcp, TCP_VERSION_4 or TCP_VERSION_6. - @param[in] ConfigData The Tcp configuration data. - @param[out] TcpIo The TcpIo. - - @retval EFI_SUCCESS The TCP socket is created and configured. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_UNSUPPORTED One or more of the control options are not - supported in the implementation. - @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. - @retval Others Failed to create the TCP socket or configure it. - -**/ -EFI_STATUS -EFIAPI -TcpIoCreateSocket ( - IN EFI_HANDLE Image, - IN EFI_HANDLE Controller, - IN UINT8 TcpVersion, - IN TCP_IO_CONFIG_DATA *ConfigData, - OUT TCP_IO *TcpIo - ); - -/** - Destroy the socket. - - @param[in] TcpIo The TcpIo which wraps the socket to be destroyed. - -**/ -VOID -EFIAPI -TcpIoDestroySocket ( - IN TCP_IO *TcpIo - ); - -/** - Connect to the other endpoint of the TCP socket. - - @param[in, out] TcpIo The TcpIo wrapping the TCP socket. - @param[in] Timeout The time to wait for connection done. Set to NULL for infinite wait. - - @retval EFI_SUCCESS Connect to the other endpoint of the TCP socket - successfully. - @retval EFI_TIMEOUT Failed to connect to the other endpoint of the - TCP socket in the specified time period. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_UNSUPPORTED One or more of the control options are not - supported in the implementation. - @retval Others Other errors as indicated. - -**/ -EFI_STATUS -EFIAPI -TcpIoConnect ( - IN OUT TCP_IO *TcpIo, - IN EFI_EVENT Timeout OPTIONAL - ); - -/** - Accept the incomding request from the other endpoint of the TCP socket. - - @param[in, out] TcpIo The TcpIo wrapping the TCP socket. - @param[in] Timeout The time to wait for connection done. Set to NULL for infinite wait. - - - @retval EFI_SUCCESS Connect to the other endpoint of the TCP socket - successfully. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_UNSUPPORTED One or more of the control options are not - supported in the implementation. - - @retval EFI_TIMEOUT Failed to connect to the other endpoint of the - TCP socket in the specified time period. - @retval Others Other errors as indicated. - -**/ -EFI_STATUS -EFIAPI -TcpIoAccept ( - IN OUT TCP_IO *TcpIo, - IN EFI_EVENT Timeout OPTIONAL - ); - -/** - Reset the socket. - - @param[in, out] TcpIo The TcpIo wrapping the TCP socket. - -**/ -VOID -EFIAPI -TcpIoReset ( - IN OUT TCP_IO *TcpIo - ); - -/** - Transmit the Packet to the other endpoint of the socket. - - @param[in] TcpIo The TcpIo wrapping the TCP socket. - @param[in] Packet The packet to transmit. - - @retval EFI_SUCCESS The packet is trasmitted. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_UNSUPPORTED One or more of the control options are not - supported in the implementation. - @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. - @retval EFI_DEVICE_ERROR An unexpected network or system error occurred. - @retval Others Other errors as indicated. - -**/ -EFI_STATUS -EFIAPI -TcpIoTransmit ( - IN TCP_IO *TcpIo, - IN NET_BUF *Packet - ); - -/** - Receive data from the socket. - - @param[in, out] TcpIo The TcpIo which wraps the socket to be destroyed. - @param[in] Packet The buffer to hold the data copy from the socket rx buffer. - @param[in] AsyncMode Is this receive asyncronous or not. - @param[in] Timeout The time to wait for receiving the amount of data the Packet - can hold. Set to NULL for infinite wait. - - @retval EFI_SUCCESS The required amount of data is received from the socket. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_DEVICE_ERROR An unexpected network or system error occurred. - @retval EFI_OUT_OF_RESOURCES Failed to allocate momery. - @retval EFI_TIMEOUT Failed to receive the required amount of data in the - specified time period. - @retval Others Other errors as indicated. - -**/ -EFI_STATUS -EFIAPI -TcpIoReceive ( - IN OUT TCP_IO *TcpIo, - IN NET_BUF *Packet, - IN BOOLEAN AsyncMode, - IN EFI_EVENT Timeout OPTIONAL - ); - -#endif - diff --git a/MdeModulePkg/Include/Library/UdpIoLib.h b/MdeModulePkg/Include/Library/UdpIoLib.h deleted file mode 100644 index c3cddfafb1..0000000000 --- a/MdeModulePkg/Include/Library/UdpIoLib.h +++ /dev/null @@ -1,363 +0,0 @@ -/** @file - 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 - 2018, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent - -**/ - -#ifndef _UDP_IO_H_ -#define _UDP_IO_H_ - -#include -#include - -#include - -typedef struct _UDP_IO UDP_IO; - -/// -/// Signatures used by UdpIo Library. -/// - -#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 UDP address pair. -/// -typedef struct { - EFI_IP_ADDRESS LocalAddr; - UINT16 LocalPort; - EFI_IP_ADDRESS RemoteAddr; - UINT16 RemotePort; -} UDP_END_POINT; - -/** - Prototype called when receiving or sending packets to or from a UDP point. - - This prototype is used by both receive and sending when calling - UdpIoRecvDatagram() or UdpIoSendDatagram(). When receiving, Netbuf is allocated by the - UDP access point and released by the user. When sending, the user allocates the the NetBuf, - which is then provided to the callback as a reference. - - @param[in] Packet The packet received or sent. - @param[in] EndPoint The UDP address pair corresponds to the UDP IO. - @param[in] IoStatus The packet receiving or sending status. - @param[in] Context The user-defined data when calling UdpIoRecvDatagram() or - UdpIoSendDatagram(). -**/ -typedef -VOID -(EFIAPI *UDP_IO_CALLBACK) ( - IN NET_BUF *Packet, - IN UDP_END_POINT *EndPoint, - IN EFI_STATUS IoStatus, - IN VOID *Context - ); - -/// -/// This structure is used internally by the UdpIo Library. -/// -/// Each receive request is wrapped in an UDP_RX_TOKEN. Upon completion, -/// the CallBack will be called. Only one receive request is sent to UDP at a -/// 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 *UdpIo; - - UDP_IO_CALLBACK CallBack; - VOID *Context; - UINT32 HeadLen; - - UDP_COMPLETION_TOKEN Token; -} UDP_RX_TOKEN; - - - -/// -/// This structure is used internally by UdpIo Library. -/// -/// Each transmit request is wrapped in an UDP_TX_TOKEN. Upon completion, -/// 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 *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. -/// -/// This data structure wraps the UDP instance and configuration. -/// UdpIo Library uses this structure for all Udp4 or Udp6 operations. -/// -struct _UDP_IO { - UINT32 Signature; - LIST_ENTRY Link; - INTN RefCnt; - UINT8 UdpVersion; - - // - // Handle used to create/destroy UDP child - // - EFI_HANDLE Controller; - EFI_HANDLE Image; - EFI_HANDLE UdpHandle; - - 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; -}; - -/** - The prototype called when UdpIo Library configures a UDP instance. - - The prototype is set and called when creating a UDP_IO in UdpIoCreatePort(). - - @param[in] UdpIo The UDP_IO to configure. - @param[in] Context The user-defined data when calling UdpIoCreatePort(). - - @retval EFI_SUCCESS The configuration succeeded. - @retval Others The UDP_IO fails to configure indicating - UdpIoCreatePort() should fail. -**/ -typedef -EFI_STATUS -(EFIAPI *UDP_IO_CONFIG) ( - IN UDP_IO *UdpIo, - IN VOID *Context - ); - -/** - The select function to decide whether to cancel the UDP_TX_TOKEN. - - @param[in] Token The UDP_TX_TOKEN to decide whether to cancel. - @param[in] Context User-defined data in UdpIoCancelDgrams(). - - @retval TRUE Cancel the UDP_TX_TOKEN. - @retval FALSE Do not cancel this UDP_TX_TOKEN. - -**/ -typedef -BOOLEAN -(EFIAPI *UDP_IO_TO_CANCEL) ( - IN UDP_TX_TOKEN *Token, - IN VOID *Context - ); - -/** - Cancel all the sent datagram that pass the selection criteria of ToCancel. - - If ToCancel is NULL, all the datagrams are cancelled. - If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT(). - - @param[in] UdpIo The UDP_IO to cancel packet. - @param[in] IoStatus The IoStatus to return to the packet owners. - @param[in] ToCancel The select funtion to test whether to cancel this - packet or not. - @param[in] Context The opaque parameter to the ToCancel. - -**/ -VOID -EFIAPI -UdpIoCancelDgrams ( - IN UDP_IO *UdpIo, - IN EFI_STATUS IoStatus, - IN UDP_IO_TO_CANCEL ToCancel, OPTIONAL - IN VOID *Context OPTIONAL - ); - -/** - Creates a UDP_IO to access the UDP service. It creates and configures - a UDP child. - - If Configure is NULL, then ASSERT(). - If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT(). - - It locates the UDP service binding prototype on the Controller parameter - uses the UDP service binding prototype to create a UDP child (also known as - a UDP instance) configures the UDP child by calling Configure function prototype. - Any failures in creating or configuring the UDP child return NULL for failure. - - @param[in] Controller The controller that has the UDP service binding. - protocol installed. - @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 The newly-created UDP_IO, or NULL if failed. - -**/ -UDP_IO * -EFIAPI -UdpIoCreateIo ( - IN EFI_HANDLE Controller, - IN EFI_HANDLE ImageHandle, - IN UDP_IO_CONFIG Configure, - IN UINT8 UdpVersion, - IN VOID *Context - ); - -/** - Free the UDP_IO and all its related resources. - - If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT(). - - The function cancels all sent datagrams and receive requests. - - @param[in] UdpIo The UDP_IO to free. - - @retval EFI_SUCCESS The UDP_IO is freed. - @retval Others Failed to free UDP_IO. - -**/ -EFI_STATUS -EFIAPI -UdpIoFreeIo ( - IN UDP_IO *UdpIo - ); - -/** - Cleans up the UDP_IO without freeing it. Call this function - if you intend to later re-use the UDP_IO. - - If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT(). - - This function releases all transmitted datagrams and receive requests and configures NULL for the UDP instance. - - @param[in] UdpIo The UDP_IO to clean up. - -**/ -VOID -EFIAPI -UdpIoCleanIo ( - IN UDP_IO *UdpIo - ); - -/** - Send a packet through the UDP_IO. - - If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT(). - - 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 to send the packet through. - @param[in] Packet The packet to send. - @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 - transmitted or failed. - @param[in] Context The opaque parameter passed to CallBack. - - @retval EFI_OUT_OF_RESOURCES Failed to allocate resource for the packet. - @retval EFI_SUCCESS The packet is successfully delivered to UDP for - transmission. - -**/ -EFI_STATUS -EFIAPI -UdpIoSendDatagram ( - IN UDP_IO *UdpIo, - IN NET_BUF *Packet, - IN UDP_END_POINT *EndPoint OPTIONAL, - IN EFI_IP_ADDRESS *Gateway OPTIONAL, - IN UDP_IO_CALLBACK CallBack, - IN VOID *Context - ); - -/** - Cancel a single sent datagram. - - @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 *UdpIo, - IN NET_BUF *Packet - ); - -/** - Issue a receive request to the UDP_IO. - - If Udp version is not UDP_IO_UDP4_VERSION or UDP_IO_UDP6_VERSION, then ASSERT(). - - 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 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. - - @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 was issued successfully. - @retval EFI_UNSUPPORTED The UDP version in UDP_IO is not supported. - -**/ -EFI_STATUS -EFIAPI -UdpIoRecvDatagram ( - IN UDP_IO *UdpIo, - IN UDP_IO_CALLBACK CallBack, - IN VOID *Context, - IN UINT32 HeadLen - ); - -#endif - -- cgit v1.2.3