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 | |
cbf316f2 |
76 | |
77 | #define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2) |
78 | |
79 | extern EFI_IP4_CONFIG_DATA mIpIoDefaultIpConfigData; |
80 | |
81 | typedef struct _EFI_NET_SESSION_DATA { |
82 | IP4_ADDR Source; |
83 | IP4_ADDR Dest; |
84 | EFI_IP4_HEADER *IpHdr; |
85 | } EFI_NET_SESSION_DATA; |
86 | |
87 | typedef |
88 | VOID |
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 | |
98 | typedef |
99 | VOID |
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 | |
107 | typedef 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 | |
151 | typedef 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 | |
159 | typedef 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 |
169 | typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE; |
cbf316f2 |
170 | |
171 | typedef 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 | |
181 | IP_IO * |
182 | IpIoCreate ( |
183 | IN EFI_HANDLE Image, |
184 | IN EFI_HANDLE Controller |
185 | ); |
186 | |
187 | EFI_STATUS |
188 | IpIoDestroy ( |
189 | IN IP_IO *IpIo |
190 | ); |
191 | |
192 | EFI_STATUS |
193 | IpIoStop ( |
194 | IN IP_IO *IpIo |
195 | ); |
196 | |
197 | EFI_STATUS |
198 | IpIoOpen ( |
199 | IN IP_IO *IpIo, |
200 | IN IP_IO_OPEN_DATA *OpenData |
201 | ); |
202 | |
203 | EFI_STATUS |
204 | IpIoSend ( |
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 | |
214 | VOID |
215 | IpIoCancelTxToken ( |
216 | IN IP_IO *IpIo, |
217 | IN VOID *Packet |
218 | ); |
219 | |
220 | IP_IO_IP_INFO * |
221 | IpIoAddIp ( |
222 | IN IP_IO *IpIo |
223 | ); |
224 | |
225 | EFI_STATUS |
226 | IpIoConfigIp ( |
227 | IN IP_IO_IP_INFO *IpInfo, |
228 | IN OUT EFI_IP4_CONFIG_DATA *Ip4ConfigData OPTIONAL |
229 | ); |
230 | |
231 | VOID |
232 | IpIoRemoveIp ( |
233 | IN IP_IO *IpIo, |
234 | IN IP_IO_IP_INFO *IpInfo |
235 | ); |
236 | |
237 | IP_IO_IP_INFO * |
238 | IpIoFindSender ( |
239 | IN OUT IP_IO **IpIo, |
240 | IN IP4_ADDR Src |
241 | ); |
242 | |
243 | EFI_STATUS |
244 | IpIoGetIcmpErrStatus ( |
245 | IN ICMP_ERROR IcmpError, |
246 | OUT BOOLEAN *IsHard, OPTIONAL |
247 | OUT BOOLEAN *Notify OPTIONAL |
248 | ); |
249 | |
250 | #endif |