mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: jiaxinwu <jiaxin.wu@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17854 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			1140 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1140 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
DnsDxe support functions implementation.
 | 
						|
   
 | 
						|
Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
 | 
						|
This program and the accompanying materials
 | 
						|
are licensed and made available under the terms and conditions of the BSD License
 | 
						|
which accompanies this distribution.  The full text of the license may be found at
 | 
						|
http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __EFI_DNS_IMPL_H_
 | 
						|
#define __EFI_DNS_IMPL_H_
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
 | 
						|
//
 | 
						|
// Libraries classes
 | 
						|
//
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiDriverEntryPoint.h>
 | 
						|
#include <Library/UefiRuntimeServicesTableLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/NetLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/DpcLib.h>
 | 
						|
#include <Library/PrintLib.h>
 | 
						|
#include <Library/UdpIoLib.h>
 | 
						|
 | 
						|
//
 | 
						|
// UEFI Driver Model Protocols
 | 
						|
//
 | 
						|
#include <Protocol/DriverBinding.h>
 | 
						|
#include <Protocol/ComponentName2.h>
 | 
						|
#include <Protocol/ComponentName.h>
 | 
						|
 | 
						|
#include <Protocol/Udp4.h>
 | 
						|
#include <Protocol/Dhcp4.h>
 | 
						|
#include <Protocol/Dns4.h>
 | 
						|
 | 
						|
#include <Protocol/Udp6.h>
 | 
						|
#include <Protocol/Dhcp6.h>
 | 
						|
#include <Protocol/Dns6.h>
 | 
						|
 | 
						|
#include <Protocol/Ip4Config2.h>
 | 
						|
 | 
						|
#include "DnsDriver.h"
 | 
						|
#include "DnsDhcp.h"
 | 
						|
 | 
						|
//
 | 
						|
// Driver Version
 | 
						|
//
 | 
						|
#define DNS_VERSION  0x00000000
 | 
						|
 | 
						|
//
 | 
						|
// Protocol instances
 | 
						|
//
 | 
						|
extern EFI_COMPONENT_NAME_PROTOCOL   gDnsComponentName;
 | 
						|
extern EFI_COMPONENT_NAME2_PROTOCOL  gDnsComponentName2;
 | 
						|
extern EFI_UNICODE_STRING_TABLE      *gDnsControllerNameTable;
 | 
						|
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL   gDns4DriverBinding;
 | 
						|
extern EFI_SERVICE_BINDING_PROTOCOL  mDns4ServiceBinding;
 | 
						|
extern EFI_DNS4_PROTOCOL             mDns4Protocol;
 | 
						|
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL   gDns6DriverBinding;
 | 
						|
extern EFI_SERVICE_BINDING_PROTOCOL  mDns6ServiceBinding;
 | 
						|
extern EFI_DNS6_PROTOCOL             mDns6Protocol;
 | 
						|
 | 
						|
//
 | 
						|
// DNS related
 | 
						|
//
 | 
						|
#define DNS_SERVER_PORT   53
 | 
						|
 | 
						|
#define DNS_PROTOCOL_UDP   EFI_IP_PROTO_UDP
 | 
						|
#define DNS_PROTOCOL_TCP   EFI_IP_PROTO_TCP
 | 
						|
 | 
						|
#define DNS_STATE_UNCONFIGED     0
 | 
						|
#define DNS_STATE_CONFIGED       1
 | 
						|
#define DNS_STATE_DESTROY        2
 | 
						|
 | 
						|
#define DNS_DEFAULT_TIMEOUT      2
 | 
						|
#define DNS_DEFAULT_RETRY        3
 | 
						|
#define DNS_DEFAULT_BLKSIZE      512
 | 
						|
 | 
						|
#define DNS_TIME_TO_GETMAP       5
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
 | 
						|
typedef union _DNS_FLAGS  DNS_FLAGS;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  LIST_ENTRY             AllCacheLink;
 | 
						|
  EFI_DNS4_CACHE_ENTRY   DnsCache;     
 | 
						|
} DNS4_CACHE;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  LIST_ENTRY             AllCacheLink;
 | 
						|
  EFI_DNS6_CACHE_ENTRY   DnsCache;     
 | 
						|
} DNS6_CACHE;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  LIST_ENTRY             AllServerLink;
 | 
						|
  EFI_IPv4_ADDRESS       Dns4ServerIp;     
 | 
						|
} DNS4_SERVER_IP;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  LIST_ENTRY             AllServerLink;
 | 
						|
  EFI_IPv6_ADDRESS       Dns6ServerIp;       
 | 
						|
} DNS6_SERVER_IP;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                     PacketToLive;
 | 
						|
  CHAR16                     *QueryHostName;
 | 
						|
  EFI_IPv4_ADDRESS           QueryIpAddress;
 | 
						|
  EFI_DNS4_COMPLETION_TOKEN  *Token;
 | 
						|
} DNS4_TOKEN_ENTRY;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                     PacketToLive;
 | 
						|
  CHAR16                     *QueryHostName;
 | 
						|
  EFI_IPv6_ADDRESS           QueryIpAddress;
 | 
						|
  EFI_DNS6_COMPLETION_TOKEN  *Token;
 | 
						|
} DNS6_TOKEN_ENTRY;
 | 
						|
 | 
						|
union _DNS_FLAGS{
 | 
						|
  struct {
 | 
						|
    UINT16     RCode:4;
 | 
						|
    UINT16     Zero:3;
 | 
						|
    UINT16     RA:1;
 | 
						|
    UINT16     RD:1;
 | 
						|
    UINT16     TC:1;
 | 
						|
    UINT16     AA:1;
 | 
						|
    UINT16     OpCode:4;
 | 
						|
    UINT16     QR:1;
 | 
						|
  } Bits;
 | 
						|
  UINT16  Uint16;
 | 
						|
};
 | 
						|
 | 
						|
#define DNS_FLAGS_QR_QUERY     0
 | 
						|
#define DNS_FLAGS_QR_RESPONSE  1
 | 
						|
 | 
						|
#define DNS_FLAGS_OPCODE_STANDARD     0
 | 
						|
#define DNS_FLAGS_OPCODE_INVERSE      1
 | 
						|
#define DNS_FLAGS_OPCODE_SERVER_STATE 2
 | 
						|
 | 
						|
#define DNS_FLAGS_RCODE_NO_ERROR    0
 | 
						|
#define DNS_FLAGS_RCODE_NAME_ERROR  3
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT16      Identification;
 | 
						|
  DNS_FLAGS   Flags;
 | 
						|
  UINT16      QuestionsNum;
 | 
						|
  UINT16      AnswersNum;
 | 
						|
  UINT16      AuthorityNum;
 | 
						|
  UINT16      AditionalNum;
 | 
						|
} DNS_HEADER;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT16      Type;
 | 
						|
  UINT16      Class;
 | 
						|
} DNS_QUERY_SECTION;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT16      Type;
 | 
						|
  UINT16      Class;
 | 
						|
  UINT32      Ttl;
 | 
						|
  UINT16      DataLength;
 | 
						|
} DNS_ANSWER_SECTION;
 | 
						|
 | 
						|
#define DNS_TYPE_A      1
 | 
						|
#define DNS_TYPE_NS     2
 | 
						|
#define DNS_TYPE_CNAME  5
 | 
						|
#define DNS_TYPE_PTR    12
 | 
						|
#define DNS_TYPE_HINFO  13
 | 
						|
#define DNS_TYPE_MX     15
 | 
						|
#define DNS_TYPE_AAAA   28
 | 
						|
#define DNS_TYPE_SRV_RR 33
 | 
						|
#define DNS_TYPE_AXFR   252
 | 
						|
#define DNS_TYPE_ANY    255
 | 
						|
 | 
						|
#define DNS_CLASS_INET  1
 | 
						|
 | 
						|
#define DNS4_DOMAIN  L"in-addr.arpa"
 | 
						|
#define DNS6_DOMAIN  L"IP6.ARPA"
 | 
						|
 | 
						|
 | 
						|
#pragma pack()
 | 
						|
 | 
						|
/**
 | 
						|
  Remove TokenEntry from TokenMap.
 | 
						|
 | 
						|
  @param[in] TokenMap          All DNSv4 Token entrys.
 | 
						|
  @param[in] TokenEntry        TokenEntry need to be removed.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS          Remove TokenEntry from TokenMap sucessfully.
 | 
						|
  @retval EFI_NOT_FOUND        TokenEntry is not found in TokenMap.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns4RemoveTokenEntry (
 | 
						|
  IN NET_MAP                    *TokenMap,
 | 
						|
  IN DNS4_TOKEN_ENTRY           *TokenEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Remove TokenEntry from TokenMap.
 | 
						|
 | 
						|
  @param[in] TokenMap           All DNSv6 Token entrys.
 | 
						|
  @param[in] TokenEntry         TokenEntry need to be removed.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Remove TokenEntry from TokenMap sucessfully.
 | 
						|
  @retval EFI_NOT_FOUND         TokenEntry is not found in TokenMap.
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns6RemoveTokenEntry (
 | 
						|
  IN NET_MAP                    *TokenMap,
 | 
						|
  IN DNS6_TOKEN_ENTRY           *TokenEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function cancle the token specified by Arg in the Map.
 | 
						|
 | 
						|
  @param[in]  Map             Pointer to the NET_MAP.
 | 
						|
  @param[in]  Item            Pointer to the NET_MAP_ITEM.
 | 
						|
  @param[in]  Arg             Pointer to the token to be cancelled. If NULL, all
 | 
						|
                              the tokens in this Map will be cancelled.
 | 
						|
                              This parameter is optional and may be NULL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS         The token is cancelled if Arg is NULL, or the token
 | 
						|
                              is not the same as that in the Item, if Arg is not
 | 
						|
                              NULL.
 | 
						|
  @retval EFI_ABORTED         Arg is not NULL, and the token specified by Arg is
 | 
						|
                              cancelled.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4CancelTokens (
 | 
						|
  IN NET_MAP       *Map,
 | 
						|
  IN NET_MAP_ITEM  *Item,
 | 
						|
  IN VOID          *Arg OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function cancle the token specified by Arg in the Map.
 | 
						|
 | 
						|
  @param[in]  Map             Pointer to the NET_MAP.
 | 
						|
  @param[in]  Item            Pointer to the NET_MAP_ITEM.
 | 
						|
  @param[in]  Arg             Pointer to the token to be cancelled. If NULL, all
 | 
						|
                              the tokens in this Map will be cancelled.
 | 
						|
                              This parameter is optional and may be NULL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS         The token is cancelled if Arg is NULL, or the token
 | 
						|
                              is not the same as that in the Item, if Arg is not
 | 
						|
                              NULL.
 | 
						|
  @retval EFI_ABORTED         Arg is not NULL, and the token specified by Arg is
 | 
						|
                              cancelled.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6CancelTokens (
 | 
						|
  IN NET_MAP       *Map,
 | 
						|
  IN NET_MAP_ITEM  *Item,
 | 
						|
  IN VOID          *Arg OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get the TokenEntry from the TokensMap.
 | 
						|
 | 
						|
  @param[in]  TokensMap           All DNSv4 Token entrys
 | 
						|
  @param[in]  Token               Pointer to the token to be get.
 | 
						|
  @param[out] TokenEntry          Pointer to TokenEntry corresponding Token.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Get the TokenEntry from the TokensMap sucessfully.
 | 
						|
  @retval EFI_NOT_FOUND           TokenEntry is not found in TokenMap.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
GetDns4TokenEntry (
 | 
						|
  IN     NET_MAP                   *TokensMap,
 | 
						|
  IN     EFI_DNS4_COMPLETION_TOKEN *Token, 
 | 
						|
     OUT DNS4_TOKEN_ENTRY          **TokenEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Get the TokenEntry from the TokensMap.
 | 
						|
 | 
						|
  @param[in]  TokensMap           All DNSv6 Token entrys
 | 
						|
  @param[in]  Token               Pointer to the token to be get.
 | 
						|
  @param[out] TokenEntry          Pointer to TokenEntry corresponding Token.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             Get the TokenEntry from the TokensMap sucessfully.
 | 
						|
  @retval EFI_NOT_FOUND           TokenEntry is not found in TokenMap.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
GetDns6TokenEntry (
 | 
						|
  IN     NET_MAP                   *TokensMap,
 | 
						|
  IN     EFI_DNS6_COMPLETION_TOKEN *Token, 
 | 
						|
     OUT DNS6_TOKEN_ENTRY          **TokenEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Cancel DNS4 tokens from the DNS4 instance.
 | 
						|
 | 
						|
  @param[in]  Instance           Pointer to the DNS instance context data.
 | 
						|
  @param[in]  Token              Pointer to the token to be canceled. If NULL, all
 | 
						|
                                 tokens in this instance will be cancelled.
 | 
						|
                                 This parameter is optional and may be NULL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The Token is cancelled.
 | 
						|
  @retval EFI_NOT_FOUND          The Token is not found.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns4InstanceCancelToken (
 | 
						|
  IN DNS_INSTANCE               *Instance,
 | 
						|
  IN EFI_DNS4_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Cancel DNS6 tokens from the DNS6 instance.
 | 
						|
 | 
						|
  @param[in]  Instance           Pointer to the DNS instance context data.
 | 
						|
  @param[in]  Token              Pointer to the token to be canceled. If NULL, all
 | 
						|
                                 tokens in this instance will be cancelled.
 | 
						|
                                 This parameter is optional and may be NULL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The Token is cancelled.
 | 
						|
  @retval EFI_NOT_FOUND          The Token is not found.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns6InstanceCancelToken (
 | 
						|
  IN DNS_INSTANCE               *Instance,
 | 
						|
  IN EFI_DNS6_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Free the resource related to the configure parameters.
 | 
						|
 | 
						|
  @param  Config                 The DNS configure data
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
Dns4CleanConfigure (
 | 
						|
  IN OUT EFI_DNS4_CONFIG_DATA  *Config
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Free the resource related to the configure parameters.
 | 
						|
 | 
						|
  @param  Config                 The DNS configure data
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
Dns6CleanConfigure (
 | 
						|
  IN OUT EFI_DNS6_CONFIG_DATA  *Config
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate memory for configure parameter such as timeout value for Dst,
 | 
						|
  then copy the configure parameter from Src to Dst.
 | 
						|
 | 
						|
  @param[out]  Dst               The destination DHCP configure data.
 | 
						|
  @param[in]   Src               The source DHCP configure data.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | 
						|
  @retval EFI_SUCCESS            The configure is copied.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns4CopyConfigure (
 | 
						|
  OUT EFI_DNS4_CONFIG_DATA  *Dst,
 | 
						|
  IN  EFI_DNS4_CONFIG_DATA  *Src
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate memory for configure parameter such as timeout value for Dst,
 | 
						|
  then copy the configure parameter from Src to Dst.
 | 
						|
 | 
						|
  @param[out]  Dst               The destination DHCP configure data.
 | 
						|
  @param[in]   Src               The source DHCP configure data.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Failed to allocate memory.
 | 
						|
  @retval EFI_SUCCESS            The configure is copied.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns6CopyConfigure (
 | 
						|
  OUT EFI_DNS6_CONFIG_DATA  *Dst,
 | 
						|
  IN  EFI_DNS6_CONFIG_DATA  *Src
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Callback of Dns packet. Does nothing.
 | 
						|
 | 
						|
  @param Arg           The context.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DnsDummyExtFree (
 | 
						|
  IN VOID                   *Arg
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Poll the UDP to get the IP4 default address, which may be retrieved
 | 
						|
  by DHCP. 
 | 
						|
  
 | 
						|
  The default time out value is 5 seconds. If IP has retrieved the default address, 
 | 
						|
  the UDP is reconfigured.
 | 
						|
 | 
						|
  @param  Instance               The DNS instance
 | 
						|
  @param  UdpIo                  The UDP_IO to poll
 | 
						|
  @param  UdpCfgData             The UDP configure data to reconfigure the UDP_IO
 | 
						|
 | 
						|
  @retval TRUE                   The default address is retrieved and UDP is reconfigured.
 | 
						|
  @retval FALSE                  Some error occured.
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
Dns4GetMapping (
 | 
						|
  IN DNS_INSTANCE           *Instance,
 | 
						|
  IN UDP_IO                 *UdpIo,
 | 
						|
  IN EFI_UDP4_CONFIG_DATA   *UdpCfgData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Configure the opened Udp6 instance until the corresponding Ip6 instance
 | 
						|
  has been configured.
 | 
						|
 | 
						|
  @param  Instance               The DNS instance
 | 
						|
  @param  UdpIo                  The UDP_IO to poll
 | 
						|
  @param  UdpCfgData             The UDP configure data to reconfigure the UDP_IO
 | 
						|
 | 
						|
  @retval TRUE                   Configure the Udp6 instance successfully.
 | 
						|
  @retval FALSE                  Some error occured.
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
Dns6GetMapping (
 | 
						|
  IN DNS_INSTANCE           *Instance,
 | 
						|
  IN UDP_IO                 *UdpIo,
 | 
						|
  IN EFI_UDP6_CONFIG_DATA   *UdpCfgData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Configure the UDP.
 | 
						|
  
 | 
						|
  @param  Instance               The DNS session
 | 
						|
  @param  UdpIo                  The UDP_IO instance
 | 
						|
  
 | 
						|
  @retval EFI_SUCCESS            The UDP is successfully configured for the
 | 
						|
                                 session.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns4ConfigUdp (
 | 
						|
  IN DNS_INSTANCE           *Instance,
 | 
						|
  IN UDP_IO                 *UdpIo
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Configure the UDP.
 | 
						|
  
 | 
						|
  @param  Instance               The DNS session
 | 
						|
  @param  UdpIo                  The UDP_IO instance
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            The UDP is successfully configured for the
 | 
						|
                                 session.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Dns6ConfigUdp (
 | 
						|
  IN DNS_INSTANCE           *Instance,
 | 
						|
  IN UDP_IO                 *UdpIo
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Update Dns4 cache to shared list of caches of all DNSv4 instances.
 | 
						|
  
 | 
						|
  @param  Dns4CacheList      All Dns4 cache list.
 | 
						|
  @param  DeleteFlag         If FALSE, this function is to add one entry to the DNS Cache. 
 | 
						|
                             If TRUE, this function will delete matching DNS Cache entry. 
 | 
						|
  @param  Override           If TRUE, the matching 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 exists.
 | 
						|
  @param  DnsCacheEntry      Entry Pointer to DNS Cache entry.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS        Update Dns4 cache successfully.
 | 
						|
  @retval Others             Failed to update Dns4 cache.   
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UpdateDns4Cache (
 | 
						|
  IN LIST_ENTRY             *Dns4CacheList,
 | 
						|
  IN BOOLEAN                DeleteFlag,
 | 
						|
  IN BOOLEAN                Override,
 | 
						|
  IN EFI_DNS4_CACHE_ENTRY   DnsCacheEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Update Dns6 cache to shared list of caches of all DNSv6 instances. 
 | 
						|
 | 
						|
  @param  Dns6CacheList      All Dns6 cache list.
 | 
						|
  @param  DeleteFlag         If FALSE, this function is to add one entry to the DNS Cache. 
 | 
						|
                             If TRUE, this function will delete matching DNS Cache entry. 
 | 
						|
  @param  Override           If TRUE, the matching 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 exists.
 | 
						|
  @param  DnsCacheEntry      Entry Pointer to DNS Cache entry.
 | 
						|
  
 | 
						|
  @retval EFI_SUCCESS        Update Dns6 cache successfully.
 | 
						|
  @retval Others             Failed to update Dns6 cache.
 | 
						|
**/ 
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UpdateDns6Cache (
 | 
						|
  IN LIST_ENTRY             *Dns6CacheList,
 | 
						|
  IN BOOLEAN                DeleteFlag,
 | 
						|
  IN BOOLEAN                Override,
 | 
						|
  IN EFI_DNS6_CACHE_ENTRY   DnsCacheEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Add Dns4 ServerIp to common list of addresses of all configured DNSv4 server. 
 | 
						|
 | 
						|
  @param  Dns4ServerList    Common list of addresses of all configured DNSv4 server.  
 | 
						|
  @param  ServerIp          DNS server Ip.  
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       Add Dns4 ServerIp to common list successfully.
 | 
						|
  @retval Others            Failed to add Dns4 ServerIp to common list.
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AddDns4ServerIp (
 | 
						|
  IN LIST_ENTRY                *Dns4ServerList,
 | 
						|
  IN EFI_IPv4_ADDRESS           ServerIp
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Add Dns6 ServerIp to common list of addresses of all configured DNSv6 server. 
 | 
						|
 | 
						|
  @param  Dns6ServerList    Common list of addresses of all configured DNSv6 server.  
 | 
						|
  @param  ServerIp          DNS server Ip.  
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       Add Dns6 ServerIp to common list successfully.
 | 
						|
  @retval Others            Failed to add Dns6 ServerIp to common list.
 | 
						|
  
 | 
						|
**/ 
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AddDns6ServerIp (
 | 
						|
  IN LIST_ENTRY                *Dns6ServerList,
 | 
						|
  IN EFI_IPv6_ADDRESS           ServerIp
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Find out whether the response is valid or invalid.
 | 
						|
 | 
						|
  @param  TokensMap       All DNS transmittal Tokens entry.  
 | 
						|
  @param  Identification  Identification for queried packet.  
 | 
						|
  @param  Type            Type for queried packet.
 | 
						|
  @param  Item            Return corresponding Token entry.
 | 
						|
 | 
						|
  @retval TRUE            The response is valid.
 | 
						|
  @retval FALSE           The response is invalid.
 | 
						|
  
 | 
						|
**/ 
 | 
						|
BOOLEAN
 | 
						|
IsValidDnsResponse (
 | 
						|
  IN     NET_MAP      *TokensMap,
 | 
						|
  IN     UINT16       Identification,
 | 
						|
  IN     UINT16       Type,
 | 
						|
     OUT NET_MAP_ITEM **Item
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Parse Dns Response.
 | 
						|
 | 
						|
  @param  Instance              The DNS instance
 | 
						|
  @param  RxString              Received buffer.
 | 
						|
  @param  Completed             Flag to indicate that Dns response is valid. 
 | 
						|
  
 | 
						|
  @retval EFI_SUCCESS           Parse Dns Response successfully.
 | 
						|
  @retval Others                Failed to parse Dns Response.
 | 
						|
  
 | 
						|
**/ 
 | 
						|
EFI_STATUS
 | 
						|
ParseDnsResponse (
 | 
						|
  IN OUT DNS_INSTANCE              *Instance,
 | 
						|
  IN     UINT8                     *RxString,
 | 
						|
     OUT BOOLEAN                   *Completed
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Parse response packet.
 | 
						|
 | 
						|
  @param  Packet                The packets received.
 | 
						|
  @param  EndPoint              The local/remote UDP access point
 | 
						|
  @param  IoStatus              The status of the UDP receive
 | 
						|
  @param  Context               The opaque parameter to the function.
 | 
						|
 | 
						|
**/  
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DnsOnPacketReceived (
 | 
						|
  NET_BUF                   *Packet,
 | 
						|
  UDP_END_POINT             *EndPoint,
 | 
						|
  EFI_STATUS                IoStatus,
 | 
						|
  VOID                      *Context
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Release the net buffer when packet is sent.
 | 
						|
 | 
						|
  @param  Packet                The packets received.
 | 
						|
  @param  EndPoint              The local/remote UDP access point
 | 
						|
  @param  IoStatus              The status of the UDP receive
 | 
						|
  @param  Context               The opaque parameter to the function.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DnsOnPacketSent (
 | 
						|
  NET_BUF                   *Packet,
 | 
						|
  UDP_END_POINT             *EndPoint,
 | 
						|
  EFI_STATUS                IoStatus,
 | 
						|
  VOID                      *Context
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Query request information.
 | 
						|
 | 
						|
  @param  Instance              The DNS instance
 | 
						|
  @param  Packet                The packet for querying request information.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Query request information successfully.
 | 
						|
  @retval Others                Failed to query request information.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
DoDnsQuery (
 | 
						|
  IN  DNS_INSTANCE              *Instance,
 | 
						|
  IN  NET_BUF                   *Packet
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Construct the Packet to query Ip.
 | 
						|
 | 
						|
  @param  Instance              The DNS instance
 | 
						|
  @param  HostName              Queried HostName  
 | 
						|
  @param  Type                  DNS query Type
 | 
						|
  @param  Packet                The packet for querying Ip
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The packet is constructed.
 | 
						|
  @retval Others                Failed to construct the Packet.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
ConstructDNSQueryIp (
 | 
						|
  IN  DNS_INSTANCE              *Instance,
 | 
						|
  IN  CHAR16                    *HostName,
 | 
						|
  IN  UINT16                    Type,
 | 
						|
  OUT NET_BUF                   **Packet
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retransmit the packet.
 | 
						|
 | 
						|
  @param  Instance              The DNS instance
 | 
						|
  @param  Packet                Retransmit the packet 
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The packet is retransmitted.
 | 
						|
  @retval Others                Failed to retransmit.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
DnsRetransmit (
 | 
						|
  IN DNS_INSTANCE        *Instance,
 | 
						|
  IN NET_BUF             *Packet
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The timer ticking function for the DNS service.
 | 
						|
 | 
						|
  @param  Event                 The ticking event
 | 
						|
  @param  Context               The DNS service instance
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DnsOnTimerRetransmit (
 | 
						|
  IN EFI_EVENT              Event,
 | 
						|
  IN VOID                   *Context
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The timer ticking function for the DNS driver.
 | 
						|
 | 
						|
  @param  Event                 The ticking event
 | 
						|
  @param  Context               NULL
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
DnsOnTimerUpdate (
 | 
						|
  IN EFI_EVENT              Event,
 | 
						|
  IN VOID                   *Context
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  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        Pointer to the caller-allocated storage for the EFI_DNS4_MODE_DATA structure.
 | 
						|
 | 
						|
  @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_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL or DnsModeData is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4GetModeData (
 | 
						|
  IN  EFI_DNS4_PROTOCOL          *This,
 | 
						|
  OUT EFI_DNS4_MODE_DATA         *DnsModeData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used to configure DNS configuration data for this DNS instance.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  DnsConfigData      Pointer to caller-allocated buffer containing EFI_DNS4_CONFIG_DATA structure. 
 | 
						|
                                 If NULL, the driver will reinitialize the protocol instance to the unconfigured state.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_UNSUPPORTED       The designated protocol is not supported.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @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 equal to Zero.
 | 
						|
                                 DnsServerListCount is Zero while DnsServerListCount is not equal to NULL.
 | 
						|
  @retval  EFI_DEVICE_ERROR      An unexpected system or network error occurred. The EFI DNSv4 Protocol instance is not configured.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4Configure (
 | 
						|
  IN EFI_DNS4_PROTOCOL           *This,
 | 
						|
  IN EFI_DNS4_CONFIG_DATA        *DnsConfigData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The 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           Pointer to caller-supplied buffer containing Host name to be translated. 
 | 
						|
                                 This buffer contains 16 bit characters but these are translated to ASCII for use with 
 | 
						|
                                 DNSv4 server and there is no requirement for driver to support non-ASCII Unicode characters.
 | 
						|
  @param[in]  Token              Pointer to the caller-allocated completion token to return at the completion of the process to translate host name to host address. 
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL.
 | 
						|
                                 Token is NULL.
 | 
						|
                                 Token.Event is.NULL
 | 
						|
                                 HostName is NULL
 | 
						|
  @retval  EFI_NO_MAPPING        There's no source address is available for use.
 | 
						|
  @retval  EFI_NOT_STARTED       This instance has not been started.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4HostNameToIp (
 | 
						|
  IN  EFI_DNS4_PROTOCOL          *This,
 | 
						|
  IN  CHAR16                    *HostName,
 | 
						|
  IN  EFI_DNS4_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The 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. 
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
  @param[in]  IpAddress          IP address.
 | 
						|
  @param[in]  Token              Pointer to the caller-allocated completion used token to translate host address to host name.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER 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_NOT_STARTED       This instance has not been started.
 | 
						|
  @retval  EFI_UNSUPPORTED       This function is not supported.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4IpToHostName (
 | 
						|
  IN  EFI_DNS4_PROTOCOL             *This,
 | 
						|
  IN  EFI_IPv4_ADDRESS              IpAddress,
 | 
						|
  IN  EFI_DNS4_COMPLETION_TOKEN     *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This 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. This 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 caller-allocated completion token to retrieve arbitrary information.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER 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_UNSUPPORTED       This function is not supported. Or the requested QType is not supported
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4GeneralLookUp (
 | 
						|
  IN  EFI_DNS4_PROTOCOL                *This,
 | 
						|
  IN  CHAR8                            *QName,
 | 
						|
  IN  UINT16                           QType, 
 | 
						|
  IN  UINT16                           QClass,
 | 
						|
  IN  EFI_DNS4_COMPLETION_TOKEN        *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This 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 Cache. 
 | 
						|
                                 If TRUE, this function will delete matching DNS Cache entry. 
 | 
						|
  @param[in]  Override           If TRUE, the matching 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 exists.
 | 
						|
  @param[in]  DnsCacheEntry      Pointer to DNS Cache entry.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_INVALID_PARAMETER 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. 
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4UpdateDnsCache (
 | 
						|
  IN EFI_DNS4_PROTOCOL      *This,
 | 
						|
  IN BOOLEAN               DeleteFlag,
 | 
						|
  IN BOOLEAN               Override,
 | 
						|
  IN EFI_DNS4_CACHE_ENTRY   DnsCacheEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This 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.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS4_PROTOCOL instance.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           Incoming or outgoing data was processed.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL. 
 | 
						|
  @retval  EFI_NOT_STARTED       This EFI DNS Protocol instance has not been started. 
 | 
						|
  @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.
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4Poll (
 | 
						|
  IN EFI_DNS4_PROTOCOL    *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used to abort a pending resolution request. 
 | 
						|
  After calling this function, Token.Status will be set to EFI_ABORTED and then Token.
 | 
						|
 | 
						|
  @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_INVALID_PARAMETER This is NULL. 
 | 
						|
  @retval  EFI_NOT_STARTED       This EFI DNS Protocol instance has not been started. 
 | 
						|
  @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().
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns4Cancel (
 | 
						|
  IN  EFI_DNS4_PROTOCOL          *This,
 | 
						|
  IN  EFI_DNS4_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used to retrieve DNS mode data for this DNS instance.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_PROTOCOL instance.
 | 
						|
  @param[out] DnsModeData        Pointer to the caller-allocated storage for the EFI_DNS6_MODE_DATA structure.
 | 
						|
 | 
						|
  @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_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL or DnsModeData is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6GetModeData (
 | 
						|
  IN  EFI_DNS6_PROTOCOL          *This,
 | 
						|
  OUT EFI_DNS6_MODE_DATA         *DnsModeData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The function is used to set and change the configuration data for this EFI DNSv6 Protocol driver instance. 
 | 
						|
  Reset the DNS instance if DnsConfigData is NULL.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_PROTOCOL instance.
 | 
						|
  @param[in]  DnsConfigData      Pointer to the configuration data structure. 
 | 
						|
                                 All associated storage to be allocated and released by caller.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_UNSUPPORTED       The designated protocol is not supported.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @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 equal to Zero.
 | 
						|
                                 DnsServerListCount is Zero while DnsServerList is not equal to NULL.
 | 
						|
  @retval  EFI_DEVICE_ERROR      An unexpected system or network error occurred. The EFI DNSv6 Protocol instance is not configured.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6Configure (
 | 
						|
  IN EFI_DNS6_PROTOCOL           *This,
 | 
						|
  IN EFI_DNS6_CONFIG_DATA        *DnsConfigData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The function is used to translate the host name to host IP address. 
 | 
						|
  A type AAAA query is used to get the one or more IPv6 addresses for this host. 
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_PROTOCOL instance.
 | 
						|
  @param[in]  HostName           Pointer to caller-supplied buffer containing Host name to be translated. 
 | 
						|
                                 This buffer contains 16 bit characters but these are translated to ASCII for use with 
 | 
						|
                                 DNSv4 server and there is no requirement for driver to support non-ASCII Unicode characters.
 | 
						|
  @param[in]  Token              Pointer to the caller-allocated completion token to return at the completion of the process to translate host name to host address. 
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL.
 | 
						|
                                 Token is NULL.
 | 
						|
                                 Token.Event is.NULL
 | 
						|
                                 HostName is NULL
 | 
						|
  @retval  EFI_NO_MAPPING        There's no source address is available for use.
 | 
						|
  @retval  EFI_NOT_STARTED       This instance has not been started.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6HostNameToIp (
 | 
						|
  IN  EFI_DNS6_PROTOCOL          *This,
 | 
						|
  IN  CHAR16                     *HostName,
 | 
						|
  IN  EFI_DNS6_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The 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. 
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_PROTOCOL instance.
 | 
						|
  @param[in]  IpAddress          IP address.
 | 
						|
  @param[in]  Token              Pointer to the caller-allocated completion used token to translate host address to host name.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER 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_NOT_STARTED       This instance has not been started.
 | 
						|
  @retval  EFI_UNSUPPORTED       This function is not supported.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6IpToHostName (
 | 
						|
  IN  EFI_DNS6_PROTOCOL             *This,
 | 
						|
  IN  EFI_IPv6_ADDRESS              IpAddress,
 | 
						|
  IN  EFI_DNS6_COMPLETION_TOKEN     *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This 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. This function is optional.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_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 caller-allocated completion token to retrieve arbitrary information.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  Failed to allocate needed resources.
 | 
						|
  @retval  EFI_INVALID_PARAMETER 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_NOT_STARTED       This instance has not been started.
 | 
						|
  @retval  EFI_UNSUPPORTED       This function is not supported. Or the requested QType is not supported
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6GeneralLookUp (
 | 
						|
  IN  EFI_DNS6_PROTOCOL                *This,
 | 
						|
  IN  CHAR8                            *QName,
 | 
						|
  IN  UINT16                           QType, 
 | 
						|
  IN  UINT16                           QClass,
 | 
						|
  IN  EFI_DNS6_COMPLETION_TOKEN        *Token
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This 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_DNS6_PROTOCOL instance.
 | 
						|
  @param[in]  DeleteFlag         If FALSE, this function is to add one entry to the DNS Cache. 
 | 
						|
                                 If TRUE, this function will delete matching DNS Cache entry. 
 | 
						|
  @param[in]  Override           If TRUE, the matching 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 exists.
 | 
						|
  @param[in]  DnsCacheEntry      Pointer to DNS Cache entry.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The operation completed successfully.
 | 
						|
  @retval  EFI_INVALID_PARAMETER 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. 
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6UpdateDnsCache (
 | 
						|
  IN EFI_DNS6_PROTOCOL      *This,
 | 
						|
  IN BOOLEAN               DeleteFlag,
 | 
						|
  IN BOOLEAN               Override,
 | 
						|
  IN EFI_DNS6_CACHE_ENTRY   DnsCacheEntry
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This 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.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_PROTOCOL instance.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           Incoming or outgoing data was processed.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL. 
 | 
						|
  @retval  EFI_NOT_STARTED       This EFI DNS Protocol instance has not been started. 
 | 
						|
  @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.
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6Poll (
 | 
						|
  IN EFI_DNS6_PROTOCOL    *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used to abort a pending resolution request. 
 | 
						|
  After calling this function, Token.Status will be set to EFI_ABORTED and then Token.
 | 
						|
 | 
						|
  @param[in]  This               Pointer to EFI_DNS6_PROTOCOL instance.
 | 
						|
  @param[in]  Token              Pointer to a token that has been issued by EFI_DNS6_PROTOCOL.HostNameToIp(), 
 | 
						|
                                 EFI_DNS6_PROTOCOL.IpToHostName() or EFI_DNS6_PROTOCOL.GeneralLookup(). 
 | 
						|
                                 If NULL, all pending tokens are aborted.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           Incoming or outgoing data was processed.
 | 
						|
  @retval  EFI_INVALID_PARAMETER This is NULL. 
 | 
						|
  @retval  EFI_NOT_STARTED       This EFI DNS Protocol instance has not been started. 
 | 
						|
  @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().
 | 
						|
  
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Dns6Cancel (
 | 
						|
  IN  EFI_DNS6_PROTOCOL          *This,
 | 
						|
  IN  EFI_DNS6_COMPLETION_TOKEN  *Token
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |