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