]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: flush DNSSL/RDNSS lists when we lose carrier
authorLennart Poettering <lennart@poettering.net>
Tue, 25 Oct 2016 10:08:43 +0000 (12:08 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 2 Nov 2016 17:39:49 +0000 (11:39 -0600)
Fixes: #3870
src/network/networkd-link.c
src/network/networkd-ndisc.c
src/network/networkd-ndisc.h

index d9e060b6cf7216b4145ace70804b1919abeba681..aefe7335b9831fc1f9e9ea2a4463b8d21ec3f3a5 100644 (file)
@@ -514,13 +514,12 @@ static void link_free(Link *link) {
         sd_lldp_unref(link->lldp);
         free(link->lldp_file);
 
+        ndisc_flush(link);
+
         sd_ipv4ll_unref(link->ipv4ll);
         sd_dhcp6_client_unref(link->dhcp6_client);
         sd_ndisc_unref(link->ndisc);
 
-        set_free_free(link->ndisc_rdnss);
-        set_free_free(link->ndisc_dnssl);
-
         if (link->manager)
                 hashmap_remove(link->manager->links, INT_TO_PTR(link->ifindex));
 
@@ -2427,6 +2426,8 @@ static int link_drop_config(Link *link) {
                         return r;
         }
 
+        ndisc_flush(link);
+
         return 0;
 }
 
index 6ce6bfa787d99d962b519a59ea66480f3a666dc0..4853791aa56e488d279e27be8e36b8e059949bd9 100644 (file)
@@ -690,3 +690,12 @@ void ndisc_vacuum(Link *link) {
                         link_dirty(link);
                 }
 }
+
+void ndisc_flush(Link *link) {
+        assert(link);
+
+        /* Removes all RDNSS and DNSSL entries, without exception */
+
+        link->ndisc_rdnss = set_free_free(link->ndisc_rdnss);
+        link->ndisc_dnssl = set_free_free(link->ndisc_dnssl);
+}
index 2002f551070d998bac07d4a94e8c91cc8a695a8e..127126190ed4d46ae6abd2603f56083e09c3cffb 100644 (file)
@@ -37,3 +37,4 @@ static inline char* NDISC_DNSSL_DOMAIN(const NDiscDNSSL *n) {
 
 int ndisc_configure(Link *link);
 void ndisc_vacuum(Link *link);
+void ndisc_flush(Link *link);