X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdeModulePkg%2FInclude%2FLibrary%2FIpIoLib.h;h=67dfb6168dc6fad8cd0bcc9e2a08c4de6ac873ef;hb=53dff89953161f6b7e266b8089bae508c5f71a4e;hp=15cfbf8f43724d96111552a7ca4ce8a43b13e173;hpb=cbf316f20726bb31b7c37424601643790dbd02d9;p=mirror_edk2.git diff --git a/MdeModulePkg/Include/Library/IpIoLib.h b/MdeModulePkg/Include/Library/IpIoLib.h index 15cfbf8f43..67dfb6168d 100644 --- a/MdeModulePkg/Include/Library/IpIoLib.h +++ b/MdeModulePkg/Include/Library/IpIoLib.h @@ -1,31 +1,24 @@ -/** @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 provides IpIo layer upon EFI IP4 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 + +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 + // // type and code define for ICMP protocol error got // from IP @@ -68,188 +61,314 @@ typedef enum { } ICMP_ERROR; typedef struct _ICMP_ERROR_INFO { - EFI_STATUS Error; BOOLEAN IsHard; BOOLEAN Notify; } ICMP_ERROR_INFO; - -// -// Driver Consumed Protocol Prototypes -// -//@MT:#include EFI_PROTOCOL_CONSUMER (Ip4) -//@MT:#include EFI_PROTOCOL_CONSUMER (Udp4) - -#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 struct _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 + +#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. + // + LIST_ENTRY Entry; + + // the list used to maintain the IP instance for different sending purpose. + // + 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 + // + 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 { + 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; + LIST_ENTRY Entry; + EFI_HANDLE ChildHandle; + EFI_IP4_PROTOCOL *Ip; + EFI_IP4_COMPLETION_TOKEN DummyRcvToken; + INTN RefCnt; +} IP_IO_IP_INFO; + +/** + Create a new IP_IO instance. + + @param Image The image handle of an IP_IO consumer protocol. + @param Controller The controller handle of an IP_IO consumer protocol + installed on. + + @return Pointer to a newly created IP_IO instance. + +**/ +IP_IO * +EFIAPI +IpIoCreate ( + IN EFI_HANDLE Image, + IN EFI_HANDLE Controller + ); + +/** + Destroy an IP_IO instance. + + @param IpIo Pointer to the IP_IO instance that needs to + destroy. + + @retval EFI_SUCCESS The IP_IO instance destroyed successfully. + @retval other Error condition occurred. + +**/ +EFI_STATUS +EFIAPI +IpIoDestroy ( + IN IP_IO *IpIo + ); + +/** + Stop an IP_IO instance. + + @param IpIo Pointer to the IP_IO instance that needs to stop. + + @retval EFI_SUCCESS The IP_IO instance stopped successfully. + @retval other Error condition occurred. + +**/ +EFI_STATUS +EFIAPI +IpIoStop ( + IN IP_IO *IpIo + ); + +/** + Open an IP_IO instance for use. + + @param IpIo Pointer to an IP_IO instance that needs to open. + @param OpenData The configuration data for the IP_IO instance. + + @retval EFI_SUCCESS The IP_IO instance opened with OpenData + successfully. + @retval other Error condition occurred. + +**/ +EFI_STATUS +IpIoOpen ( + IN IP_IO *IpIo, + IN IP_IO_OPEN_DATA *OpenData + ); + +/** + Send out an IP packet. + + @param IpIo Pointer to an IP_IO instance used for sending IP + packet. + @param Pkt Pointer to the IP packet to be sent. + @param Sender The IP protocol instance used for sending. + @param Context + @param NotifyData + @param Dest The destination IP address to send this packet to. + @param OverrideData The data to override some configuration of the IP + instance used for sending. + + @retval EFI_SUCCESS The operation is completed successfully. + @retval EFI_NOT_STARTED The IpIo is not configured. + @retval EFI_OUT_OF_RESOURCES Failed due to resource limit. + +**/ +EFI_STATUS +EFIAPI +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 + ); + +/** + Cancel the IP transmit token which wraps this Packet. + + @param IpIo Pointer to the IP_IO instance. + @param Packet Pointer to the packet to cancel. + +**/ +VOID +EFIAPI +IpIoCancelTxToken ( + IN IP_IO *IpIo, + IN VOID *Packet + ); + +/** + Add a new IP instance for sending data. + + @param IpIo Pointer to a IP_IO instance to add a new IP + instance for sending purpose. + + @return Pointer to the created IP_IO_IP_INFO structure, NULL is failed. + +**/ +IP_IO_IP_INFO * +EFIAPI +IpIoAddIp ( + IN IP_IO *IpIo + ); + +/** + Configure the IP instance of this IpInfo and start the receiving if Ip4ConfigData + is not NULL. + + @param IpInfo Pointer to the IP_IO_IP_INFO instance. + @param Ip4ConfigData The IP4 configure data used to configure the ip + instance, if NULL the ip instance is reseted. If + UseDefaultAddress is set to TRUE, and the configure + operation succeeds, the default address information + is written back in this Ip4ConfigData. + + @retval EFI_STATUS The status returned by IP4->Configure or + IP4->Receive. + +**/ +EFI_STATUS +EFIAPI +IpIoConfigIp ( + IN IP_IO_IP_INFO *IpInfo, + IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL + ); + +/** + Destroy an IP instance maintained in IpIo->IpList for + sending purpose. + + @param IpIo Pointer to the IP_IO instance. + @param IpInfo Pointer to the IpInfo to be removed. + + @return None. + +**/ +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 with Src. + + @param IpIo Pointer to the pointer of the IP_IO instance. + @param Src The local IP address. + + @return Pointer to the IP protocol can be used for sending purpose and its local + @return address is the same with Src. + +**/ +IP_IO_IP_INFO * +EFIAPI +IpIoFindSender ( + IN OUT IP_IO **IpIo, + IN IP4_ADDR Src + ); + +/** + Get the ICMP error map information, the ErrorStatus will be returned. + The IsHard and Notify are optional. If they are not NULL, this rouine will + fill them. + We move IcmpErrMap[] to local variable to enable EBC build. + + @param IcmpError IcmpError Type + @param IsHard Whether it is a hard error + @param Notify Whether it need to notify SockError + + @return ICMP Error Status + +**/ +EFI_STATUS +EFIAPI +IpIoGetIcmpErrStatus ( + IN ICMP_ERROR IcmpError, + OUT BOOLEAN *IsHard, OPTIONAL + OUT BOOLEAN *Notify OPTIONAL + ); + +#endif