6 Copyright (c) 2013 Intel Corporation
10 #define EFI_IP4_SERVICE_BINDING_PROTOCOL \
11 {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}}
13 #define EFI_IP4_PROTOCOL \
14 {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}}
16 #define EFI_IP6_SERVICE_BINDING_PROTOCOL \
17 {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}}
19 #define EFI_IP6_PROTOCOL \
20 {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}}
22 INTERFACE_DECL(_EFI_IP4);
23 INTERFACE_DECL(_EFI_IP6);
26 EFI_HANDLE InstanceHandle;
27 EFI_IPv4_ADDRESS Ip4Address;
28 EFI_IPv4_ADDRESS SubnetMask;
29 } EFI_IP4_ADDRESS_PAIR;
32 EFI_HANDLE DriverHandle;
34 EFI_IP4_ADDRESS_PAIR AddressPairs[1];
35 } EFI_IP4_VARIABLE_DATA;
38 UINT8 DefaultProtocol;
39 BOOLEAN AcceptAnyProtocol;
40 BOOLEAN AcceptIcmpErrors;
41 BOOLEAN AcceptBroadcast;
42 BOOLEAN AcceptPromiscuous;
43 BOOLEAN UseDefaultAddress;
44 EFI_IPv4_ADDRESS StationAddress;
45 EFI_IPv4_ADDRESS SubnetMask;
48 BOOLEAN DoNotFragment;
50 UINT32 ReceiveTimeout;
51 UINT32 TransmitTimeout;
52 } EFI_IP4_CONFIG_DATA;
55 EFI_IPv4_ADDRESS SubnetAddress;
56 EFI_IPv4_ADDRESS SubnetMask;
57 EFI_IPv4_ADDRESS GatewayAddress;
58 } EFI_IP4_ROUTE_TABLE;
68 EFI_IP4_CONFIG_DATA ConfigData;
71 EFI_IPv4_ADDRESS *GroupTable;
73 EFI_IP4_ROUTE_TABLE *RouteTable;
75 EFI_IP4_ICMP_TYPE *IcmpTypeList;
80 (EFIAPI *EFI_IP4_GET_MODE_DATA) (
81 IN struct _EFI_IP4 *This,
82 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
83 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
84 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
89 (EFIAPI *EFI_IP4_CONFIGURE) (
90 IN struct _EFI_IP4 *This,
91 IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL
96 (EFIAPI *EFI_IP4_GROUPS) (
97 IN struct _EFI_IP4 *This,
99 IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL
104 (EFIAPI *EFI_IP4_ROUTES) (
105 IN struct _EFI_IP4 *This,
106 IN BOOLEAN DeleteRoute,
107 IN EFI_IPv4_ADDRESS *SubnetAddress,
108 IN EFI_IPv4_ADDRESS *SubnetMask,
109 IN EFI_IPv4_ADDRESS *GatewayAddress
114 UINT8 HeaderLength:4;
118 UINT16 Identification;
119 UINT16 Fragmentation;
123 EFI_IPv4_ADDRESS SourceAddress;
124 EFI_IPv4_ADDRESS DestinationAddress;
129 UINT32 FragmentLength;
130 VOID *FragmentBuffer;
131 } EFI_IP4_FRAGMENT_DATA;
135 EFI_EVENT RecycleSignal;
137 EFI_IP4_HEADER *Header;
138 UINT32 OptionsLength;
141 UINT32 FragmentCount;
142 EFI_IP4_FRAGMENT_DATA FragmentTable[1];
143 } EFI_IP4_RECEIVE_DATA;
146 EFI_IPv4_ADDRESS SourceAddress;
147 EFI_IPv4_ADDRESS GatewayAddress;
151 BOOLEAN DoNotFragment;
152 } EFI_IP4_OVERRIDE_DATA;
155 EFI_IPv4_ADDRESS DestinationAddress;
156 EFI_IP4_OVERRIDE_DATA *OverrideData;
157 UINT32 OptionsLength;
159 UINT32 TotalDataLength;
160 UINT32 FragmentCount;
161 EFI_IP4_FRAGMENT_DATA FragmentTable[1];
162 } EFI_IP4_TRANSMIT_DATA;
168 EFI_IP4_RECEIVE_DATA *RxData;
169 EFI_IP4_TRANSMIT_DATA *TxData;
171 } EFI_IP4_COMPLETION_TOKEN;
175 (EFIAPI *EFI_IP4_TRANSMIT) (
176 IN struct _EFI_IP4 *This,
177 IN EFI_IP4_COMPLETION_TOKEN *Token
182 (EFIAPI *EFI_IP4_RECEIVE) (
183 IN struct _EFI_IP4 *This,
184 IN EFI_IP4_COMPLETION_TOKEN *Token
189 (EFIAPI *EFI_IP4_CANCEL)(
190 IN struct _EFI_IP4 *This,
191 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL
196 (EFIAPI *EFI_IP4_POLL) (
197 IN struct _EFI_IP4 *This
200 typedef struct _EFI_IP4 {
201 EFI_IP4_GET_MODE_DATA GetModeData;
202 EFI_IP4_CONFIGURE Configure;
203 EFI_IP4_GROUPS Groups;
204 EFI_IP4_ROUTES Routes;
205 EFI_IP4_TRANSMIT Transmit;
206 EFI_IP4_RECEIVE Receive;
207 EFI_IP4_CANCEL Cancel;
212 UINT8 DefaultProtocol;
213 BOOLEAN AcceptAnyProtocol;
214 BOOLEAN AcceptIcmpErrors;
215 BOOLEAN AcceptPromiscuous;
216 EFI_IPv6_ADDRESS DestinationAddress;
217 EFI_IPv6_ADDRESS StationAddress;
221 UINT32 ReceiveTimeout;
222 UINT32 TransmitTimeout;
223 } EFI_IP6_CONFIG_DATA;
226 EFI_IPv6_ADDRESS Address;
228 } EFI_IP6_ADDRESS_INFO;
231 EFI_IPv6_ADDRESS Gateway;
232 EFI_IPv6_ADDRESS Destination;
234 } EFI_IP6_ROUTE_TABLE;
237 EfiNeighborInComplete,
238 EfiNeighborReachable,
242 } EFI_IP6_NEIGHBOR_STATE;
245 EFI_IPv6_ADDRESS Neighbor;
246 EFI_MAC_ADDRESS LinkAddress;
247 EFI_IP6_NEIGHBOR_STATE State;
248 } EFI_IP6_NEIGHBOR_CACHE;
255 //***********************************************************
256 // ICMPv6 type definitions for error messages
257 //***********************************************************
258 #define ICMP_V6_DEST_UNREACHABLE 0x1
259 #define ICMP_V6_PACKET_TOO_BIG 0x2
260 #define ICMP_V6_TIME_EXCEEDED 0x3
261 #define ICMP_V6_PARAMETER_PROBLEM 0x4
263 //***********************************************************
264 // ICMPv6 type definition for informational messages
265 //***********************************************************
266 #define ICMP_V6_ECHO_REQUEST 0x80
267 #define ICMP_V6_ECHO_REPLY 0x81
268 #define ICMP_V6_LISTENER_QUERY 0x82
269 #define ICMP_V6_LISTENER_REPORT 0x83
270 #define ICMP_V6_LISTENER_DONE 0x84
271 #define ICMP_V6_ROUTER_SOLICIT 0x85
272 #define ICMP_V6_ROUTER_ADVERTISE 0x86
273 #define ICMP_V6_NEIGHBOR_SOLICIT 0x87
274 #define ICMP_V6_NEIGHBOR_ADVERTISE 0x88
275 #define ICMP_V6_REDIRECT 0x89
276 #define ICMP_V6_LISTENER_REPORT_2 0x8F
278 //***********************************************************
279 // ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE
280 //***********************************************************
281 #define ICMP_V6_NO_ROUTE_TO_DEST 0x0
282 #define ICMP_V6_COMM_PROHIBITED 0x1
283 #define ICMP_V6_BEYOND_SCOPE 0x2
284 #define ICMP_V6_ADDR_UNREACHABLE 0x3
285 #define ICMP_V6_PORT_UNREACHABLE 0x4
286 #define ICMP_V6_SOURCE_ADDR_FAILED 0x5
287 #define ICMP_V6_ROUTE_REJECTED 0x6
289 //***********************************************************
290 // ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED
291 //***********************************************************
292 #define ICMP_V6_TIMEOUT_HOP_LIMIT 0x0
293 #define ICMP_V6_TIMEOUT_REASSEMBLE 0x1
295 //***********************************************************
296 // ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM
297 //***********************************************************
298 #define ICMP_V6_ERRONEOUS_HEADER 0x0
299 #define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1
300 #define ICMP_V6_UNRECOGNIZE_OPTION 0x2
304 UINT32 MaxPacketSize;
305 EFI_IP6_CONFIG_DATA ConfigData;
306 BOOLEAN IsConfigured;
308 EFI_IP6_ADDRESS_INFO *AddressList;
310 EFI_IPv6_ADDRESS *GroupTable;
312 EFI_IP6_ROUTE_TABLE *RouteTable;
313 UINT32 NeighborCount;
314 EFI_IP6_NEIGHBOR_CACHE *NeighborCache;
316 EFI_IP6_ADDRESS_INFO *PrefixTable;
317 UINT32 IcmpTypeCount;
318 EFI_IP6_ICMP_TYPE *IcmpTypeList;
323 (EFIAPI *EFI_IP6_GET_MODE_DATA) (
324 IN struct _EFI_IP6 *This,
325 OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
326 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
327 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
332 (EFIAPI *EFI_IP6_CONFIGURE) (
333 IN struct _EFI_IP6 *This,
334 IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL
338 (EFIAPI *EFI_IP6_GROUPS) (
339 IN struct _EFI_IP6 *This,
341 IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL
346 (EFIAPI *EFI_IP6_ROUTES) (
347 IN struct _EFI_IP6 *This,
348 IN BOOLEAN DeleteRoute,
349 IN EFI_IPv6_ADDRESS *Destination OPTIONAL,
350 IN UINT8 PrefixLength,
351 IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL
356 (EFIAPI *EFI_IP6_NEIGHBORS) (
357 IN struct _EFI_IP6 *This,
358 IN BOOLEAN DeleteFlag,
359 IN EFI_IPv6_ADDRESS *TargetIp6Address,
360 IN EFI_MAC_ADDRESS *TargetLinkAddress OPTIONAL,
365 typedef struct _EFI_IP6_FRAGMENT_DATA {
366 UINT32 FragmentLength;
367 VOID *FragmentBuffer;
368 } EFI_IP6_FRAGMENT_DATA;
370 typedef struct _EFI_IP6_OVERRIDE_DATA {
374 } EFI_IP6_OVERRIDE_DATA;
376 typedef struct _EFI_IP6_TRANSMIT_DATA {
377 EFI_IPv6_ADDRESS DestinationAddress;
378 EFI_IP6_OVERRIDE_DATA *OverrideData;
379 UINT32 ExtHdrsLength;
383 UINT32 FragmentCount;
384 EFI_IP6_FRAGMENT_DATA FragmentTable[1];
385 } EFI_IP6_TRANSMIT_DATA;
388 typedef struct _EFI_IP6_HEADER {
389 UINT8 TrafficClassH:4;
392 UINT8 TrafficClassL:4;
394 UINT16 PayloadLength;
397 EFI_IPv6_ADDRESS SourceAddress;
398 EFI_IPv6_ADDRESS DestinationAddress;
402 typedef struct _EFI_IP6_RECEIVE_DATA {
404 EFI_EVENT RecycleSignal;
406 EFI_IP6_HEADER *Header;
408 UINT32 FragmentCount;
409 EFI_IP6_FRAGMENT_DATA FragmentTable[1];
410 } EFI_IP6_RECEIVE_DATA;
416 EFI_IP6_RECEIVE_DATA *RxData;
417 EFI_IP6_TRANSMIT_DATA *TxData;
419 } EFI_IP6_COMPLETION_TOKEN;
423 (EFIAPI *EFI_IP6_TRANSMIT) (
424 IN struct _EFI_IP6 *This,
425 IN EFI_IP6_COMPLETION_TOKEN *Token
430 (EFIAPI *EFI_IP6_RECEIVE) (
431 IN struct _EFI_IP6 *This,
432 IN EFI_IP6_COMPLETION_TOKEN *Token
437 (EFIAPI *EFI_IP6_CANCEL)(
438 IN struct _EFI_IP6 *This,
439 IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL
444 (EFIAPI *EFI_IP6_POLL) (
445 IN struct _EFI_IP6 *This
448 typedef struct _EFI_IP6 {
449 EFI_IP6_GET_MODE_DATA GetModeData;
450 EFI_IP6_CONFIGURE Configure;
451 EFI_IP6_GROUPS Groups;
452 EFI_IP6_ROUTES Routes;
453 EFI_IP6_NEIGHBORS Neighbors;
454 EFI_IP6_TRANSMIT Transmit;
455 EFI_IP6_RECEIVE Receive;
456 EFI_IP6_CANCEL Cancel;
460 #endif /* _EFI_IP_H */