i'm trying to set a systemd-networkd-managed ethernet interface's sysctls _after_ it's renamed on boot, with a udev rule. it appears that my udev rule in /etc/udev/rules.d/ is ignored -- not loaded -- and hence fails to exec on boot. but it execs OK @ shell after boot :-/ on lsb_release -rd Description: Fedora release 39 (Thirty Nine) Release: 39 uname -rm 6.6.6-200.fc39.x86_64 x86_64 rpm -qa | grep ^systemd-2 systemd-254.7-1.fc39.x86_64 i have this ethernet device lspci | grep Ethernet | grep 05:00 05:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03) i enable persistent naming; in kernel cmdline, ... net.ifnames=1 ... the interface is renamed/created during boot dmesg | grep "renamed from eth" [ 6.945108] igb 0000:05:00.0 enp5s0: renamed from eth0 i've created a udev rule to set IPv6 params cat /etc/udev/rules.d/01-enp5s0-sysctl.rules ACTION=="add|bind|change", SUBSYSTEM=="net", KERNEL=="enp5s0", \ RUN+="/sbin/sysctl -qw \ net.ipv6.conf.enp5s0.forwarding=0 \ net.ipv6.conf.enp5s0.accept_ra=1 \ net.ipv6.conf.enp5s0.use_tempaddr=1 \ " but, immediately after boot, checking sysctl \ net.ipv6.conf.enp5s0.forwarding \ net.ipv6.conf.enp5s0.accept_ra \ net.ipv6.conf.enp5s0.use_tempaddr returns the values, unchanged, net.ipv6.conf.enp5s0.forwarding = 0 net.ipv6.conf.enp5s0.accept_ra = 0 net.ipv6.conf.enp5s0.use_tempaddr = 0 same also if filename-priority is changed, to /etc/udev/rules.d/99-enp5s0-sysctl.rules` otoh, if i exec at shell, udevadm trigger sysctl \ net.ipv6.conf.enp5s0.forwarding \ net.ipv6.conf.enp5s0.accept_ra \ net.ipv6.conf.enp5s0.use_tempaddr monitoring as well, udevadm monitor | grep enp5s0 KERNEL[40344.410195] change /devices/pci0000:00/0000:00:01.2/0000:01:00.0/0000:02:05.0/0000:05:00.0/net/enp5s0 (net) UDEV [40344.529849] change /devices/pci0000:00/0000:00:01.2/0000:01:00.0/0000:02:05.0/0000:05:00.0/net/enp5s0 (net) the values are changed net.ipv6.conf.enp5s0.forwarding = 0 net.ipv6.conf.enp5s0.accept_ra = 1 net.ipv6.conf.enp5s0.use_tempaddr = 1 from linux-hotplug ML, another user commented, "udev doesn't seem to be reading from /etc/ude/rules.d/ anymore on the initramfs. I'd suggest as a workaround of copying the file to usr/lib/udev/rules.d and adding that file to your mkinitcpio.conf file under FILES. That worked for me, but isn't really an ideal solution." checking boot logs, journalctl -b | grep systemd-udevd | grep /etc Dec 20 19:24:16 dev systemd-udevd[522]: Trying to open "/etc/systemd/hwdb/hwdb.bin"... Dec 20 19:24:16 dev systemd-udevd[522]: Trying to open "/etc/udev/hwdb.bin"... Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/11-dm.rules Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/59-persistent-storage-dm.rules Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/59-persistent-storage-md.rules Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/59-persistent-storage.rules Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/61-persistent-storage.rules Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/64-lvm.rules Dec 20 19:24:16 dev systemd-udevd[522]: Reading rules file: /etc/udev/rules.d/65-md-incremental-imsm.rules my rule, ls -al /etc/udev/rules.d/ -rw-r--r-- 1 root root 2.2K Dec 20 18:47 99-enp5s0-sysctl.rules is seemingly missing/ignored the rules that ARE loaded and reported as 'in' /etc/udev/rules.d/ , are in-fact sourced from /usr/lib/dracut/modules.d, where, find /usr/lib/dracut/modules.d -type f \ -iname 11-dm.rules \ -o -iname 59-persistent-storage-dm.rules \ -o -iname 59-persistent-storage-md.rules \ -o -iname 59-persistent-storage.rules \ -o -iname 61-persistent-storage.rules \ -o -iname 64-lvm.rules \ -o -iname 65-md-incremental-imsm.rules /usr/lib/dracut/modules.d/90dm/11-dm.rules /usr/lib/dracut/modules.d/90dm/59-persistent-storage-dm.rules /usr/lib/dracut/modules.d/90mdraid/59-persistent-storage-md.rules /usr/lib/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules /usr/lib/dracut/modules.d/95udev-rules/59-persistent-storage.rules /usr/lib/dracut/modules.d/95udev-rules/61-persistent-storage.rules /usr/lib/dracut/modules.d/90lvm/64-lvm.rules current udev man states, "The udev rules are read from the files located in the system rules directories /usr/lib/udev/rules.d and /usr/local/lib/udev/rules.d, the volatile runtime directory /run/udev/rules.d and the local administration directory /etc/udev/rules.d. All rules files are collectively sorted and processed in lexical order, regardless of the directories in which they live. However, files with identical filenames replace each other. Files in /etc/ have the highest priority, files in /run/ take precedence over files with the same name under /usr/. This can be used to override a system-supplied rules file with a local file if needed; a symlink in /etc/ with the same name as a rules file in /usr/lib/, pointing to /dev/null, disables the rules file entirely. Rule files must have the extension .rules; other extensions are ignored." so, iiuc, 'my' rule _should_ be getting picked up. what's keeping my udev rule from setting up the interface sysctls on boot? a systemd/udev bug? or pebkac in my config/usage?