X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FInclude%2FLibrary%2FIpIoLib.h;h=fe136c16fca69b9e4c8db5d5a29c7b4537a901df;hp=daf8c308a1076ff55cef95c1748e844888702313;hb=9917def3294bac4d14cd86ba382652aa41c6c1d6;hpb=e9b67286ad4428d63e2495f38b71273b81e0846f diff --git a/MdeModulePkg/Include/Library/IpIoLib.h b/MdeModulePkg/Include/Library/IpIoLib.h index daf8c308a1..fe136c16fc 100644 --- a/MdeModulePkg/Include/Library/IpIoLib.h +++ b/MdeModulePkg/Include/Library/IpIoLib.h @@ -1,12 +1,12 @@ /** @file - Ihis library is only intended to be used by UEFI network stack modules. - It provides the IpIo layer on the EFI IP4 Protocol. + 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 - 2008, 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 +Copyright (c) 2005 - 2018, 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. @@ -17,11 +17,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #define _IP_IO_H_ #include +#include #include // -// type and code define for ICMP protocol error +// type and code define for ICMP protocol error // from IP // #define ICMP_TYPE_UNREACH 3 @@ -47,89 +48,147 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 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 + + @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 + 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 + + @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 + + @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 mIpIoDefaultIpConfigData; + +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. /// -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; + +#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; + 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 { - IP4_ADDR Source; ///< Source IP of the received packet - IP4_ADDR Dest; ///< Destination IP of the received packet - EFI_IP4_HEADER *IpHdr; ///< IP4 header of the received packet + 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 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 Packet 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 -(*PKT_RCVD_NOTIFY) ( - IN EFI_STATUS Status, - IN ICMP_ERROR IcmpErr, +(EFIAPI *PKT_RCVD_NOTIFY) ( + IN EFI_STATUS Status, + IN UINT8 IcmpErr, IN EFI_NET_SESSION_DATA *NetSession, IN NET_BUF *Pkt, IN VOID *Context @@ -137,26 +196,27 @@ VOID /** The prototype is called back when an IP packet is sent. - - @param[in] Status Result of the sending + + @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 for sender - @param[in] NotifyData Context data specified when calling IpIoSend() - + @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 -(*PKT_SENT_NOTIFY) ( - IN EFI_STATUS Status, - IN VOID *Context, - IN VOID *Sender, - IN VOID *NotifyData +(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 instances. The IpIo Library uses it for all -/// Ip4 operations. +/// This data structure wraps Ip4/Ip6 instances. The IpIo Library uses it for all +/// Ip4/Ip6 operations. /// typedef struct _IP_IO { /// @@ -168,38 +228,41 @@ typedef struct _IP_IO { /// 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 // - EFI_IP4_PROTOCOL *Ip; + IP_IO_IP_PROTOCOL Ip; BOOLEAN IsConfigured; /// - /// Some ip config data can be changed + /// Some ip configuration data can be changed. /// UINT8 Protocol; /// - /// Token and event used to get data from IP + /// Token and event used to get data from IP. /// - EFI_IP4_COMPLETION_TOKEN RcvToken; + IP_IO_IP_COMPLETION_TOKEN RcvToken; /// - /// List entry used to link the token passed to IP_IO + /// 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 + 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; /// @@ -207,11 +270,11 @@ typedef struct _IP_IO { /// It is used by IpIoOpen(). /// typedef struct _IP_IO_OPEN_DATA { - EFI_IP4_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_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; /// @@ -225,59 +288,63 @@ typedef struct _IP_IO_SEND_ENTRY { IP_IO *IpIo; VOID *Context; VOID *NotifyData; - EFI_IP4_PROTOCOL *Ip; + IP_IO_IP_PROTOCOL Ip; NET_BUF *Pkt; - EFI_IP4_COMPLETION_TOKEN *SndToken; + IP_IO_IP_COMPLETION_TOKEN SndToken; } IP_IO_SEND_ENTRY; -typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE; - /// /// The IP_IO_IP_INFO is used in IpIoSend() to override the default IP instance /// in IP_IO. /// typedef struct _IP_IO_IP_INFO { - IP4_ADDR Addr; - IP4_ADDR SubnetMask; + EFI_IP_ADDRESS Addr; + IP_IO_IP_MASK PreMask; LIST_ENTRY Entry; EFI_HANDLE ChildHandle; - EFI_IP4_PROTOCOL *Ip; - EFI_IP4_COMPLETION_TOKEN DummyRcvToken; + 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. - - This function uses IP4 service binding protocol in Controller to create an IP4 - child (aka IP4 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 service binding - protocol installed. + @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 Pointer to a newly created IP_IO instance, or NULL if failed. + @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 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 Pointer to the IP_IO instance that needs to be + @param[in, out] IpIo The pointer to the IP_IO instance that needs to be destroyed. - @retval EFI_SUCCESS The IP_IO instance destroyed successfully. - @retval Others Error condition occurred. + @retval EFI_SUCCESS The IP_IO instance was destroyed successfully. + @retval Others An error condition occurred. **/ EFI_STATUS @@ -288,14 +355,17 @@ IpIoDestroy ( /** 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 Pointer to the IP_IO instance that needs to stop. + @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 Error condition occurred. + @retval EFI_SUCCESS The IP_IO instance stopped successfully. + @retval EFI_INVALID_PARAMETER Invalid input parameter. + @retval Others Anrror condition occurred. **/ EFI_STATUS @@ -306,21 +376,25 @@ IpIoStop ( /** 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 Pointer to an IP_IO instance that needs + @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 Others Error condition occurred. + @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 @@ -332,25 +406,28 @@ IpIoOpen ( /** 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. + + 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 Optional. The IP protocol instance used for sending. + @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 @@ -361,15 +438,18 @@ IpIoSend ( IN IP_IO_IP_INFO *Sender OPTIONAL, IN VOID *Context OPTIONAL, IN VOID *NotifyData OPTIONAL, - IN IP4_ADDR Dest, + IN EFI_IP_ADDRESS *Dest OPTIONAL, IN IP_IO_OVERRIDE *OverrideData OPTIONAL ); /** - Cancel the IP transmit token which wraps this Packet. + Cancel the IP transmit token that wraps this Packet. + + If IpIo is NULL, then ASSERT(). + If Packet is NULL, then ASSERT(). - @param[in] IpIo Pointer to the IP_IO instance. - @param[in] Packet Pointer to the packet of NET_BUF to cancel. + @param[in] IpIo The pointer to the IP_IO instance. + @param[in] Packet The pointer to the packet of NET_BUF to cancel. **/ VOID @@ -381,15 +461,18 @@ IpIoCancelTxToken ( /** 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 Pointer to an IP_IO instance to add a new IP + @param[in, out] IpIo The pointer to an IP_IO instance to add a new IP instance for sending purposes. - @return Pointer to the created IP_IO_IP_INFO structure, NULL if failed. + @return The pointer to the created IP_IO_IP_INFO structure; NULL if failed. **/ IP_IO_IP_INFO * @@ -399,38 +482,42 @@ IpIoAddIp ( ); /** - Configure the IP instance of this IpInfo and start the receiving if Ip4ConfigData + Configure the IP instance of this IpInfo and start the receiving if IpConfigData is not NULL. - @param[in, out] IpInfo Pointer to the IP_IO_IP_INFO instance. - @param[in, out] Ip4ConfigData The IP4 configure data used to configure the IP - instance. If NULL, the IP instance is reset. If - UseDefaultAddress is set to TRUE, and the configure + 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 Ip4ConfigData. + is written back in this IpConfigData. - @retval EFI_SUCCESS The IP instance of this IpInfo is configured successfully, + @retval EFI_SUCCESS The IP instance of this IpInfo was configured successfully, or there is no need to reconfigure it. - @retval Others Configuration failed. + @retval Others The configuration failed. **/ EFI_STATUS EFIAPI IpIoConfigIp ( IN OUT IP_IO_IP_INFO *IpInfo, - IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL + 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 Pointer to the IP_IO instance. - @param[in] IpInfo Pointer to the IpInfo to be removed. + @param[in] IpIo The pointer to the IP_IO instance. + @param[in] IpInfo The pointer to the IpInfo to be removed. **/ VOID @@ -443,43 +530,84 @@ IpIoRemoveIp ( /** 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 Pointer to the pointer of the IP_IO instance. + @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 Pointer to the IP protocol can be used for sending purpose and its local - address is the same with Src. + @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 IP4_ADDR Src + 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[out] IsHard Whether it is a hard error. - @param[out] Notify Whether it need to notify SockError. + @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 ICMP Error Status, such as EFI_NETWORK_UNREACHABLE. + @retval EFI_UNSUPPORTED Unrecognizable ICMP error code + @return The ICMP Error Status, such as EFI_NETWORK_UNREACHABLE. **/ EFI_STATUS EFIAPI IpIoGetIcmpErrStatus ( - IN ICMP_ERROR IcmpError, + 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 +