]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Library/IpIoLib.h
894e07bed4f08cabff6480931b45a24d49935ee7
[mirror_edk2.git] / MdeModulePkg / Include / Library / IpIoLib.h
1 /** @file
2
3 Copyright (c) 2005 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 IpIo.h
15
16 Abstract:
17
18
19 **/
20
21 #ifndef _IP_IO_H_
22 #define _IP_IO_H_
23
24 #include <PiDxe.h>
25 #include <Protocol/Ip4.h>
26 #include <Library/IpIoLib.h>
27 #include <Library/NetLib.h>
28
29 //
30 // type and code define for ICMP protocol error got
31 // from IP
32 //
33 #define ICMP_TYPE_UNREACH 3
34 #define ICMP_TYPE_TIMXCEED 11
35 #define ICMP_TYPE_PARAMPROB 12
36 #define ICMP_TYPE_SOURCEQUENCH 4
37
38 #define ICMP_CODE_UNREACH_NET 0
39 #define ICMP_CODE_UNREACH_HOST 1
40 #define ICMP_CODE_UNREACH_PROTOCOL 2
41 #define ICMP_CODE_UNREACH_PORT 3
42 #define ICMP_CODE_UNREACH_NEEDFRAG 4
43 #define ICMP_CODE_UNREACH_SRCFAIL 5
44 #define ICMP_CODE_UNREACH_NET_UNKNOWN 6
45 #define ICMP_CODE_UNREACH_HOST_UNKNOWN 7
46 #define ICMP_CODE_UNREACH_ISOLATED 8
47 #define ICMP_CODE_UNREACH_NET_PROHIB 9
48 #define ICMP_CODE_UNREACH_HOST_PROHIB 10
49 #define ICMP_CODE_UNREACH_TOSNET 11
50 #define ICMP_CODE_UNREACH_TOSHOST 12
51
52 //
53 // this error will be delivered to the
54 // listening transportation layer protocol
55 // consuming IpIO
56 //
57 typedef enum {
58 ICMP_ERR_UNREACH_NET = 0,
59 ICMP_ERR_UNREACH_HOST,
60 ICMP_ERR_UNREACH_PROTOCOL,
61 ICMP_ERR_UNREACH_PORT,
62 ICMP_ERR_MSGSIZE,
63 ICMP_ERR_UNREACH_SRCFAIL,
64 ICMP_ERR_TIMXCEED_INTRANS,
65 ICMP_ERR_TIMXCEED_REASS,
66 ICMP_ERR_QUENCH,
67 ICMP_ERR_PARAMPROB
68 } ICMP_ERROR;
69
70 typedef struct _ICMP_ERROR_INFO {
71 EFI_STATUS Error;
72 BOOLEAN IsHard;
73 BOOLEAN Notify;
74 } ICMP_ERROR_INFO;
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
84 extern EFI_IP4_CONFIG_DATA mIpIoDefaultIpConfigData;
85
86 typedef struct _EFI_NET_SESSION_DATA {
87 IP4_ADDR Source;
88 IP4_ADDR Dest;
89 EFI_IP4_HEADER *IpHdr;
90 } EFI_NET_SESSION_DATA;
91
92 typedef
93 VOID
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
103 typedef
104 VOID
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
112 typedef 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
156 typedef 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
164 typedef 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
174 typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE;
175
176 typedef 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
186 IP_IO *
187 IpIoCreate (
188 IN EFI_HANDLE Image,
189 IN EFI_HANDLE Controller
190 );
191
192 EFI_STATUS
193 IpIoDestroy (
194 IN IP_IO *IpIo
195 );
196
197 EFI_STATUS
198 IpIoStop (
199 IN IP_IO *IpIo
200 );
201
202 EFI_STATUS
203 IpIoOpen (
204 IN IP_IO *IpIo,
205 IN IP_IO_OPEN_DATA *OpenData
206 );
207
208 EFI_STATUS
209 IpIoSend (
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
219 VOID
220 IpIoCancelTxToken (
221 IN IP_IO *IpIo,
222 IN VOID *Packet
223 );
224
225 IP_IO_IP_INFO *
226 IpIoAddIp (
227 IN IP_IO *IpIo
228 );
229
230 EFI_STATUS
231 IpIoConfigIp (
232 IN IP_IO_IP_INFO *IpInfo,
233 IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL
234 );
235
236 VOID
237 IpIoRemoveIp (
238 IN IP_IO *IpIo,
239 IN IP_IO_IP_INFO *IpInfo
240 );
241
242 IP_IO_IP_INFO *
243 IpIoFindSender (
244 IN OUT IP_IO **IpIo,
245 IN IP4_ADDR Src
246 );
247
248 EFI_STATUS
249 IpIoGetIcmpErrStatus (
250 IN ICMP_ERROR IcmpError,
251 OUT BOOLEAN *IsHard, OPTIONAL
252 OUT BOOLEAN *Notify OPTIONAL
253 );
254
255 #endif