summary refs log tree commit diff
path: root/src/core/dns
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/dns')
-rw-r--r--src/core/dns/nm-dns-dnsconfd.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/core/dns/nm-dns-dnsconfd.c b/src/core/dns/nm-dns-dnsconfd.c
index c17fb9cf..3789caf8 100644
--- a/src/core/dns/nm-dns-dnsconfd.c
+++ b/src/core/dns/nm-dns-dnsconfd.c
@@ -368,7 +368,8 @@ server_builder_append_base(GVariantBuilder   *argument_builder,
                            const char        *address_string,
                            const char *const *routing_domains,
                            const char *const *search_domains,
-                           const char        *ca)
+                           const char        *ca,
+                           int                priority)
 {
     NMDnsServer dns_server;
     gsize       addr_size;
@@ -392,6 +393,12 @@ server_builder_append_base(GVariantBuilder   *argument_builder,
                               "{sv}",
                               "name",
                               g_variant_new("s", dns_server.servername));
+    if (dns_server.port != NM_DNS_PORT_UNDEFINED) {
+        g_variant_builder_add(argument_builder,
+                              "{sv}",
+                              "port",
+                              g_variant_new("i", dns_server.port));
+    }
     if (routing_domains) {
         g_variant_builder_add(argument_builder,
                               "{sv}",
@@ -407,6 +414,9 @@ server_builder_append_base(GVariantBuilder   *argument_builder,
     if (ca) {
         g_variant_builder_add(argument_builder, "{sv}", "ca", g_variant_new("s", ca));
     }
+    /* dnsconfd defines priority as bigger number equals bigger priority, while NM
+     * uses the exact opposite, thus use -priority */
+    g_variant_builder_add(argument_builder, "{sv}", "priority", g_variant_new("i", -priority));
     return TRUE;
 }
 
@@ -443,7 +453,8 @@ parse_global_config(const NMGlobalDnsConfig *global_config,
                                            servers[j],
                                            routing_domains,
                                            searches,
-                                           *ca)) {
+                                           *ca,
+                                           NM_DNS_PRIORITY_DEFAULT_NORMAL)) {
                 g_variant_builder_close(argument_builder);
             }
         }
@@ -560,7 +571,7 @@ dnsconfd_start_done(GObject *source_object, GAsyncResult *res, gpointer user_dat
         g_dbus_error_strip_remote_error(error);
         _LOGW("failed to start Dnsconfd %s", error->message);
     } else {
-        _LOGT("succesfully started Dnsconfd");
+        _LOGT("successfully started Dnsconfd");
     }
 
     /* No update maybe changed or state change, as this is handled by the name owner callbacks
@@ -628,6 +639,7 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
     NMDnsConfigIPData *ip_data;
     const char *const *dns_server_strings;
     guint              nameserver_count;
+    int                priority;
     const char        *ifname;
     gboolean           explicit_default = is_default_interface_explicit(ip_data_lst_head);
 
@@ -648,6 +660,9 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
 
         gather_interface_domains(ip_data, explicit_default, &routing_domains, &search_domains);
         get_networks(ip_data, &networks);
+        if (!nm_l3_config_data_get_dns_priority(ip_data->l3cd, ip_data->addr_family, &priority)) {
+            priority = NM_DNS_PRIORITY_DEFAULT_NORMAL;
+        }
 
         for (guint i = 0; i < nameserver_count; i++) {
             if (server_builder_append_base(argument_builder,
@@ -655,7 +670,8 @@ parse_all_interface_config(GVariantBuilder *argument_builder,
                                            dns_server_strings[i],
                                            routing_domains,
                                            search_domains,
-                                           ca)) {
+                                           ca,
+                                           priority)) {
                 server_builder_append_interface_info(argument_builder, ifname, networks);
             }
         }