diff options
| -rw-r--r-- | src/network/networkd-link.c | 7 | ||||
| -rw-r--r-- | src/network/networkd-ndisc.c | 9 | ||||
| -rw-r--r-- | src/network/networkd-ndisc.h | 1 | 
3 files changed, 14 insertions, 3 deletions
| diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index d9e060b6cf..aefe7335b9 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -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;  } diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 6ce6bfa787..4853791aa5 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -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); +} diff --git a/src/network/networkd-ndisc.h b/src/network/networkd-ndisc.h index 2002f55107..127126190e 100644 --- a/src/network/networkd-ndisc.h +++ b/src/network/networkd-ndisc.h @@ -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); | 
