]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Include/Library/IpIoLib.h
Import ArpDxe, Dhcp4Dxe, Ip4Dxe, Mtftp4Dxe, PxeBcDxe and PxeDhcp4Dxe.
[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
cbf316f2 76
77#define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2)
78
79extern EFI_IP4_CONFIG_DATA mIpIoDefaultIpConfigData;
80
81typedef struct _EFI_NET_SESSION_DATA {
82 IP4_ADDR Source;
83 IP4_ADDR Dest;
84 EFI_IP4_HEADER *IpHdr;
85} EFI_NET_SESSION_DATA;
86
87typedef
88VOID
89(*PKT_RCVD_NOTIFY) (
90 IN EFI_STATUS Status, // rcvd pkt result
91 IN ICMP_ERROR IcmpErr, // if Status == EFI_ICMP_ERROR, this
92 // field is valid for user
93 IN EFI_NET_SESSION_DATA *NetSession, // the communication point
94 IN NET_BUF *Pkt, // packet received
95 IN VOID *Context // the Context provided by user for recive data
96 );
97
98typedef
99VOID
100(*PKT_SENT_NOTIFY) (
101 IN EFI_STATUS Status, // sent pkt result
102 IN VOID *Context, // the context provided by user for sending data
103 IN VOID *Sender, // the sender to be notified
104 IN VOID *NotifyData // sent pkt related data to notify
105 );
106
107typedef struct _IP_IO {
108
109 //
110 // the node used to link this IpIo to the active IpIo list.
111 //
112 NET_LIST_ENTRY Entry;
113
114 // the list used to maintain the IP instance for different sending purpose.
115 //
116 NET_LIST_ENTRY IpList;
117
118 //
119 // the ip instance consumed by this IP IO
120 //
121 EFI_HANDLE Controller;
122 EFI_HANDLE Image;
123 EFI_HANDLE ChildHandle;
124 EFI_IP4_PROTOCOL *Ip;
125 BOOLEAN IsConfigured;
126
127 //
128 // some ip config data can be changed
129 //
130 UINT8 Protocol;
131
132 //
133 // token and event used to get data from IP
134 //
135 EFI_IP4_COMPLETION_TOKEN RcvToken;
136
137 //
138 // list entry used to link the token passed to IP_IO
139 //
140 NET_LIST_ENTRY PendingSndList;
141
142 //
143 // User interface used to get notify from IP_IO
144 //
145 VOID *RcvdContext;
146 VOID *SndContext;
147 PKT_RCVD_NOTIFY PktRcvdNotify;
148 PKT_SENT_NOTIFY PktSentNotify;
149} IP_IO;
150
151typedef struct _IP_IO_OPEN_DATA {
152 EFI_IP4_CONFIG_DATA IpConfigData;
153 VOID *RcvdContext;
154 VOID *SndContext;
155 PKT_RCVD_NOTIFY PktRcvdNotify;
156 PKT_SENT_NOTIFY PktSentNotify;
157} IP_IO_OPEN_DATA;
158
159typedef struct _IP_IO_SEND_ENTRY {
160 NET_LIST_ENTRY Entry;
161 IP_IO *IpIo;
162 VOID *Context;
163 VOID *NotifyData;
164 EFI_IP4_PROTOCOL *Ip;
165 NET_BUF *Pkt;
166 EFI_IP4_COMPLETION_TOKEN *SndToken;
167} IP_IO_SEND_ENTRY;
168
8a67d61d 169typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE;
cbf316f2 170
171typedef struct _IP_IO_IP_INFO {
172 IP4_ADDR Addr;
173 IP4_ADDR SubnetMask;
174 NET_LIST_ENTRY Entry;
175 EFI_HANDLE ChildHandle;
176 EFI_IP4_PROTOCOL *Ip;
177 EFI_IP4_COMPLETION_TOKEN DummyRcvToken;
178 INTN RefCnt;
179} IP_IO_IP_INFO;
180
181IP_IO *
182IpIoCreate (
183 IN EFI_HANDLE Image,
184 IN EFI_HANDLE Controller
185 );
186
187EFI_STATUS
188IpIoDestroy (
189 IN IP_IO *IpIo
190 );
191
192EFI_STATUS
193IpIoStop (
194 IN IP_IO *IpIo
195 );
196
197EFI_STATUS
198IpIoOpen (
199 IN IP_IO *IpIo,
200 IN IP_IO_OPEN_DATA *OpenData
201 );
202
203EFI_STATUS
204IpIoSend (
205 IN IP_IO *IpIo,
206 IN NET_BUF *Pkt,
207 IN IP_IO_IP_INFO *Sender,
208 IN VOID *Context OPTIONAL,
209 IN VOID *NotifyData OPTIONAL,
210 IN IP4_ADDR Dest,
211 IN IP_IO_OVERRIDE *OverrideData
212 );
213
214VOID
215IpIoCancelTxToken (
216 IN IP_IO *IpIo,
217 IN VOID *Packet
218 );
219
220IP_IO_IP_INFO *
221IpIoAddIp (
222 IN IP_IO *IpIo
223 );
224
225EFI_STATUS
226IpIoConfigIp (
227 IN IP_IO_IP_INFO *IpInfo,
228 IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL
229 );
230
231VOID
232IpIoRemoveIp (
233 IN IP_IO *IpIo,
234 IN IP_IO_IP_INFO *IpInfo
235 );
236
237IP_IO_IP_INFO *
238IpIoFindSender (
239 IN OUT IP_IO **IpIo,
240 IN IP4_ADDR Src
241 );
242
243EFI_STATUS
244IpIoGetIcmpErrStatus (
245 IN ICMP_ERROR IcmpError,
246 OUT BOOLEAN *IsHard, OPTIONAL
247 OUT BOOLEAN *Notify OPTIONAL
248 );
249
250#endif