]> git.ipfire.org Git - thirdparty/systemd.git/commit
network: restart DHCPv6, NDisc, and RADV when tracked IPv6LL is dropped
authorAritra Basu <aritrbas+gh@cisco.com>
Tue, 21 Apr 2026 23:09:20 +0000 (19:09 -0400)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 21 May 2026 08:39:30 +0000 (17:39 +0900)
commitdadc77c5fb7e79878831bb204e630850ab7e2a1d
tree3c1477caed480d19361aa1ff653fe956443d2853
parent9f25feb4ed18bb3d1e21de932279b2b1b3098846
network: restart DHCPv6, NDisc, and RADV when tracked IPv6LL is dropped

When the tracked IPv6 link-local address is removed, networkd clears
link->ipv6ll_address, but keeps DHCPv6, NDisc, and RADV running. These
engines keep using a stale source identity which affects the following:
- DHCPv6 client continues to send Solicit/Renew/Rebind from a nonexistent
  source address.
- NDisc continues to send Router Solicitations from a nonexistent source
  address. Router Advertisements cannot be received properly.
- RADV continues to advertise with a stale source address. This can lead
  to downstream hosts configuring invalid routes.
- DHCP-PD prefixes remain configured without a valid upstream DHCPv6 path.

Added link_ipv6ll_lost() to stop IPv6 dynamic engines and related states:
- sd_dhcp6_client_stop()
- ndisc_stop() + ndisc_flush()
- sd_radv_stop()

This is called from address_drop() when the dropped address matches the
tracked IPv6LL. After clearing the tracked address, it scans for another
ready link-local address on the interface. If found, this is set as
link->ipv6ll_address and link_ipv6ll_gained() is called to restart the
engines with the new source identity.

This resolves the FIXME in address_drop().

Signed-off-by: Aritra Basu <aritrbas+gh@cisco.com>
src/network/networkd-address.c
src/network/networkd-link.c
src/network/networkd-link.h
src/network/networkd-radv.c