NetworkPkg: Move Network library header file from MdeModulePkg to NetworkPkg
Signed-off-by: Liming Gao <liming.gao@intel.com> Cc: Siyuan Fu <siyuan.fu@intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: Siyuan Fu <siyuan.fu@intel.com>
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
/** @file
|
||||
DpcLib.h.
|
||||
|
||||
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _DPC_LIB_H_
|
||||
#define _DPC_LIB_H_
|
||||
|
||||
#include <Protocol/Dpc.h>
|
||||
|
||||
/**
|
||||
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
|
@@ -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.<BR>
|
||||
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _HTTP_LIB_H_
|
||||
#define _HTTP_LIB_H_
|
||||
|
||||
#include <Protocol/Http.h>
|
||||
|
||||
|
||||
/**
|
||||
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
|
||||
|
@@ -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.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _IP_IO_H_
|
||||
#define _IP_IO_H_
|
||||
|
||||
#include <Protocol/Ip4.h>
|
||||
#include <Protocol/Ip6.h>
|
||||
|
||||
#include <Library/NetLib.h>
|
||||
|
||||
//
|
||||
// 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
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -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.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _TCP_IO_H_
|
||||
#define _TCP_IO_H_
|
||||
|
||||
|
||||
#include <Protocol/Tcp4.h>
|
||||
#include <Protocol/Tcp6.h>
|
||||
|
||||
#include <Library/NetLib.h>
|
||||
|
||||
#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
|
||||
|
@@ -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.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _UDP_IO_H_
|
||||
#define _UDP_IO_H_
|
||||
|
||||
#include <Protocol/Udp4.h>
|
||||
#include <Protocol/Udp6.h>
|
||||
|
||||
#include <Library/NetLib.h>
|
||||
|
||||
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
|
||||
|
Reference in New Issue
Block a user