1 | /** @file
|
---|
2 | UEFI Dynamic Host Configuration Protocol 6 Definition, which is used to get IPv6
|
---|
3 | addresses and other configuration parameters from DHCPv6 servers.
|
---|
4 |
|
---|
5 | Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>
|
---|
6 | This program and the accompanying materials
|
---|
7 | are licensed and made available under the terms and conditions of the BSD License
|
---|
8 | which accompanies this distribution. The full text of the license may be found at
|
---|
9 | http://opensource.org/licenses/bsd-license.php
|
---|
10 |
|
---|
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
---|
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
---|
13 |
|
---|
14 | @par Revision Reference:
|
---|
15 | This Protocol is introduced in UEFI Specification 2.2
|
---|
16 |
|
---|
17 | **/
|
---|
18 |
|
---|
19 | #ifndef __EFI_DHCP6_PROTOCOL_H__
|
---|
20 | #define __EFI_DHCP6_PROTOCOL_H__
|
---|
21 |
|
---|
22 | #define EFI_DHCP6_PROTOCOL_GUID \
|
---|
23 | { \
|
---|
24 | 0x87c8bad7, 0x595, 0x4053, {0x82, 0x97, 0xde, 0xde, 0x39, 0x5f, 0x5d, 0x5b } \
|
---|
25 | }
|
---|
26 |
|
---|
27 | #define EFI_DHCP6_SERVICE_BINDING_PROTOCOL_GUID \
|
---|
28 | { \
|
---|
29 | 0x9fb9a8a1, 0x2f4a, 0x43a6, {0x88, 0x9c, 0xd0, 0xf7, 0xb6, 0xc4, 0x7a, 0xd5 } \
|
---|
30 | }
|
---|
31 |
|
---|
32 | typedef struct _EFI_DHCP6_PROTOCOL EFI_DHCP6_PROTOCOL;
|
---|
33 |
|
---|
34 | typedef enum {
|
---|
35 | ///
|
---|
36 | /// The EFI DHCPv6 Protocol instance is configured, and start() needs
|
---|
37 | /// to be called
|
---|
38 | ///
|
---|
39 | Dhcp6Init = 0x0,
|
---|
40 | ///
|
---|
41 | /// A Solicit packet is sent out to discover DHCPv6 server, and the EFI
|
---|
42 | /// DHCPv6 Protocol instance is collecting Advertise packets.
|
---|
43 | ///
|
---|
44 | Dhcp6Selecting = 0x1,
|
---|
45 | ///
|
---|
46 | /// A Request is sent out to the DHCPv6 server, and the EFI DHCPv6
|
---|
47 | /// Protocol instance is waiting for Reply packet.
|
---|
48 | ///
|
---|
49 | Dhcp6Requesting = 0x2,
|
---|
50 | ///
|
---|
51 | /// A Decline packet is sent out to indicate one or more addresses of the
|
---|
52 | /// configured IA are in use by another node, and the EFI DHCPv6.
|
---|
53 | /// Protocol instance is waiting for Reply packet.
|
---|
54 | ///
|
---|
55 | Dhcp6Declining = 0x3,
|
---|
56 | ///
|
---|
57 | /// A Confirm packet is sent out to confirm the IPv6 addresses of the
|
---|
58 | /// configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
|
---|
59 | ///
|
---|
60 | Dhcp6Confirming = 0x4,
|
---|
61 | ///
|
---|
62 | /// A Release packet is sent out to release one or more IPv6 addresses of
|
---|
63 | /// the configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
|
---|
64 | ///
|
---|
65 | Dhcp6Releasing = 0x5,
|
---|
66 | ///
|
---|
67 | /// The DHCPv6 S.A.R.R process is completed for the configured IA.
|
---|
68 | ///
|
---|
69 | Dhcp6Bound = 0x6,
|
---|
70 | ///
|
---|
71 | /// A Renew packet is sent out to extend lifetime for the IPv6 addresses of
|
---|
72 | /// the configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
|
---|
73 | ///
|
---|
74 | Dhcp6Renewing = 0x7,
|
---|
75 | ///
|
---|
76 | /// A Rebind packet is sent out to extend lifetime for the IPv6 addresses of
|
---|
77 | /// the configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
|
---|
78 | ///
|
---|
79 | Dhcp6Rebinding = 0x8
|
---|
80 | } EFI_DHCP6_STATE;
|
---|
81 |
|
---|
82 | typedef enum {
|
---|
83 | ///
|
---|
84 | /// A Solicit packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
85 | /// can be modified or replaced in Dhcp6Callback.
|
---|
86 | ///
|
---|
87 | Dhcp6SendSolicit = 0x0,
|
---|
88 | ///
|
---|
89 | /// An Advertise packet is received and will be passed to Dhcp6Callback.
|
---|
90 | ///
|
---|
91 | Dhcp6RcvdAdvertise = 0x1,
|
---|
92 | ///
|
---|
93 | /// It is time for Dhcp6Callback to determine whether select the default Advertise
|
---|
94 | /// packet by RFC 3315 policy, or overwrite it by specific user policy.
|
---|
95 | ///
|
---|
96 | Dhcp6SelectAdvertise = 0x2,
|
---|
97 | ///
|
---|
98 | /// A Request packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
99 | /// can be modified or replaced in Dhcp6Callback.
|
---|
100 | ///
|
---|
101 | Dhcp6SendRequest = 0x3,
|
---|
102 | ///
|
---|
103 | /// A Reply packet is received and will be passed to Dhcp6Callback.
|
---|
104 | ///
|
---|
105 | Dhcp6RcvdReply = 0x4,
|
---|
106 | ///
|
---|
107 | /// A Reconfigure packet is received and will be passed to Dhcp6Callback.
|
---|
108 | ///
|
---|
109 | Dhcp6RcvdReconfigure = 0x5,
|
---|
110 | ///
|
---|
111 | /// A Decline packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
112 | /// can be modified or replaced in Dhcp6Callback.
|
---|
113 | ///
|
---|
114 | Dhcp6SendDecline = 0x6,
|
---|
115 | ///
|
---|
116 | /// A Confirm packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
117 | /// can be modified or replaced in Dhcp6Callback.
|
---|
118 | ///
|
---|
119 | Dhcp6SendConfirm = 0x7,
|
---|
120 | ///
|
---|
121 | /// A Release packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
122 | /// can be modified or replaced in Dhcp6Callback.
|
---|
123 | ///
|
---|
124 | Dhcp6SendRelease = 0x8,
|
---|
125 | ///
|
---|
126 | /// A Renew packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
127 | /// can be modified or replaced in Dhcp6Callback.
|
---|
128 | ///
|
---|
129 | Dhcp6EnterRenewing = 0x9,
|
---|
130 | ///
|
---|
131 | /// A Rebind packet is about to be sent. The packet is passed to Dhcp6Callback and
|
---|
132 | /// can be modified or replaced in Dhcp6Callback.
|
---|
133 | ///
|
---|
134 | Dhcp6EnterRebinding = 0xa
|
---|
135 | } EFI_DHCP6_EVENT;
|
---|
136 |
|
---|
137 | ///
|
---|
138 | /// An IA which carries assigned not temporary address.
|
---|
139 | ///
|
---|
140 | #define EFI_DHCP6_IA_TYPE_NA 3
|
---|
141 | ///
|
---|
142 | /// An IA which carries assigned temporary address.
|
---|
143 | ///
|
---|
144 | #define EFI_DHCP6_IA_TYPE_TA 4
|
---|
145 |
|
---|
146 | #pragma pack(1)
|
---|
147 | ///
|
---|
148 | /// EFI_DHCP6_PACKET_OPTION
|
---|
149 | /// defines the format of the DHCPv6 option, See RFC 3315 for more information.
|
---|
150 | /// This data structure is used to reference option data that is packed in the DHCPv6 packet.
|
---|
151 | ///
|
---|
152 | typedef struct {
|
---|
153 | ///
|
---|
154 | /// The DHCPv6 option code, stored in network order.
|
---|
155 | ///
|
---|
156 | UINT16 OpCode;
|
---|
157 | ///
|
---|
158 | /// Length of the DHCPv6 option data, stored in network order.
|
---|
159 | /// From the first byte to the last byte of the Data field.
|
---|
160 | ///
|
---|
161 | UINT16 OpLen;
|
---|
162 | ///
|
---|
163 | /// The data for the DHCPv6 option, stored in network order.
|
---|
164 | ///
|
---|
165 | UINT8 Data[1];
|
---|
166 | } EFI_DHCP6_PACKET_OPTION;
|
---|
167 |
|
---|
168 | ///
|
---|
169 | /// EFI_DHCP6_HEADER
|
---|
170 | /// defines the format of the DHCPv6 header. See RFC 3315 for more information.
|
---|
171 | ///
|
---|
172 | typedef struct{
|
---|
173 | ///
|
---|
174 | /// The DHCPv6 transaction ID.
|
---|
175 | ///
|
---|
176 | UINT32 MessageType:8;
|
---|
177 | ///
|
---|
178 | /// The DHCPv6 message type.
|
---|
179 | ///
|
---|
180 | UINT32 TransactionId:24;
|
---|
181 | } EFI_DHCP6_HEADER;
|
---|
182 |
|
---|
183 | ///
|
---|
184 | /// EFI_DHCP6_PACKET
|
---|
185 | /// defines the format of the DHCPv6 packet. See RFC 3315 for more information.
|
---|
186 | ///
|
---|
187 | typedef struct {
|
---|
188 | ///
|
---|
189 | /// Size of the EFI_DHCP6_PACKET buffer.
|
---|
190 | ///
|
---|
191 | UINT32 Size;
|
---|
192 | ///
|
---|
193 | /// Length of the EFI_DHCP6_PACKET from the first byte of the Header field to the last
|
---|
194 | /// byte of the Option[] field.
|
---|
195 | ///
|
---|
196 | UINT32 Length;
|
---|
197 | struct{
|
---|
198 | ///
|
---|
199 | /// The DHCPv6 packet header.
|
---|
200 | ///
|
---|
201 | EFI_DHCP6_HEADER Header;
|
---|
202 | ///
|
---|
203 | /// Start of the DHCPv6 packed option data.
|
---|
204 | ///
|
---|
205 | UINT8 Option[1];
|
---|
206 | } Dhcp6;
|
---|
207 | } EFI_DHCP6_PACKET;
|
---|
208 |
|
---|
209 | #pragma pack()
|
---|
210 |
|
---|
211 | typedef struct {
|
---|
212 | ///
|
---|
213 | /// Length of DUID in octects.
|
---|
214 | ///
|
---|
215 | UINT16 Length;
|
---|
216 | ///
|
---|
217 | /// Array of DUID octects.
|
---|
218 | ///
|
---|
219 | UINT8 Duid[1];
|
---|
220 | } EFI_DHCP6_DUID;
|
---|
221 |
|
---|
222 | typedef struct {
|
---|
223 | ///
|
---|
224 | /// Initial retransmission timeout.
|
---|
225 | ///
|
---|
226 | UINT32 Irt;
|
---|
227 | ///
|
---|
228 | /// Maximum retransmission count for one packet. If Mrc is zero, there's no upper limit
|
---|
229 | /// for retransmission count.
|
---|
230 | ///
|
---|
231 | UINT32 Mrc;
|
---|
232 | ///
|
---|
233 | /// Maximum retransmission timeout for each retry. It's the upper bound of the number of
|
---|
234 | /// retransmission timeout. If Mrt is zero, there is no upper limit for retransmission
|
---|
235 | /// timeout.
|
---|
236 | ///
|
---|
237 | UINT32 Mrt;
|
---|
238 | ///
|
---|
239 | /// Maximum retransmission duration for one packet. It's the upper bound of the numbers
|
---|
240 | /// the client may retransmit a message. If Mrd is zero, there's no upper limit for
|
---|
241 | /// retransmission duration.
|
---|
242 | ///
|
---|
243 | UINT32 Mrd;
|
---|
244 | } EFI_DHCP6_RETRANSMISSION;
|
---|
245 |
|
---|
246 | typedef struct {
|
---|
247 | ///
|
---|
248 | /// The IPv6 address.
|
---|
249 | ///
|
---|
250 | EFI_IPv6_ADDRESS IpAddress;
|
---|
251 | ///
|
---|
252 | /// The preferred lifetime in unit of seconds for the IPv6 address.
|
---|
253 | ///
|
---|
254 | UINT32 PreferredLifetime;
|
---|
255 | ///
|
---|
256 | /// The valid lifetime in unit of seconds for the IPv6 address.
|
---|
257 | ///
|
---|
258 | UINT32 ValidLifetime;
|
---|
259 | } EFI_DHCP6_IA_ADDRESS;
|
---|
260 |
|
---|
261 | typedef struct {
|
---|
262 | UINT16 Type; ///< Type for an IA.
|
---|
263 | UINT32 IaId; ///< The identifier for an IA.
|
---|
264 | } EFI_DHCP6_IA_DESCRIPTOR;
|
---|
265 |
|
---|
266 | typedef struct {
|
---|
267 | ///
|
---|
268 | /// The descriptor for IA.
|
---|
269 | ///
|
---|
270 | EFI_DHCP6_IA_DESCRIPTOR Descriptor;
|
---|
271 | ///
|
---|
272 | /// The state of the configured IA.
|
---|
273 | ///
|
---|
274 | EFI_DHCP6_STATE State;
|
---|
275 | ///
|
---|
276 | /// Pointer to the cached latest Reply packet. May be NULL if no packet is cached.
|
---|
277 | ///
|
---|
278 | EFI_DHCP6_PACKET *ReplyPacket;
|
---|
279 | ///
|
---|
280 | /// Number of IPv6 addresses of the configured IA.
|
---|
281 | ///
|
---|
282 | UINT32 IaAddressCount;
|
---|
283 | ///
|
---|
284 | /// List of the IPv6 addresses of the configured IA. When the state of the configured IA is
|
---|
285 | /// in Dhcp6Bound, Dhcp6Renewing and Dhcp6Rebinding, the IPv6 addresses are usable.
|
---|
286 | ///
|
---|
287 | EFI_DHCP6_IA_ADDRESS IaAddress[1];
|
---|
288 | } EFI_DHCP6_IA;
|
---|
289 |
|
---|
290 | typedef struct {
|
---|
291 | ///
|
---|
292 | /// Pointer to the DHCPv6 unique identifier. The caller is responsible for freeing this buffer.
|
---|
293 | ///
|
---|
294 | EFI_DHCP6_DUID *ClientId;
|
---|
295 | ///
|
---|
296 | /// Pointer to the configured IA of current instance. The caller can free this buffer after
|
---|
297 | /// using it.
|
---|
298 | ///
|
---|
299 | EFI_DHCP6_IA *Ia;
|
---|
300 | } EFI_DHCP6_MODE_DATA;
|
---|
301 |
|
---|
302 | /**
|
---|
303 | EFI_DHCP6_CALLBACK is provided by the consumer of the EFI DHCPv6 Protocol instance to
|
---|
304 | intercept events that occurs in the DHCPv6 S.A.R.R process.
|
---|
305 |
|
---|
306 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance that is used to configure this
|
---|
307 | callback function.
|
---|
308 | @param[in] Context Pointer to the context that is initialized by EFI_DHCP6_PROTOCOL.Configure().
|
---|
309 | @param[in] CurrentState The current state of the configured IA.
|
---|
310 | @param[in] Dhcp6Event The event that occurs in the current state, which usually means a state transition.
|
---|
311 | @param[in] Packet Pointer to the DHCPv6 packet that is about to be sent or has been received.
|
---|
312 | The EFI DHCPv6 Protocol instance is responsible for freeing the buffer.
|
---|
313 | @param[out] NewPacket Pointer to the new DHCPv6 packet to overwrite the Packet. NewPacket can not
|
---|
314 | share the buffer with Packet. If *NewPacket is not NULL, the EFI DHCPv6
|
---|
315 | Protocol instance is responsible for freeing the buffer.
|
---|
316 |
|
---|
317 | @retval EFI_SUCCESS Tell the EFI DHCPv6 Protocol instance to continue the DHCPv6 S.A.R.R process.
|
---|
318 | @retval EFI_ABORTED Tell the EFI DHCPv6 Protocol instance to abort the DHCPv6 S.A.R.R process,
|
---|
319 | and the state of the configured IA will be transferred to Dhcp6Init.
|
---|
320 |
|
---|
321 | **/
|
---|
322 | typedef
|
---|
323 | EFI_STATUS
|
---|
324 | (EFIAPI *EFI_DHCP6_CALLBACK)(
|
---|
325 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
326 | IN VOID *Context,
|
---|
327 | IN EFI_DHCP6_STATE CurrentState,
|
---|
328 | IN EFI_DHCP6_EVENT Dhcp6Event,
|
---|
329 | IN EFI_DHCP6_PACKET *Packet,
|
---|
330 | OUT EFI_DHCP6_PACKET **NewPacket OPTIONAL
|
---|
331 | );
|
---|
332 |
|
---|
333 | typedef struct {
|
---|
334 | ///
|
---|
335 | /// The callback function is to intercept various events that occur in the DHCPv6 S.A.R.R
|
---|
336 | /// process. Set to NULL to ignore all those events.
|
---|
337 | ///
|
---|
338 | EFI_DHCP6_CALLBACK Dhcp6Callback;
|
---|
339 | ///
|
---|
340 | /// Pointer to the context that will be passed to Dhcp6Callback.
|
---|
341 | ///
|
---|
342 | VOID *CallbackContext;
|
---|
343 | ///
|
---|
344 | /// Number of the DHCPv6 options in the OptionList.
|
---|
345 | ///
|
---|
346 | UINT32 OptionCount;
|
---|
347 | ///
|
---|
348 | /// List of the DHCPv6 options to be included in Solicit and Request packet. The buffer
|
---|
349 | /// can be freed after EFI_DHCP6_PROTOCOL.Configure() returns. Ignored if
|
---|
350 | /// OptionCount is zero. OptionList should not contain Client Identifier option
|
---|
351 | /// and any IA option, which will be appended by EFI DHCPv6 Protocol instance
|
---|
352 | /// automatically.
|
---|
353 | ///
|
---|
354 | EFI_DHCP6_PACKET_OPTION **OptionList;
|
---|
355 | ///
|
---|
356 | /// The descriptor for the IA of the EFI DHCPv6 Protocol instance.
|
---|
357 | ///
|
---|
358 | EFI_DHCP6_IA_DESCRIPTOR IaDescriptor;
|
---|
359 | ///
|
---|
360 | /// If not NULL, the event will be signaled when any IPv6 address information of the
|
---|
361 | /// configured IA is updated, including IPv6 address, preferred lifetime and valid
|
---|
362 | /// lifetime, or the DHCPv6 S.A.R.R process fails. Otherwise, Start(),
|
---|
363 | /// renewrebind(), decline(), release() and stop() will be blocking
|
---|
364 | /// operations, and they will wait for the exchange process completion or failure.
|
---|
365 | ///
|
---|
366 | EFI_EVENT IaInfoEvent;
|
---|
367 | ///
|
---|
368 | /// If TRUE, the EFI DHCPv6 Protocol instance is willing to accept Reconfigure packet.
|
---|
369 | /// Otherwise, it will ignore it. Reconfigure Accept option can not be specified through
|
---|
370 | /// OptionList parameter.
|
---|
371 | ///
|
---|
372 | BOOLEAN ReconfigureAccept;
|
---|
373 | ///
|
---|
374 | /// If TRUE, the EFI DHCPv6 Protocol instance will send Solicit packet with Rapid
|
---|
375 | /// Commit option. Otherwise, Rapid Commit option will not be included in Solicit
|
---|
376 | /// packet. Rapid Commit option can not be specified through OptionList parameter.
|
---|
377 | ///
|
---|
378 | BOOLEAN RapidCommit;
|
---|
379 | ///
|
---|
380 | /// Parameter to control Solicit packet retransmission behavior. The
|
---|
381 | /// buffer can be freed after EFI_DHCP6_PROTOCOL.Configure() returns.
|
---|
382 | ///
|
---|
383 | EFI_DHCP6_RETRANSMISSION *SolicitRetransmission;
|
---|
384 | } EFI_DHCP6_CONFIG_DATA;
|
---|
385 |
|
---|
386 | /**
|
---|
387 | EFI_DHCP6_INFO_CALLBACK is provided by the consumer of the EFI DHCPv6 Protocol
|
---|
388 | instance to intercept events that occurs in the DHCPv6 Information Request exchange process.
|
---|
389 |
|
---|
390 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance that is used to configure this
|
---|
391 | callback function.
|
---|
392 | @param[in] Context Pointer to the context that is initialized in the EFI_DHCP6_PROTOCOL.InfoRequest().
|
---|
393 | @param[in] Packet Pointer to Reply packet that has been received. The EFI DHCPv6 Protocol instance is
|
---|
394 | responsible for freeing the buffer.
|
---|
395 |
|
---|
396 | @retval EFI_SUCCESS Tell the EFI DHCPv6 Protocol instance to finish Information Request exchange process.
|
---|
397 | @retval EFI_NOT_READY Tell the EFI DHCPv6 Protocol instance to continue Information Request exchange process.
|
---|
398 | @retval EFI_ABORTED Tell the EFI DHCPv6 Protocol instance to abort the Information Request exchange process.
|
---|
399 |
|
---|
400 | **/
|
---|
401 | typedef
|
---|
402 | EFI_STATUS
|
---|
403 | (EFIAPI *EFI_DHCP6_INFO_CALLBACK)(
|
---|
404 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
405 | IN VOID *Context,
|
---|
406 | IN EFI_DHCP6_PACKET *Packet
|
---|
407 | );
|
---|
408 |
|
---|
409 | /**
|
---|
410 | Retrieve the current operating mode data and configuration data for the EFI DHCPv6 Protocol instance.
|
---|
411 |
|
---|
412 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
413 | @param[out] Dhcp6ModeData Pointer to the DHCPv6 mode data structure. The caller is responsible for freeing this
|
---|
414 | structure and each reference buffer.
|
---|
415 | @param[out] Dhcp6ConfigData Pointer to the DHCPv6 configuration data structure. The caller is responsible for
|
---|
416 | freeing this structure and each reference buffer.
|
---|
417 |
|
---|
418 | @retval EFI_SUCCESS The mode data was returned.
|
---|
419 | @retval EFI_ACCESS_DENIED The EFI DHCPv6 Protocol instance has not been configured when Dhcp6ConfigData is not NULL.
|
---|
420 | @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:
|
---|
421 | - This is NULL.
|
---|
422 | - Both Dhcp6ConfigData and Dhcp6ModeData are NULL.
|
---|
423 |
|
---|
424 | **/
|
---|
425 | typedef
|
---|
426 | EFI_STATUS
|
---|
427 | (EFIAPI *EFI_DHCP6_GET_MODE_DATA)(
|
---|
428 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
429 | OUT EFI_DHCP6_MODE_DATA *Dhcp6ModeData OPTIONAL,
|
---|
430 | OUT EFI_DHCP6_CONFIG_DATA *Dhcp6ConfigData OPTIONAL
|
---|
431 | );
|
---|
432 |
|
---|
433 | /**
|
---|
434 | Initialize or clean up the configuration data for the EFI DHCPv6 Protocol instance.
|
---|
435 |
|
---|
436 | The Configure() function is used to initialize or clean up the configuration data of the EFI
|
---|
437 | DHCPv6 Protocol instance.
|
---|
438 | - When Dhcp6CfgData is not NULL and Configure() is called successfully, the
|
---|
439 | configuration data will be initialized in the EFI DHCPv6 Protocol instance and the state of the
|
---|
440 | configured IA will be transferred into Dhcp6Init.
|
---|
441 | - When Dhcp6CfgData is NULL and Configure() is called successfully, the configuration
|
---|
442 | data will be cleaned up and no IA will be associated with the EFI DHCPv6 Protocol instance.
|
---|
443 |
|
---|
444 | To update the configuration data for an EFI DCHPv6 Protocol instance, the original data must be
|
---|
445 | cleaned up before setting the new configuration data.
|
---|
446 |
|
---|
447 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
448 | @param[in] Dhcp6CfgData Pointer to the DHCPv6 configuration data structure.
|
---|
449 |
|
---|
450 | @retval EFI_SUCCESS The mode data was returned.
|
---|
451 | @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
|
---|
452 | - This is NULL.
|
---|
453 | - OptionCount > 0 and OptionList is NULL.
|
---|
454 | - OptionList is not NULL, and Client Id option, Reconfigure Accept option,
|
---|
455 | Rapid Commit option or any IA option is specified in the OptionList.
|
---|
456 | - IaDescriptor.Type is neither EFI_DHCP6_IA_TYPE_NA nor EFI_DHCP6_IA_TYPE_NA.
|
---|
457 | - IaDescriptor is not unique.
|
---|
458 | - Both IaInfoEvent and SolicitRetransimssion are NULL.
|
---|
459 | - SolicitRetransmission is not NULL, and both SolicitRetransimssion->Mrc and
|
---|
460 | SolicitRetransmission->Mrd are zero.
|
---|
461 | @retval EFI_ACCESS_DENIED The EFI DHCPv6 Protocol instance has been already configured
|
---|
462 | when Dhcp6CfgData is not NULL.
|
---|
463 | The EFI DHCPv6 Protocol instance has already started the
|
---|
464 | DHCPv6 S.A.R.R when Dhcp6CfgData is NULL.
|
---|
465 | @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.
|
---|
466 | @retval EFI_DEVICE_ERROR An unexpected system or network error occurred.
|
---|
467 |
|
---|
468 | **/
|
---|
469 | typedef
|
---|
470 | EFI_STATUS
|
---|
471 | (EFIAPI *EFI_DHCP6_CONFIGURE)(
|
---|
472 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
473 | IN EFI_DHCP6_CONFIG_DATA *Dhcp6CfgData OPTIONAL
|
---|
474 | );
|
---|
475 |
|
---|
476 | /**
|
---|
477 | Start the DHCPv6 S.A.R.R process.
|
---|
478 |
|
---|
479 | The Start() function starts the DHCPv6 S.A.R.R process. This function can be called only when
|
---|
480 | the state of the configured IA is in the Dhcp6Init state. If the DHCPv6 S.A.R.R process completes
|
---|
481 | successfully, the state of the configured IA will be transferred through Dhcp6Selecting and
|
---|
482 | Dhcp6Requesting to Dhcp6Bound state. The update of the IPv6 addresses will be notified through
|
---|
483 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent. At the time when each event occurs in this process, the
|
---|
484 | callback function set by EFI_DHCP6_PROTOCOL.Configure() will be called and the user can take
|
---|
485 | this opportunity to control the process. If EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL, the
|
---|
486 | Start() function call is a blocking operation. It will return after the DHCPv6 S.A.R.R process
|
---|
487 | completes or aborted by users. If the process is aborted by system or network error, the state of
|
---|
488 | the configured IA will be transferred to Dhcp6Init. The Start() function can be called again to
|
---|
489 | restart the process.
|
---|
490 |
|
---|
491 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
492 |
|
---|
493 | @retval EFI_SUCCESS The DHCPv6 S.A.R.R process is completed and at least one IPv6
|
---|
494 | address has been bound to the configured IA when
|
---|
495 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
|
---|
496 | The DHCPv6 S.A.R.R process is started when
|
---|
497 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
|
---|
498 | @retval EFI_ACCESS_DENIED The EFI DHCPv6 Child instance hasn't been configured.
|
---|
499 | @retval EFI_INVALID_PARAMETER This is NULL.
|
---|
500 | @retval EFI_OUT_OF_RESOURCES Required system resources could not be allocated.
|
---|
501 | @retval EFI_ALREADY_STARTED The DHCPv6 S.A.R.R process has already started.
|
---|
502 | @retval EFI_DEVICE_ERROR An unexpected network or system error occurred.
|
---|
503 | @retval EFI_NO_RESPONSE The DHCPv6 S.A.R.R process failed because of no response.
|
---|
504 | @retval EFI_NO_MAPPING No IPv6 address has been bound to the configured IA after the
|
---|
505 | DHCPv6 S.A.R.R process.
|
---|
506 | @retval EFI_ABORTED The DHCPv6 S.A.R.R process aborted by user.
|
---|
507 | @retval EFI_NO_MEDIA There was a media error.
|
---|
508 |
|
---|
509 | **/
|
---|
510 | typedef
|
---|
511 | EFI_STATUS
|
---|
512 | (EFIAPI *EFI_DHCP6_START)(
|
---|
513 | IN EFI_DHCP6_PROTOCOL *This
|
---|
514 | );
|
---|
515 |
|
---|
516 | /**
|
---|
517 | Request configuration information without the assignment of any IA addresses of the client.
|
---|
518 |
|
---|
519 | The InfoRequest() function is used to request configuration information without the assignment
|
---|
520 | of any IPv6 address of the client. Client sends out Information Request packet to obtain
|
---|
521 | the required configuration information, and DHCPv6 server responds with Reply packet containing
|
---|
522 | the information for the client. The received Reply packet will be passed to the user by
|
---|
523 | ReplyCallback function. If user returns EFI_NOT_READY from ReplyCallback, the EFI DHCPv6
|
---|
524 | Protocol instance will continue to receive other Reply packets unless timeout according to
|
---|
525 | the Retransmission parameter. Otherwise, the Information Request exchange process will be
|
---|
526 | finished successfully if user returns EFI_SUCCESS from ReplyCallback.
|
---|
527 |
|
---|
528 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
529 | @param[in] SendClientId If TRUE, the EFI DHCPv6 Protocol instance will build Client
|
---|
530 | Identifier option and include it into Information Request
|
---|
531 | packet. If FALSE, Client Identifier option will not be included.
|
---|
532 | Client Identifier option can not be specified through OptionList
|
---|
533 | parameter.
|
---|
534 | @param[in] OptionRequest Pointer to the Option Request option in the Information Request
|
---|
535 | packet. Option Request option can not be specified through
|
---|
536 | OptionList parameter.
|
---|
537 | @param[in] OptionCount Number of options in OptionList.
|
---|
538 | @param[in] OptionList List of other DHCPv6 options. These options will be appended
|
---|
539 | to the Option Request option. The caller is responsible for
|
---|
540 | freeing this buffer. Type is defined in EFI_DHCP6_PROTOCOL.GetModeData().
|
---|
541 | @param[in] Retransmission Parameter to control Information Request packet retransmission
|
---|
542 | behavior. The buffer can be freed after EFI_DHCP6_PROTOCOL.InfoRequest()
|
---|
543 | returns.
|
---|
544 | @param[in] TimeoutEvent If not NULL, this event is signaled when the information request
|
---|
545 | exchange aborted because of no response. If NULL, the function
|
---|
546 | call is a blocking operation; and it will return after the
|
---|
547 | information-request exchange process finish or aborted by users.
|
---|
548 | @param[in] ReplyCallback The callback function is to intercept various events that occur
|
---|
549 | in the Information Request exchange process. It should not be
|
---|
550 | set to NULL.
|
---|
551 | @param[in] CallbackContext Pointer to the context that will be passed to ReplyCallback.
|
---|
552 |
|
---|
553 | @retval EFI_SUCCESS The DHCPv6 S.A.R.R process is completed and at least one IPv6
|
---|
554 | @retval EFI_SUCCESS The DHCPv6 information request exchange process completed
|
---|
555 | when TimeoutEvent is NULL. Information Request packet has been
|
---|
556 | sent to DHCPv6 server when TimeoutEvent is not NULL.
|
---|
557 | @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:
|
---|
558 | - This is NULL.
|
---|
559 | - OptionRequest is NULL or OptionRequest->OpCode is invalid.
|
---|
560 | - OptionCount > 0 and OptionList is NULL.
|
---|
561 | - OptionList is not NULL, and Client Identify option or
|
---|
562 | Option Request option is specified in the OptionList.
|
---|
563 | - Retransimssion is NULL.
|
---|
564 | - Both Retransimssion->Mrc and Retransmission->Mrd are zero.
|
---|
565 | - ReplyCallback is NULL.
|
---|
566 | @retval EFI_DEVICE_ERROR An unexpected network or system error occurred.
|
---|
567 | @retval EFI_NO_RESPONSE The DHCPv6 information request exchange process failed
|
---|
568 | because of no response, or not all requested-options are
|
---|
569 | responded by DHCPv6 servers when Timeout happened.
|
---|
570 | @retval EFI_ABORTED The DHCPv6 information request exchange process aborted by user.
|
---|
571 |
|
---|
572 | **/
|
---|
573 | typedef
|
---|
574 | EFI_STATUS
|
---|
575 | (EFIAPI *EFI_DHCP6_INFO_REQUEST)(
|
---|
576 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
577 | IN BOOLEAN SendClientId,
|
---|
578 | IN EFI_DHCP6_PACKET_OPTION *OptionRequest,
|
---|
579 | IN UINT32 OptionCount,
|
---|
580 | IN EFI_DHCP6_PACKET_OPTION *OptionList[] OPTIONAL,
|
---|
581 | IN EFI_DHCP6_RETRANSMISSION *Retransmission,
|
---|
582 | IN EFI_EVENT TimeoutEvent OPTIONAL,
|
---|
583 | IN EFI_DHCP6_INFO_CALLBACK ReplyCallback,
|
---|
584 | IN VOID *CallbackContext OPTIONAL
|
---|
585 | );
|
---|
586 |
|
---|
587 | /**
|
---|
588 | Manually extend the valid and preferred lifetimes for the IPv6 addresses of the configured
|
---|
589 | IA and update other configuration parameters by sending Renew or Rebind packet.
|
---|
590 |
|
---|
591 | The RenewRebind() function is used to manually extend the valid and preferred lifetimes for the
|
---|
592 | IPv6 addresses of the configured IA and update other configuration parameters by sending Renew or
|
---|
593 | Rebind packet.
|
---|
594 | - When RebindRequest is FALSE and the state of the configured IA is Dhcp6Bound, it
|
---|
595 | will send Renew packet to the previously DHCPv6 server and transfer the state of the configured
|
---|
596 | IA to Dhcp6Renewing. If valid Reply packet received, the state transfers to Dhcp6Bound
|
---|
597 | and the valid and preferred timer restarts. If fails, the state transfers to Dhcp6Bound but the
|
---|
598 | timer continues.
|
---|
599 | - When RebindRequest is TRUE and the state of the configured IA is Dhcp6Bound, it will
|
---|
600 | send Rebind packet. If valid Reply packet received, the state transfers to Dhcp6Bound and the
|
---|
601 | valid and preferred timer restarts. If fails, the state transfers to Dhcp6Init and the IA can't
|
---|
602 | be used.
|
---|
603 |
|
---|
604 | @param[in] This Pointer to the EFI_DHCP4_PROTOCOL instance.
|
---|
605 | @param[in] RebindRequest If TRUE, it will send Rebind packet and enter the Dhcp6Rebinding state.
|
---|
606 | Otherwise, it will send Renew packet and enter the Dhcp6Renewing state.
|
---|
607 |
|
---|
608 | @retval EFI_SUCCESS The DHCPv6 renew/rebind exchange process has completed and at
|
---|
609 | least one IPv6 address of the configured IA has been bound again
|
---|
610 | when EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
|
---|
611 | The EFI DHCPv6 Protocol instance has sent Renew or Rebind packet
|
---|
612 | when EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
|
---|
613 | @retval EFI_ACCESS_DENIED The EFI DHCPv6 Child instance hasn't been configured, or the state
|
---|
614 | of the configured IA is not in Dhcp6Bound.
|
---|
615 | @retval EFI_ALREADY_STARTED The state of the configured IA has already entered Dhcp6Renewing
|
---|
616 | when RebindRequest is FALSE.
|
---|
617 | The state of the configured IA has already entered Dhcp6Rebinding
|
---|
618 | when RebindRequest is TRUE.
|
---|
619 | @retval EFI_INVALID_PARAMETER This is NULL.
|
---|
620 | @retval EFI_DEVICE_ERROR An unexpected system or system error occurred.
|
---|
621 | @retval EFI_NO_RESPONSE The DHCPv6 renew/rebind exchange process failed because of no response.
|
---|
622 | @retval EFI_NO_MAPPING No IPv6 address has been bound to the configured IA after the DHCPv6
|
---|
623 | renew/rebind exchange process.
|
---|
624 | @retval EFI_ABORTED The DHCPv6 renew/rebind exchange process aborted by user.
|
---|
625 |
|
---|
626 | **/
|
---|
627 | typedef
|
---|
628 | EFI_STATUS
|
---|
629 | (EFIAPI *EFI_DHCP6_RENEW_REBIND)(
|
---|
630 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
631 | IN BOOLEAN RebindRequest
|
---|
632 | );
|
---|
633 |
|
---|
634 | /**
|
---|
635 | Inform that one or more IPv6 addresses assigned by a server are already in use by
|
---|
636 | another node.
|
---|
637 |
|
---|
638 | The Decline() function is used to manually decline the assignment of IPv6 addresses, which
|
---|
639 | have been already used by another node. If all IPv6 addresses of the configured IA are declined
|
---|
640 | through this function, the state of the IA will switch through Dhcp6Declining to Dhcp6Init,
|
---|
641 | otherwise, the state of the IA will restore to Dhcp6Bound after the declining process. The
|
---|
642 | Decline() can only be called when the IA is in Dhcp6Bound state. If the
|
---|
643 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL, this function is a blocking operation. It
|
---|
644 | will return after the declining process finishes, or aborted by user.
|
---|
645 |
|
---|
646 | @param[in] This Pointer to the EFI_DHCP4_PROTOCOL instance.
|
---|
647 | @param[in] AddressCount Number of declining IPv6 addresses.
|
---|
648 | @param[in] Addresses Pointer to the buffer stored all the declining IPv6 addresses.
|
---|
649 |
|
---|
650 | @retval EFI_SUCCESS The DHCPv6 decline exchange process has completed when
|
---|
651 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
|
---|
652 | The EFI DHCPv6 Protocol instance has sent Decline packet when
|
---|
653 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
|
---|
654 | @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
|
---|
655 | - This is NULL.
|
---|
656 | - AddressCount is zero or Addresses is NULL.
|
---|
657 | @retval EFI_NOT_FOUND Any specified IPv6 address is not correlated with the configured IA
|
---|
658 | for this instance.
|
---|
659 | @retval EFI_ACCESS_DENIED The EFI DHCPv6 Child instance hasn't been configured, or the
|
---|
660 | state of the configured IA is not in Dhcp6Bound.
|
---|
661 | @retval EFI_DEVICE_ERROR An unexpected network or system error occurred.
|
---|
662 | @retval EFI_ABORTED The DHCPv6 decline exchange process aborted by user.
|
---|
663 |
|
---|
664 | **/
|
---|
665 | typedef
|
---|
666 | EFI_STATUS
|
---|
667 | (EFIAPI *EFI_DHCP6_DECLINE)(
|
---|
668 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
669 | IN UINT32 AddressCount,
|
---|
670 | IN EFI_IPv6_ADDRESS *Addresses
|
---|
671 | );
|
---|
672 |
|
---|
673 | /**
|
---|
674 | Release one or more IPv6 addresses associated with the configured IA for current instance.
|
---|
675 |
|
---|
676 | The Release() function is used to manually release the one or more IPv6 address. If AddressCount
|
---|
677 | is zero, it will release all IPv6 addresses of the configured IA. If all IPv6 addresses of the IA
|
---|
678 | are released through this function, the state of the IA will switch through Dhcp6Releasing to
|
---|
679 | Dhcp6Init, otherwise, the state of the IA will restore to Dhcp6Bound after the releasing process.
|
---|
680 | The Release() can only be called when the IA is in Dhcp6Bound state. If the
|
---|
681 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL, the function is a blocking operation. It will return
|
---|
682 | after the releasing process finishes, or aborted by user.
|
---|
683 |
|
---|
684 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
685 | @param[in] AddressCount Number of releasing IPv6 addresses.
|
---|
686 | @param[in] Addresses Pointer to the buffer stored all the releasing IPv6 addresses.
|
---|
687 | Ignored if AddressCount is zero.
|
---|
688 | @retval EFI_SUCCESS The DHCPv6 release exchange process has completed when
|
---|
689 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
|
---|
690 | The EFI DHCPv6 Protocol instance has sent Release packet when
|
---|
691 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
|
---|
692 | @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
|
---|
693 | - This is NULL.
|
---|
694 | - AddressCount is not zero or Addresses is NULL.
|
---|
695 | @retval EFI_NOT_FOUND Any specified IPv6 address is not correlated with the configured
|
---|
696 | IA for this instance.
|
---|
697 | @retval EFI_ACCESS_DENIED The EFI DHCPv6 Child instance hasn't been configured, or the
|
---|
698 | state of the configured IA is not in Dhcp6Bound.
|
---|
699 | @retval EFI_DEVICE_ERROR An unexpected network or system error occurred.
|
---|
700 | @retval EFI_ABORTED The DHCPv6 release exchange process aborted by user.
|
---|
701 |
|
---|
702 | **/
|
---|
703 | typedef
|
---|
704 | EFI_STATUS
|
---|
705 | (EFIAPI *EFI_DHCP6_RELEASE)(
|
---|
706 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
707 | IN UINT32 AddressCount,
|
---|
708 | IN EFI_IPv6_ADDRESS *Addresses
|
---|
709 | );
|
---|
710 |
|
---|
711 | /**
|
---|
712 | Stop the DHCPv6 S.A.R.R process.
|
---|
713 |
|
---|
714 | The Stop() function is used to stop the DHCPv6 S.A.R.R process. If this function is called
|
---|
715 | successfully, all the IPv6 addresses of the configured IA will be released and the state of
|
---|
716 | the configured IA will be transferred to Dhcp6Init.
|
---|
717 |
|
---|
718 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
719 |
|
---|
720 | @retval EFI_SUCCESS The DHCPv6 S.A.R.R process has been stopped when
|
---|
721 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
|
---|
722 | The EFI DHCPv6 Protocol instance has sent Release packet if
|
---|
723 | need release or has been stopped if needn't, when
|
---|
724 | EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
|
---|
725 | @retval EFI_INVALID_PARAMETER This is NULL.
|
---|
726 |
|
---|
727 | **/
|
---|
728 | typedef
|
---|
729 | EFI_STATUS
|
---|
730 | (EFIAPI *EFI_DHCP6_STOP)(
|
---|
731 | IN EFI_DHCP6_PROTOCOL *This
|
---|
732 | );
|
---|
733 |
|
---|
734 | /**
|
---|
735 | Parse the option data in the DHCPv6 packet.
|
---|
736 |
|
---|
737 | The Parse() function is used to retrieve the option list in the DHCPv6 packet.
|
---|
738 |
|
---|
739 | @param[in] This Pointer to the EFI_DHCP6_PROTOCOL instance.
|
---|
740 |
|
---|
741 | @param[in] Packet Pointer to packet to be parsed.
|
---|
742 | @param[in] OptionCount On input, the number of entries in the PacketOptionList.
|
---|
743 | On output, the number of DHCPv6 options in the Packet.
|
---|
744 | @param[in] PacketOptionList List of pointers to the DHCPv6 options in the Packet.
|
---|
745 | The OpCode and OpLen in EFI_DHCP6_PACKET_OPTION are
|
---|
746 | both stored in network byte order.
|
---|
747 | @retval EFI_SUCCESS The packet was successfully parsed.
|
---|
748 | @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
|
---|
749 | - This is NULL.
|
---|
750 | - Packet is NULL.
|
---|
751 | - Packet is not a well-formed DHCPv6 packet.
|
---|
752 | - OptionCount is NULL.
|
---|
753 | - *OptionCount is not zero and PacketOptionList is NULL.
|
---|
754 | @retval EFI_BUFFER_TOO_SMALL *OptionCount is smaller than the number of options that were
|
---|
755 | found in the Packet.
|
---|
756 |
|
---|
757 | **/
|
---|
758 | typedef
|
---|
759 | EFI_STATUS
|
---|
760 | (EFIAPI *EFI_DHCP6_PARSE)(
|
---|
761 | IN EFI_DHCP6_PROTOCOL *This,
|
---|
762 | IN EFI_DHCP6_PACKET *Packet,
|
---|
763 | IN OUT UINT32 *OptionCount,
|
---|
764 | OUT EFI_DHCP6_PACKET_OPTION *PacketOptionList[] OPTIONAL
|
---|
765 | );
|
---|
766 |
|
---|
767 | ///
|
---|
768 | /// The EFI DHCPv6 Protocol is used to get IPv6 addresses and other configuration parameters
|
---|
769 | /// from DHCPv6 servers.
|
---|
770 | ///
|
---|
771 | struct _EFI_DHCP6_PROTOCOL {
|
---|
772 | EFI_DHCP6_GET_MODE_DATA GetModeData;
|
---|
773 | EFI_DHCP6_CONFIGURE Configure;
|
---|
774 | EFI_DHCP6_START Start;
|
---|
775 | EFI_DHCP6_INFO_REQUEST InfoRequest;
|
---|
776 | EFI_DHCP6_RENEW_REBIND RenewRebind;
|
---|
777 | EFI_DHCP6_DECLINE Decline;
|
---|
778 | EFI_DHCP6_RELEASE Release;
|
---|
779 | EFI_DHCP6_STOP Stop;
|
---|
780 | EFI_DHCP6_PARSE Parse;
|
---|
781 | };
|
---|
782 |
|
---|
783 | extern EFI_GUID gEfiDhcp6ProtocolGuid;
|
---|
784 | extern EFI_GUID gEfiDhcp6ServiceBindingProtocolGuid;
|
---|
785 |
|
---|
786 | #endif
|
---|