chiark / gitweb /
resolved: when there's already somebody listening on the LLMNR ports, simple disable...
[elogind.git] / src / resolve / resolved-link.c
index 93ccc04491cf6a0a98de39db18d965264f26ab3a..2c02f0947305e1acf4d880ea99d6352e3e9fe715 100644 (file)
@@ -150,13 +150,13 @@ static int link_update_dns_servers(Link *l) {
 
         assert(l);
 
-        LIST_FOREACH(servers, s, l->dns_servers)
-                s->marked = true;
-
         r = sd_network_get_dns(l->ifindex, &nameservers);
         if (r < 0)
                 goto clear;
 
+        LIST_FOREACH(servers, s, l->dns_servers)
+                s->marked = true;
+
         STRV_FOREACH(nameserver, nameservers) {
                 union in_addr_union a;
                 int family;
@@ -248,7 +248,7 @@ DnsServer* link_find_dns_server(Link *l, int family, const union in_addr_union *
         return NULL;
 }
 
-static DnsServer* link_set_dns_server(Link *l, DnsServer *s) {
+DnsServer* link_set_dns_server(Link *l, DnsServer *s) {
         assert(l);
 
         if (l->current_dns_server == s)
@@ -259,10 +259,13 @@ static DnsServer* link_set_dns_server(Link *l, DnsServer *s) {
 
                 in_addr_to_string(s->family, &s->address, &ip);
                 log_info("Switching to DNS server %s for interface %s.", strna(ip), l->name);
-        } else
-                log_info("No DNS server set for interface %s.", l->name);
+        }
 
         l->current_dns_server = s;
+
+        if (l->unicast_scope)
+                dns_cache_flush(&l->unicast_scope->cache);
+
         return s;
 }