]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Library/IpIoLib.h
1. Import NetLib, IpIoLib and UdpIoLib class definitions
[mirror_edk2.git] / MdeModulePkg / Include / Library / IpIoLib.h
CommitLineData
cbf316f2 1/** @file
2
3Copyright (c) 2005 - 2007, Intel Corporation
4All rights reserved. This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution. The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12Module Name:
13
14 IpIo.h
15
16Abstract:
17
18
19**/
20
21#ifndef _IP_IO_H_
22#define _IP_IO_H_
23
24#include <PiDxe.h>
25#include <Protocol/Ip4.h>\r
26#include <Library/IpIoLib.h>\r
27#include <Library/NetLib.h>
28
29//\r
30// type and code define for ICMP protocol error got\r
31// from IP\r
32//\r
33#define ICMP_TYPE_UNREACH 3\r
34#define ICMP_TYPE_TIMXCEED 11\r
35#define ICMP_TYPE_PARAMPROB 12\r
36#define ICMP_TYPE_SOURCEQUENCH 4\r
37\r
38#define ICMP_CODE_UNREACH_NET 0\r
39#define ICMP_CODE_UNREACH_HOST 1\r
40#define ICMP_CODE_UNREACH_PROTOCOL 2\r
41#define ICMP_CODE_UNREACH_PORT 3\r
42#define ICMP_CODE_UNREACH_NEEDFRAG 4\r
43#define ICMP_CODE_UNREACH_SRCFAIL 5\r
44#define ICMP_CODE_UNREACH_NET_UNKNOWN 6\r
45#define ICMP_CODE_UNREACH_HOST_UNKNOWN 7\r
46#define ICMP_CODE_UNREACH_ISOLATED 8\r
47#define ICMP_CODE_UNREACH_NET_PROHIB 9\r
48#define ICMP_CODE_UNREACH_HOST_PROHIB 10\r
49#define ICMP_CODE_UNREACH_TOSNET 11\r
50#define ICMP_CODE_UNREACH_TOSHOST 12\r
51\r
52//\r
53// this error will be delivered to the\r
54// listening transportation layer protocol\r
55// consuming IpIO\r
56//\r
57typedef enum {\r
58 ICMP_ERR_UNREACH_NET = 0,\r
59 ICMP_ERR_UNREACH_HOST,\r
60 ICMP_ERR_UNREACH_PROTOCOL,\r
61 ICMP_ERR_UNREACH_PORT,\r
62 ICMP_ERR_MSGSIZE,\r
63 ICMP_ERR_UNREACH_SRCFAIL,\r
64 ICMP_ERR_TIMXCEED_INTRANS,\r
65 ICMP_ERR_TIMXCEED_REASS,\r
66 ICMP_ERR_QUENCH,\r
67 ICMP_ERR_PARAMPROB\r
68} ICMP_ERROR;\r
69\r
70typedef struct _ICMP_ERROR_INFO {\r
71 EFI_STATUS Error;\r
72 BOOLEAN IsHard;\r
73 BOOLEAN Notify;\r
74} ICMP_ERROR_INFO;\r
75
76//
77// Driver Consumed Protocol Prototypes
78//
79//@MT:#include EFI_PROTOCOL_CONSUMER (Ip4)
80//@MT:#include EFI_PROTOCOL_CONSUMER (Udp4)
81
82#define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2)
83
84extern EFI_IP4_CONFIG_DATA mIpIoDefaultIpConfigData;
85
86typedef struct _EFI_NET_SESSION_DATA {
87 IP4_ADDR Source;
88 IP4_ADDR Dest;
89 EFI_IP4_HEADER *IpHdr;
90} EFI_NET_SESSION_DATA;
91
92typedef
93VOID
94(*PKT_RCVD_NOTIFY) (
95 IN EFI_STATUS Status, // rcvd pkt result
96 IN ICMP_ERROR IcmpErr, // if Status == EFI_ICMP_ERROR, this
97 // field is valid for user
98 IN EFI_NET_SESSION_DATA *NetSession, // the communication point
99 IN NET_BUF *Pkt, // packet received
100 IN VOID *Context // the Context provided by user for recive data
101 );
102
103typedef
104VOID
105(*PKT_SENT_NOTIFY) (
106 IN EFI_STATUS Status, // sent pkt result
107 IN VOID *Context, // the context provided by user for sending data
108 IN VOID *Sender, // the sender to be notified
109 IN VOID *NotifyData // sent pkt related data to notify
110 );
111
112typedef struct _IP_IO {
113
114 //
115 // the node used to link this IpIo to the active IpIo list.
116 //
117 NET_LIST_ENTRY Entry;
118
119 // the list used to maintain the IP instance for different sending purpose.
120 //
121 NET_LIST_ENTRY IpList;
122
123 //
124 // the ip instance consumed by this IP IO
125 //
126 EFI_HANDLE Controller;
127 EFI_HANDLE Image;
128 EFI_HANDLE ChildHandle;
129 EFI_IP4_PROTOCOL *Ip;
130 BOOLEAN IsConfigured;
131
132 //
133 // some ip config data can be changed
134 //
135 UINT8 Protocol;
136
137 //
138 // token and event used to get data from IP
139 //
140 EFI_IP4_COMPLETION_TOKEN RcvToken;
141
142 //
143 // list entry used to link the token passed to IP_IO
144 //
145 NET_LIST_ENTRY PendingSndList;
146
147 //
148 // User interface used to get notify from IP_IO
149 //
150 VOID *RcvdContext;
151 VOID *SndContext;
152 PKT_RCVD_NOTIFY PktRcvdNotify;
153 PKT_SENT_NOTIFY PktSentNotify;
154} IP_IO;
155
156typedef struct _IP_IO_OPEN_DATA {
157 EFI_IP4_CONFIG_DATA IpConfigData;
158 VOID *RcvdContext;
159 VOID *SndContext;
160 PKT_RCVD_NOTIFY PktRcvdNotify;
161 PKT_SENT_NOTIFY PktSentNotify;
162} IP_IO_OPEN_DATA;
163
164typedef struct _IP_IO_SEND_ENTRY {
165 NET_LIST_ENTRY Entry;
166 IP_IO *IpIo;
167 VOID *Context;
168 VOID *NotifyData;
169 EFI_IP4_PROTOCOL *Ip;
170 NET_BUF *Pkt;
171 EFI_IP4_COMPLETION_TOKEN *SndToken;
172} IP_IO_SEND_ENTRY;
173
174typedef struct _EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE;
175
176typedef struct _IP_IO_IP_INFO {
177 IP4_ADDR Addr;
178 IP4_ADDR SubnetMask;
179 NET_LIST_ENTRY Entry;
180 EFI_HANDLE ChildHandle;
181 EFI_IP4_PROTOCOL *Ip;
182 EFI_IP4_COMPLETION_TOKEN DummyRcvToken;
183 INTN RefCnt;
184} IP_IO_IP_INFO;
185
186IP_IO *
187IpIoCreate (
188 IN EFI_HANDLE Image,
189 IN EFI_HANDLE Controller
190 );
191
192EFI_STATUS
193IpIoDestroy (
194 IN IP_IO *IpIo
195 );
196
197EFI_STATUS
198IpIoStop (
199 IN IP_IO *IpIo
200 );
201
202EFI_STATUS
203IpIoOpen (
204 IN IP_IO *IpIo,
205 IN IP_IO_OPEN_DATA *OpenData
206 );
207
208EFI_STATUS
209IpIoSend (
210 IN IP_IO *IpIo,
211 IN NET_BUF *Pkt,
212 IN IP_IO_IP_INFO *Sender,
213 IN VOID *Context OPTIONAL,
214 IN VOID *NotifyData OPTIONAL,
215 IN IP4_ADDR Dest,
216 IN IP_IO_OVERRIDE *OverrideData
217 );
218
219VOID
220IpIoCancelTxToken (
221 IN IP_IO *IpIo,
222 IN VOID *Packet
223 );
224
225IP_IO_IP_INFO *
226IpIoAddIp (
227 IN IP_IO *IpIo
228 );
229
230EFI_STATUS
231IpIoConfigIp (
232 IN IP_IO_IP_INFO *IpInfo,
233 IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL
234 );
235
236VOID
237IpIoRemoveIp (
238 IN IP_IO *IpIo,
239 IN IP_IO_IP_INFO *IpInfo
240 );
241
242IP_IO_IP_INFO *
243IpIoFindSender (
244 IN OUT IP_IO **IpIo,
245 IN IP4_ADDR Src
246 );
247
248EFI_STATUS
249IpIoGetIcmpErrStatus (
250 IN ICMP_ERROR IcmpError,
251 OUT BOOLEAN *IsHard, OPTIONAL
252 OUT BOOLEAN *Notify OPTIONAL
253 );
254
255#endif