chiark / gitweb /
resolved: add DNS cache
[elogind.git] / src / resolve / resolved-link.c
index 9c886a26b5a4ee480813bb2d19105bcbab2e8b85..1b175c8121a7adc9f4bb339c211cc1adec5ce3c9 100644 (file)
@@ -91,16 +91,15 @@ int link_update_rtnl(Link *l, sd_rtnl_message *m) {
         if (r < 0)
                 return r;
 
+        sd_rtnl_message_read_u32(m, IFLA_MTU, &l->mtu);
         return 0;
 }
 
 static int update_dhcp_dns_servers(Link *l) {
         _cleanup_dhcp_lease_unref_ sd_dhcp_lease *lease = NULL;
-        struct in_addr *nameservers = NULL;
+        const struct in_addr *nameservers = NULL;
         DnsServer *s, *nx;
-        unsigned i;
-        size_t n;
-        int r;
+        int r, n, i;
 
         assert(l);
 
@@ -115,9 +114,11 @@ static int update_dhcp_dns_servers(Link *l) {
         LIST_FOREACH(servers, s, l->dhcp_dns_servers)
                 s->marked = true;
 
-        r = sd_dhcp_lease_get_dns(lease, &nameservers, &n);
-        if (r < 0)
+        n = sd_dhcp_lease_get_dns(lease, &nameservers);
+        if (n < 0) {
+                r = n;
                 goto clear;
+        }
 
         for (i = 0; i < n; i++) {
                 union in_addr_union a = { .in = nameservers[i] };
@@ -149,18 +150,18 @@ static int update_link_dns_servers(Link *l) {
         _cleanup_free_ struct in_addr *nameservers = NULL;
         _cleanup_free_ struct in6_addr *nameservers6 = NULL;
         DnsServer *s, *nx;
-        unsigned i;
-        size_t n;
-        int r;
+        int r, n, i;
 
         assert(l);
 
         LIST_FOREACH(servers, s, l->link_dns_servers)
                 s->marked = true;
 
-        r = sd_network_get_dns(l->ifindex, &nameservers, &n);
-        if (r < 0)
+        n = sd_network_get_dns(l->ifindex, &nameservers);
+        if (n < 0) {
+                r = n;
                 goto clear;
+        }
 
         for (i = 0; i < n; i++) {
                 union in_addr_union a = { .in = nameservers[i] };
@@ -175,9 +176,11 @@ static int update_link_dns_servers(Link *l) {
                 }
         }
 
-        r = sd_network_get_dns6(l->ifindex, &nameservers6, &n);
-        if (r < 0)
+        n = sd_network_get_dns6(l->ifindex, &nameservers6);
+        if (n < 0) {
+                r = n;
                 goto clear;
+        }
 
         for (i = 0; i < n; i++) {
                 union in_addr_union a = { .in6 = nameservers6[i] };