I know the purpose of the "biosdevname" function on Linux, but I'm not sure how exactly this works.
I tested it with Ubuntu 14.04 and Ubuntu 14.10 (both 64-bit server releases) and it seems that they allow it by default - right after the system starts up, my network interface has a name, for example p4p1 instead of eth0 , without configuration it is necessary. As I understand it, in order for biosdevname be enabled, the BOTH of these two conditions must be met:
- boot parameter
biosdevname=1 should be passed to the kernel biosdevname must be installed
As I mentioned, both Ubuntu 14.04 and 14.10 seem to offer biosdevname as the default function: they come with the biosdevname package already installed, I did not need to change grub.cfg either - GRUB_CMDLINE_LINUX_DEFAULT has no parameters and my network interface still has BIOS name ( p*p* ) instead of kernel name ( eth* .)
Later I wanted to restore the name of the old device and the interesting part begins. I decided to experiment a bit while trying to disable biosdevname . Since the biosdevname package is required to work (or therefore I read it here and there), I assumed that removing it would be enough to disable it, so I typed:
sudo apt-get purge biosdevname
To my surprise, after rebooting, my network interface was still p4p1, , so biosdevname clearly worked, although the biosdevname package was destroyed.
As a next step, I applied the appropriate changes to /etc/network/interfaces in to restore the old name of my network interface (deleted entry for p4p1 and added entry for eth0 ). As a result, after another reboot, ifconfig did not report either eth0 or p4p1 , which was further evidence that the OS still understood BIOS names instead of kernel names.
It turned out that I also had to explicitly change the GRUB entry to GRUB_CMDLINE_LINUX_DEFAULT=biosdevname=0 and update GRUB to get the expected result ( biosdevname disabled and the old network interface name is restored).
My question is : how biosdevname work without the biosdevname package? Is in the end it not required? If so, what exactly provides biosdevname functionality and how does it work?