On Mo, 16.08.21 17:31, Amish (anon.amish@xxxxxxxxx) wrote:On 16/08/21 5:25 pm, Lennart Poettering wrote:On Mo, 16.08.21 16:09, Amish (anon.amish@xxxxxxxxx) wrote:Some old scripts that we have expect interface names starting with eth. But those names are not predictable. So to get predictable names starting with eth*, first I temporarily rename all interface with tmpeth*. This is done via udev rules. SUBSYSTEM=="net", ACTION="" ATTR{address}=="XX:XX:XX:XX:XX:XX", NAME="tmpeth0" SUBSYSTEM=="net", ACTION="" ATTR{address}=="XX:XX:XX:XX:XX:YY", NAME="tmpeth1" SUBSYSTEM=="net", ACTION="" ATTR{address}=="XX:XX:XX:XX:XX:ZZ", NAME="tmpeth2" Then I have a small service (script) which runs before network-pre.target to convert these names back to eth* #search for network interface with name starting from "tmpeth" and rename them to "eth" /usr/bin/find /sys/class/net -maxdepth 1 -name "tmpeth[0-9]" -type l -printf "%f\n" | while read tmpiface; do /usr/bin/ip link set dev "$tmpiface" name "$(echo $tmpiface | sed s/tmpeth/eth/)"; done This ensures that I have predictable names starting with eth*. And it is working fine from 2-3 years. Even with current issue, name assignment is working fine.This cannot work and is necesarily race. Stay out of the ethXYZ namespace, that's the kernel's namespace. Pick any other names, i.e. "foobar0", "foobar1", but otherwise you just have a racy racy mess, because the kernel might take the name whenever it pleases.No I dont think this is race. Because my script runs after Udev has finished assigning the interfaces names.device probing can take any time it wants. there isn't a point in time where everything is probed.
These are internal PCI LAN cards. I believe these gets probed (and named) sufficiently early.
And then we can expect names assigned by Udev to remain same.
And I can see in the logs that names are not changed after my script runs.
Also this has been working successfully for me from 2 or more years.
But after today's update, something is breaking all the systems.
Additionally just now on other system I see eth2 (instead of eth1) being renamed to eth0.
I just want to know what changed and where? (Kernel or Systemd?).
Also another point is, I have set ConfigureWithoutCarrier=yes
in network files and all are static IPs, so systemd-networkd
should have configured the devices even if links are not up. But
its not doing that anymore either after today's update.
Regards
Amish.
Lennart -- Lennart Poettering, Berlin