issue separate DNS queries for ipv4 and ipv6

Adding multiple questions on a single DNS query is not supportted by
most DNS servers. This patch issues two separate DNS queries
sequentially for ipv4 and then for ipv6.

Fixes: https://savannah.gnu.org/bugs/?39710

 * grub-core/net/bootp.c (parse_dhcp_vendor): Add DNS option.
 * grub-core/net/dns.c (grub_dns_qtype_id): New enum.
 * (grub_net_dns_lookup): Now using separated dns packages.
 * (grub_cmd_nslookup): Add error condition.
 * (grub_cmd_list_dns): Print DNS option.
 * (grub_cmd_add_dns): Add four parameters: --only-ipv4,
 * --only-ipv6, --prefer-ipv4, and --prefer-ipv6.
 * include/grub/net.h (grub_dns_option_t): New enum.
 * (grub_net_network_level_address): option added.

Also-by: Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
Signed-off-by: Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
This commit is contained in:
Gustavo Luiz Duarte 2013-11-05 17:30:20 -02:00 committed by Paulo Flabiano Smorigo
parent 339eacce1b
commit 9e236169e9
No known key found for this signature in database
GPG key ID: 7EAF9619EF7C9B1C
4 changed files with 125 additions and 39 deletions

View file

@ -156,6 +156,14 @@ typedef enum grub_network_level_protocol_id
GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6
} grub_network_level_protocol_id_t;
typedef enum
{
DNS_OPTION_IPV4,
DNS_OPTION_IPV6,
DNS_OPTION_PREFER_IPV4,
DNS_OPTION_PREFER_IPV6
} grub_dns_option_t;
typedef struct grub_net_network_level_address
{
grub_network_level_protocol_id_t type;
@ -164,6 +172,7 @@ typedef struct grub_net_network_level_address
grub_uint32_t ipv4;
grub_uint64_t ipv6[2];
};
grub_dns_option_t option;
} grub_net_network_level_address_t;
typedef struct grub_net_network_level_netaddress