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