]>
Commit | Line | Data |
---|---|---|
cbf316f2 | 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>\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 | |
57 | typedef 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 | |
70 | typedef 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 | ||
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 struct _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 |