Ubuntu 16.04 changes the way interfaces are named


We’ve been using BBB’s for a long time now and our configuration have been quite dependent on interface naming - since the dongles tend to be swapped around and when they die we need to be able to quick replace the dongle with new ones. In the Ubuntu 14.04 image everything works as we have experienced since the 12.04 image.

Ubuntu 14.04:
Udev: 204-5ubuntu20.15
Kernel: 4.1.15-ti-rt-r40

Ubuntu 16.04:
Udev 229-4ubuntu5

Kernel: 4.4.9-ti-r25

In 16.04 the device names get named eth0, usb0, and the wireless wlx100d7fb73f66 -

The documentation suggest the following to add the following to cmdline :
net.ifnames=0 biosdevname=0

By adding these to /boot/uEnv.txt one can clearly see it’s added:
[ 0.000000] Kernel command line: console=ttyO0,115200n8 root=UUID=b32c4e38-221c-4cf5-b6c5-71ce64770caa ro rootfstype=ext4 rootwait coherent_pool=1M quiet cape_universal=enable net.ifnames=0 biosdevname=0

But this does not change the outcome.

Also the old way of :

echo -n > /etc/udev/rules.d/70-persistent-net.rules
echo -n > /lib/udev/rules.d/75-persistent-net-generator.rules

Does not work either.

From https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

I find that this were changed in udev 197 - but this did not happen in 14.04 which also had an newer udev.

With systemd 197 we have added native support for a number of different naming policies into systemd/udevd proper and made a scheme similar to biosdevname’s (but generally more powerful, and closer to kernel-internal device identification schemes) the default. The following different naming schemes for network interfaces are now supported by udev natively:

  1. Names incorporating Firmware/BIOS provided index numbers for on-board devices (example: eno1)
  2. Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: ens1)
  3. Names incorporating physical/geographical location of the connector of the hardware (example: enp2s0)
  4. Names incorporating the interfaces’s MAC address (example: enx78e7d1ea46da)
  5. Classic, unpredictable kernel-native ethX naming (example: eth0)

By default, systemd v197 will now name interfaces following policy 1) if that information from the firmware is applicable and available, falling back to 2) if that information from the firmware is applicable and available, falling back to 3) if applicable, falling back to 5) in all other cases. Policy 4) is not used by default, but is available if the user chooses so.

So from my understanding policy 4 would usually not be on. So why does it kick in for the wireless on Ubuntu 16.04?