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