mirror of https://github.com/ipxe/ipxe.git
[efi] Add Ip4Config2 header and GUID definition
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/968/head
parent
92ab2de3a4
commit
e7adf5701f
|
@ -0,0 +1,318 @@
|
|||
/** @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__
|
||||
|
||||
FILE_LICENCE ( BSD2_PATENT );
|
||||
|
||||
#include <ipxe/efi/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
|
|
@ -193,6 +193,7 @@ extern EFI_GUID efi_hii_config_access_protocol_guid;
|
|||
extern EFI_GUID efi_hii_font_protocol_guid;
|
||||
extern EFI_GUID efi_ip4_protocol_guid;
|
||||
extern EFI_GUID efi_ip4_config_protocol_guid;
|
||||
extern EFI_GUID efi_ip4_config2_protocol_guid;
|
||||
extern EFI_GUID efi_ip4_service_binding_protocol_guid;
|
||||
extern EFI_GUID efi_ip6_protocol_guid;
|
||||
extern EFI_GUID efi_ip6_config_protocol_guid;
|
||||
|
|
|
@ -115,6 +115,8 @@ static struct efi_well_known_guid efi_well_known_guids[] = {
|
|||
"Ip4" },
|
||||
{ &efi_ip4_config_protocol_guid,
|
||||
"Ip4Config" },
|
||||
{ &efi_ip4_config2_protocol_guid,
|
||||
"Ip4Config2" },
|
||||
{ &efi_ip4_service_binding_protocol_guid,
|
||||
"Ip4Sb" },
|
||||
{ &efi_ip6_protocol_guid,
|
||||
|
|
|
@ -45,6 +45,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||
#include <ipxe/efi/Protocol/HiiFont.h>
|
||||
#include <ipxe/efi/Protocol/Ip4.h>
|
||||
#include <ipxe/efi/Protocol/Ip4Config.h>
|
||||
#include <ipxe/efi/Protocol/Ip4Config2.h>
|
||||
#include <ipxe/efi/Protocol/Ip6.h>
|
||||
#include <ipxe/efi/Protocol/Ip6Config.h>
|
||||
#include <ipxe/efi/Protocol/LoadFile.h>
|
||||
|
@ -182,6 +183,10 @@ EFI_GUID efi_ip4_protocol_guid
|
|||
EFI_GUID efi_ip4_config_protocol_guid
|
||||
= EFI_IP4_CONFIG_PROTOCOL_GUID;
|
||||
|
||||
/** IPv4 configuration 2 protocol GUID */
|
||||
EFI_GUID efi_ip4_config2_protocol_guid
|
||||
= EFI_IP4_CONFIG2_PROTOCOL_GUID;
|
||||
|
||||
/** IPv4 service binding protocol GUID */
|
||||
EFI_GUID efi_ip4_service_binding_protocol_guid
|
||||
= EFI_IP4_SERVICE_BINDING_PROTOCOL_GUID;
|
||||
|
|
Loading…
Reference in New Issue