197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** @file 2fb115c61504fe6c4f94be0a87f75e28e1684657ftye This library is only intended to be used by UEFI network stack modules. 3fb115c61504fe6c4f94be0a87f75e28e1684657ftye It provides the combined IpIo layer on the EFI IP4 Protocol and EFI IP6 protocol. 497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 5cd5ebaa06dca3e6ef3c464081e6defe00d358c69hhtianCopyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR> 664a80549c8ab874c5b23b376adbb99008e6143b0myronporterThis program and the accompanying materials are licensed and made available under 764a80549c8ab874c5b23b376adbb99008e6143b0myronporterthe terms and conditions of the BSD License that accompanies this distribution. 864a80549c8ab874c5b23b376adbb99008e6143b0myronporterThe full text of the license may be found at 964a80549c8ab874c5b23b376adbb99008e6143b0myronporterhttp://opensource.org/licenses/bsd-license.php. 1097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 1164a80549c8ab874c5b23b376adbb99008e6143b0myronporterTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 1297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 1397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 1497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 1597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 1697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#ifndef _IP_IO_H_ 1797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define _IP_IO_H_ 1897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 1997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#include <Protocol/Ip4.h> 20fb115c61504fe6c4f94be0a87f75e28e1684657ftye#include <Protocol/Ip6.h> 21cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 2297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#include <Library/NetLib.h> 2397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 2497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang// 25e9b67286ad4428d63e2495f38b71273b81e0846fpkandel// type and code define for ICMP protocol error 2697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang// from IP 2797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang// 2897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_TYPE_UNREACH 3 29cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu#define ICMP_TYPE_TIMXCEED 11 3097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_TYPE_PARAMPROB 12 3197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_TYPE_SOURCEQUENCH 4 3297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 3397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_NET 0 3497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_HOST 1 3597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_PROTOCOL 2 3697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_PORT 3 3797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_NEEDFRAG 4 3897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_SRCFAIL 5 3997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_NET_UNKNOWN 6 4097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_HOST_UNKNOWN 7 4197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_ISOLATED 8 4297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_NET_PROHIB 9 4397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_HOST_PROHIB 10 4497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_TOSNET 11 4597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#define ICMP_CODE_UNREACH_TOSHOST 12 4697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 47cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu/** 48e9b67286ad4428d63e2495f38b71273b81e0846fpkandel Get the IP header length from the struct EFI_IP4_HEADER. HeaderLength is 49cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu Internet header length in 32-bit words, so HeaderLength<<2 is the real 50cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu length of IP header. 51cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 5264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[out] HdrPtr A pointer to EFI_IP4_HEADER. 53cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 5464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The IP header length. 55cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu**/ 56cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu#define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2) 57cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 58cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu/** 59cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu To types of ICMP error which consist of ICMP header, IP header and original 60cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu datagram's data, get length from sum of ICMP header length, IP header length 61cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu and first 64 bits of datagram's data length. 62cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 6364a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] IpHdr A pointer to EFI_IP4_HEADER. 64cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 6564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The ICMP error length. 66cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu**/ 67cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu#define ICMP_ERRLEN(IpHdr) \ 68cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu (sizeof(IP4_ICMP_HEAD) + EFI_IP4_HEADER_LEN(IpHdr) + 8) 69cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 70cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu/** 71cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu Get the packet header from NET_BUF. 72cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 7364a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[out] Buf A pointer to NET_BUF. 7464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Type Header type. 75cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 7664a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The pointer to packet header. 77cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu**/ 78cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu#define NET_PROTO_HDR(Buf, Type) ((Type *) ((Buf)->BlockOp[0].Head)) 79cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 80cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 81fb115c61504fe6c4f94be0a87f75e28e1684657ftyeextern EFI_IP4_CONFIG_DATA mIp4IoDefaultIpConfigData; 82fb115c61504fe6c4f94be0a87f75e28e1684657ftyeextern EFI_IP6_CONFIG_DATA mIp6IoDefaultIpConfigData; 83fb115c61504fe6c4f94be0a87f75e28e1684657ftye 84cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu 85e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 86e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// This error will be delivered to the 87e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// listening transportation layer protocol 88e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// that consumes IpIO. 89e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 90b45b45b2d248892930620c33a9d01d8457ae0e54tye 91b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_UNREACH_NET 0 92b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_UNREACH_HOST 1 93b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_UNREACH_PROTOCOL 2 94b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_UNREACH_PORT 3 95b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_MSGSIZE 4 96b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_UNREACH_SRCFAIL 5 97b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_TIMXCEED_INTRANS 6 98b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_TIMXCEED_REASS 7 99b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_QUENCH 8 100b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP_ERR_PARAMPROB 9 101b45b45b2d248892930620c33a9d01d8457ae0e54tye 102b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_UNREACH_NET 0 103b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_UNREACH_HOST 1 104b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_UNREACH_PROTOCOL 2 105b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_UNREACH_PORT 3 106b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_PACKAGE_TOOBIG 4 107b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_TIMXCEED_HOPLIMIT 5 108b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_TIMXCEED_REASS 6 109b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_PARAMPROB_HEADER 7 110b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_PARAMPROB_NEXHEADER 8 111b45b45b2d248892930620c33a9d01d8457ae0e54tye#define ICMP6_ERR_PARAMPROB_IPV6OPTION 9 112fb115c61504fe6c4f94be0a87f75e28e1684657ftye 113e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 114e9b67286ad4428d63e2495f38b71273b81e0846fpkandel/// The helper struct for IpIoGetIcmpErrStatus(). It is for internal use only. 115e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 116cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywutypedef struct { 117fb115c61504fe6c4f94be0a87f75e28e1684657ftye BOOLEAN IsHard; 118fb115c61504fe6c4f94be0a87f75e28e1684657ftye BOOLEAN Notify; 11997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang} ICMP_ERROR_INFO; 12097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 121fb115c61504fe6c4f94be0a87f75e28e1684657ftyetypedef union { 122fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP4_COMPLETION_TOKEN Ip4Token; 123fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP6_COMPLETION_TOKEN Ip6Token; 124fb115c61504fe6c4f94be0a87f75e28e1684657ftye} IP_IO_IP_COMPLETION_TOKEN; 125fb115c61504fe6c4f94be0a87f75e28e1684657ftye 126fb115c61504fe6c4f94be0a87f75e28e1684657ftyetypedef union { 127fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP4_TRANSMIT_DATA Ip4TxData; 128fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP6_TRANSMIT_DATA Ip6TxData; 129fb115c61504fe6c4f94be0a87f75e28e1684657ftye} IP_IO_IP_TX_DATA; 130fb115c61504fe6c4f94be0a87f75e28e1684657ftye 131fb115c61504fe6c4f94be0a87f75e28e1684657ftyetypedef union { 132fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP4_RECEIVE_DATA Ip4RxData; 133fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP6_RECEIVE_DATA Ip6RxData; 134fb115c61504fe6c4f94be0a87f75e28e1684657ftye} IP_IO_IP_RX_DATA; 135fb115c61504fe6c4f94be0a87f75e28e1684657ftye 136fb115c61504fe6c4f94be0a87f75e28e1684657ftyetypedef union { 137fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP4_OVERRIDE_DATA Ip4OverrideData; 138fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP6_OVERRIDE_DATA Ip6OverrideData; 139fb115c61504fe6c4f94be0a87f75e28e1684657ftye} IP_IO_OVERRIDE; 140fb115c61504fe6c4f94be0a87f75e28e1684657ftye 141fb115c61504fe6c4f94be0a87f75e28e1684657ftyetypedef union { 142fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP4_CONFIG_DATA Ip4CfgData; 143fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP6_CONFIG_DATA Ip6CfgData; 144fb115c61504fe6c4f94be0a87f75e28e1684657ftye} IP_IO_IP_CONFIG_DATA; 145fb115c61504fe6c4f94be0a87f75e28e1684657ftye 146b45b45b2d248892930620c33a9d01d8457ae0e54tyetypedef union { 147b45b45b2d248892930620c33a9d01d8457ae0e54tye EFI_IP4_HEADER *Ip4Hdr; 148b45b45b2d248892930620c33a9d01d8457ae0e54tye EFI_IP6_HEADER *Ip6Hdr; 149b45b45b2d248892930620c33a9d01d8457ae0e54tye} IP_IO_IP_HEADER; 150b45b45b2d248892930620c33a9d01d8457ae0e54tye 151b45b45b2d248892930620c33a9d01d8457ae0e54tyetypedef union { 152b45b45b2d248892930620c33a9d01d8457ae0e54tye IP4_ADDR SubnetMask; 153b45b45b2d248892930620c33a9d01d8457ae0e54tye UINT8 PrefixLength; 154b45b45b2d248892930620c33a9d01d8457ae0e54tye} IP_IO_IP_MASK; 155b45b45b2d248892930620c33a9d01d8457ae0e54tye 1562a2e33b20feb245572416333bf26eb8a77e73aa9qianouyangtypedef union { 1572a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang EFI_IP4_PROTOCOL *Ip4; 1582a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang EFI_IP6_PROTOCOL *Ip6; 1592a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang} IP_IO_IP_PROTOCOL; 1602a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang 161e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 162e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// The IP session for an IP receive packet. 163e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 16497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef struct _EFI_NET_SESSION_DATA { 16564a80549c8ab874c5b23b376adbb99008e6143b0myronporter EFI_IP_ADDRESS Source; ///< Source IP of the received packet. 16664a80549c8ab874c5b23b376adbb99008e6143b0myronporter EFI_IP_ADDRESS Dest; ///< Destination IP of the received packet. 16764a80549c8ab874c5b23b376adbb99008e6143b0myronporter IP_IO_IP_HEADER IpHdr; ///< IP header of the received packet. 168a09ee46d9a258ef08a931c0d412c62c98dbdb8aaqouyang UINT32 IpHdrLen; ///< IP header length of the received packet. 169a09ee46d9a258ef08a931c0d412c62c98dbdb8aaqouyang ///< For IPv6, it includes the IP6 header 170a09ee46d9a258ef08a931c0d412c62c98dbdb8aaqouyang ///< length and extension header length. For 171a09ee46d9a258ef08a931c0d412c62c98dbdb8aaqouyang ///< IPv4, it includes the IP4 header length 172a09ee46d9a258ef08a931c0d412c62c98dbdb8aaqouyang ///< and options length. 17364a80549c8ab874c5b23b376adbb99008e6143b0myronporter UINT8 IpVersion; ///< The IP version of the received packet. 17497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang} EFI_NET_SESSION_DATA; 17597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 176e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/** 177e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong The prototype is called back when an IP packet is received. 178e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 17964a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Status The result of the receive request. 18064a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] IcmpErr Valid when Status is EFI_ICMP_ERROR. 18164a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] NetSession The IP session for the received packet. 18264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Pkt The packet received. 183e9b67286ad4428d63e2495f38b71273b81e0846fpkandel @param[in] Context The data provided by the user for the received packet when 184cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu the callback is registered in IP_IO_OPEN_DATA::RcvdContext. 185e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 186e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong**/ 18797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef 18897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangVOID 189e798cd87ca9a3a30c4cea50c5f5de84e10a8bc5ageekboy(EFIAPI *PKT_RCVD_NOTIFY) ( 190e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong IN EFI_STATUS Status, 191b45b45b2d248892930620c33a9d01d8457ae0e54tye IN UINT8 IcmpErr, 192e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong IN EFI_NET_SESSION_DATA *NetSession, 193e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong IN NET_BUF *Pkt, 194e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong IN VOID *Context 19597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 19697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 197e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/** 198e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong The prototype is called back when an IP packet is sent. 199e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 20064a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Status Result of the IP packet being sent. 201cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @param[in] Context The data provided by user for the received packet when 202cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu the callback is registered in IP_IO_OPEN_DATA::SndContext. 2032a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang @param[in] Sender A Union type to specify a pointer of EFI_IP4_PROTOCOL 2042a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang or EFI_IP6_PROTOCOL. 20564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] NotifyData The Context data specified when calling IpIoSend() 206e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 207e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong**/ 20897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef 20997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangVOID 210e798cd87ca9a3a30c4cea50c5f5de84e10a8bc5ageekboy(EFIAPI *PKT_SENT_NOTIFY) ( 2112a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IN EFI_STATUS Status, 2122a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IN VOID *Context, 2132a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IN IP_IO_IP_PROTOCOL Sender, 2142a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IN VOID *NotifyData 21597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 21697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 217e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 218fb115c61504fe6c4f94be0a87f75e28e1684657ftye/// This data structure wraps Ip4/Ip6 instances. The IpIo Library uses it for all 219fb115c61504fe6c4f94be0a87f75e28e1684657ftye/// Ip4/Ip6 operations. 220e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 22197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef struct _IP_IO { 222e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 223e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// The node used to link this IpIo to the active IpIo list. 224e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 22597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang LIST_ENTRY Entry; 22697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 227e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 228e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// The list used to maintain the IP instance for different sending purpose. 229e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 23097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang LIST_ENTRY IpList; 231e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 23297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang EFI_HANDLE Controller; 23397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang EFI_HANDLE Image; 23497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang EFI_HANDLE ChildHandle; 235e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong // 236e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong // The IP instance consumed by this IP_IO 237e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong // 2382a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IP_IO_IP_PROTOCOL Ip; 23997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang BOOLEAN IsConfigured; 24097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 241e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 24264a80549c8ab874c5b23b376adbb99008e6143b0myronporter /// Some ip configuration data can be changed. 243e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 24497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang UINT8 Protocol; 24597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 246e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 24764a80549c8ab874c5b23b376adbb99008e6143b0myronporter /// Token and event used to get data from IP. 248e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 249fb115c61504fe6c4f94be0a87f75e28e1684657ftye IP_IO_IP_COMPLETION_TOKEN RcvToken; 25097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 251e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 25264a80549c8ab874c5b23b376adbb99008e6143b0myronporter /// List entry used to link the token passed to IP_IO. 253e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong /// 25497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang LIST_ENTRY PendingSndList; 25597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 25697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang // 25797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang // User interface used to get notify from IP_IO 25897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang // 25964a80549c8ab874c5b23b376adbb99008e6143b0myronporter VOID *RcvdContext; ///< See IP_IO_OPEN_DATA::RcvdContext. 26064a80549c8ab874c5b23b376adbb99008e6143b0myronporter VOID *SndContext; ///< See IP_IO_OPEN_DATA::SndContext. 26164a80549c8ab874c5b23b376adbb99008e6143b0myronporter PKT_RCVD_NOTIFY PktRcvdNotify; ///< See IP_IO_OPEN_DATA::PktRcvdNotify. 26264a80549c8ab874c5b23b376adbb99008e6143b0myronporter PKT_SENT_NOTIFY PktSentNotify; ///< See IP_IO_OPEN_DATA::PktSentNotify. 263b45b45b2d248892930620c33a9d01d8457ae0e54tye UINT8 IpVersion; 26497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang} IP_IO; 26597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 266e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 267e9b67286ad4428d63e2495f38b71273b81e0846fpkandel/// The struct is for the user to pass IP configuration and callbacks to IP_IO. 268e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// It is used by IpIoOpen(). 269e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 27097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef struct _IP_IO_OPEN_DATA { 27164a80549c8ab874c5b23b376adbb99008e6143b0myronporter IP_IO_IP_CONFIG_DATA IpConfigData; ///< Configuration of the IP instance. 27264a80549c8ab874c5b23b376adbb99008e6143b0myronporter VOID *RcvdContext; ///< Context data used by receive callback. 27364a80549c8ab874c5b23b376adbb99008e6143b0myronporter VOID *SndContext; ///< Context data used by send callback. 27464a80549c8ab874c5b23b376adbb99008e6143b0myronporter PKT_RCVD_NOTIFY PktRcvdNotify; ///< Receive callback. 27564a80549c8ab874c5b23b376adbb99008e6143b0myronporter PKT_SENT_NOTIFY PktSentNotify; ///< Send callback. 27697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang} IP_IO_OPEN_DATA; 27797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 278e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 279e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// Internal struct book-keeping send request of IP_IO. 280e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 281e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// An IP_IO_SEND_ENTRY will be created each time a send request is issued to 282e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// IP_IO via IpIoSend(). 283e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 28497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef struct _IP_IO_SEND_ENTRY { 28597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang LIST_ENTRY Entry; 28697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang IP_IO *IpIo; 28797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang VOID *Context; 28897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang VOID *NotifyData; 2892a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IP_IO_IP_PROTOCOL Ip; 29097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang NET_BUF *Pkt; 291fb115c61504fe6c4f94be0a87f75e28e1684657ftye IP_IO_IP_COMPLETION_TOKEN SndToken; 29297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang} IP_IO_SEND_ENTRY; 29397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 294e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 295e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// The IP_IO_IP_INFO is used in IpIoSend() to override the default IP instance 296e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// in IP_IO. 297e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong/// 29897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangtypedef struct _IP_IO_IP_INFO { 299fb115c61504fe6c4f94be0a87f75e28e1684657ftye EFI_IP_ADDRESS Addr; 300b45b45b2d248892930620c33a9d01d8457ae0e54tye IP_IO_IP_MASK PreMask; 30197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang LIST_ENTRY Entry; 30297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang EFI_HANDLE ChildHandle; 3032a2e33b20feb245572416333bf26eb8a77e73aa9qianouyang IP_IO_IP_PROTOCOL Ip; 304fb115c61504fe6c4f94be0a87f75e28e1684657ftye IP_IO_IP_COMPLETION_TOKEN DummyRcvToken; 30597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang INTN RefCnt; 306b45b45b2d248892930620c33a9d01d8457ae0e54tye UINT8 IpVersion; 30797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang} IP_IO_IP_INFO; 30897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 30997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 31097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Create a new IP_IO instance. 311e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 312fb115c61504fe6c4f94be0a87f75e28e1684657ftye This function uses IP4/IP6 service binding protocol in Controller to create 313fb115c61504fe6c4f94be0a87f75e28e1684657ftye an IP4/IP6 child (aka IP4/IP6 instance). 31497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 315cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @param[in] Image The image handle of the driver or application that 316e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong consumes IP_IO. 317fb115c61504fe6c4f94be0a87f75e28e1684657ftye @param[in] Controller The controller handle that has IP4 or IP6 service 318fb115c61504fe6c4f94be0a87f75e28e1684657ftye binding protocol installed. 319fb115c61504fe6c4f94be0a87f75e28e1684657ftye @param[in] IpVersion The version of the IP protocol to use, either 320fb115c61504fe6c4f94be0a87f75e28e1684657ftye IPv4 or IPv6. 32197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 32264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The pointer to a newly created IP_IO instance, or NULL if failed. 32397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 32497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 32597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIP_IO * 32697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 32797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoCreate ( 32897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang IN EFI_HANDLE Image, 329fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN EFI_HANDLE Controller, 330b45b45b2d248892930620c33a9d01d8457ae0e54tye IN UINT8 IpVersion 33197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 33297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 33397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 33497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Destroy an IP_IO instance. 335e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 336e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong This function is paired with IpIoCreate(). The IP_IO will be closed first. 337e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong Resource will be freed afterwards. See IpIoClose(). 33897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 33964a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpIo The pointer to the IP_IO instance that needs to be 340e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong destroyed. 34197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 34264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_SUCCESS The IP_IO instance was destroyed successfully. 34364a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval Others An error condition occurred. 34497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 34597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 34697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFI_STATUS 34797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 34897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoDestroy ( 349cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT IP_IO *IpIo 35097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 35197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 35297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 35397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Stop an IP_IO instance. 354e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 355e9b67286ad4428d63e2495f38b71273b81e0846fpkandel This function is paired with IpIoOpen(). The IP_IO will be unconfigured, and all 356e9b67286ad4428d63e2495f38b71273b81e0846fpkandel pending send/receive tokens will be canceled. 35797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 35864a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpIo The pointer to the IP_IO instance that needs to stop. 35997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 360cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @retval EFI_SUCCESS The IP_IO instance stopped successfully. 36164a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval Others Anrror condition occurred. 36297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 36397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 36497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFI_STATUS 36597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 36697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoStop ( 367cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT IP_IO *IpIo 36897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 36997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 37097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 37197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Open an IP_IO instance for use. 372e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 373e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong This function is called after IpIoCreate(). It is used for configuring the IP 374e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong instance and register the callbacks and their context data for sending and 375e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong receiving IP packets. 37697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 37764a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpIo The pointer to an IP_IO instance that needs 378cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu to open. 379cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @param[in] OpenData The configuration data and callbacks for 380cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu the IP_IO instance. 38197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 382cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @retval EFI_SUCCESS The IP_IO instance opened with OpenData 383cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu successfully. 38464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_ACCESS_DENIED The IP_IO instance is configured; avoid 38564a80549c8ab874c5b23b376adbb99008e6143b0myronporter reopening it. 38664a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval Others An error condition occurred. 38797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 38897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 38997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFI_STATUS 390e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgongEFIAPI 39197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoOpen ( 392cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT IP_IO *IpIo, 393cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN IP_IO_OPEN_DATA *OpenData 39497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 39597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 39697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 39797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Send out an IP packet. 398e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 399e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong This function is called after IpIoOpen(). The data to be sent are wrapped in 400e9b67286ad4428d63e2495f38b71273b81e0846fpkandel Pkt. The IP instance wrapped in IpIo is used for sending by default, but can be 401e9b67286ad4428d63e2495f38b71273b81e0846fpkandel overriden by Sender. Other sending configurations, such as source address and gateway 402e9b67286ad4428d63e2495f38b71273b81e0846fpkandel address, are specified in OverrideData. 40397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 40464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpIo The pointer to an IP_IO instance used for sending IP 405cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu packet. 40664a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] Pkt The pointer to the IP packet to be sent. 407e9b67286ad4428d63e2495f38b71273b81e0846fpkandel @param[in] Sender Optional. The IP protocol instance used for sending. 40864a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Context The optional context data. 40964a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] NotifyData The optional notify data. 410cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @param[in] Dest The destination IP address to send this packet to. 411cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @param[in] OverrideData The data to override some configuration of the IP 412cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu instance used for sending. 41397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 41464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_SUCCESS The operation completed successfully. 415cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @retval EFI_NOT_STARTED The IpIo is not configured. 41664a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_OUT_OF_RESOURCES Failed due to resource limitations. 41797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 41897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 41997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFI_STATUS 42097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 42197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoSend ( 422cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT IP_IO *IpIo, 423cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT NET_BUF *Pkt, 424cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN IP_IO_IP_INFO *Sender OPTIONAL, 425cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN VOID *Context OPTIONAL, 426cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN VOID *NotifyData OPTIONAL, 427fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN EFI_IP_ADDRESS *Dest, 428cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN IP_IO_OVERRIDE *OverrideData OPTIONAL 42997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 43097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 43197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 43264a80549c8ab874c5b23b376adbb99008e6143b0myronporter Cancel the IP transmit token that wraps this Packet. 43397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 43464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] IpIo The pointer to the IP_IO instance. 43564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Packet The pointer to the packet of NET_BUF to cancel. 43697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 43797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 43897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangVOID 43997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 44097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoCancelTxToken ( 44197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang IN IP_IO *IpIo, 44297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang IN VOID *Packet 44397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 44497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 44597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 44697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Add a new IP instance for sending data. 447e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 448e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong The function is used to add the IP_IO to the IP_IO sending list. The caller 449e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong can later use IpIoFindSender() to get the IP_IO and call IpIoSend() to send 450e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong data. 45197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 45264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpIo The pointer to an IP_IO instance to add a new IP 453e9b67286ad4428d63e2495f38b71273b81e0846fpkandel instance for sending purposes. 45497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 45564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The pointer to the created IP_IO_IP_INFO structure; NULL if failed. 45697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 45797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 45897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIP_IO_IP_INFO * 45997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 46097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoAddIp ( 461cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT IP_IO *IpIo 46297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 46397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 46497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 465fb115c61504fe6c4f94be0a87f75e28e1684657ftye Configure the IP instance of this IpInfo and start the receiving if IpConfigData 46697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang is not NULL. 46797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 46864a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpInfo The pointer to the IP_IO_IP_INFO instance. 469fb115c61504fe6c4f94be0a87f75e28e1684657ftye @param[in, out] IpConfigData The IP4 or IP6 configure data used to configure 470fb115c61504fe6c4f94be0a87f75e28e1684657ftye the IP instance. If NULL, the IP instance is reset. 471fb115c61504fe6c4f94be0a87f75e28e1684657ftye If UseDefaultAddress is set to TRUE, and the configure 472cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu operation succeeds, the default address information 473fb115c61504fe6c4f94be0a87f75e28e1684657ftye is written back in this IpConfigData. 47497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 47564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_SUCCESS The IP instance of this IpInfo was configured successfully, 476e9b67286ad4428d63e2495f38b71273b81e0846fpkandel or there is no need to reconfigure it. 47764a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval Others The configuration failed. 47897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 47997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 48097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFI_STATUS 48197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 48297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoConfigIp ( 483cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu IN OUT IP_IO_IP_INFO *IpInfo, 484fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN OUT VOID *IpConfigData OPTIONAL 48597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 48697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 48797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 48897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Destroy an IP instance maintained in IpIo->IpList for 48997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang sending purpose. 490e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 491e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong This function pairs with IpIoAddIp(). The IpInfo is previously created by 492e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong IpIoAddIp(). The IP_IO_IP_INFO::RefCnt is decremented and the IP instance 493e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong will be dstroyed if the RefCnt is zero. 49497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 49564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] IpIo The pointer to the IP_IO instance. 49664a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] IpInfo The pointer to the IpInfo to be removed. 49797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 49897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 49997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangVOID 50097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 50197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoRemoveIp ( 50297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang IN IP_IO *IpIo, 50397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang IN IP_IO_IP_INFO *IpInfo 50497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 50597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 50697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 50797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang Find the first IP protocol maintained in IpIo whose local 508e9b67286ad4428d63e2495f38b71273b81e0846fpkandel address is the same as Src. 509e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 510e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong This function is called when the caller needs the IpIo to send data to the 511e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong specified Src. The IpIo was added previously by IpIoAddIp(). 51297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 51364a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in, out] IpIo The pointer to the pointer of the IP_IO instance. 514fb115c61504fe6c4f94be0a87f75e28e1684657ftye @param[in] IpVersion The version of the IP protocol to use, either 515fb115c61504fe6c4f94be0a87f75e28e1684657ftye IPv4 or IPv6. 516cdfdbb970a8b7311391a28e046f39d4cc3b7d610ywu @param[in] Src The local IP address. 51797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 51864a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The pointer to the IP protocol can be used for sending purpose and its local 519e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong address is the same with Src. 52097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 52197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 52297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIP_IO_IP_INFO * 52397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 52497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoFindSender ( 525fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN OUT IP_IO **IpIo, 526b45b45b2d248892930620c33a9d01d8457ae0e54tye IN UINT8 IpVersion, 527fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN EFI_IP_ADDRESS *Src 52897b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 52997b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 53097b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang/** 531e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong Get the ICMP error map information. 532e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong 533e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong The ErrorStatus will be returned. The IsHard and Notify are optional. If they 534e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong are not NULL, this routine will fill them. 53597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 5363a1ab4bc2c322e835faca717ed4b0dc17536cfd7ywu @param[in] IcmpError IcmpError Type. 537fb115c61504fe6c4f94be0a87f75e28e1684657ftye @param[in] IpVersion The version of the IP protocol to use, 5383b1464d5ac4e8b917c54b9f29a43ad972d2a2c85rsun either IPv4 or IPv6. 5393b1464d5ac4e8b917c54b9f29a43ad972d2a2c85rsun @param[out] IsHard If TRUE, indicates that it is a hard error. 5403b1464d5ac4e8b917c54b9f29a43ad972d2a2c85rsun @param[out] Notify If TRUE, SockError needs to be notified. 54197b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 54264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @return The ICMP Error Status, such as EFI_NETWORK_UNREACHABLE. 54397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 54497b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang**/ 54597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFI_STATUS 54697b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangEFIAPI 54797b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuangIpIoGetIcmpErrStatus ( 548b45b45b2d248892930620c33a9d01d8457ae0e54tye IN UINT8 IcmpError, 549b45b45b2d248892930620c33a9d01d8457ae0e54tye IN UINT8 IpVersion, 550e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong OUT BOOLEAN *IsHard OPTIONAL, 551e29a2e7e8003e824d77a68f980daf0d614fc3bf5jgong OUT BOOLEAN *Notify OPTIONAL 55297b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang ); 55397b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang 554fb115c61504fe6c4f94be0a87f75e28e1684657ftye/** 555fb115c61504fe6c4f94be0a87f75e28e1684657ftye Refresh the remote peer's Neighbor Cache entries. 556fb115c61504fe6c4f94be0a87f75e28e1684657ftye 557fb115c61504fe6c4f94be0a87f75e28e1684657ftye This function is called when the caller needs the IpIo to refresh the existing 558fb115c61504fe6c4f94be0a87f75e28e1684657ftye IPv6 neighbor cache entries since the neighbor is considered reachable by the 559fb115c61504fe6c4f94be0a87f75e28e1684657ftye node has recently received a confirmation that packets sent recently to the 560fb115c61504fe6c4f94be0a87f75e28e1684657ftye neighbor were received by its IP layer. 561fb115c61504fe6c4f94be0a87f75e28e1684657ftye 56264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] IpIo The pointer to an IP_IO instance 563fb115c61504fe6c4f94be0a87f75e28e1684657ftye @param[in] Neighbor The IP address of the neighbor 56464a80549c8ab874c5b23b376adbb99008e6143b0myronporter @param[in] Timeout The time in 100-ns units that this entry will 565fb115c61504fe6c4f94be0a87f75e28e1684657ftye remain in the neighbor cache. A value of 566fb115c61504fe6c4f94be0a87f75e28e1684657ftye zero means that the entry is permanent. 567fb115c61504fe6c4f94be0a87f75e28e1684657ftye A value of non-zero means that the entry is 568fb115c61504fe6c4f94be0a87f75e28e1684657ftye dynamic and will be deleted after Timeout. 569fb115c61504fe6c4f94be0a87f75e28e1684657ftye 57064a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_SUCCESS The operation completed successfully. 571fb115c61504fe6c4f94be0a87f75e28e1684657ftye @retval EFI_NOT_STARTED The IpIo is not configured. 57264a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_INVALID_PARAMETER The Neighbor Address is invalid. 573fb115c61504fe6c4f94be0a87f75e28e1684657ftye @retval EFI_NOT_FOUND The neighbor cache entry is not in the 574fb115c61504fe6c4f94be0a87f75e28e1684657ftye neighbor table. 57564a80549c8ab874c5b23b376adbb99008e6143b0myronporter @retval EFI_OUT_OF_RESOURCES Failed due to resource limitations. 576fb115c61504fe6c4f94be0a87f75e28e1684657ftye 577fb115c61504fe6c4f94be0a87f75e28e1684657ftye**/ 578fb115c61504fe6c4f94be0a87f75e28e1684657ftyeEFI_STATUS 579fb115c61504fe6c4f94be0a87f75e28e1684657ftyeIpIoRefreshNeighbor ( 580fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN IP_IO *IpIo, 581fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN EFI_IP_ADDRESS *Neighbor, 582fb115c61504fe6c4f94be0a87f75e28e1684657ftye IN UINT32 Timeout 583fb115c61504fe6c4f94be0a87f75e28e1684657ftye ); 584fb115c61504fe6c4f94be0a87f75e28e1684657ftye 58597b38d4e359e1c5cbdadb2af8d4665d76a7068f2qhuang#endif 586fb115c61504fe6c4f94be0a87f75e28e1684657ftye 587