efiip.h revision 1.1 1 1.1 jakllsch /* $NetBSD: efiip.h,v 1.1 2014/04/01 16:16:07 jakllsch Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch #ifndef _EFI_IP_H
4 1.1 jakllsch #define _EFI_IP_H
5 1.1 jakllsch
6 1.1 jakllsch /*++
7 1.1 jakllsch Copyright (c) 2013 Intel Corporation
8 1.1 jakllsch
9 1.1 jakllsch --*/
10 1.1 jakllsch
11 1.1 jakllsch #define EFI_IP4_SERVICE_BINDING_PROTOCOL \
12 1.1 jakllsch {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}}
13 1.1 jakllsch
14 1.1 jakllsch #define EFI_IP4_PROTOCOL \
15 1.1 jakllsch {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}}
16 1.1 jakllsch
17 1.1 jakllsch #define EFI_IP6_SERVICE_BINDING_PROTOCOL \
18 1.1 jakllsch {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}}
19 1.1 jakllsch
20 1.1 jakllsch #define EFI_IP6_PROTOCOL \
21 1.1 jakllsch {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}}
22 1.1 jakllsch
23 1.1 jakllsch INTERFACE_DECL(_EFI_IP4);
24 1.1 jakllsch INTERFACE_DECL(_EFI_IP6);
25 1.1 jakllsch
26 1.1 jakllsch typedef struct {
27 1.1 jakllsch EFI_HANDLE InstanceHandle;
28 1.1 jakllsch EFI_IPv4_ADDRESS Ip4Address;
29 1.1 jakllsch EFI_IPv4_ADDRESS SubnetMask;
30 1.1 jakllsch } EFI_IP4_ADDRESS_PAIR;
31 1.1 jakllsch
32 1.1 jakllsch typedef struct {
33 1.1 jakllsch EFI_HANDLE DriverHandle;
34 1.1 jakllsch UINT32 AddressCount;
35 1.1 jakllsch EFI_IP4_ADDRESS_PAIR AddressPairs[1];
36 1.1 jakllsch } EFI_IP4_VARIABLE_DATA;
37 1.1 jakllsch
38 1.1 jakllsch typedef struct {
39 1.1 jakllsch UINT8 DefaultProtocol;
40 1.1 jakllsch BOOLEAN AcceptAnyProtocol;
41 1.1 jakllsch BOOLEAN AcceptIcmpErrors;
42 1.1 jakllsch BOOLEAN AcceptBroadcast;
43 1.1 jakllsch BOOLEAN AcceptPromiscuous;
44 1.1 jakllsch BOOLEAN UseDefaultAddress;
45 1.1 jakllsch EFI_IPv4_ADDRESS StationAddress;
46 1.1 jakllsch EFI_IPv4_ADDRESS SubnetMask;
47 1.1 jakllsch UINT8 TypeOfService;
48 1.1 jakllsch UINT8 TimeToLive;
49 1.1 jakllsch BOOLEAN DoNotFragment;
50 1.1 jakllsch BOOLEAN RawData;
51 1.1 jakllsch UINT32 ReceiveTimeout;
52 1.1 jakllsch UINT32 TransmitTimeout;
53 1.1 jakllsch } EFI_IP4_CONFIG_DATA;
54 1.1 jakllsch
55 1.1 jakllsch typedef struct {
56 1.1 jakllsch EFI_IPv4_ADDRESS SubnetAddress;
57 1.1 jakllsch EFI_IPv4_ADDRESS SubnetMask;
58 1.1 jakllsch EFI_IPv4_ADDRESS GatewayAddress;
59 1.1 jakllsch } EFI_IP4_ROUTE_TABLE;
60 1.1 jakllsch
61 1.1 jakllsch typedef struct {
62 1.1 jakllsch UINT8 Type;
63 1.1 jakllsch UINT8 Code;
64 1.1 jakllsch } EFI_IP4_ICMP_TYPE;
65 1.1 jakllsch
66 1.1 jakllsch typedef struct {
67 1.1 jakllsch BOOLEAN IsStarted;
68 1.1 jakllsch UINT32 MaxPacketSize;
69 1.1 jakllsch EFI_IP4_CONFIG_DATA ConfigData;
70 1.1 jakllsch BOOLEAN IsConfigured;
71 1.1 jakllsch UINT32 GroupCount;
72 1.1 jakllsch EFI_IPv4_ADDRESS *GroupTable;
73 1.1 jakllsch UINT32 RouteCount;
74 1.1 jakllsch EFI_IP4_ROUTE_TABLE *RouteTable;
75 1.1 jakllsch UINT32 IcmpTypeCount;
76 1.1 jakllsch EFI_IP4_ICMP_TYPE *IcmpTypeList;
77 1.1 jakllsch } EFI_IP4_MODE_DATA;
78 1.1 jakllsch
79 1.1 jakllsch typedef
80 1.1 jakllsch EFI_STATUS
81 1.1 jakllsch (EFIAPI *EFI_IP4_GET_MODE_DATA) (
82 1.1 jakllsch IN struct _EFI_IP4 *This,
83 1.1 jakllsch OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
84 1.1 jakllsch OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
85 1.1 jakllsch OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
86 1.1 jakllsch );
87 1.1 jakllsch
88 1.1 jakllsch typedef
89 1.1 jakllsch EFI_STATUS
90 1.1 jakllsch (EFIAPI *EFI_IP4_CONFIGURE) (
91 1.1 jakllsch IN struct _EFI_IP4 *This,
92 1.1 jakllsch IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL
93 1.1 jakllsch );
94 1.1 jakllsch
95 1.1 jakllsch typedef
96 1.1 jakllsch EFI_STATUS
97 1.1 jakllsch (EFIAPI *EFI_IP4_GROUPS) (
98 1.1 jakllsch IN struct _EFI_IP4 *This,
99 1.1 jakllsch IN BOOLEAN JoinFlag,
100 1.1 jakllsch IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL
101 1.1 jakllsch );
102 1.1 jakllsch
103 1.1 jakllsch typedef
104 1.1 jakllsch EFI_STATUS
105 1.1 jakllsch (EFIAPI *EFI_IP4_ROUTES) (
106 1.1 jakllsch IN struct _EFI_IP4 *This,
107 1.1 jakllsch IN BOOLEAN DeleteRoute,
108 1.1 jakllsch IN EFI_IPv4_ADDRESS *SubnetAddress,
109 1.1 jakllsch IN EFI_IPv4_ADDRESS *SubnetMask,
110 1.1 jakllsch IN EFI_IPv4_ADDRESS *GatewayAddress
111 1.1 jakllsch );
112 1.1 jakllsch
113 1.1 jakllsch #pragma pack(1)
114 1.1 jakllsch typedef struct {
115 1.1 jakllsch UINT8 HeaderLength:4;
116 1.1 jakllsch UINT8 Version:4;
117 1.1 jakllsch UINT8 TypeOfService;
118 1.1 jakllsch UINT16 TotalLength;
119 1.1 jakllsch UINT16 Identification;
120 1.1 jakllsch UINT16 Fragmentation;
121 1.1 jakllsch UINT8 TimeToLive;
122 1.1 jakllsch UINT8 Protocol;
123 1.1 jakllsch UINT16 Checksum;
124 1.1 jakllsch EFI_IPv4_ADDRESS SourceAddress;
125 1.1 jakllsch EFI_IPv4_ADDRESS DestinationAddress;
126 1.1 jakllsch } EFI_IP4_HEADER;
127 1.1 jakllsch #pragma pack()
128 1.1 jakllsch
129 1.1 jakllsch typedef struct {
130 1.1 jakllsch UINT32 FragmentLength;
131 1.1 jakllsch VOID *FragmentBuffer;
132 1.1 jakllsch } EFI_IP4_FRAGMENT_DATA;
133 1.1 jakllsch
134 1.1 jakllsch typedef struct {
135 1.1 jakllsch EFI_TIME TimeStamp;
136 1.1 jakllsch EFI_EVENT RecycleSignal;
137 1.1 jakllsch UINT32 HeaderLength;
138 1.1 jakllsch EFI_IP4_HEADER *Header;
139 1.1 jakllsch UINT32 OptionsLength;
140 1.1 jakllsch VOID *Options;
141 1.1 jakllsch UINT32 DataLength;
142 1.1 jakllsch UINT32 FragmentCount;
143 1.1 jakllsch EFI_IP4_FRAGMENT_DATA FragmentTable[1];
144 1.1 jakllsch } EFI_IP4_RECEIVE_DATA;
145 1.1 jakllsch
146 1.1 jakllsch typedef struct {
147 1.1 jakllsch EFI_IPv4_ADDRESS SourceAddress;
148 1.1 jakllsch EFI_IPv4_ADDRESS GatewayAddress;
149 1.1 jakllsch UINT8 Protocol;
150 1.1 jakllsch UINT8 TypeOfService;
151 1.1 jakllsch UINT8 TimeToLive;
152 1.1 jakllsch BOOLEAN DoNotFragment;
153 1.1 jakllsch } EFI_IP4_OVERRIDE_DATA;
154 1.1 jakllsch
155 1.1 jakllsch typedef struct {
156 1.1 jakllsch EFI_IPv4_ADDRESS DestinationAddress;
157 1.1 jakllsch EFI_IP4_OVERRIDE_DATA *OverrideData;
158 1.1 jakllsch UINT32 OptionsLength;
159 1.1 jakllsch VOID *OptionsBuffer;
160 1.1 jakllsch UINT32 TotalDataLength;
161 1.1 jakllsch UINT32 FragmentCount;
162 1.1 jakllsch EFI_IP4_FRAGMENT_DATA FragmentTable[1];
163 1.1 jakllsch } EFI_IP4_TRANSMIT_DATA;
164 1.1 jakllsch
165 1.1 jakllsch typedef struct {
166 1.1 jakllsch EFI_EVENT Event;
167 1.1 jakllsch EFI_STATUS Status;
168 1.1 jakllsch union {
169 1.1 jakllsch EFI_IP4_RECEIVE_DATA *RxData;
170 1.1 jakllsch EFI_IP4_TRANSMIT_DATA *TxData;
171 1.1 jakllsch } Packet;
172 1.1 jakllsch } EFI_IP4_COMPLETION_TOKEN;
173 1.1 jakllsch
174 1.1 jakllsch typedef
175 1.1 jakllsch EFI_STATUS
176 1.1 jakllsch (EFIAPI *EFI_IP4_TRANSMIT) (
177 1.1 jakllsch IN struct _EFI_IP4 *This,
178 1.1 jakllsch IN EFI_IP4_COMPLETION_TOKEN *Token
179 1.1 jakllsch );
180 1.1 jakllsch
181 1.1 jakllsch typedef
182 1.1 jakllsch EFI_STATUS
183 1.1 jakllsch (EFIAPI *EFI_IP4_RECEIVE) (
184 1.1 jakllsch IN struct _EFI_IP4 *This,
185 1.1 jakllsch IN EFI_IP4_COMPLETION_TOKEN *Token
186 1.1 jakllsch );
187 1.1 jakllsch
188 1.1 jakllsch typedef
189 1.1 jakllsch EFI_STATUS
190 1.1 jakllsch (EFIAPI *EFI_IP4_CANCEL)(
191 1.1 jakllsch IN struct _EFI_IP4 *This,
192 1.1 jakllsch IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL
193 1.1 jakllsch );
194 1.1 jakllsch
195 1.1 jakllsch typedef
196 1.1 jakllsch EFI_STATUS
197 1.1 jakllsch (EFIAPI *EFI_IP4_POLL) (
198 1.1 jakllsch IN struct _EFI_IP4 *This
199 1.1 jakllsch );
200 1.1 jakllsch
201 1.1 jakllsch typedef struct _EFI_IP4 {
202 1.1 jakllsch EFI_IP4_GET_MODE_DATA GetModeData;
203 1.1 jakllsch EFI_IP4_CONFIGURE Configure;
204 1.1 jakllsch EFI_IP4_GROUPS Groups;
205 1.1 jakllsch EFI_IP4_ROUTES Routes;
206 1.1 jakllsch EFI_IP4_TRANSMIT Transmit;
207 1.1 jakllsch EFI_IP4_RECEIVE Receive;
208 1.1 jakllsch EFI_IP4_CANCEL Cancel;
209 1.1 jakllsch EFI_IP4_POLL Poll;
210 1.1 jakllsch } EFI_IP4;
211 1.1 jakllsch
212 1.1 jakllsch typedef struct {
213 1.1 jakllsch UINT8 DefaultProtocol;
214 1.1 jakllsch BOOLEAN AcceptAnyProtocol;
215 1.1 jakllsch BOOLEAN AcceptIcmpErrors;
216 1.1 jakllsch BOOLEAN AcceptPromiscuous;
217 1.1 jakllsch EFI_IPv6_ADDRESS DestinationAddress;
218 1.1 jakllsch EFI_IPv6_ADDRESS StationAddress;
219 1.1 jakllsch UINT8 TrafficClass;
220 1.1 jakllsch UINT8 HopLimit;
221 1.1 jakllsch UINT32 FlowLabel;
222 1.1 jakllsch UINT32 ReceiveTimeout;
223 1.1 jakllsch UINT32 TransmitTimeout;
224 1.1 jakllsch } EFI_IP6_CONFIG_DATA;
225 1.1 jakllsch
226 1.1 jakllsch typedef struct {
227 1.1 jakllsch EFI_IPv6_ADDRESS Address;
228 1.1 jakllsch UINT8 PrefixLength;
229 1.1 jakllsch } EFI_IP6_ADDRESS_INFO;
230 1.1 jakllsch
231 1.1 jakllsch typedef struct {
232 1.1 jakllsch EFI_IPv6_ADDRESS Gateway;
233 1.1 jakllsch EFI_IPv6_ADDRESS Destination;
234 1.1 jakllsch UINT8 PrefixLength;
235 1.1 jakllsch } EFI_IP6_ROUTE_TABLE;
236 1.1 jakllsch
237 1.1 jakllsch typedef enum {
238 1.1 jakllsch EfiNeighborInComplete,
239 1.1 jakllsch EfiNeighborReachable,
240 1.1 jakllsch EfiNeighborStale,
241 1.1 jakllsch EfiNeighborDelay,
242 1.1 jakllsch EfiNeighborProbe
243 1.1 jakllsch } EFI_IP6_NEIGHBOR_STATE;
244 1.1 jakllsch
245 1.1 jakllsch typedef struct {
246 1.1 jakllsch EFI_IPv6_ADDRESS Neighbor;
247 1.1 jakllsch EFI_MAC_ADDRESS LinkAddress;
248 1.1 jakllsch EFI_IP6_NEIGHBOR_STATE State;
249 1.1 jakllsch } EFI_IP6_NEIGHBOR_CACHE;
250 1.1 jakllsch
251 1.1 jakllsch typedef struct {
252 1.1 jakllsch UINT8 Type;
253 1.1 jakllsch UINT8 Code;
254 1.1 jakllsch } EFI_IP6_ICMP_TYPE;
255 1.1 jakllsch
256 1.1 jakllsch //***********************************************************
257 1.1 jakllsch // ICMPv6 type definitions for error messages
258 1.1 jakllsch //***********************************************************
259 1.1 jakllsch #define ICMP_V6_DEST_UNREACHABLE 0x1
260 1.1 jakllsch #define ICMP_V6_PACKET_TOO_BIG 0x2
261 1.1 jakllsch #define ICMP_V6_TIME_EXCEEDED 0x3
262 1.1 jakllsch #define ICMP_V6_PARAMETER_PROBLEM 0x4
263 1.1 jakllsch
264 1.1 jakllsch //***********************************************************
265 1.1 jakllsch // ICMPv6 type definition for informational messages
266 1.1 jakllsch //***********************************************************
267 1.1 jakllsch #define ICMP_V6_ECHO_REQUEST 0x80
268 1.1 jakllsch #define ICMP_V6_ECHO_REPLY 0x81
269 1.1 jakllsch #define ICMP_V6_LISTENER_QUERY 0x82
270 1.1 jakllsch #define ICMP_V6_LISTENER_REPORT 0x83
271 1.1 jakllsch #define ICMP_V6_LISTENER_DONE 0x84
272 1.1 jakllsch #define ICMP_V6_ROUTER_SOLICIT 0x85
273 1.1 jakllsch #define ICMP_V6_ROUTER_ADVERTISE 0x86
274 1.1 jakllsch #define ICMP_V6_NEIGHBOR_SOLICIT 0x87
275 1.1 jakllsch #define ICMP_V6_NEIGHBOR_ADVERTISE 0x88
276 1.1 jakllsch #define ICMP_V6_REDIRECT 0x89
277 1.1 jakllsch #define ICMP_V6_LISTENER_REPORT_2 0x8F
278 1.1 jakllsch
279 1.1 jakllsch //***********************************************************
280 1.1 jakllsch // ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE
281 1.1 jakllsch //***********************************************************
282 1.1 jakllsch #define ICMP_V6_NO_ROUTE_TO_DEST 0x0
283 1.1 jakllsch #define ICMP_V6_COMM_PROHIBITED 0x1
284 1.1 jakllsch #define ICMP_V6_BEYOND_SCOPE 0x2
285 1.1 jakllsch #define ICMP_V6_ADDR_UNREACHABLE 0x3
286 1.1 jakllsch #define ICMP_V6_PORT_UNREACHABLE 0x4
287 1.1 jakllsch #define ICMP_V6_SOURCE_ADDR_FAILED 0x5
288 1.1 jakllsch #define ICMP_V6_ROUTE_REJECTED 0x6
289 1.1 jakllsch
290 1.1 jakllsch //***********************************************************
291 1.1 jakllsch // ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED
292 1.1 jakllsch //***********************************************************
293 1.1 jakllsch #define ICMP_V6_TIMEOUT_HOP_LIMIT 0x0
294 1.1 jakllsch #define ICMP_V6_TIMEOUT_REASSEMBLE 0x1
295 1.1 jakllsch
296 1.1 jakllsch //***********************************************************
297 1.1 jakllsch // ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM
298 1.1 jakllsch //***********************************************************
299 1.1 jakllsch #define ICMP_V6_ERRONEOUS_HEADER 0x0
300 1.1 jakllsch #define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1
301 1.1 jakllsch #define ICMP_V6_UNRECOGNIZE_OPTION 0x2
302 1.1 jakllsch
303 1.1 jakllsch typedef struct {
304 1.1 jakllsch BOOLEAN IsStarted;
305 1.1 jakllsch UINT32 MaxPacketSize;
306 1.1 jakllsch EFI_IP6_CONFIG_DATA ConfigData;
307 1.1 jakllsch BOOLEAN IsConfigured;
308 1.1 jakllsch UINT32 AddressCount;
309 1.1 jakllsch EFI_IP6_ADDRESS_INFO *AddressList;
310 1.1 jakllsch UINT32 GroupCount;
311 1.1 jakllsch EFI_IPv6_ADDRESS *GroupTable;
312 1.1 jakllsch UINT32 RouteCount;
313 1.1 jakllsch EFI_IP6_ROUTE_TABLE *RouteTable;
314 1.1 jakllsch UINT32 NeighborCount;
315 1.1 jakllsch EFI_IP6_NEIGHBOR_CACHE *NeighborCache;
316 1.1 jakllsch UINT32 PrefixCount;
317 1.1 jakllsch EFI_IP6_ADDRESS_INFO *PrefixTable;
318 1.1 jakllsch UINT32 IcmpTypeCount;
319 1.1 jakllsch EFI_IP6_ICMP_TYPE *IcmpTypeList;
320 1.1 jakllsch } EFI_IP6_MODE_DATA;
321 1.1 jakllsch
322 1.1 jakllsch typedef
323 1.1 jakllsch EFI_STATUS
324 1.1 jakllsch (EFIAPI *EFI_IP6_GET_MODE_DATA) (
325 1.1 jakllsch IN struct _EFI_IP6 *This,
326 1.1 jakllsch OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
327 1.1 jakllsch OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
328 1.1 jakllsch OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
329 1.1 jakllsch );
330 1.1 jakllsch
331 1.1 jakllsch typedef
332 1.1 jakllsch EFI_STATUS
333 1.1 jakllsch (EFIAPI *EFI_IP6_CONFIGURE) (
334 1.1 jakllsch IN struct _EFI_IP6 *This,
335 1.1 jakllsch IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL
336 1.1 jakllsch );
337 1.1 jakllsch typedef
338 1.1 jakllsch EFI_STATUS
339 1.1 jakllsch (EFIAPI *EFI_IP6_GROUPS) (
340 1.1 jakllsch IN struct _EFI_IP6 *This,
341 1.1 jakllsch IN BOOLEAN JoinFlag,
342 1.1 jakllsch IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL
343 1.1 jakllsch );
344 1.1 jakllsch
345 1.1 jakllsch typedef
346 1.1 jakllsch EFI_STATUS
347 1.1 jakllsch (EFIAPI *EFI_IP6_ROUTES) (
348 1.1 jakllsch IN struct _EFI_IP6 *This,
349 1.1 jakllsch IN BOOLEAN DeleteRoute,
350 1.1 jakllsch IN EFI_IPv6_ADDRESS *Destination OPTIONAL,
351 1.1 jakllsch IN UINT8 PrefixLength,
352 1.1 jakllsch IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL
353 1.1 jakllsch );
354 1.1 jakllsch
355 1.1 jakllsch typedef
356 1.1 jakllsch EFI_STATUS
357 1.1 jakllsch (EFIAPI *EFI_IP6_NEIGHBORS) (
358 1.1 jakllsch IN struct _EFI_IP6 *This,
359 1.1 jakllsch IN BOOLEAN DeleteFlag,
360 1.1 jakllsch IN EFI_IPv6_ADDRESS *TargetIp6Address,
361 1.1 jakllsch IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL,
362 1.1 jakllsch IN UINT32 Timeout,
363 1.1 jakllsch IN BOOLEAN Override
364 1.1 jakllsch );
365 1.1 jakllsch
366 1.1 jakllsch typedef struct _EFI_IP6_FRAGMENT_DATA {
367 1.1 jakllsch UINT32 FragmentLength;
368 1.1 jakllsch VOID *FragmentBuffer;
369 1.1 jakllsch } EFI_IP6_FRAGMENT_DATA;
370 1.1 jakllsch
371 1.1 jakllsch typedef struct _EFI_IP6_OVERRIDE_DATA {
372 1.1 jakllsch UINT8 Protocol;
373 1.1 jakllsch UINT8 HopLimit;
374 1.1 jakllsch UINT32 FlowLabel;
375 1.1 jakllsch } EFI_IP6_OVERRIDE_DATA;
376 1.1 jakllsch
377 1.1 jakllsch typedef struct _EFI_IP6_TRANSMIT_DATA {
378 1.1 jakllsch EFI_IPv6_ADDRESS DestinationAddress;
379 1.1 jakllsch EFI_IP6_OVERRIDE_DATA *OverrideData;
380 1.1 jakllsch UINT32 ExtHdrsLength;
381 1.1 jakllsch VOID *ExtHdrs;
382 1.1 jakllsch UINT8 NextHeader;
383 1.1 jakllsch UINT32 DataLength;
384 1.1 jakllsch UINT32 FragmentCount;
385 1.1 jakllsch EFI_IP6_FRAGMENT_DATA FragmentTable[1];
386 1.1 jakllsch } EFI_IP6_TRANSMIT_DATA;
387 1.1 jakllsch
388 1.1 jakllsch #pragma pack(1)
389 1.1 jakllsch typedef struct _EFI_IP6_HEADER {
390 1.1 jakllsch UINT8 TrafficClassH:4;
391 1.1 jakllsch UINT8 Version:4;
392 1.1 jakllsch UINT8 FlowLabelH:4;
393 1.1 jakllsch UINT8 TrafficClassL:4;
394 1.1 jakllsch UINT16 FlowLabelL;
395 1.1 jakllsch UINT16 PayloadLength;
396 1.1 jakllsch UINT8 NextHeader;
397 1.1 jakllsch UINT8 HopLimit;
398 1.1 jakllsch EFI_IPv6_ADDRESS SourceAddress;
399 1.1 jakllsch EFI_IPv6_ADDRESS DestinationAddress;
400 1.1 jakllsch } EFI_IP6_HEADER;
401 1.1 jakllsch #pragma pack()
402 1.1 jakllsch
403 1.1 jakllsch typedef struct _EFI_IP6_RECEIVE_DATA {
404 1.1 jakllsch EFI_TIME TimeStamp;
405 1.1 jakllsch EFI_EVENT RecycleSignal;
406 1.1 jakllsch UINT32 HeaderLength;
407 1.1 jakllsch EFI_IP6_HEADER *Header;
408 1.1 jakllsch UINT32 DataLength;
409 1.1 jakllsch UINT32 FragmentCount;
410 1.1 jakllsch EFI_IP6_FRAGMENT_DATA FragmentTable[1];
411 1.1 jakllsch } EFI_IP6_RECEIVE_DATA;
412 1.1 jakllsch
413 1.1 jakllsch typedef struct {
414 1.1 jakllsch EFI_EVENT Event;
415 1.1 jakllsch EFI_STATUS Status;
416 1.1 jakllsch union {
417 1.1 jakllsch EFI_IP6_RECEIVE_DATA *RxData;
418 1.1 jakllsch EFI_IP6_TRANSMIT_DATA *TxData;
419 1.1 jakllsch } Packet;
420 1.1 jakllsch } EFI_IP6_COMPLETION_TOKEN;
421 1.1 jakllsch
422 1.1 jakllsch typedef
423 1.1 jakllsch EFI_STATUS
424 1.1 jakllsch (EFIAPI *EFI_IP6_TRANSMIT) (
425 1.1 jakllsch IN struct _EFI_IP6 *This,
426 1.1 jakllsch IN EFI_IP6_COMPLETION_TOKEN *Token
427 1.1 jakllsch );
428 1.1 jakllsch
429 1.1 jakllsch typedef
430 1.1 jakllsch EFI_STATUS
431 1.1 jakllsch (EFIAPI *EFI_IP6_RECEIVE) (
432 1.1 jakllsch IN struct _EFI_IP6 *This,
433 1.1 jakllsch IN EFI_IP6_COMPLETION_TOKEN *Token
434 1.1 jakllsch );
435 1.1 jakllsch
436 1.1 jakllsch typedef
437 1.1 jakllsch EFI_STATUS
438 1.1 jakllsch (EFIAPI *EFI_IP6_CANCEL)(
439 1.1 jakllsch IN struct _EFI_IP6 *This,
440 1.1 jakllsch IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL
441 1.1 jakllsch );
442 1.1 jakllsch
443 1.1 jakllsch typedef
444 1.1 jakllsch EFI_STATUS
445 1.1 jakllsch (EFIAPI *EFI_IP6_POLL) (
446 1.1 jakllsch IN struct _EFI_IP6 *This
447 1.1 jakllsch );
448 1.1 jakllsch
449 1.1 jakllsch typedef struct _EFI_IP6 {
450 1.1 jakllsch EFI_IP6_GET_MODE_DATA GetModeData;
451 1.1 jakllsch EFI_IP6_CONFIGURE Configure;
452 1.1 jakllsch EFI_IP6_GROUPS Groups;
453 1.1 jakllsch EFI_IP6_ROUTES Routes;
454 1.1 jakllsch EFI_IP6_NEIGHBORS Neighbors;
455 1.1 jakllsch EFI_IP6_TRANSMIT Transmit;
456 1.1 jakllsch EFI_IP6_RECEIVE Receive;
457 1.1 jakllsch EFI_IP6_CANCEL Cancel;
458 1.1 jakllsch EFI_IP6_POLL Poll;
459 1.1 jakllsch } EFI_IP6;
460 1.1 jakllsch
461 1.1 jakllsch #endif /* _EFI_IP_H */
462