[systemd-devel] systemd-sysctl FAILs to write params to IPv6 interface @ boot; attempts before interface exists ?

pgnd pgnd at dev-mail.net
Fri Nov 10 11:42:43 UTC 2023


hi,

after upgrading OS (Fedora 38 -> 39) on my router box, on boot systemd-sysctl is failing to write params to IPv6 interfaces
it appears systemd-sysctl is attempting to write config to an interface before it exists after system renaming, with net.ifnames=1

on

	lsb_release -rd
		Description:    Fedora release 39 (Thirty Nine)
		Release:        39

	systemctl --version
		systemd 254 (254.5-2.fc39)
		+PAM +AUDIT +SELINUX -APPARMOR +IMA +SMACK +SECCOMP -GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified

with

	uname -rm
		6.5.10-300.fc39.x86_64 x86_64

	cat /proc/cmdline
		... net.ifnames=1

setting sysctl,

	cat /etc/sysctl.d/90-override.conf
		...
		net.ipv6.conf.enp39s0.accept_ra = 2
		...

on boot, fails to write sysctl,

	dmesg | grep enp39s0 | grep -E "accept_ra|renamed"
		[    3.504409] systemd-sysctl[469]: Couldn't write '2' to 'net/ipv6/conf/enp39s0/accept_ra', ignoring: No such file or directory
		[    3.639846] igb 0000:27:00.0 enp39s0: renamed from eth1



after boot, at shell,

cat /proc/sys/net/upv6/conf/enp39s0/accept_ra
	1

there's a similar(?) @ closed, old issue

	"Race condition: interface renaming, udev vs. networkd"
	 https://github.com/systemd/systemd/issues/7293

here,

	 cat /etc/systemd/network/20-enp39s0.network

		[Match]
		Name=enp39s0

		[Network]
		DHCP=ipv6
		IPv6PrivacyExtensions=kernel

		IPForward=ipv4
		IPv6AcceptRA=yes
		IPv6SendRA=no
		IPv6DuplicateAddressDetection=1

		[Address]
		Address=192.168.0.100/24

		[Route]

		[IPv6AcceptRA]
		UseGateway=yes
		UseRoutePrefix=yes
		DHCPv6Client=always

		[DHCPServer]
		ServerAddress=192.168.0.1/32

and some logs,

	journalctl -b -u systemd-networkd.service -u systemd-udevd.service --no-hostname | grep -Ei "ipv6|renam|igb|accept_ra"
		Nov 09 18:09:59 systemd-networkd[2010]: lo: Saved IPv6 link-local address generation mode: eui64
		Nov 09 18:09:59 systemd-networkd[2010]: enp39s0: Saved IPv6 link-local address generation mode: eui64
		Nov 09 18:09:59 systemd-networkd[2010]: enp39s0: Found driver: igb
		Nov 09 18:09:59 systemd-networkd[2010]: Setting '/proc/sys/net/ipv6/conf/all/forwarding' to '1'
		Nov 09 18:09:59 systemd-networkd[2010]: Setting '/proc/sys/net/ipv6/conf/enp39s0/disable_ipv6' to '0'
		Nov 09 18:09:59 systemd-networkd[2010]: Setting '/proc/sys/net/ipv6/conf/enp39s0/accept_ra' to '0'
		Nov 09 18:09:59 systemd-networkd[2010]: Setting '/proc/sys/net/ipv6/conf/enp39s0/dad_transmits' to '1'
		Nov 09 18:09:59 systemd-networkd[2010]: Setting '/proc/sys/net/ipv6/conf/enp39s0/proxy_ndp' to '0'
		Nov 09 18:09:59 systemd-networkd[2010]: enp39s0: Requested configuring of the IPv6 Router Discovery.
		Nov 09 18:10:03 systemd-networkd[2010]: enp39s0: IPv6 link-local address is not set, delaying to start DHCPv6 client.
		Nov 09 18:10:03 systemd-networkd[2010]: enp39s0: IPv6 Router Discovery is configured.
		Nov 09 18:10:03 systemd-networkd[2010]: enp39s0: link_check_ready(): IPv6LL is not configured yet.
		Nov 09 18:10:04 systemd-networkd[2010]: enp39s0: Gained IPv6LL
		Nov 09 18:10:04 systemd-networkd[2010]: enp39s0: Discovering IPv6 routers
		Nov 09 18:10:04 systemd-networkd[2010]: enp39s0: NDISC: Started IPv6 Router Solicitation client

	dmesg | grep -Ei "ipv6|renam|accept_ra"  | grep -E "systemd-networkd|systemd-udevd|udev"
		[    3.627357] (udev-worker)[528]: eth1: /usr/lib/udev/rules.d/99-systemd.rules:68 RUN '/usr/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/$name --prefix=/net/ipv4/neigh/$name --prefix=/net/ipv6/conf/$name --prefix=/net/ipv6/neigh/$name'
		[    3.632923] (udev-worker)[528]: enp39s0: Network interface 3 is renamed from 'eth1' to 'enp39s0'
		[    3.632987] (udev-worker)[528]: enp39s0: Running command "/usr/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/enp39s0 --prefix=/net/ipv4/neigh/enp39s0 --prefix=/net/ipv6/conf/enp39s0 --prefix=/net/ipv6/neigh/enp39s0"
		[    3.633005] (udev-worker)[528]: enp39s0: Starting '/usr/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/enp39s0 --prefix=/net/ipv4/neigh/enp39s0 --prefix=/net/ipv6/conf/enp39s0 --prefix=/net/ipv6/neigh/enp39s0'
		[    3.637431] (udev-worker)[528]: enp39s0: Process '/usr/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/enp39s0 --prefix=/net/ipv4/neigh/enp39s0 --prefix=/net/ipv6/conf/enp39s0 --prefix=/net/ipv6/neigh/enp39s0' succeeded.
		[    3.851683] udevadm[603]: ipv6: Triggered device with action 'add'.
		[   15.878940] udevadm[1036]: ipv6: Triggered device with action 'add'.
		[   31.017542] systemd-udevd[1079]: nf_defrag_ipv6: Device is queued (SEQNUM=5099, ACTION=add)
		[   31.017550] systemd-udevd[1079]: nf_defrag_ipv6: Device ready for processing (SEQNUM=5099, ACTION=add)
		[   31.017935] systemd-udevd[1079]: nf_defrag_ipv6: Worker [1852] is forked for processing SEQNUM=5099.
		[   31.018130] (udev-worker)[1852]: nf_defrag_ipv6: Processing device (SEQNUM=5099, ACTION=add)
		[   31.018661] (udev-worker)[1852]: nf_defrag_ipv6: /usr/lib/udev/rules.d/98-trace-cmd.rules:1 Running PROGRAM '/usr/bin/systemctl is-active trace-cmd.service'
		[   31.018686] (udev-worker)[1852]: nf_defrag_ipv6: Starting '/usr/bin/systemctl is-active trace-cmd.service'
		[   31.023589] (udev-worker)[1852]: nf_defrag_ipv6: '/usr/bin/systemctl is-active trace-cmd.service'(out) 'inactive'
		[   31.023946] (udev-worker)[1852]: nf_defrag_ipv6: Process '/usr/bin/systemctl is-active trace-cmd.service' failed with exit code 3.
		[   31.023973] (udev-worker)[1852]: nf_defrag_ipv6: /usr/lib/udev/rules.d/98-trace-cmd.rules:1 Command "/usr/bin/systemctl is-active trace-cmd.service" returned 3 (error)
		[   31.024008] (udev-worker)[1852]: nf_defrag_ipv6: Device processed (SEQNUM=5099, ACTION=add)
		[   31.024037] (udev-worker)[1852]: nf_defrag_ipv6: sd-device-monitor(worker): Passed 161 byte to netlink monitor.
		[   71.635540] systemd-udevd[1079]: nf_reject_ipv6: Device is queued (SEQNUM=5196, ACTION=add)
		[   71.650390] systemd-udevd[1079]: nf_reject_ipv6: Device ready for processing (SEQNUM=5196, ACTION=add)
		[   71.650932] systemd-udevd[1079]: nf_reject_ipv6: Worker [3374] is forked for processing SEQNUM=5196.
		[   71.651071] (udev-worker)[3374]: nf_reject_ipv6: Processing device (SEQNUM=5196, ACTION=add)
		[   71.651635] (udev-worker)[3374]: nf_reject_ipv6: /usr/lib/udev/rules.d/98-trace-cmd.rules:1 Running PROGRAM '/usr/bin/systemctl is-active trace-cmd.service'
		[   71.651650] (udev-worker)[3374]: nf_reject_ipv6: Starting '/usr/bin/systemctl is-active trace-cmd.service'
		[   71.658111] (udev-worker)[3374]: nf_reject_ipv6: '/usr/bin/systemctl is-active trace-cmd.service'(out) 'inactive'
		[   71.658448] (udev-worker)[3374]: nf_reject_ipv6: Process '/usr/bin/systemctl is-active trace-cmd.service' failed with exit code 3.
		[   71.658475] (udev-worker)[3374]: nf_reject_ipv6: /usr/lib/udev/rules.d/98-trace-cmd.rules:1 Command "/usr/bin/systemctl is-active trace-cmd.service" returned 3 (error)
		[   71.658504] (udev-worker)[3374]: nf_reject_ipv6: Device processed (SEQNUM=5196, ACTION=add)
		[   71.658533] (udev-worker)[3374]: nf_reject_ipv6: sd-device-monitor(worker): Passed 161 byte to netlink monitor.

what needs fixing to get the systemd-sysctl param write to wait until AFTER that rename?
a systemd dependency fix?  udev rule addition? other?


More information about the systemd-devel mailing list