r = manager_llmnr_start(l->manager);
if (r < 0)
return r;
- } else
- manager_llmnr_stop(l->manager);
-
+ }
if (link_get_mdns_support(l) != RESOLVE_SUPPORT_NO) {
r = manager_mdns_start(l->manager);
if (r < 0)
return r;
- } else
- manager_mdns_stop(l->manager);
+ }
link_allocate_scopes(l);
link_add_rrs(l, false);
m->llmnr_ipv6_tcp_fd = safe_close(m->llmnr_ipv6_tcp_fd);
}
+void manager_llmnr_maybe_stop(Manager *m) {
+ assert(m);
+
+ /* This stops LLMNR only when no interface enables LLMNR. */
+
+ Link *l;
+ HASHMAP_FOREACH(l, m->links)
+ if (link_get_llmnr_support(l) != RESOLVE_SUPPORT_NO)
+ return;
+
+ manager_llmnr_stop(m);
+}
+
int manager_llmnr_start(Manager *m) {
int r;
int manager_llmnr_ipv6_tcp_fd(Manager *m);
void manager_llmnr_stop(Manager *m);
+void manager_llmnr_maybe_stop(Manager *m);
int manager_llmnr_start(Manager *m);
break;
}
+ /* Now check all the links, and if mDNS/llmr are disabled everywhere, stop them globally too. */
+ manager_llmnr_maybe_stop(m);
+ manager_mdns_maybe_stop(m);
return 0;
fail:
(void) manager_write_resolv_conf(m);
(void) manager_send_changed(m, "DNS");
+ /* Now check all the links, and if mDNS/llmr are disabled everywhere, stop them globally too. */
+ manager_llmnr_maybe_stop(m);
+ manager_mdns_maybe_stop(m);
return 0;
}
m->mdns_ipv6_fd = safe_close(m->mdns_ipv6_fd);
}
+void manager_mdns_maybe_stop(Manager *m) {
+ assert(m);
+
+ /* This stops mDNS only when no interface enables mDNS. */
+
+ Link *l;
+ HASHMAP_FOREACH(l, m->links)
+ if (link_get_mdns_support(l) != RESOLVE_SUPPORT_NO)
+ return;
+
+ manager_mdns_stop(m);
+}
+
int manager_mdns_start(Manager *m) {
int r;
int manager_mdns_ipv6_fd(Manager *m);
void manager_mdns_stop(Manager *m);
+void manager_mdns_maybe_stop(Manager *m);
int manager_mdns_start(Manager *m);