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>
		
			
				
	
	
		
			538 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			538 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  This file defines the EFI Domain Name Service Binding Protocol interface. It is split
 | 
						|
  into the following two main sections:
 | 
						|
  DNSv4 Service Binding Protocol (DNSv4SB)
 | 
						|
  DNSv4 Protocol (DNSv4)
 | 
						|
 | 
						|
  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_DNS4_PROTOCOL_H__
 | 
						|
#define __EFI_DNS4_PROTOCOL_H__
 | 
						|
 | 
						|
#define EFI_DNS4_SERVICE_BINDING_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0xb625b186, 0xe063, 0x44f7, {0x89, 0x5, 0x6a, 0x74, 0xdc, 0x6f, 0x52, 0xb4 } \
 | 
						|
  }
 | 
						|
 | 
						|
#define EFI_DNS4_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0xae3d28cc, 0xe05b, 0x4fa1, {0xa0, 0x11, 0x7e, 0xb5, 0x5a, 0x3f, 0x14, 0x1 } \
 | 
						|
  }
 | 
						|
 | 
						|
typedef struct _EFI_DNS4_PROTOCOL EFI_DNS4_PROTOCOL;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DNS4_CONFIG_DATA
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Count of the DNS servers. When used with GetModeData(),
 | 
						|
  /// this field is the count of originally configured servers when
 | 
						|
  /// Configure() was called for this instance. When used with
 | 
						|
  /// Configure() this is the count of caller-supplied servers. If the
 | 
						|
  /// DnsServerListCount is zero, the DNS server configuration
 | 
						|
  /// will be retrieved from DHCP server automatically.
 | 
						|
  ///
 | 
						|
  UINTN                         DnsServerListCount;
 | 
						|
  ///
 | 
						|
  /// Pointer to DNS server list containing DnsServerListCount entries or NULL
 | 
						|
  /// if DnsServerListCountis 0. For Configure(), this will be NULL when there are
 | 
						|
  /// no caller supplied server addresses, and, the DNS instance will retrieve
 | 
						|
  /// DNS server from DHCP Server. The provided DNS server list is
 | 
						|
  /// recommended to be filled up in the sequence of preference. When
 | 
						|
  /// used with GetModeData(), the buffer containing the list will
 | 
						|
  /// be allocated by the driver implementing this protocol and must be
 | 
						|
  /// freed by the caller. When used with Configure(), the buffer
 | 
						|
  /// containing the list will be allocated and released by the caller.
 | 
						|
  ///
 | 
						|
  EFI_IPv4_ADDRESS              *DnsServerList;
 | 
						|
  ///
 | 
						|
  /// Set to TRUE to use the default IP address/subnet mask and default routing table.
 | 
						|
  ///
 | 
						|
  BOOLEAN                       UseDefaultSetting;
 | 
						|
  ///
 | 
						|
  /// If TRUE, enable DNS cache function for this DNS instance. If FALSE, all DNS
 | 
						|
  /// query will not lookup local DNS cache.
 | 
						|
  ///
 | 
						|
  BOOLEAN                       EnableDnsCache;
 | 
						|
  ///
 | 
						|
  /// Use the protocol number defined in "Links to UEFI-Related
 | 
						|
  /// Documents"(http://uefi.org/uefi) under the heading "IANA
 | 
						|
  /// Protocol Numbers". Only TCP or UDP are supported, and other
 | 
						|
  /// protocol values are invalid. An implementation can choose to
 | 
						|
  /// support only UDP, or both TCP and UDP.
 | 
						|
  ///
 | 
						|
  UINT8                         Protocol;
 | 
						|
  ///
 | 
						|
  /// If UseDefaultSetting is FALSE indicates the station address to use.
 | 
						|
  ///
 | 
						|
  EFI_IPv4_ADDRESS              StationIp;
 | 
						|
  ///
 | 
						|
  /// If UseDefaultSetting is FALSE indicates the subnet mask to use.
 | 
						|
  ///
 | 
						|
  EFI_IPv4_ADDRESS              SubnetMask;
 | 
						|
  ///
 | 
						|
  /// Local port number. Set to zero to use the automatically assigned port number.
 | 
						|
  ///
 | 
						|
  UINT16                        LocalPort;
 | 
						|
  ///
 | 
						|
  /// Retry number if no response received after RetryInterval.
 | 
						|
  ///
 | 
						|
  UINT32                        RetryCount;
 | 
						|
  ///
 | 
						|
  /// Minimum interval of retry is 2 second. If the retry interval is less than 2
 | 
						|
  /// seconds, then use the 2 seconds.
 | 
						|
  ///
 | 
						|
  UINT32                        RetryInterval;
 | 
						|
} EFI_DNS4_CONFIG_DATA;
 | 
						|
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DNS4_CACHE_ENTRY
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Host name.
 | 
						|
  ///
 | 
						|
  CHAR16                        *HostName;
 | 
						|
  ///
 | 
						|
  /// IP address of this host.
 | 
						|
  ///
 | 
						|
  EFI_IPv4_ADDRESS              *IpAddress;
 | 
						|
  ///
 | 
						|
  /// Time in second unit that this entry will remain in DNS cache. A value of zero
 | 
						|
  /// means that this entry is permanent. A nonzero value will override the existing
 | 
						|
  /// one if this entry to be added is dynamic entry. Implementations may set its
 | 
						|
  /// default timeout value for the dynamically created DNS cache entry after one DNS
 | 
						|
  /// resolve succeeds.
 | 
						|
  ///
 | 
						|
  UINT32                        Timeout;
 | 
						|
} EFI_DNS4_CACHE_ENTRY;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DNS4_MODE_DATA
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// The configuration data of this instance.
 | 
						|
  ///
 | 
						|
  EFI_DNS4_CONFIG_DATA          DnsConfigData;
 | 
						|
  ///
 | 
						|
  /// Number of configured DNS server. Each DNS instance has its own DNS server
 | 
						|
  /// configuration.
 | 
						|
  ///
 | 
						|
  UINT32                        DnsServerCount;
 | 
						|
  ///
 | 
						|
  /// Pointer to common list of addresses of all configured DNS server
 | 
						|
  /// used by EFI_DNS4_PROTOCOL instances. List will include
 | 
						|
  /// DNS servers configured by this or any other EFI_DNS4_PROTOCOL instance.
 | 
						|
  /// The storage for this list is allocated by the driver publishing this
 | 
						|
  /// protocol, and must be freed by the caller.
 | 
						|
  ///
 | 
						|
  EFI_IPv4_ADDRESS              *DnsServerList;
 | 
						|
  ///
 | 
						|
  /// Number of DNS Cache entries. The DNS Cache is shared among all DNS instances.
 | 
						|
  ///
 | 
						|
  UINT32                        DnsCacheCount;
 | 
						|
  ///
 | 
						|
  /// Pointer to a buffer containing DnsCacheCount DNS Cache
 | 
						|
  /// entry structures. The storage for this list is allocated by the driver
 | 
						|
  /// publishing this protocol and must be freed by caller.
 | 
						|
  ///
 | 
						|
  EFI_DNS4_CACHE_ENTRY          *DnsCacheList;
 | 
						|
} EFI_DNS4_MODE_DATA;
 | 
						|
 | 
						|
///
 | 
						|
/// DNS_HOST_TO_ADDR_DATA
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Number of the returned IP addresses.
 | 
						|
  ///
 | 
						|
  UINT32                        IpCount;
 | 
						|
  ///
 | 
						|
  /// Pointer to the all the returned IP addresses.
 | 
						|
  ///
 | 
						|
  EFI_IPv4_ADDRESS              *IpList;
 | 
						|
} DNS_HOST_TO_ADDR_DATA;
 | 
						|
 | 
						|
///
 | 
						|
/// DNS_ADDR_TO_HOST_DATA
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Pointer to the primary name for this host address. It's the caller's
 | 
						|
  /// responsibility to free the response memory.
 | 
						|
  ///
 | 
						|
  CHAR16                        *HostName;
 | 
						|
} DNS_ADDR_TO_HOST_DATA;
 | 
						|
 | 
						|
///
 | 
						|
/// DNS_RESOURCE_RECORD
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// The Owner name.
 | 
						|
  ///
 | 
						|
  CHAR8                         *QName;
 | 
						|
  ///
 | 
						|
  /// The Type Code of this RR.
 | 
						|
  ///
 | 
						|
  UINT16                        QType;
 | 
						|
  ///
 | 
						|
  /// The CLASS code of this RR.
 | 
						|
  ///
 | 
						|
  UINT16                        QClass;
 | 
						|
  ///
 | 
						|
  /// 32 bit integer which specify the time interval that the resource record may be
 | 
						|
  /// cached before the source of the information should again be consulted. Zero means
 | 
						|
  /// this RR can not be cached.
 | 
						|
  ///
 | 
						|
  UINT32                        TTL;
 | 
						|
  ///
 | 
						|
  /// 16 big integer which specify the length of RData.
 | 
						|
  ///
 | 
						|
  UINT16                        DataLength;
 | 
						|
  ///
 | 
						|
  /// A string of octets that describe the resource, the format of this information
 | 
						|
  /// varies according to QType and QClass difference.
 | 
						|
  ///
 | 
						|
  CHAR8                         *RData;
 | 
						|
} DNS_RESOURCE_RECORD;
 | 
						|
 | 
						|
///
 | 
						|
/// DNS_GENERAL_LOOKUP_DATA
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Number of returned matching RRs.
 | 
						|
  ///
 | 
						|
  UINTN                         RRCount;
 | 
						|
  ///
 | 
						|
  /// Pointer to the all the returned matching RRs. It's caller responsibility to free
 | 
						|
  /// the allocated memory to hold the returned RRs.
 | 
						|
  ///
 | 
						|
  DNS_RESOURCE_RECORD           *RRList;
 | 
						|
} DNS_GENERAL_LOOKUP_DATA;
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_DNS4_COMPLETION_TOKEN
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// This Event will be signaled after the Status field is updated by the EFI DNS
 | 
						|
  /// protocol driver. The type of Event must be EFI_NOTIFY_SIGNAL.
 | 
						|
  ///
 | 
						|
  EFI_EVENT                               Event;
 | 
						|
  ///
 | 
						|
  /// Will be set to one of the following values:
 | 
						|
  ///   EFI_SUCCESS:      The host name to address translation completed successfully.
 | 
						|
  ///   EFI_NOT_FOUND:    No matching Resource Record (RR) is found.
 | 
						|
  ///   EFI_TIMEOUT:      No DNS server reachable, or RetryCount was exhausted without
 | 
						|
  ///                     response from all specified DNS servers.
 | 
						|
  ///   EFI_DEVICE_ERROR: An unexpected system or network error occurred.
 | 
						|
  ///   EFI_NO_MEDIA:     There was a media error.
 | 
						|
  ///
 | 
						|
  EFI_STATUS                              Status;
 | 
						|
  ///
 | 
						|
  /// Retry number if no response received after RetryInterval. If zero, use the
 | 
						|
  /// parameter configured through Dns.Configure() interface.
 | 
						|
  ///
 | 
						|
  UINT32                                  RetryCount;
 | 
						|
  ///
 | 
						|
  /// Minimum interval of retry is 2 second. If the retry interval is less than 2
 | 
						|
  /// seconds, then use the 2 seconds. If zero, use the parameter configured through
 | 
						|
  /// Dns.Configure() interface.
 | 
						|
  UINT32                                  RetryInterval;
 | 
						|
  ///
 | 
						|
  /// DNSv4 completion token data
 | 
						|
  ///
 | 
						|
  union {
 | 
						|
    ///
 | 
						|
    /// When the Token is used for host name to address translation, H2AData is a pointer
 | 
						|
    /// to the DNS_HOST_TO_ADDR_DATA.
 | 
						|
    ///
 | 
						|
    DNS_HOST_TO_ADDR_DATA         *H2AData;
 | 
						|
    ///
 | 
						|
    /// When the Token is used for host address to host name translation, A2HData is a
 | 
						|
    /// pointer to the DNS_ADDR_TO_HOST_DATA.
 | 
						|
    ///
 | 
						|
    DNS_ADDR_TO_HOST_DATA         *A2HData;
 | 
						|
    ///
 | 
						|
    /// When the Token is used for a general lookup function, GLookupDATA is a pointer to
 | 
						|
    /// the DNS_GENERAL_LOOKUP_DATA.
 | 
						|
    ///
 | 
						|
    DNS_GENERAL_LOOKUP_DATA       *GLookupData;
 | 
						|
  } RspData;
 | 
						|
} EFI_DNS4_COMPLETION_TOKEN;
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve mode data of this DNS instance.
 | 
						|
 | 
						|
  This function is used to retrieve DNS mode data for this DNS instance.
 | 
						|
 | 
						|
  @param[in]   This               Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[out]  DnsModeData        Point to the mode data.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The operation completed successfully.
 | 
						|
  @retval EFI_NOT_STARTED         When DnsConfigData is queried, no configuration data
 | 
						|
                                  is available because this instance has not been
 | 
						|
                                  configured.
 | 
						|
  @retval EFI_INVALID_PARAMETER   This is NULL or DnsModeData is NULL.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate needed resources.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_GET_MODE_DATA) (
 | 
						|
  IN  EFI_DNS4_PROTOCOL          *This,
 | 
						|
  OUT EFI_DNS4_MODE_DATA         *DnsModeData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Configure this DNS instance.
 | 
						|
 | 
						|
  This function is used to configure DNS mode data for this DNS instance.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  DnsConfigData       Point to the Configuration data.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The operation completed successfully.
 | 
						|
  @retval EFI_UNSUPPORTED         The designated protocol is not supported.
 | 
						|
  @retval EFI_INVALID_PARAMETER   This is NULL.
 | 
						|
                                  The StationIp address provided in DnsConfigData is not a
 | 
						|
                                  valid unicast.
 | 
						|
                                  DnsServerList is NULL while DnsServerListCount
 | 
						|
                                  is not ZERO.
 | 
						|
                                  DnsServerListCount is ZERO while DnsServerList
 | 
						|
                                  is not NULL
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    The DNS instance data or required space could not be
 | 
						|
                                  allocated.
 | 
						|
  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred. The
 | 
						|
                                  EFI DNSv4 Protocol instance is not configured.
 | 
						|
  @retval EFI_ALREADY_STARTED     Second call to Configure() with DnsConfigData. To
 | 
						|
                                  reconfigure the instance the caller must call Configure()
 | 
						|
                                  with NULL first to return driver to unconfigured state.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_CONFIGURE) (
 | 
						|
  IN EFI_DNS4_PROTOCOL          *This,
 | 
						|
  IN EFI_DNS4_CONFIG_DATA       *DnsConfigData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Host name to host address translation.
 | 
						|
 | 
						|
  The HostNameToIp () function is used to translate the host name to host IP address. A
 | 
						|
  type A query is used to get the one or more IP addresses for this host.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  HostName            Host name.
 | 
						|
  @param[in]  Token               Point to the completion token to translate host name
 | 
						|
                                  to host address.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The operation completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   One or more of the following conditions is TRUE:
 | 
						|
                                  This is NULL.
 | 
						|
                                  Token is NULL.
 | 
						|
                                  Token.Event is NULL.
 | 
						|
                                  HostName is NULL. HostName string is unsupported format.
 | 
						|
  @retval EFI_NO_MAPPING          There's no source address is available for use.
 | 
						|
  @retval EFI_NOT_STARTED         This instance has not been started.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_HOST_NAME_TO_IP) (
 | 
						|
   IN EFI_DNS4_PROTOCOL         *This,
 | 
						|
   IN CHAR16                    *HostName,
 | 
						|
   IN EFI_DNS4_COMPLETION_TOKEN *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  IPv4 address to host name translation also known as Reverse DNS lookup.
 | 
						|
 | 
						|
  The IpToHostName() function is used to translate the host address to host name. A type PTR
 | 
						|
  query is used to get the primary name of the host. Support of this function is optional.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  IpAddress           Ip Address.
 | 
						|
  @param[in]  Token               Point to the completion token to translate host
 | 
						|
                                  address to host name.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The operation completed successfully.
 | 
						|
  @retval EFI_UNSUPPORTED         This function is not supported.
 | 
						|
  @retval EFI_INVALID_PARAMETER   One or more of the following conditions is TRUE:
 | 
						|
                                  This is NULL.
 | 
						|
                                  Token is NULL.
 | 
						|
                                  Token.Event is NULL.
 | 
						|
                                  IpAddress is not valid IP address .
 | 
						|
  @retval EFI_NO_MAPPING          There's no source address is available for use.
 | 
						|
  @retval EFI_ALREADY_STARTED     This Token is being used in another DNS session.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate needed resources.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_IP_TO_HOST_NAME) (
 | 
						|
   IN EFI_DNS4_PROTOCOL         *This,
 | 
						|
   IN EFI_IPv4_ADDRESS          IpAddress,
 | 
						|
   IN EFI_DNS4_COMPLETION_TOKEN *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieve arbitrary information from the DNS server.
 | 
						|
 | 
						|
  This GeneralLookup() function retrieves arbitrary information from the DNS. The caller
 | 
						|
  supplies a QNAME, QTYPE, and QCLASS, and all of the matching RRs are returned. All
 | 
						|
  RR content (e.g., TTL) was returned. The caller need parse the returned RR to get
 | 
						|
  required information. The function is optional.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  QName               Pointer to Query Name.
 | 
						|
  @param[in]  QType               Query Type.
 | 
						|
  @param[in]  QClass              Query Name.
 | 
						|
  @param[in]  Token               Point to the completion token to retrieve arbitrary
 | 
						|
                                  information.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The operation completed successfully.
 | 
						|
  @retval EFI_UNSUPPORTED         This function is not supported. Or the requested
 | 
						|
                                  QType is not supported
 | 
						|
  @retval EFI_INVALID_PARAMETER   One or more of the following conditions is TRUE:
 | 
						|
                                  This is NULL.
 | 
						|
                                  Token is NULL.
 | 
						|
                                  Token.Event is NULL.
 | 
						|
                                  QName is NULL.
 | 
						|
  @retval EFI_NO_MAPPING          There's no source address is available for use.
 | 
						|
  @retval EFI_ALREADY_STARTED     This Token is being used in another DNS session.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Failed to allocate needed resources.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_GENERAL_LOOKUP) (
 | 
						|
  IN EFI_DNS4_PROTOCOL          *This,
 | 
						|
  IN CHAR8                      *QName,
 | 
						|
  IN UINT16                     QType,
 | 
						|
  IN UINT16                     QClass,
 | 
						|
  IN EFI_DNS4_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is to update the DNS Cache.
 | 
						|
 | 
						|
  The UpdateDnsCache() function is used to add/delete/modify DNS cache entry. DNS cache
 | 
						|
  can be normally dynamically updated after the DNS resolve succeeds. This function
 | 
						|
  provided capability to manually add/delete/modify the DNS cache.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  DeleteFlag          If FALSE, this function is to add one entry to the
 | 
						|
                                  DNS Cahce. If TRUE, this function will delete
 | 
						|
                                  matching DNS Cache entry.
 | 
						|
  @param[in]  Override            If TRUE, the maching DNS cache entry will be
 | 
						|
                                  overwritten with the supplied parameter. If FALSE,
 | 
						|
                                  EFI_ACCESS_DENIED will be returned if the entry to
 | 
						|
                                  be added is already existed.
 | 
						|
  @param[in]  DnsCacheEntry       Pointer to DNS Cache entry.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The operation completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   One or more of the following conditions is TRUE:
 | 
						|
                                  This is NULL.
 | 
						|
                                  DnsCacheEntry.HostName is NULL.
 | 
						|
                                  DnsCacheEntry.IpAddress is NULL.
 | 
						|
                                  DnsCacheEntry.Timeout is zero.
 | 
						|
  @retval EFI_ACCESS_DENIED       The DNS cache entry already exists and Override is
 | 
						|
                                  not TRUE.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_UPDATE_DNS_CACHE) (
 | 
						|
  IN EFI_DNS4_PROTOCOL          *This,
 | 
						|
  IN BOOLEAN                    DeleteFlag,
 | 
						|
  IN BOOLEAN                    Override,
 | 
						|
  IN EFI_DNS4_CACHE_ENTRY       DnsCacheEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Polls for incoming data packets and processes outgoing data packets.
 | 
						|
 | 
						|
  The Poll() function can be used by network drivers and applications to increase the
 | 
						|
  rate that data packets are moved between the communications device and the transmit
 | 
						|
  and receive queues.
 | 
						|
  In some systems, the periodic timer event in the managed network driver may not poll
 | 
						|
  the underlying communications device fast enough to transmit and/or receive all data
 | 
						|
  packets without missing incoming packets or dropping outgoing packets. Drivers and
 | 
						|
  applications that are experiencing packet loss should try calling the Poll()
 | 
						|
  function more often.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Incoming or outgoing data was processed.
 | 
						|
  @retval EFI_NOT_STARTED         This EFI DNS Protocol instance has not been started.
 | 
						|
  @retval EFI_INVALID_PARAMETER   This is NULL.
 | 
						|
  @retval EFI_DEVICE_ERROR        An unexpected system or network error occurred.
 | 
						|
  @retval EFI_TIMEOUT             Data was dropped out of the transmit and/or receive
 | 
						|
                                  queue. Consider increasing the polling rate.
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_POLL) (
 | 
						|
  IN  EFI_DNS4_PROTOCOL         *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Abort an asynchronous DNS operation, including translation between IP and Host, and
 | 
						|
  general look up behavior.
 | 
						|
 | 
						|
  The Cancel() function is used to abort a pending resolution request. After calling
 | 
						|
  this function, Token.Status will be set to EFI_ABORTED and then Token.Event will be
 | 
						|
  signaled. If the token is not in one of the queues, which usually means that the
 | 
						|
  asynchronous operation has completed, this function will not signal the token and
 | 
						|
  EFI_NOT_FOUND is returned.
 | 
						|
 | 
						|
  @param[in]  This                Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  Token               Pointer to a token that has been issued by
 | 
						|
                                  EFI_DNS4_PROTOCOL.HostNameToIp (),
 | 
						|
                                  EFI_DNS4_PROTOCOL.IpToHostName() or
 | 
						|
                                  EFI_DNS4_PROTOCOL.GeneralLookup().
 | 
						|
                                  If NULL, all pending tokens are aborted.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Incoming or outgoing data was processed.
 | 
						|
  @retval EFI_NOT_STARTED         This EFI DNS4 Protocol instance has not been started.
 | 
						|
  @retval EFI_INVALID_PARAMETER   This is NULL.
 | 
						|
  @retval EFI_NOT_FOUND           When Token is not NULL, and the asynchronous DNS
 | 
						|
                                  operation was not found in the transmit queue. It
 | 
						|
                                  was either completed or was not issued by
 | 
						|
                                  HostNameToIp(), IpToHostName() or GeneralLookup().
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_DNS4_CANCEL) (
 | 
						|
  IN  EFI_DNS4_PROTOCOL         *This,
 | 
						|
  IN  EFI_DNS4_COMPLETION_TOKEN *Token
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// The EFI_DNS4_Protocol provides the function to get the host name and address
 | 
						|
/// mapping, also provides pass through interface to retrieve arbitrary information
 | 
						|
/// from DNS.
 | 
						|
///
 | 
						|
struct _EFI_DNS4_PROTOCOL {
 | 
						|
  EFI_DNS4_GET_MODE_DATA        GetModeData;
 | 
						|
  EFI_DNS4_CONFIGURE            Configure;
 | 
						|
  EFI_DNS4_HOST_NAME_TO_IP      HostNameToIp;
 | 
						|
  EFI_DNS4_IP_TO_HOST_NAME      IpToHostName;
 | 
						|
  EFI_DNS4_GENERAL_LOOKUP       GeneralLookUp;
 | 
						|
  EFI_DNS4_UPDATE_DNS_CACHE     UpdateDnsCache;
 | 
						|
  EFI_DNS4_POLL                 Poll;
 | 
						|
  EFI_DNS4_CANCEL               Cancel;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiDns4ServiceBindingProtocolGuid;
 | 
						|
extern EFI_GUID gEfiDns4ProtocolGuid;
 | 
						|
 | 
						|
#endif
 |