| /** @file |
| This file provides a definition of the EFI IPv4 Configuration II |
| Protocol. |
| |
| Copyright (c) 2015 - 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.5 |
| |
| **/ |
| |
| #ifndef __EFI_IP4CONFIG2_PROTOCOL_H__ |
| #define __EFI_IP4CONFIG2_PROTOCOL_H__ |
| |
| #include <Protocol/Ip4.h> |
| |
| #define EFI_IP4_CONFIG2_PROTOCOL_GUID \ |
| { \ |
| 0x5b446ed1, 0xe30b, 0x4faa, {0x87, 0x1a, 0x36, 0x54, 0xec, 0xa3, 0x60, 0x80 } \ |
| } |
| |
| typedef struct _EFI_IP4_CONFIG2_PROTOCOL EFI_IP4_CONFIG2_PROTOCOL; |
| |
| /// |
| /// EFI_IP4_CONFIG2_DATA_TYPE |
| /// |
| typedef enum { |
| /// |
| /// The interface information of the communication device this EFI |
| /// IPv4 Configuration II Protocol instance manages. This type of |
| /// data is read only. The corresponding Data is of type |
| /// EFI_IP4_CONFIG2_INTERFACE_INFO. |
| /// |
| Ip4Config2DataTypeInterfaceInfo, |
| /// |
| /// The general configuration policy for the EFI IPv4 network stack |
| /// running on the communication device this EFI IPv4 |
| /// Configuration II Protocol instance manages. The policy will |
| /// affect other configuration settings. The corresponding Data is of |
| /// type EFI_IP4_CONFIG2_POLICY. |
| /// |
| Ip4Config2DataTypePolicy, |
| /// |
| /// The station addresses set manually for the EFI IPv4 network |
| /// stack. It is only configurable when the policy is |
| /// Ip4Config2PolicyStatic. The corresponding Data is of |
| /// type EFI_IP4_CONFIG2_MANUAL_ADDRESS. When DataSize |
| /// is 0 and Data is NULL, the existing configuration is cleared |
| /// from the EFI IPv4 Configuration II Protocol instance. |
| /// |
| Ip4Config2DataTypeManualAddress, |
| /// |
| /// The gateway addresses set manually for the EFI IPv4 network |
| /// stack running on the communication device this EFI IPv4 |
| /// Configuration II Protocol manages. It is not configurable when |
| /// the policy is Ip4Config2PolicyDhcp. The gateway |
| /// addresses must be unicast IPv4 addresses. The corresponding |
| /// Data is a pointer to an array of EFI_IPv4_ADDRESS instances. |
| /// When DataSize is 0 and Data is NULL, the existing configuration |
| /// is cleared from the EFI IPv4 Configuration II Protocol instance. |
| /// |
| Ip4Config2DataTypeGateway, |
| /// |
| /// The DNS server list for the EFI IPv4 network stack running on |
| /// the communication device this EFI IPv4 Configuration II |
| /// Protocol manages. It is not configurable when the policy is |
| /// Ip4Config2PolicyDhcp. The DNS server addresses must be |
| /// unicast IPv4 addresses. The corresponding Data is a pointer to |
| /// an array of EFI_IPv4_ADDRESS instances. When DataSize |
| /// is 0 and Data is NULL, the existing configuration is cleared |
| /// from the EFI IPv4 Configuration II Protocol instance. |
| /// |
| Ip4Config2DataTypeDnsServer, |
| Ip4Config2DataTypeMaximum |
| } EFI_IP4_CONFIG2_DATA_TYPE; |
| |
| /// |
| /// EFI_IP4_CONFIG2_INTERFACE_INFO related definitions |
| /// |
| #define EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE 32 |
| |
| /// |
| /// EFI_IP4_CONFIG2_INTERFACE_INFO |
| /// |
| typedef struct { |
| /// |
| /// The name of the interface. It is a NULL-terminated Unicode string. |
| /// |
| CHAR16 Name[EFI_IP4_CONFIG2_INTERFACE_INFO_NAME_SIZE]; |
| /// |
| /// The interface type of the network interface. See RFC 1700, |
| /// section "Number Hardware Type". |
| /// |
| 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; |
| /// |
| /// The station IPv4 address of this EFI IPv4 network stack. |
| /// |
| EFI_IPv4_ADDRESS StationAddress; |
| /// |
| /// The subnet address mask that is associated with the station address. |
| /// |
| EFI_IPv4_ADDRESS SubnetMask; |
| /// |
| /// Size of the following RouteTable, in bytes. May be zero. |
| /// |
| UINT32 RouteTableSize; |
| /// |
| /// The route table of the IPv4 network stack runs on this interface. |
| /// Set to NULL if RouteTableSize is zero. Type EFI_IP4_ROUTE_TABLE is defined in |
| /// EFI_IP4_PROTOCOL.GetModeData(). |
| /// |
| EFI_IP4_ROUTE_TABLE *RouteTable OPTIONAL; |
| } EFI_IP4_CONFIG2_INTERFACE_INFO; |
| |
| /// |
| /// EFI_IP4_CONFIG2_POLICY |
| /// |
| typedef enum { |
| /// |
| /// Under this policy, the Ip4Config2DataTypeManualAddress, |
| /// Ip4Config2DataTypeGateway and Ip4Config2DataTypeDnsServer configuration |
| /// data are required to be set manually. The EFI IPv4 Protocol will get all |
| /// required configuration such as IPv4 address, subnet mask and |
| /// gateway settings from the EFI IPv4 Configuration II protocol. |
| /// |
| Ip4Config2PolicyStatic, |
| /// |
| /// Under this policy, the Ip4Config2DataTypeManualAddress, |
| /// Ip4Config2DataTypeGateway and Ip4Config2DataTypeDnsServer configuration data are |
| /// not allowed to set via SetData(). All of these configurations are retrieved from DHCP |
| /// server or other auto-configuration mechanism. |
| /// |
| Ip4Config2PolicyDhcp, |
| Ip4Config2PolicyMax |
| } EFI_IP4_CONFIG2_POLICY; |
| |
| /// |
| /// EFI_IP4_CONFIG2_MANUAL_ADDRESS |
| /// |
| typedef struct { |
| /// |
| /// The IPv4 unicast address. |
| /// |
| EFI_IPv4_ADDRESS Address; |
| /// |
| /// The subnet mask. |
| /// |
| EFI_IPv4_ADDRESS SubnetMask; |
| } EFI_IP4_CONFIG2_MANUAL_ADDRESS; |
| |
| /** |
| Set the configuration for the EFI IPv4 network stack running on the communication device this EFI |
| IPv4 Configuration II Protocol instance manages. |
| |
| This function is used to set the configuration data of type DataType for the EFI IPv4 network stack |
| running on the communication device this EFI IPv4 Configuration II Protocol instance manages. |
| The successfully configured data is valid after system reset or power-off. |
| 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 typeof configuration data, an |
| asynchronous process is invoked to check the correctness of the data, such as doing address conflict |
| detection on the manually set local IPv4 address. 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_IP4_CONFIG2_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 ofthe data buffer is associated |
| with the DataType. |
| |
| @retval EFI_SUCCESS The specified configuration data for the EFI IPv4 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_IP4_CONFIG2_SET_DATA)( |
| IN EFI_IP4_CONFIG2_PROTOCOL *This, |
| IN EFI_IP4_CONFIG2_DATA_TYPE DataType, |
| IN UINTN DataSize, |
| IN VOID *Data |
| ); |
| |
| /** |
| Get the configuration data for the EFI IPv4 network stack running on the communication device this |
| EFI IPv4 Configuration II Protocol instance manages. |
| |
| This function returns the configuration data of type DataType for the EFI IPv4 network stack |
| running on the communication device this EFI IPv4 Configuration II Protocol instance manages. |
| The caller is responsible for allocating the buffer usedto 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_IP4_CONFIG2_PROTOCOL instance. |
| @param[in] DataType The type of data to get. |
| @param[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. Ignored |
| if DataSize is 0. |
| |
| @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 *DataSizeis 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_IP4_CONFIG2_GET_DATA)( |
| IN EFI_IP4_CONFIG2_PROTOCOL *This, |
| IN EFI_IP4_CONFIG2_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_IP4_CONFIG2_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_IP4_CONFIG2_REGISTER_NOTIFY)( |
| IN EFI_IP4_CONFIG2_PROTOCOL *This, |
| IN EFI_IP4_CONFIG2_DATA_TYPE DataType, |
| IN EFI_EVENT Event |
| ); |
| |
| /** |
| Remove a previously registered event for the specified configuration data. |
| |
| This function removes a previously registeredevent for the specified configuration data. |
| |
| @param[in] This Pointer to the EFI_IP4_CONFIG2_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 Eventhas not been registered for the specified DataType. |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_IP4_CONFIG2_UNREGISTER_NOTIFY)( |
| IN EFI_IP4_CONFIG2_PROTOCOL *This, |
| IN EFI_IP4_CONFIG2_DATA_TYPE DataType, |
| IN EFI_EVENT Event |
| ); |
| |
| /// |
| /// The EFI_IP4_CONFIG2_PROTOCOL is designed to be the central repository for the common |
| /// configurations and the administrator configurable settings for the EFI IPv4 network stack. |
| /// An EFI IPv4 Configuration II Protocol instance will be installed on each communication device that |
| /// the EFI IPv4 network stack runs on. |
| /// |
| struct _EFI_IP4_CONFIG2_PROTOCOL { |
| EFI_IP4_CONFIG2_SET_DATA SetData; |
| EFI_IP4_CONFIG2_GET_DATA GetData; |
| EFI_IP4_CONFIG2_REGISTER_NOTIFY RegisterDataNotify; |
| EFI_IP4_CONFIG2_UNREGISTER_NOTIFY UnregisterDataNotify; |
| }; |
| |
| extern EFI_GUID gEfiIp4Config2ProtocolGuid; |
| |
| #endif |