X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fresolve%2Fresolved-manager.c;h=fed9a7797359020bb2c30d62289a7a494f257637;hb=a2ba62c719224a4b47751623ca5e8b0333f49721;hp=09b758f3f4dad0cdf1adcce9f3fc580217779202;hpb=3cb10d3a0b1b6a7c44f307f2abb5215104e16941;p=elogind.git diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 09b758f3f..fed9a7797 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -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) { @@ -577,7 +571,7 @@ int manager_dns_ipv4_recv(Manager *m, DnsPacket **ret) { l = recvmsg(fd, &mh, 0); if (l < 0) { - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) return 0; return -errno; @@ -626,7 +620,7 @@ int manager_dns_ipv6_recv(Manager *m, DnsPacket **ret) { l = recvmsg(fd, &mh, 0); if (l < 0) { - if (errno == EAGAIN) + if (errno == EAGAIN || errno == EINTR) return 0; return -errno; @@ -657,7 +651,8 @@ static int on_dns_ipv4_packet(sd_event_source *s, int fd, uint32_t revents, void if (!t) return 0; - return dns_query_transaction_reply(t, p); + dns_query_transaction_reply(t, p); + return 0; } static int on_dns_ipv6_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) { @@ -674,7 +669,8 @@ static int on_dns_ipv6_packet(sd_event_source *s, int fd, uint32_t revents, void if (!t) return 0; - return dns_query_transaction_reply(t, p); + dns_query_transaction_reply(t, p); + return 0; } int manager_dns_ipv4_fd(Manager *m) { @@ -882,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; +}