Why does *BSD uses driver specific names for network interfaces?
To make things simple. If you look to an interface named bge0
and take a look at the manuals or use your mnemonic link system you will quickly remember that this driver is a Broadcom Gigabit Etherhet. This document is also usefull.
Does it mean there is no abstraction layer describing "a generic
network interface" in the kernel, so each driver would be internally
addressed via its own API?
The rule here is:
- Use the driver´s name to create a device name;
- Use the lowest PCI id to create the number right after the device name;
No abstraction layer needed. That simple.
(how) does it affect subsystems like link aggregation, traffic
shaping, QoS (ALTQ), filtering and others?
Interface names should not interfere on traffic shapping.
Precisely, it looks like under pfSense, I cannot use ALTQ with a link aggregation (LAG) virtual interface.
Today it should work:
Is this a BSD internal limitation due to the lack of an appropriate
abstraction layer?
It´s not that there isn´t an appropriate layer to handle this. It´s because you could use other resources to handle those names like creating interface names(/etc/rc.conf
), or changing it´s pci id on the motherboard setup. And as said by others on this question, even Linux is going to this path with biosdevname
.