mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-30 23:50:23 +00:00 
			
		
		
		
	 9344f09215
			
		
	
	
		9344f09215
		
	
	
	
	
		
			
			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>
		
			
				
	
	
		
			369 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			369 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   This file provides a definition of the EFI IPv6 Configuration
 | |
|   Protocol.
 | |
| 
 | |
| Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| #ifndef __EFI_IP6CONFIG_PROTOCOL_H__
 | |
| #define __EFI_IP6CONFIG_PROTOCOL_H__
 | |
| 
 | |
| #include <Protocol/Ip6.h>
 | |
| 
 | |
| #define EFI_IP6_CONFIG_PROTOCOL_GUID \
 | |
|   { \
 | |
|     0x937fe521, 0x95ae, 0x4d1a, {0x89, 0x29, 0x48, 0xbc, 0xd9, 0x0a, 0xd3, 0x1a } \
 | |
|   }
 | |
| 
 | |
| typedef struct _EFI_IP6_CONFIG_PROTOCOL EFI_IP6_CONFIG_PROTOCOL;
 | |
| 
 | |
| ///
 | |
| /// EFI_IP6_CONFIG_DATA_TYPE
 | |
| ///
 | |
| typedef enum {
 | |
|   ///
 | |
|   /// The interface information of the communication
 | |
|   /// device this EFI IPv6 Configuration Protocol instance manages.
 | |
|   /// This type of data is read only.The corresponding Data is of type
 | |
|   /// EFI_IP6_CONFIG_INTERFACE_INFO.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeInterfaceInfo,
 | |
|   ///
 | |
|   /// The alternative interface ID for the
 | |
|   /// communication device this EFI IPv6 Configuration Protocol
 | |
|   /// instance manages if the link local IPv6 address generated from
 | |
|   /// the interfaced ID based on the default source the EFI IPv6
 | |
|   /// Protocol uses is a duplicate address. The length of the interface
 | |
|   /// ID is 64 bit. The corresponding Data is of type
 | |
|   /// EFI_IP6_CONFIG_INTERFACE_ID.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeAltInterfaceId,
 | |
|   ///
 | |
|   /// The general configuration policy for the EFI IPv6 network
 | |
|   /// stack running on the communication device this EFI IPv6
 | |
|   /// Configuration Protocol instance manages. The policy will affect
 | |
|   /// other configuration settings. The corresponding Data is of type
 | |
|   /// EFI_IP6_CONFIG_POLICY.
 | |
|   ///
 | |
|   Ip6ConfigDataTypePolicy,
 | |
|   ///
 | |
|   /// The number of consecutive
 | |
|   /// Neighbor Solicitation messages sent while performing Duplicate
 | |
|   /// Address Detection on a tentative address. A value of zero
 | |
|   /// indicates that Duplicate Address Detection will not be performed
 | |
|   /// on tentative addresses. The corresponding Data is of type
 | |
|   /// EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeDupAddrDetectTransmits,
 | |
|   ///
 | |
|   /// The station addresses set manually for the EFI
 | |
|   /// IPv6 network stack. It is only configurable when the policy is
 | |
|   /// Ip6ConfigPolicyManual. The corresponding Data is a
 | |
|   /// pointer to an array of EFI_IPv6_ADDRESS instances. When
 | |
|   /// DataSize is 0 and Data is NULL, the existing configuration
 | |
|   /// is cleared from the EFI IPv6 Configuration Protocol instance.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeManualAddress,
 | |
|   ///
 | |
|   /// The gateway addresses set manually for the EFI IPv6
 | |
|   /// network stack running on the communication device this EFI
 | |
|   /// IPv6 Configuration Protocol manages. It is not configurable when
 | |
|   /// the policy is Ip6ConfigPolicyAutomatic. The gateway
 | |
|   /// addresses must be unicast IPv6 addresses. The corresponding
 | |
|   /// Data is a pointer to an array of EFI_IPv6_ADDRESS instances.
 | |
|   /// When DataSize is 0 and Data is NULL, the existing configuration
 | |
|   /// is cleared from the EFI IPv6 Configuration Protocol instance.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeGateway,
 | |
|   ///
 | |
|   /// The DNS server list for the EFI IPv6 network stack
 | |
|   /// running on the communication device this EFI IPv6
 | |
|   /// Configuration Protocol manages. It is not configurable when the
 | |
|   /// policy is Ip6ConfigPolicyAutomatic.The DNS server
 | |
|   /// addresses must be unicast IPv6 addresses. The corresponding
 | |
|   /// Data is a pointer to an array of EFI_IPv6_ADDRESS instances.
 | |
|   /// When DataSize is 0 and Data is NULL, the existing configuration
 | |
|   /// is cleared from the EFI IPv6 Configuration Protocol instance.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeDnsServer,
 | |
|   ///
 | |
|   /// The number of this enumeration memebers.
 | |
|   ///
 | |
|   Ip6ConfigDataTypeMaximum
 | |
| } EFI_IP6_CONFIG_DATA_TYPE;
 | |
| 
 | |
| ///
 | |
| /// EFI_IP6_CONFIG_INTERFACE_INFO
 | |
| /// describes the operational state of the interface this
 | |
| /// EFI IPv6 Configuration Protocol instance manages.
 | |
| ///
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// The name of the interface. It is a NULL-terminated string.
 | |
|   ///
 | |
|   CHAR16                Name[32];
 | |
|   ///
 | |
|   /// The interface type of the network interface.
 | |
|   ///
 | |
|   UINT8                 IfType;
 | |
|   ///
 | |
|   /// The size, in bytes, of the network interface's hardware address.
 | |
|   ///
 | |
|   UINT32                HwAddressSize;
 | |
|   ///
 | |
|   /// The hardware address for the network interface.
 | |
|   ///
 | |
|   EFI_MAC_ADDRESS       HwAddress;
 | |
|   ///
 | |
|   /// Number of EFI_IP6_ADDRESS_INFO structures pointed to by AddressInfo.
 | |
|   ///
 | |
|   UINT32                AddressInfoCount;
 | |
|   ///
 | |
|   /// Pointer to an array of EFI_IP6_ADDRESS_INFO instances
 | |
|   /// which contain the local IPv6 addresses and the corresponding
 | |
|   /// prefix length information. Set to NULL if AddressInfoCount
 | |
|   /// is zero.
 | |
|   ///
 | |
|   EFI_IP6_ADDRESS_INFO  *AddressInfo;
 | |
|   ///
 | |
|   /// Number of route table entries in the following RouteTable.
 | |
|   ///
 | |
|   UINT32                RouteCount;
 | |
|   ///
 | |
|   /// The route table of the IPv6 network stack runs on this interface.
 | |
|   /// Set to NULL if RouteCount is zero.
 | |
|   ///
 | |
|   EFI_IP6_ROUTE_TABLE   *RouteTable;
 | |
| } EFI_IP6_CONFIG_INTERFACE_INFO;
 | |
| 
 | |
| ///
 | |
| /// EFI_IP6_CONFIG_INTERFACE_ID
 | |
| /// describes the 64-bit interface ID.
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT8                 Id[8];
 | |
| } EFI_IP6_CONFIG_INTERFACE_ID;
 | |
| 
 | |
| ///
 | |
| /// EFI_IP6_CONFIG_POLICY
 | |
| /// defines the general configuration policy the EFI IPv6
 | |
| /// Configuration Protocol supports.
 | |
| ///
 | |
| typedef enum {
 | |
|   ///
 | |
|   /// Under this policy, the IpI6ConfigDataTypeManualAddress,
 | |
|   /// Ip6ConfigDataTypeGateway and Ip6ConfigDataTypeDnsServer
 | |
|   /// configuration data are required to be set manually.
 | |
|   /// The EFI IPv6 Protocol will get all required configuration
 | |
|   /// such as address, prefix and gateway settings from the EFI
 | |
|   /// IPv6 Configuration protocol.
 | |
|   ///
 | |
|   Ip6ConfigPolicyManual,
 | |
|   ///
 | |
|   /// Under this policy, the IpI6ConfigDataTypeManualAddress,
 | |
|   /// Ip6ConfigDataTypeGateway and Ip6ConfigDataTypeDnsServer
 | |
|   /// configuration data are not allowed to set via SetData().
 | |
|   /// All of these configurations are retrieved from some auto
 | |
|   /// configuration mechanism.
 | |
|   /// The EFI IPv6 Protocol will use the IPv6 stateless address
 | |
|   /// autoconfiguration mechanism and/or the IPv6 stateful address
 | |
|   /// autoconfiguration mechanism described in the related RFCs to
 | |
|   /// get address and other configuration information
 | |
|   ///
 | |
|   Ip6ConfigPolicyAutomatic
 | |
| } EFI_IP6_CONFIG_POLICY;
 | |
| 
 | |
| ///
 | |
| /// EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS
 | |
| /// describes the number of consecutive Neighbor Solicitation messages sent
 | |
| /// while performing Duplicate Address Detection on a tentative address.
 | |
| /// The default value for a newly detected communication device is 1.
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT32    DupAddrDetectTransmits;  ///< The number of consecutive Neighbor Solicitation messages sent.
 | |
| } EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS;
 | |
| 
 | |
| ///
 | |
| /// EFI_IP6_CONFIG_MANUAL_ADDRESS
 | |
| /// is used to set the station address information for the EFI IPv6 network
 | |
| /// stack manually when the policy is Ip6ConfigPolicyManual.
 | |
| ///
 | |
| typedef struct {
 | |
|   EFI_IPv6_ADDRESS      Address;       ///< The IPv6 unicast address.
 | |
|   BOOLEAN               IsAnycast;     ///< Set to TRUE if Address is anycast.
 | |
|   UINT8                 PrefixLength;  ///< The length, in bits, of the prefix associated with this Address.
 | |
| } EFI_IP6_CONFIG_MANUAL_ADDRESS;
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Set the configuration for the EFI IPv6 network stack running on the communication
 | |
|   device this EFI IPv6 Configuration Protocol instance manages.
 | |
| 
 | |
|   This function is used to set the configuration data of type DataType for the EFI
 | |
|   IPv6 network stack running on the communication device this EFI IPv6 Configuration
 | |
|   Protocol instance manages.
 | |
| 
 | |
|   The DataSize is used to calculate the count of structure instances in the Data for
 | |
|   some DataType that multiple structure instances are allowed.
 | |
| 
 | |
|   This function is always non-blocking. When setting some type of configuration data,
 | |
|   an asynchronous process is invoked to check the correctness of the data, such as
 | |
|   doing Duplicate Address Detection on the manually set local IPv6 addresses.
 | |
|   EFI_NOT_READY is returned immediately to indicate that such an asynchronous process
 | |
|   is invoked and the process is not finished yet. The caller willing to get the result
 | |
|   of the asynchronous process is required to call RegisterDataNotify() to register an
 | |
|   event on the specified configuration data. Once the event is signaled, the caller
 | |
|   can call GetData() to get back the configuration data in order to know the result.
 | |
|   For other types of configuration data that do not require an asynchronous configuration
 | |
|   process, the result of the operation is immediately returned.
 | |
| 
 | |
|   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
 | |
|   @param[in]     DataType       The type of data to set.
 | |
|   @param[in]     DataSize       Size of the buffer pointed to by Data in bytes.
 | |
|   @param[in]     Data           The data buffer to set. The type of the data buffer is
 | |
|                                 associated with the DataType.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The specified configuration data for the EFI IPv6
 | |
|                                 network stack is set successfully.
 | |
|   @retval EFI_INVALID_PARAMETER One or more of the following are TRUE:
 | |
|                                 - This is NULL.
 | |
|                                 - One or more fields in Data and DataSize do not match the
 | |
|                                   requirement of the data type indicated by DataType.
 | |
|   @retval EFI_WRITE_PROTECTED   The specified configuration data is read-only or the specified
 | |
|                                 configuration data can not be set under the current policy
 | |
|   @retval EFI_ACCESS_DENIED     Another set operation on the specified configuration
 | |
|                                 data is already in process.
 | |
|   @retval EFI_NOT_READY         An asynchronous process is invoked to set the specified
 | |
|                                 configuration data and the process is not finished yet.
 | |
|   @retval EFI_BAD_BUFFER_SIZE   The DataSize does not match the size of the type
 | |
|                                 indicated by DataType.
 | |
|   @retval EFI_UNSUPPORTED       This DataType is not supported.
 | |
|   @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
 | |
|   @retval EFI_DEVICE_ERROR      An unexpected system error or network error occurred.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_IP6_CONFIG_SET_DATA)(
 | |
|   IN EFI_IP6_CONFIG_PROTOCOL    *This,
 | |
|   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
 | |
|   IN UINTN                      DataSize,
 | |
|   IN VOID                       *Data
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get the configuration data for the EFI IPv6 network stack running on the communication
 | |
|   device this EFI IPv6 Configuration Protocol instance manages.
 | |
| 
 | |
|   This function returns the configuration data of type DataType for the EFI IPv6 network
 | |
|   stack running on the communication device this EFI IPv6 Configuration Protocol instance
 | |
|   manages.
 | |
| 
 | |
|   The caller is responsible for allocating the buffer used to return the specified
 | |
|   configuration data and the required size will be returned to the caller if the size of
 | |
|   the buffer is too small.
 | |
| 
 | |
|   EFI_NOT_READY is returned if the specified configuration data is not ready due to an
 | |
|   already in progress asynchronous configuration process. The caller can call RegisterDataNotify()
 | |
|   to register an event on the specified configuration data. Once the asynchronous configuration
 | |
|   process is finished, the event will be signaled and a subsequent GetData() call will return
 | |
|   the specified configuration data.
 | |
| 
 | |
|   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
 | |
|   @param[in]     DataType       The type of data to get.
 | |
|   @param[in,out] DataSize       On input, in bytes, the size of Data. On output, in bytes, the
 | |
|                                 size of buffer required to store the specified configuration data.
 | |
|   @param[in]     Data           The data buffer in which the configuration data is returned. The
 | |
|                                 type of the data buffer is associated with the DataType.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The specified configuration data is got successfully.
 | |
|   @retval EFI_INVALID_PARAMETER One or more of the followings are TRUE:
 | |
|                                 - This is NULL.
 | |
|                                 - DataSize is NULL.
 | |
|                                 - Data is NULL if *DataSize is not zero.
 | |
|   @retval EFI_BUFFER_TOO_SMALL  The size of Data is too small for the specified configuration data
 | |
|                                 and the required size is returned in DataSize.
 | |
|   @retval EFI_NOT_READY         The specified configuration data is not ready due to an already in
 | |
|                                 progress asynchronous configuration process.
 | |
|   @retval EFI_NOT_FOUND         The specified configuration data is not found.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_IP6_CONFIG_GET_DATA)(
 | |
|   IN EFI_IP6_CONFIG_PROTOCOL    *This,
 | |
|   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
 | |
|   IN OUT UINTN                  *DataSize,
 | |
|   IN VOID                       *Data   OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Register an event that is to be signaled whenever a configuration process on the specified
 | |
|   configuration data is done.
 | |
| 
 | |
|   This function registers an event that is to be signaled whenever a configuration process
 | |
|   on the specified configuration data is done. An event can be registered for different DataType
 | |
|   simultaneously and the caller is responsible for determining which type of configuration data
 | |
|   causes the signaling of the event in such case.
 | |
| 
 | |
|   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
 | |
|   @param[in]     DataType       The type of data to unregister the event for.
 | |
|   @param[in]     Event          The event to register.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The notification event for the specified configuration data is
 | |
|                                 registered.
 | |
|   @retval EFI_INVALID_PARAMETER This is NULL or Event is NULL.
 | |
|   @retval EFI_UNSUPPORTED       The configuration data type specified by DataType is not
 | |
|                                 supported.
 | |
|   @retval EFI_OUT_OF_RESOURCES  Required system resources could not be allocated.
 | |
|   @retval EFI_ACCESS_DENIED     The Event is already registered for the DataType.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_IP6_CONFIG_REGISTER_NOTIFY)(
 | |
|   IN EFI_IP6_CONFIG_PROTOCOL    *This,
 | |
|   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
 | |
|   IN EFI_EVENT                  Event
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Remove a previously registered event for the specified configuration data.
 | |
| 
 | |
|   This function removes a previously registered event for the specified configuration data.
 | |
| 
 | |
|   @param[in]     This           Pointer to the EFI_IP6_CONFIG_PROTOCOL instance.
 | |
|   @param[in]     DataType       The type of data to remove the previously registered event for.
 | |
|   @param[in]     Event          The event to unregister.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The event registered for the specified configuration data is removed.
 | |
|   @retval EFI_INVALID_PARAMETER This is NULL or Event is NULL.
 | |
|   @retval EFI_NOT_FOUND         The Event has not been registered for the specified
 | |
|                                 DataType.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_IP6_CONFIG_UNREGISTER_NOTIFY)(
 | |
|   IN EFI_IP6_CONFIG_PROTOCOL    *This,
 | |
|   IN EFI_IP6_CONFIG_DATA_TYPE   DataType,
 | |
|   IN EFI_EVENT                  Event
 | |
|   );
 | |
| 
 | |
| ///
 | |
| /// The EFI_IP6_CONFIG_PROTOCOL provides the mechanism to set and get various
 | |
| /// types of configurations for the EFI IPv6 network stack.
 | |
| ///
 | |
| struct _EFI_IP6_CONFIG_PROTOCOL {
 | |
|   EFI_IP6_CONFIG_SET_DATA           SetData;
 | |
|   EFI_IP6_CONFIG_GET_DATA           GetData;
 | |
|   EFI_IP6_CONFIG_REGISTER_NOTIFY    RegisterDataNotify;
 | |
|   EFI_IP6_CONFIG_UNREGISTER_NOTIFY  UnregisterDataNotify;
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEfiIp6ConfigProtocolGuid;
 | |
| 
 | |
| #endif
 | |
| 
 |