Why did the naming convention of network interfaces change in linux?

I recall not too long ago, interfaces were identified by eth0, eth1, wlan0, etc.

Now I'm finding interface names like enp0s3, enp0s8, etc.

In another question I asked here only moments ago, someone mentioned that the new format was:

"ethernet network peripheral # serial #"

and that got me wondering:

1.Why did it change?
2.When did it change?
3.What does the first number signify?
4.Why does the 's' stand for serial, why is that in the interface name?
5.What does the second number signify?

I've googled around for answers but didn't find anything that covers the transition from the old naming system to the new one.


Solution 1:

Why it changed

The classic naming scheme for network interfaces applied by the kernel is to simply assign names beginning with "eth0", "eth1", ... to all interfaces as they are probed by the drivers. As the driver probing is generally not predictable for modern technology this means that as soon as multiple network interfaces are available the assignment of the names "eth0", "eth1" and so on is generally not fixed anymore and it might very well happen that "eth0" on one boot ends up being "eth1" on the next. This can have serious security implications, for example in firewall rules which are coded for certain naming schemes, and which are hence very sensitive to unpredictable changing names.

http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

When it changed

Depends on what distribution you're using. It startwed with systemd v197. So any distro that is using that version or higher will most likely use this naming convention.

What the letters and numbers mean

I can't find anything to verify this, but I believe the p stands for physical peripheral, and the s stands for slot. The en stands for ethernet. This is just what I gathered from the link above, but it does not explicitly state this. Nor could I find anytning on Google.