X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FInclude%2FLibrary%2FIpIoLib.h;h=537915b882ff2458622c9670fc0bf844f9e771ae;hp=e2c9f67559ef81631efbd9b7fc510bbd9c648da0;hb=e798cd87ca9a3a30c4cea50c5f5de84e10a8bc5a;hpb=772db4bb33ae66fa20e39f786b5f80d107d450a5 diff --git a/MdeModulePkg/Include/Library/IpIoLib.h b/MdeModulePkg/Include/Library/IpIoLib.h index e2c9f67559..537915b882 100644 --- a/MdeModulePkg/Include/Library/IpIoLib.h +++ b/MdeModulePkg/Include/Library/IpIoLib.h @@ -1,37 +1,32 @@ -/** @file - -Copyright (c) 2005 - 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - IpIo.h - -Abstract: - - -**/ - -#ifndef _IP_IO_H_ -#define _IP_IO_H_ - -#include +/** @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 - 2010, Intel Corporation. All rights reserved
+This program and the accompanying materials are licensed and made available under +the terms and conditions of the BSD License that accompanies this distribution. +The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#ifndef _IP_IO_H_ +#define _IP_IO_H_ + #include -#include -#include - +#include + +#include + // -// type and code define for ICMP protocol error got +// type and code define for ICMP protocol error // from IP // #define ICMP_TYPE_UNREACH 3 -#define ICMP_TYPE_TIMXCEED 11 +#define ICMP_TYPE_TIMXCEED 11 #define ICMP_TYPE_PARAMPROB 12 #define ICMP_TYPE_SOURCEQUENCH 4 @@ -49,202 +44,537 @@ Abstract: #define ICMP_CODE_UNREACH_TOSNET 11 #define ICMP_CODE_UNREACH_TOSHOST 12 -// -// this error will be delivered to the -// listening transportation layer protocol -// consuming IpIO -// -typedef enum { - ICMP_ERR_UNREACH_NET = 0, - ICMP_ERR_UNREACH_HOST, - ICMP_ERR_UNREACH_PROTOCOL, - ICMP_ERR_UNREACH_PORT, - ICMP_ERR_MSGSIZE, - ICMP_ERR_UNREACH_SRCFAIL, - ICMP_ERR_TIMXCEED_INTRANS, - ICMP_ERR_TIMXCEED_REASS, - ICMP_ERR_QUENCH, - ICMP_ERR_PARAMPROB -} ICMP_ERROR; - -typedef struct _ICMP_ERROR_INFO { - EFI_STATUS Error; - BOOLEAN IsHard; - BOOLEAN Notify; +/** + 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; - - -#define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2) - -extern EFI_IP4_CONFIG_DATA mIpIoDefaultIpConfigData; - -typedef struct _EFI_NET_SESSION_DATA { - IP4_ADDR Source; - IP4_ADDR Dest; - EFI_IP4_HEADER *IpHdr; -} EFI_NET_SESSION_DATA; - -typedef -VOID -(*PKT_RCVD_NOTIFY) ( - IN EFI_STATUS Status, // rcvd pkt result - IN ICMP_ERROR IcmpErr, // if Status == EFI_ICMP_ERROR, this - // field is valid for user - IN EFI_NET_SESSION_DATA *NetSession, // the communication point - IN NET_BUF *Pkt, // packet received - IN VOID *Context // the Context provided by user for recive data - ); - -typedef -VOID -(*PKT_SENT_NOTIFY) ( - IN EFI_STATUS Status, // sent pkt result - IN VOID *Context, // the context provided by user for sending data - IN VOID *Sender, // the sender to be notified - IN VOID *NotifyData // sent pkt related data to notify - ); - -typedef struct _IP_IO { - - // - // the node used to link this IpIo to the active IpIo list. - // - NET_LIST_ENTRY Entry; - - // the list used to maintain the IP instance for different sending purpose. - // - NET_LIST_ENTRY IpList; - - // - // the ip instance consumed by this IP IO - // - EFI_HANDLE Controller; - EFI_HANDLE Image; - EFI_HANDLE ChildHandle; - EFI_IP4_PROTOCOL *Ip; - BOOLEAN IsConfigured; - - // - // some ip config data can be changed - // - UINT8 Protocol; - - // - // token and event used to get data from IP - // - EFI_IP4_COMPLETION_TOKEN RcvToken; - - // - // list entry used to link the token passed to IP_IO - // - NET_LIST_ENTRY PendingSndList; - - // - // User interface used to get notify from IP_IO - // - VOID *RcvdContext; - VOID *SndContext; - PKT_RCVD_NOTIFY PktRcvdNotify; - PKT_SENT_NOTIFY PktSentNotify; -} IP_IO; - -typedef struct _IP_IO_OPEN_DATA { - EFI_IP4_CONFIG_DATA IpConfigData; - VOID *RcvdContext; - VOID *SndContext; - PKT_RCVD_NOTIFY PktRcvdNotify; - PKT_SENT_NOTIFY PktSentNotify; -} IP_IO_OPEN_DATA; - -typedef struct _IP_IO_SEND_ENTRY { - NET_LIST_ENTRY Entry; - IP_IO *IpIo; - VOID *Context; - VOID *NotifyData; - EFI_IP4_PROTOCOL *Ip; - NET_BUF *Pkt; - EFI_IP4_COMPLETION_TOKEN *SndToken; -} IP_IO_SEND_ENTRY; - -typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE; - -typedef struct _IP_IO_IP_INFO { - IP4_ADDR Addr; - IP4_ADDR SubnetMask; - NET_LIST_ENTRY Entry; - EFI_HANDLE ChildHandle; - EFI_IP4_PROTOCOL *Ip; - EFI_IP4_COMPLETION_TOKEN DummyRcvToken; - INTN RefCnt; -} IP_IO_IP_INFO; - -IP_IO * -IpIoCreate ( - IN EFI_HANDLE Image, - IN EFI_HANDLE Controller - ); - -EFI_STATUS -IpIoDestroy ( - IN IP_IO *IpIo - ); - -EFI_STATUS -IpIoStop ( - IN IP_IO *IpIo - ); - -EFI_STATUS -IpIoOpen ( - IN IP_IO *IpIo, - IN IP_IO_OPEN_DATA *OpenData - ); - -EFI_STATUS -IpIoSend ( - IN IP_IO *IpIo, - IN NET_BUF *Pkt, - IN IP_IO_IP_INFO *Sender, - IN VOID *Context OPTIONAL, - IN VOID *NotifyData OPTIONAL, - IN IP4_ADDR Dest, - IN IP_IO_OVERRIDE *OverrideData - ); - -VOID -IpIoCancelTxToken ( - IN IP_IO *IpIo, - IN VOID *Packet - ); - -IP_IO_IP_INFO * -IpIoAddIp ( - IN IP_IO *IpIo - ); - -EFI_STATUS -IpIoConfigIp ( - IN IP_IO_IP_INFO *IpInfo, - IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL - ); - -VOID -IpIoRemoveIp ( - IN IP_IO *IpIo, - IN IP_IO_IP_INFO *IpInfo - ); - -IP_IO_IP_INFO * -IpIoFindSender ( - IN OUT IP_IO **IpIo, - IN IP4_ADDR Src - ); - -EFI_STATUS -IpIoGetIcmpErrStatus ( - IN ICMP_ERROR IcmpError, - OUT BOOLEAN *IsHard, OPTIONAL - OUT BOOLEAN *Notify OPTIONAL - ); - -#endif + +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; + +/// +/// 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 pointer to 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 VOID *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 + // + VOID *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; +} 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; + VOID *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; + VOID *Ip; + IP_IO_IP_COMPLETION_TOKEN DummyRcvToken; + INTN RefCnt; + UINT8 IpVersion; +} IP_IO_IP_INFO; + +/** + Create a new IP_IO instance. + + 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. + + 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 Others Anrror condition occurred. + +**/ +EFI_STATUS +EFIAPI +IpIoStop ( + IN OUT IP_IO *IpIo + ); + +/** + Open an IP_IO instance for use. + + 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 + reopening it. + @retval Others An 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 are wrapped in + Pkt. The IP instance wrapped in IpIo is used for sending by default, but can be + overriden by Sender. Other sending configurations, such as source address and gateway + address, are specified in OverrideData. + + @param[in, out] IpIo The pointer to an IP_IO instance used for sending IP + packet. + @param[in, out] Pkt The pointer to the IP packet to be sent. + @param[in] Sender Optional. The IP protocol instance used for sending. + @param[in] Context The optional context data. + @param[in] NotifyData The optional notify data. + @param[in] Dest The destination IP address to send this packet to. + @param[in] OverrideData The data to override some configuration of the IP + instance used for sending. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_NOT_STARTED The IpIo is not configured. + @retval EFI_OUT_OF_RESOURCES Failed due to resource limitations. + +**/ +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, + IN IP_IO_OVERRIDE *OverrideData OPTIONAL + ); + +/** + Cancel the IP transmit token that wraps this Packet. + + @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. + + 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. + + @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. + + 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. + +**/ +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. + + @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_OUT_OF_RESOURCES Failed due to resource limitations. + +**/ +EFI_STATUS +IpIoRefreshNeighbor ( + IN IP_IO *IpIo, + IN EFI_IP_ADDRESS *Neighbor, + IN UINT32 Timeout + ); + +#endif +