mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-26 12:05:36 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
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
|
|
|