mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-03 22:54:50 +00:00 
			
		
		
		
	https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			781 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			781 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  UEFI Dynamic Host Configuration Protocol 6 Definition, which is used to get IPv6
 | 
						|
  addresses and other configuration parameters from DHCPv6 servers.
 | 
						|
 | 
						|
  Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This Protocol is introduced in UEFI Specification 2.2
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __EFI_DHCP6_PROTOCOL_H__
 | 
						|
#define __EFI_DHCP6_PROTOCOL_H__
 | 
						|
 | 
						|
#define EFI_DHCP6_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0x87c8bad7, 0x595, 0x4053, {0x82, 0x97, 0xde, 0xde, 0x39, 0x5f, 0x5d, 0x5b } \
 | 
						|
  }
 | 
						|
 | 
						|
#define EFI_DHCP6_SERVICE_BINDING_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0x9fb9a8a1, 0x2f4a, 0x43a6, {0x88, 0x9c, 0xd0, 0xf7, 0xb6, 0xc4, 0x7a, 0xd5 } \
 | 
						|
  }
 | 
						|
 | 
						|
typedef struct _EFI_DHCP6_PROTOCOL EFI_DHCP6_PROTOCOL;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  ///
 | 
						|
  /// The EFI DHCPv6 Protocol instance is configured, and start() needs
 | 
						|
  /// to be called
 | 
						|
  ///
 | 
						|
  Dhcp6Init                    = 0x0,
 | 
						|
  ///
 | 
						|
  /// A Solicit packet is sent out to discover DHCPv6 server, and the EFI
 | 
						|
  /// DHCPv6 Protocol instance is collecting Advertise packets.
 | 
						|
  ///
 | 
						|
  Dhcp6Selecting               = 0x1,
 | 
						|
  ///
 | 
						|
  /// A Request is sent out to the DHCPv6 server, and the EFI DHCPv6
 | 
						|
  /// Protocol instance is waiting for Reply packet.
 | 
						|
  ///
 | 
						|
  Dhcp6Requesting              = 0x2,
 | 
						|
  ///
 | 
						|
  /// A Decline packet is sent out to indicate one or more addresses of the
 | 
						|
  /// configured IA are in use by another node, and the EFI DHCPv6.
 | 
						|
  /// Protocol instance is waiting for Reply packet.
 | 
						|
  ///
 | 
						|
  Dhcp6Declining               = 0x3,
 | 
						|
  ///
 | 
						|
  /// A Confirm packet is sent out to confirm the IPv6 addresses of the
 | 
						|
  /// configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
 | 
						|
  ///
 | 
						|
  Dhcp6Confirming              = 0x4,
 | 
						|
  ///
 | 
						|
  /// A Release packet is sent out to release one or more IPv6 addresses of
 | 
						|
  /// the configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
 | 
						|
  ///
 | 
						|
  Dhcp6Releasing               = 0x5,
 | 
						|
  ///
 | 
						|
  /// The DHCPv6 S.A.R.R process is completed for the configured IA.
 | 
						|
  ///
 | 
						|
  Dhcp6Bound                   = 0x6,
 | 
						|
  ///
 | 
						|
  /// A Renew packet is sent out to extend lifetime for the IPv6 addresses of
 | 
						|
  /// the configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
 | 
						|
  ///
 | 
						|
  Dhcp6Renewing                = 0x7,
 | 
						|
  ///
 | 
						|
  /// A Rebind packet is sent out to extend lifetime for the IPv6 addresses of
 | 
						|
  /// the configured IA, and the EFI DHCPv6 Protocol instance is waiting for Reply packet.
 | 
						|
  ///
 | 
						|
  Dhcp6Rebinding               = 0x8
 | 
						|
} EFI_DHCP6_STATE;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  ///
 | 
						|
  /// A Solicit packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6SendSolicit             = 0x0,
 | 
						|
  ///
 | 
						|
  /// An Advertise packet is received and will be passed to Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6RcvdAdvertise           = 0x1,
 | 
						|
  ///
 | 
						|
  /// It is time for Dhcp6Callback to determine whether select the default Advertise
 | 
						|
  /// packet by RFC 3315 policy, or overwrite it by specific user policy.
 | 
						|
  ///
 | 
						|
  Dhcp6SelectAdvertise         = 0x2,
 | 
						|
  ///
 | 
						|
  /// A Request packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6SendRequest             = 0x3,
 | 
						|
  ///
 | 
						|
  /// A Reply packet is received and will be passed to Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6RcvdReply               = 0x4,
 | 
						|
  ///
 | 
						|
  /// A Reconfigure packet is received and will be passed to Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6RcvdReconfigure         = 0x5,
 | 
						|
  ///
 | 
						|
  /// A Decline packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6SendDecline             = 0x6,
 | 
						|
  ///
 | 
						|
  /// A Confirm packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6SendConfirm             = 0x7,
 | 
						|
  ///
 | 
						|
  /// A Release packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6SendRelease             = 0x8,
 | 
						|
  ///
 | 
						|
  /// A Renew packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6EnterRenewing           = 0x9,
 | 
						|
  ///
 | 
						|
  /// A Rebind packet is about to be sent. The packet is passed to Dhcp6Callback and
 | 
						|
  /// can be modified or replaced in Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  Dhcp6EnterRebinding          = 0xa
 | 
						|
} EFI_DHCP6_EVENT;
 | 
						|
 | 
						|
///
 | 
						|
/// An IA which carries assigned not temporary address.
 | 
						|
///
 | 
						|
#define EFI_DHCP6_IA_TYPE_NA   3
 | 
						|
///
 | 
						|
/// An IA which carries assigned temporary address.
 | 
						|
///
 | 
						|
#define EFI_DHCP6_IA_TYPE_TA   4
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
///
 | 
						|
/// EFI_DHCP6_PACKET_OPTION
 | 
						|
/// defines the format of the DHCPv6 option, See RFC 3315 for more information.
 | 
						|
/// This data structure is used to reference option data that is packed in the DHCPv6 packet.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// The DHCPv6 option code, stored in network order.
 | 
						|
  ///
 | 
						|
  UINT16                       OpCode;
 | 
						|
  ///
 | 
						|
  /// Length of the DHCPv6 option data, stored in network order.
 | 
						|
  /// From the first byte to the last byte of the Data field.
 | 
						|
  ///
 | 
						|
  UINT16                       OpLen;
 | 
						|
  ///
 | 
						|
  /// The data for the DHCPv6 option, stored in network order.
 | 
						|
  ///
 | 
						|
  UINT8                        Data[1];
 | 
						|
} EFI_DHCP6_PACKET_OPTION;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DHCP6_HEADER
 | 
						|
/// defines the format of the DHCPv6 header. See RFC 3315 for more information.
 | 
						|
///
 | 
						|
typedef struct{
 | 
						|
  ///
 | 
						|
  /// The DHCPv6 transaction ID.
 | 
						|
  ///
 | 
						|
  UINT32                       MessageType:8;
 | 
						|
  ///
 | 
						|
  /// The DHCPv6 message type.
 | 
						|
  ///
 | 
						|
  UINT32                       TransactionId:24;
 | 
						|
} EFI_DHCP6_HEADER;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DHCP6_PACKET
 | 
						|
/// defines the format of the DHCPv6 packet. See RFC 3315 for more information.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Size of the EFI_DHCP6_PACKET buffer.
 | 
						|
  ///
 | 
						|
  UINT32                       Size;
 | 
						|
  ///
 | 
						|
  /// Length of the EFI_DHCP6_PACKET from the first byte of the Header field to the last
 | 
						|
  /// byte of the Option[] field.
 | 
						|
  ///
 | 
						|
  UINT32                       Length;
 | 
						|
  struct{
 | 
						|
    ///
 | 
						|
    /// The DHCPv6 packet header.
 | 
						|
    ///
 | 
						|
    EFI_DHCP6_HEADER           Header;
 | 
						|
    ///
 | 
						|
    /// Start of the DHCPv6 packed option data.
 | 
						|
    ///
 | 
						|
    UINT8                      Option[1];
 | 
						|
  } Dhcp6;
 | 
						|
} EFI_DHCP6_PACKET;
 | 
						|
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Length of DUID in octects.
 | 
						|
  ///
 | 
						|
  UINT16                       Length;
 | 
						|
  ///
 | 
						|
  /// Array of DUID octects.
 | 
						|
  ///
 | 
						|
  UINT8                        Duid[1];
 | 
						|
} EFI_DHCP6_DUID;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Initial retransmission timeout.
 | 
						|
  ///
 | 
						|
  UINT32                       Irt;
 | 
						|
  ///
 | 
						|
  /// Maximum retransmission count for one packet. If Mrc is zero, there's no upper limit
 | 
						|
  /// for retransmission count.
 | 
						|
  ///
 | 
						|
  UINT32                       Mrc;
 | 
						|
  ///
 | 
						|
  /// Maximum retransmission timeout for each retry. It's the upper bound of the number of
 | 
						|
  /// retransmission timeout. If Mrt is zero, there is no upper limit for retransmission
 | 
						|
  /// timeout.
 | 
						|
  ///
 | 
						|
  UINT32                       Mrt;
 | 
						|
  ///
 | 
						|
  /// Maximum retransmission duration for one packet. It's the upper bound of the numbers
 | 
						|
  /// the client may retransmit a message. If Mrd is zero, there's no upper limit for
 | 
						|
  /// retransmission duration.
 | 
						|
  ///
 | 
						|
  UINT32                       Mrd;
 | 
						|
} EFI_DHCP6_RETRANSMISSION;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// The IPv6 address.
 | 
						|
  ///
 | 
						|
  EFI_IPv6_ADDRESS             IpAddress;
 | 
						|
  ///
 | 
						|
  /// The preferred lifetime in unit of seconds for the IPv6 address.
 | 
						|
  ///
 | 
						|
  UINT32                       PreferredLifetime;
 | 
						|
  ///
 | 
						|
  /// The valid lifetime in unit of seconds for the IPv6 address.
 | 
						|
  ///
 | 
						|
  UINT32                       ValidLifetime;
 | 
						|
} EFI_DHCP6_IA_ADDRESS;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT16                       Type; ///< Type for an IA.
 | 
						|
  UINT32                       IaId; ///< The identifier for an IA.
 | 
						|
} EFI_DHCP6_IA_DESCRIPTOR;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// The descriptor for IA.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_IA_DESCRIPTOR      Descriptor;
 | 
						|
  ///
 | 
						|
  /// The state of the configured IA.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_STATE              State;
 | 
						|
  ///
 | 
						|
  /// Pointer to the cached latest Reply packet. May be NULL if no packet is cached.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_PACKET             *ReplyPacket;
 | 
						|
  ///
 | 
						|
  /// Number of IPv6 addresses of the configured IA.
 | 
						|
  ///
 | 
						|
  UINT32                       IaAddressCount;
 | 
						|
  ///
 | 
						|
  /// List of the IPv6 addresses of the configured IA. When the state of the configured IA is
 | 
						|
  /// in Dhcp6Bound, Dhcp6Renewing and Dhcp6Rebinding, the IPv6 addresses are usable.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_IA_ADDRESS         IaAddress[1];
 | 
						|
} EFI_DHCP6_IA;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Pointer to the DHCPv6 unique identifier. The caller is responsible for freeing this buffer.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_DUID               *ClientId;
 | 
						|
  ///
 | 
						|
  /// Pointer to the configured IA of current instance. The caller can free this buffer after
 | 
						|
  /// using it.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_IA                 *Ia;
 | 
						|
} EFI_DHCP6_MODE_DATA;
 | 
						|
 | 
						|
/**
 | 
						|
  EFI_DHCP6_CALLBACK is provided by the consumer of the EFI DHCPv6 Protocol instance to
 | 
						|
  intercept events that occurs in the DHCPv6 S.A.R.R process.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance that is used to configure this
 | 
						|
                                callback function.
 | 
						|
  @param[in]  Context           Pointer to the context that is initialized by EFI_DHCP6_PROTOCOL.Configure().
 | 
						|
  @param[in]  CurrentState      The current state of the configured IA.
 | 
						|
  @param[in]  Dhcp6Event        The event that occurs in the current state, which usually means a state transition.
 | 
						|
  @param[in]  Packet            Pointer to the DHCPv6 packet that is about to be sent or has been received.
 | 
						|
                                The EFI DHCPv6 Protocol instance is responsible for freeing the buffer.
 | 
						|
  @param[out] NewPacket         Pointer to the new DHCPv6 packet to overwrite the Packet. NewPacket can not
 | 
						|
                                share the buffer with Packet. If *NewPacket is not NULL, the EFI DHCPv6
 | 
						|
                                Protocol instance is responsible for freeing the buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Tell the EFI DHCPv6 Protocol instance to continue the DHCPv6 S.A.R.R process.
 | 
						|
  @retval EFI_ABORTED           Tell the EFI DHCPv6 Protocol instance to abort the DHCPv6 S.A.R.R process,
 | 
						|
                                and the state of the configured IA will be transferred to Dhcp6Init.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_CALLBACK)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN VOID                      *Context,
 | 
						|
  IN EFI_DHCP6_STATE           CurrentState,
 | 
						|
  IN EFI_DHCP6_EVENT           Dhcp6Event,
 | 
						|
  IN EFI_DHCP6_PACKET          *Packet,
 | 
						|
  OUT EFI_DHCP6_PACKET         **NewPacket OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// The callback function is to intercept various events that occur in the DHCPv6 S.A.R.R
 | 
						|
  /// process. Set to NULL to ignore all those events.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_CALLBACK           Dhcp6Callback;
 | 
						|
  ///
 | 
						|
  /// Pointer to the context that will be passed to Dhcp6Callback.
 | 
						|
  ///
 | 
						|
  VOID                         *CallbackContext;
 | 
						|
  ///
 | 
						|
  /// Number of the DHCPv6 options in the OptionList.
 | 
						|
  ///
 | 
						|
  UINT32                       OptionCount;
 | 
						|
  ///
 | 
						|
  /// List of the DHCPv6 options to be included in Solicit and Request packet. The buffer
 | 
						|
  /// can be freed after EFI_DHCP6_PROTOCOL.Configure() returns. Ignored if
 | 
						|
  /// OptionCount is zero. OptionList should not contain Client Identifier option
 | 
						|
  /// and any IA option, which will be appended by EFI DHCPv6 Protocol instance
 | 
						|
  /// automatically.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_PACKET_OPTION      **OptionList;
 | 
						|
  ///
 | 
						|
  /// The descriptor for the IA of the EFI DHCPv6 Protocol instance.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_IA_DESCRIPTOR      IaDescriptor;
 | 
						|
  ///
 | 
						|
  /// If not NULL, the event will be signaled when any IPv6 address information of the
 | 
						|
  /// configured IA is updated, including IPv6 address, preferred lifetime and valid
 | 
						|
  /// lifetime, or the DHCPv6 S.A.R.R process fails. Otherwise, Start(),
 | 
						|
  /// renewrebind(), decline(), release() and stop() will be blocking
 | 
						|
  /// operations, and they will wait for the exchange process completion or failure.
 | 
						|
  ///
 | 
						|
  EFI_EVENT                    IaInfoEvent;
 | 
						|
  ///
 | 
						|
  /// If TRUE, the EFI DHCPv6 Protocol instance is willing to accept Reconfigure packet.
 | 
						|
  /// Otherwise, it will ignore it. Reconfigure Accept option can not be specified through
 | 
						|
  /// OptionList parameter.
 | 
						|
  ///
 | 
						|
  BOOLEAN                      ReconfigureAccept;
 | 
						|
  ///
 | 
						|
  /// If TRUE, the EFI DHCPv6 Protocol instance will send Solicit packet with Rapid
 | 
						|
  /// Commit option. Otherwise, Rapid Commit option will not be included in Solicit
 | 
						|
  /// packet. Rapid Commit option can not be specified through OptionList parameter.
 | 
						|
  ///
 | 
						|
  BOOLEAN                      RapidCommit;
 | 
						|
  ///
 | 
						|
  /// Parameter to control Solicit packet retransmission behavior. The
 | 
						|
  /// buffer can be freed after EFI_DHCP6_PROTOCOL.Configure() returns.
 | 
						|
  ///
 | 
						|
  EFI_DHCP6_RETRANSMISSION     *SolicitRetransmission;
 | 
						|
} EFI_DHCP6_CONFIG_DATA;
 | 
						|
 | 
						|
/**
 | 
						|
  EFI_DHCP6_INFO_CALLBACK is provided by the consumer of the EFI DHCPv6 Protocol
 | 
						|
  instance to intercept events that occurs in the DHCPv6 Information Request exchange process.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance that is used to configure this
 | 
						|
                                callback function.
 | 
						|
  @param[in]  Context           Pointer to the context that is initialized in the EFI_DHCP6_PROTOCOL.InfoRequest().
 | 
						|
  @param[in]  Packet            Pointer to Reply packet that has been received. The EFI DHCPv6 Protocol instance is
 | 
						|
                                responsible for freeing the buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Tell the EFI DHCPv6 Protocol instance to finish Information Request exchange process.
 | 
						|
  @retval EFI_NOT_READY         Tell the EFI DHCPv6 Protocol instance to continue Information Request exchange process.
 | 
						|
  @retval EFI_ABORTED           Tell the EFI DHCPv6 Protocol instance to abort the Information Request exchange process.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_INFO_CALLBACK)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN VOID                      *Context,
 | 
						|
  IN EFI_DHCP6_PACKET          *Packet
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve the current operating mode data and configuration data for the EFI DHCPv6 Protocol instance.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
  @param[out] Dhcp6ModeData     Pointer to the DHCPv6 mode data structure. The caller is responsible for freeing this
 | 
						|
                                structure and each reference buffer.
 | 
						|
  @param[out] Dhcp6ConfigData   Pointer to the DHCPv6 configuration data structure. The caller is responsible for
 | 
						|
                                freeing this structure and each reference buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The mode data was returned.
 | 
						|
  @retval EFI_ACCESS_DENIED     The EFI DHCPv6 Protocol instance has not been configured when Dhcp6ConfigData is not NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:
 | 
						|
                                - This is NULL.
 | 
						|
                                - Both Dhcp6ConfigData and Dhcp6ModeData are NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_GET_MODE_DATA)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  OUT EFI_DHCP6_MODE_DATA      *Dhcp6ModeData OPTIONAL,
 | 
						|
  OUT EFI_DHCP6_CONFIG_DATA    *Dhcp6ConfigData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize or clean up the configuration data for the EFI DHCPv6 Protocol instance.
 | 
						|
 | 
						|
  The Configure() function is used to initialize or clean up the configuration data of the EFI
 | 
						|
  DHCPv6 Protocol instance.
 | 
						|
  - When Dhcp6CfgData is not NULL and Configure() is called successfully, the
 | 
						|
    configuration data will be initialized in the EFI DHCPv6 Protocol instance and the state of the
 | 
						|
    configured IA will be transferred into Dhcp6Init.
 | 
						|
  - When Dhcp6CfgData is NULL and Configure() is called successfully, the configuration
 | 
						|
    data will be cleaned up and no IA will be associated with the EFI DHCPv6 Protocol instance.
 | 
						|
 | 
						|
  To update the configuration data for an EFI DCHPv6 Protocol instance, the original data must be
 | 
						|
  cleaned up before setting the new configuration data.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
  @param[in]  Dhcp6CfgData      Pointer to the DHCPv6 configuration data structure.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The mode data was returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
 | 
						|
                                - This is NULL.
 | 
						|
                                - OptionCount > 0 and OptionList is NULL.
 | 
						|
                                - OptionList is not NULL, and Client Id option, Reconfigure Accept option,
 | 
						|
                                  Rapid Commit option or any IA option is specified in the OptionList.
 | 
						|
                                - IaDescriptor.Type is neither EFI_DHCP6_IA_TYPE_NA nor EFI_DHCP6_IA_TYPE_NA.
 | 
						|
                                - IaDescriptor is not unique.
 | 
						|
                                - Both IaInfoEvent and SolicitRetransimssion are NULL.
 | 
						|
                                - SolicitRetransmission is not NULL, and both SolicitRetransimssion->Mrc and
 | 
						|
                                  SolicitRetransmission->Mrd are zero.
 | 
						|
  @retval EFI_ACCESS_DENIED     The EFI DHCPv6 Protocol instance has been already configured
 | 
						|
                                when Dhcp6CfgData is not NULL.
 | 
						|
                                The EFI DHCPv6 Protocol instance has already started the
 | 
						|
                                DHCPv6 S.A.R.R when Dhcp6CfgData is NULL.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
 | 
						|
  @retval EFI_DEVICE_ERROR      An unexpected system or network error occurred.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_CONFIGURE)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN EFI_DHCP6_CONFIG_DATA     *Dhcp6CfgData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Start the DHCPv6 S.A.R.R process.
 | 
						|
 | 
						|
  The Start() function starts the DHCPv6 S.A.R.R process. This function can be called only when
 | 
						|
  the state of the configured IA is in the Dhcp6Init state. If the DHCPv6 S.A.R.R process completes
 | 
						|
  successfully, the state of the configured IA will be transferred through Dhcp6Selecting and
 | 
						|
  Dhcp6Requesting to Dhcp6Bound state. The update of the IPv6 addresses will be notified through
 | 
						|
  EFI_DHCP6_CONFIG_DATA.IaInfoEvent. At the time when each event occurs in this process, the
 | 
						|
  callback function set by EFI_DHCP6_PROTOCOL.Configure() will be called and the user can take
 | 
						|
  this opportunity to control the process. If EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL, the
 | 
						|
  Start() function call is a blocking operation. It will return after the DHCPv6 S.A.R.R process
 | 
						|
  completes or aborted by users. If the process is aborted by system or network error, the state of
 | 
						|
  the configured IA will be transferred to Dhcp6Init. The Start() function can be called again to
 | 
						|
  restart the process.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 S.A.R.R process is completed and at least one IPv6
 | 
						|
                                address has been bound to the configured IA when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
 | 
						|
                                The DHCPv6 S.A.R.R process is started when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
 | 
						|
  @retval EFI_ACCESS_DENIED     The EFI DHCPv6 Child instance hasn't been configured.
 | 
						|
  @retval EFI_INVALID_PARAMETER This is NULL.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
 | 
						|
  @retval EFI_ALREADY_STARTED   The DHCPv6 S.A.R.R process has already started.
 | 
						|
  @retval EFI_DEVICE_ERROR      An unexpected network or system error occurred.
 | 
						|
  @retval EFI_NO_RESPONSE       The DHCPv6 S.A.R.R process failed because of no response.
 | 
						|
  @retval EFI_NO_MAPPING        No IPv6 address has been bound to the configured IA after the
 | 
						|
                                DHCPv6 S.A.R.R process.
 | 
						|
  @retval EFI_ABORTED           The DHCPv6 S.A.R.R process aborted by user.
 | 
						|
  @retval EFI_NO_MEDIA          There was a media error.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_START)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Request configuration information without the assignment of any IA addresses of the client.
 | 
						|
 | 
						|
  The InfoRequest() function is used to request configuration information without the assignment
 | 
						|
  of any IPv6 address of the client. Client sends out Information Request packet to obtain
 | 
						|
  the required configuration information, and DHCPv6 server responds with Reply packet containing
 | 
						|
  the information for the client. The received Reply packet will be passed to the user by
 | 
						|
  ReplyCallback function. If user returns EFI_NOT_READY from ReplyCallback, the EFI DHCPv6
 | 
						|
  Protocol instance will continue to receive other Reply packets unless timeout according to
 | 
						|
  the Retransmission parameter. Otherwise, the Information Request exchange process will be
 | 
						|
  finished successfully if user returns EFI_SUCCESS from ReplyCallback.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
  @param[in]  SendClientId      If TRUE, the EFI DHCPv6 Protocol instance will build Client
 | 
						|
                                Identifier option and include it into Information Request
 | 
						|
                                packet. If FALSE, Client Identifier option will not be included.
 | 
						|
                                Client Identifier option can not be specified through OptionList
 | 
						|
                                parameter.
 | 
						|
  @param[in]  OptionRequest     Pointer to the Option Request option in the Information Request
 | 
						|
                                packet. Option Request option can not be specified through
 | 
						|
                                OptionList parameter.
 | 
						|
  @param[in]  OptionCount       Number of options in OptionList.
 | 
						|
  @param[in]  OptionList        List of other DHCPv6 options. These options will be appended
 | 
						|
                                to the Option Request option. The caller is responsible for
 | 
						|
                                freeing this buffer. Type is defined in EFI_DHCP6_PROTOCOL.GetModeData().
 | 
						|
  @param[in]  Retransmission    Parameter to control Information Request packet retransmission
 | 
						|
                                behavior. The buffer can be freed after EFI_DHCP6_PROTOCOL.InfoRequest()
 | 
						|
                                returns.
 | 
						|
  @param[in]  TimeoutEvent      If not NULL, this event is signaled when the information request
 | 
						|
                                exchange aborted because of no response. If NULL, the function
 | 
						|
                                call is a blocking operation; and it will return after the
 | 
						|
                                information-request exchange process finish or aborted by users.
 | 
						|
  @param[in]  ReplyCallback     The callback function is to intercept various events that occur
 | 
						|
                                in the Information Request exchange process. It should not be
 | 
						|
                                set to NULL.
 | 
						|
  @param[in]  CallbackContext   Pointer to the context that will be passed to ReplyCallback.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 S.A.R.R process is completed and at least one IPv6
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 information request exchange process completed
 | 
						|
                                when TimeoutEvent is NULL. Information Request packet has been
 | 
						|
                                sent to DHCPv6 server when TimeoutEvent is not NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE:
 | 
						|
                                - This is NULL.
 | 
						|
                                - OptionRequest is NULL or OptionRequest->OpCode is invalid.
 | 
						|
                                - OptionCount > 0 and OptionList is NULL.
 | 
						|
                                - OptionList is not NULL, and Client Identify option or
 | 
						|
                                  Option Request option is specified in the OptionList.
 | 
						|
                                - Retransimssion is NULL.
 | 
						|
                                - Both Retransimssion->Mrc and Retransmission->Mrd are zero.
 | 
						|
                                - ReplyCallback is NULL.
 | 
						|
  @retval EFI_DEVICE_ERROR      An unexpected network or system error occurred.
 | 
						|
  @retval EFI_NO_RESPONSE       The DHCPv6 information request exchange process failed
 | 
						|
                                because of no response, or not all requested-options are
 | 
						|
                                responded by DHCPv6 servers when Timeout happened.
 | 
						|
  @retval EFI_ABORTED           The DHCPv6 information request exchange process aborted by user.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_INFO_REQUEST)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN BOOLEAN                   SendClientId,
 | 
						|
  IN EFI_DHCP6_PACKET_OPTION   *OptionRequest,
 | 
						|
  IN UINT32                    OptionCount,
 | 
						|
  IN EFI_DHCP6_PACKET_OPTION   *OptionList[] OPTIONAL,
 | 
						|
  IN EFI_DHCP6_RETRANSMISSION  *Retransmission,
 | 
						|
  IN EFI_EVENT                 TimeoutEvent OPTIONAL,
 | 
						|
  IN EFI_DHCP6_INFO_CALLBACK   ReplyCallback,
 | 
						|
  IN VOID                      *CallbackContext OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Manually extend the valid and preferred lifetimes for the IPv6 addresses of the configured
 | 
						|
  IA and update other configuration parameters by sending Renew or Rebind packet.
 | 
						|
 | 
						|
  The RenewRebind() function is used to manually extend the valid and preferred lifetimes for the
 | 
						|
  IPv6 addresses of the configured IA and update other configuration parameters by sending Renew or
 | 
						|
  Rebind packet.
 | 
						|
  - When RebindRequest is FALSE and the state of the configured IA is Dhcp6Bound, it
 | 
						|
  will send Renew packet to the previously DHCPv6 server and transfer the state of the configured
 | 
						|
  IA to Dhcp6Renewing. If valid Reply packet received, the state transfers to Dhcp6Bound
 | 
						|
  and the valid and preferred timer restarts. If fails, the state transfers to Dhcp6Bound but the
 | 
						|
  timer continues.
 | 
						|
  - When RebindRequest is TRUE and the state of the configured IA is Dhcp6Bound, it will
 | 
						|
  send Rebind packet. If valid Reply packet received, the state transfers to Dhcp6Bound and the
 | 
						|
  valid and preferred timer restarts. If fails, the state transfers to Dhcp6Init and the IA can't
 | 
						|
  be used.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP4_PROTOCOL instance.
 | 
						|
  @param[in]  RebindRequest     If TRUE, it will send Rebind packet and enter the Dhcp6Rebinding state.
 | 
						|
                                Otherwise, it will send Renew packet and enter the Dhcp6Renewing state.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 renew/rebind exchange process has completed and at
 | 
						|
                                least one IPv6 address of the configured IA has been bound again
 | 
						|
                                when EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
 | 
						|
                                The EFI DHCPv6 Protocol instance has sent Renew or Rebind packet
 | 
						|
                                when EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
 | 
						|
  @retval EFI_ACCESS_DENIED     The EFI DHCPv6 Child instance hasn't been configured, or the state
 | 
						|
                                of the configured IA is not in Dhcp6Bound.
 | 
						|
  @retval EFI_ALREADY_STARTED   The state of the configured IA has already entered Dhcp6Renewing
 | 
						|
                                when RebindRequest is FALSE.
 | 
						|
                                The state of the configured IA has already entered Dhcp6Rebinding
 | 
						|
                                when RebindRequest is TRUE.
 | 
						|
  @retval EFI_INVALID_PARAMETER This is NULL.
 | 
						|
  @retval EFI_DEVICE_ERROR      An unexpected system or system error occurred.
 | 
						|
  @retval EFI_NO_RESPONSE       The DHCPv6 renew/rebind exchange process failed because of no response.
 | 
						|
  @retval EFI_NO_MAPPING        No IPv6 address has been bound to the configured IA after the DHCPv6
 | 
						|
                                renew/rebind exchange process.
 | 
						|
  @retval EFI_ABORTED           The DHCPv6 renew/rebind exchange process aborted by user.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_RENEW_REBIND)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN BOOLEAN                   RebindRequest
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Inform that one or more IPv6 addresses assigned by a server are already in use by
 | 
						|
  another node.
 | 
						|
 | 
						|
  The Decline() function is used to manually decline the assignment of IPv6 addresses, which
 | 
						|
  have been already used by another node. If all IPv6 addresses of the configured IA are declined
 | 
						|
  through this function, the state of the IA will switch through Dhcp6Declining to Dhcp6Init,
 | 
						|
  otherwise, the state of the IA will restore to Dhcp6Bound after the declining process. The
 | 
						|
  Decline() can only be called when the IA is in Dhcp6Bound state. If the
 | 
						|
  EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL, this function is a blocking operation. It
 | 
						|
  will return after the declining process finishes, or aborted by user.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP4_PROTOCOL instance.
 | 
						|
  @param[in]  AddressCount      Number of declining IPv6 addresses.
 | 
						|
  @param[in]  Addresses         Pointer to the buffer stored all the declining IPv6 addresses.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 decline exchange process has completed when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
 | 
						|
                                The EFI DHCPv6 Protocol instance has sent Decline packet when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
 | 
						|
                                - This is NULL.
 | 
						|
                                - AddressCount is zero or Addresses is NULL.
 | 
						|
  @retval EFI_NOT_FOUND         Any specified IPv6 address is not correlated with the configured IA
 | 
						|
                                for this instance.
 | 
						|
  @retval EFI_ACCESS_DENIED     The EFI DHCPv6 Child instance hasn't been configured, or the
 | 
						|
                                state of the configured IA is not in Dhcp6Bound.
 | 
						|
  @retval EFI_DEVICE_ERROR      An unexpected network or system error occurred.
 | 
						|
  @retval EFI_ABORTED           The DHCPv6 decline exchange process aborted by user.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_DECLINE)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN UINT32                    AddressCount,
 | 
						|
  IN EFI_IPv6_ADDRESS          *Addresses
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Release one or more IPv6 addresses associated with the configured IA for current instance.
 | 
						|
 | 
						|
  The Release() function is used to manually release the one or more IPv6 address. If AddressCount
 | 
						|
  is zero, it will release all IPv6 addresses of the configured IA. If all IPv6 addresses of the IA
 | 
						|
  are released through this function, the state of the IA will switch through Dhcp6Releasing to
 | 
						|
  Dhcp6Init, otherwise, the state of the IA will restore to Dhcp6Bound after the releasing process.
 | 
						|
  The Release() can only be called when the IA is in Dhcp6Bound state. If the
 | 
						|
  EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL, the function is a blocking operation. It will return
 | 
						|
  after the releasing process finishes, or aborted by user.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
  @param[in]  AddressCount      Number of releasing IPv6 addresses.
 | 
						|
  @param[in]  Addresses         Pointer to the buffer stored all the releasing IPv6 addresses.
 | 
						|
                                Ignored if AddressCount is zero.
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 release exchange process has completed when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
 | 
						|
                                The EFI DHCPv6 Protocol instance has sent Release packet when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
 | 
						|
                                - This is NULL.
 | 
						|
                                - AddressCount is not zero or Addresses is NULL.
 | 
						|
  @retval EFI_NOT_FOUND         Any specified IPv6 address is not correlated with the configured
 | 
						|
                                IA for this instance.
 | 
						|
  @retval EFI_ACCESS_DENIED     The EFI DHCPv6 Child instance hasn't been configured, or the
 | 
						|
                                state of the configured IA is not in Dhcp6Bound.
 | 
						|
  @retval EFI_DEVICE_ERROR      An unexpected network or system error occurred.
 | 
						|
  @retval EFI_ABORTED           The DHCPv6 release exchange process aborted by user.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_RELEASE)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN UINT32                    AddressCount,
 | 
						|
  IN EFI_IPv6_ADDRESS          *Addresses
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Stop the DHCPv6 S.A.R.R process.
 | 
						|
 | 
						|
  The Stop() function is used to stop the DHCPv6 S.A.R.R process. If this function is called
 | 
						|
  successfully, all the IPv6 addresses of the configured IA will be released and the state of
 | 
						|
  the configured IA will be transferred to Dhcp6Init.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The DHCPv6 S.A.R.R process has been stopped when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is NULL.
 | 
						|
                                The EFI DHCPv6 Protocol instance has sent Release packet if
 | 
						|
                                need release or has been stopped if needn't, when
 | 
						|
                                EFI_DHCP6_CONFIG_DATA.IaInfoEvent is not NULL.
 | 
						|
  @retval EFI_INVALID_PARAMETER This is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_STOP)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Parse the option data in the DHCPv6 packet.
 | 
						|
 | 
						|
  The Parse() function is used to retrieve the option list in the DHCPv6 packet.
 | 
						|
 | 
						|
  @param[in]  This              Pointer to the EFI_DHCP6_PROTOCOL instance.
 | 
						|
 | 
						|
  @param[in]  Packet            Pointer to packet to be parsed.
 | 
						|
  @param[in]  OptionCount       On input, the number of entries in the PacketOptionList.
 | 
						|
                                On output, the number of DHCPv6 options in the Packet.
 | 
						|
  @param[in]  PacketOptionList  List of pointers to the DHCPv6 options in the Packet.
 | 
						|
                                The OpCode and OpLen in EFI_DHCP6_PACKET_OPTION are
 | 
						|
                                both stored in network byte order.
 | 
						|
  @retval EFI_SUCCESS           The packet was successfully parsed.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more following conditions are TRUE
 | 
						|
                                - This is NULL.
 | 
						|
                                - Packet is NULL.
 | 
						|
                                - Packet is not a well-formed DHCPv6 packet.
 | 
						|
                                - OptionCount is NULL.
 | 
						|
                                - *OptionCount is not zero and PacketOptionList is NULL.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL  *OptionCount is smaller than the number of options that were
 | 
						|
                                found in the Packet.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DHCP6_PARSE)(
 | 
						|
  IN EFI_DHCP6_PROTOCOL        *This,
 | 
						|
  IN EFI_DHCP6_PACKET          *Packet,
 | 
						|
  IN OUT UINT32                *OptionCount,
 | 
						|
  OUT EFI_DHCP6_PACKET_OPTION  *PacketOptionList[] OPTIONAL
 | 
						|
);
 | 
						|
 | 
						|
///
 | 
						|
/// The EFI DHCPv6 Protocol is used to get IPv6 addresses and other configuration parameters
 | 
						|
/// from DHCPv6 servers.
 | 
						|
///
 | 
						|
struct _EFI_DHCP6_PROTOCOL {
 | 
						|
  EFI_DHCP6_GET_MODE_DATA      GetModeData;
 | 
						|
  EFI_DHCP6_CONFIGURE          Configure;
 | 
						|
  EFI_DHCP6_START              Start;
 | 
						|
  EFI_DHCP6_INFO_REQUEST       InfoRequest;
 | 
						|
  EFI_DHCP6_RENEW_REBIND       RenewRebind;
 | 
						|
  EFI_DHCP6_DECLINE            Decline;
 | 
						|
  EFI_DHCP6_RELEASE            Release;
 | 
						|
  EFI_DHCP6_STOP               Stop;
 | 
						|
  EFI_DHCP6_PARSE              Parse;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiDhcp6ProtocolGuid;
 | 
						|
extern EFI_GUID gEfiDhcp6ServiceBindingProtocolGuid;
 | 
						|
 | 
						|
#endif
 |