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 authored and Paulo Flabiano Smorigo committed 2013-11-05 17:41:16 -02:00
1 parent 339eacce1b
commit 9e236169e9
4 files changed
+125 -39

No files matched your search

+9
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