chiark / gitweb /
resolved: properly handle MTU logic
[elogind.git] / src / resolve / resolved-manager.c
index 3d2979dbbe196922eba809f3dcad72f6f1b592f8..fed9a7797359020bb2c30d62289a7a494f257637 100644 (file)
@@ -282,7 +282,7 @@ static int manager_network_monitor_listen(Manager *m) {
 
         assert(m);
 
-        r = sd_network_monitor_new(NULL, &m->network_monitor);
+        r = sd_network_monitor_new(&m->network_monitor, NULL);
         if (r < 0)
                 return r;
 
@@ -373,18 +373,12 @@ int config_parse_dnsv(
 }
 
 int manager_parse_config_file(Manager *m) {
-        int r;
-
         assert(m);
 
-        r = config_parse(NULL, "/etc/systemd/resolved.conf", NULL,
-                         "Resolve\0",
-                         config_item_perf_lookup, resolved_gperf_lookup,
-                         false, false, m);
-        if (r < 0)
-                log_warning("Failed to parse configuration file: %s", strerror(-r));
-
-        return 0;
+        return config_parse(NULL, "/etc/systemd/resolved.conf", NULL,
+                            "Resolve\0",
+                            config_item_perf_lookup, resolved_gperf_lookup,
+                            false, false, true, m);
 }
 
 int manager_new(Manager **ret) {
@@ -884,3 +878,23 @@ void manager_next_dns_server(Manager *m) {
 
         m->current_dns_server = m->dns_servers;
 }
+
+uint32_t manager_find_mtu(Manager *m) {
+        uint32_t mtu = 0;
+        Link *l;
+        Iterator i;
+
+        /* If we don't know on which link a DNS packet would be
+         * delivered, let's find the largest MTU that works on all
+         * interfaces we know of */
+
+        HASHMAP_FOREACH(l, m->links, i) {
+                if (l->mtu <= 0)
+                        continue;
+
+                if (mtu <= 0 || l->mtu < mtu)
+                        mtu = l->mtu;
+        }
+
+        return mtu;
+}