summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-10-06 18:30:01 +0200
committerThomas Haller <thaller@redhat.com>2017-10-09 22:05:35 +0200
commit17ca5c4c0c08116e3d2309b7f25b903440d66194 (patch)
treef2966b94a1dcb3f33229924e9159a351daf606bb
parent147394687ee5a6933a7895b95782ca94b7395f21 (diff)
downloadNetworkManager-17ca5c4c0c08116e3d2309b7f25b903440d66194.tar.gz
dns: merge IPv4 and IPv6 implementation for update_add_ip_config()
How nice would it be to have a NMIPConfig class that is agnostic for IPv4 and IPv6. Another small step, in unifying v4 and v6.
-rw-r--r--src/dns/nm-dns-systemd-resolved.c111
1 files changed, 54 insertions, 57 deletions
diff --git a/src/dns/nm-dns-systemd-resolved.c b/src/dns/nm-dns-systemd-resolved.c
index fce1fef1ab..e7e71489fc 100644
--- a/src/dns/nm-dns-systemd-resolved.c
+++ b/src/dns/nm-dns-systemd-resolved.c
@@ -146,71 +146,73 @@ add_domain (GVariantBuilder *domains,
}
static void
-update_add_ip6_config (NMDnsSystemdResolved *self,
- GVariantBuilder *dns,
- GVariantBuilder *domains,
- const NMIP6Config *config)
+update_add_ip_config (NMDnsSystemdResolved *self,
+ GVariantBuilder *dns,
+ GVariantBuilder *domains,
+ gpointer config)
{
+ int addr_family;
+ gsize addr_size;
guint i, n;
+ gboolean never_default;
- n = nm_ip6_config_get_num_nameservers (config);
- for (i = 0 ; i < n; i++) {
- const struct in6_addr *ip;
-
- g_variant_builder_open (dns, G_VARIANT_TYPE ("(iay)"));
- g_variant_builder_add (dns, "i", AF_INET6);
- ip = nm_ip6_config_get_nameserver (config, i),
-
- g_variant_builder_add_value (dns, g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, ip, 16, 1));
- g_variant_builder_close (dns);
- }
-
- n = nm_ip6_config_get_num_searches (config);
- if (n > 0) {
- for (i = 0; i < n; i++) {
- add_domain (domains, nm_ip6_config_get_search (config, i),
- nm_ip6_config_get_never_default (config));
- }
- } else {
- n = nm_ip6_config_get_num_domains (config);
- for (i = 0; i < n; i++) {
- add_domain (domains, nm_ip6_config_get_domain (config, i),
- nm_ip6_config_get_never_default (config));
- }
- }
-}
+ if (NM_IS_IP4_CONFIG (config))
+ addr_family = AF_INET;
+ else if (NM_IS_IP6_CONFIG (config))
+ addr_family = AF_INET6;
+ else
+ g_return_if_reached ();
-static void
-update_add_ip4_config (NMDnsSystemdResolved *self,
- GVariantBuilder *dns,
- GVariantBuilder *domains,
- const NMIP4Config *config)
-{
- guint i, n;
+ addr_size = nm_utils_addr_family_to_size (addr_family);
- n = nm_ip4_config_get_num_nameservers (config);
+ n = addr_family == AF_INET
+ ? nm_ip4_config_get_num_nameservers (config)
+ : nm_ip6_config_get_num_nameservers (config);
for (i = 0 ; i < n; i++) {
- guint32 ns;
+ in_addr_t ns4;
+ gconstpointer ns;
- g_variant_builder_open (dns, G_VARIANT_TYPE ("(iay)"));
- g_variant_builder_add (dns, "i", AF_INET);
- ns = nm_ip4_config_get_nameserver (config, i),
+ if (addr_family == AF_INET) {
+ ns4 = nm_ip4_config_get_nameserver (config, i);
+ ns = &ns4;
+ } else
+ ns = nm_ip6_config_get_nameserver (config, i);
- g_variant_builder_add_value (dns, g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE, &ns, 4, 1));
+ g_variant_builder_open (dns, G_VARIANT_TYPE ("(iay)"));
+ g_variant_builder_add (dns, "i", addr_family);
+ g_variant_builder_add_value (dns,
+ g_variant_new_fixed_array (G_VARIANT_TYPE_BYTE,
+ ns,
+ addr_size,
+ 1));
g_variant_builder_close (dns);
}
- n = nm_ip4_config_get_num_searches (config);
+ never_default = addr_family == AF_INET
+ ? nm_ip4_config_get_never_default (config)
+ : nm_ip6_config_get_never_default (config);
+
+ n = addr_family == AF_INET
+ ? nm_ip4_config_get_num_searches (config)
+ : nm_ip6_config_get_num_searches (config);
if (n > 0) {
for (i = 0; i < n; i++) {
- add_domain (domains, nm_ip4_config_get_search (config, i),
- nm_ip4_config_get_never_default (config));
+ add_domain (domains,
+ addr_family == AF_INET
+ ? nm_ip4_config_get_search (config, i)
+ : nm_ip6_config_get_search (config, i),
+ never_default);
}
} else {
- n = nm_ip4_config_get_num_domains (config);
+ n = addr_family == AF_INET
+ ? nm_ip4_config_get_num_domains (config)
+ : nm_ip6_config_get_num_domains (config);
for (i = 0; i < n; i++) {
- add_domain (domains, nm_ip4_config_get_domain (config, i),
- nm_ip4_config_get_never_default (config));
+ add_domain (domains,
+ addr_family == AF_INET
+ ? nm_ip4_config_get_domain (config, i)
+ : nm_ip6_config_get_domain (config, i),
+ never_default);
}
}
}
@@ -243,14 +245,9 @@ prepare_one_interface (NMDnsSystemdResolved *self, InterfaceConfig *ic)
g_variant_builder_add (&domains, "i", ic->ifindex);
g_variant_builder_open (&domains, G_VARIANT_TYPE ("a(sb)"));
- for (l = ic->configs ; l != NULL ; l = g_list_next (l)) {
- if (NM_IS_IP4_CONFIG (l->data))
- update_add_ip4_config (self, &dns, &domains, l->data);
- else if (NM_IS_IP6_CONFIG (l->data))
- update_add_ip6_config (self, &dns, &domains, l->data);
- else
- g_assert_not_reached ();
- }
+ for (l = ic->configs; l; l = l->next)
+ update_add_ip_config (self, &dns, &domains, l->data);
+
g_variant_builder_close (&dns);
g_variant_builder_close (&domains);