summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Include/Library/IpIoLib.h
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Include/Library/IpIoLib.h')
-rw-r--r--MdeModulePkg/Include/Library/IpIoLib.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/MdeModulePkg/Include/Library/IpIoLib.h b/MdeModulePkg/Include/Library/IpIoLib.h
new file mode 100644
index 0000000000..15cfbf8f43
--- /dev/null
+++ b/MdeModulePkg/Include/Library/IpIoLib.h
@@ -0,0 +1,255 @@
+/** @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 <PiDxe.h>
+#include <Protocol/Ip4.h>
+#include <Library/IpIoLib.h>
+#include <Library/NetLib.h>
+
+//
+// type and code define for ICMP protocol error got
+// from IP
+//
+#define ICMP_TYPE_UNREACH 3
+#define ICMP_TYPE_TIMXCEED 11
+#define ICMP_TYPE_PARAMPROB 12
+#define ICMP_TYPE_SOURCEQUENCH 4
+
+#define ICMP_CODE_UNREACH_NET 0
+#define ICMP_CODE_UNREACH_HOST 1
+#define ICMP_CODE_UNREACH_PROTOCOL 2
+#define ICMP_CODE_UNREACH_PORT 3
+#define ICMP_CODE_UNREACH_NEEDFRAG 4
+#define ICMP_CODE_UNREACH_SRCFAIL 5
+#define ICMP_CODE_UNREACH_NET_UNKNOWN 6
+#define ICMP_CODE_UNREACH_HOST_UNKNOWN 7
+#define ICMP_CODE_UNREACH_ISOLATED 8
+#define ICMP_CODE_UNREACH_NET_PROHIB 9
+#define ICMP_CODE_UNREACH_HOST_PROHIB 10
+#define ICMP_CODE_UNREACH_TOSNET 11
+#define ICMP_CODE_UNREACH_TOSHOST 12
+
+//
+// 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;
+} 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