| /** @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 |
| |