Answers:
* BSD为什么将驱动程序专用名称用于网络接口?
这只是一个历史选择。名称中的字母来自与卡通讯的驱动程序,因此,如果两个碰巧使用相同的驱动程序,则对于两个单独的接口它们将是相同的。
它确实具有一个实际的好处:在BSD上,网络驱动程序在第4节中有其自己的手册页。因此,dc(4)
向您介绍了将控制dc0
网络适配器的DEC 21143驱动程序。
您也可以在BSD Unix的其他部分(例如硬盘)中看到这一点。
由于缺少适当的抽象层,这是BSD的内部限制吗?
没有。
就其价值而言,Linux正在走类似的道路。随着网络变得越来越复杂,用于以太网适配器的简单命名规则的时代正在消失。
eth0
thru ethINFINITY
。您将不再能够只键入ifconfig eth0
并期望您将看到第一个以太网接口,从用户界面的角度来看,这使此类Linux系统在功能上与FreeBSD相似,在FreeBSD中,您需要先验知识的名称。系统上的接口,或者您首先需要获取带有不合格ifconfig
命令的列表。底层内核机制当然是完全不同的。
使用通用名称或特定于驱动程序的名称的选择与任何驱动程序限制无关。
这主要是化妆品的选择。使用通用名称的优点是隐藏了几乎总是不相关的信息-网络接口就是网络接口,无论是谁创建的。设备的功能取决于确切的型号及其配置,而不取决于所使用的驱动程序。特定名称的好处是对管理员而言:如果提到一条错误消息eth0
(好的,那么哪一个是0,哪一个是1),它的信息量就比提到wlan0
(啊,这是wifi接口)或bcm0
(啊,那是Broadcom界面)。
在FreeBSD上,网络设置操作通过ioctl
在Unix套接字上调用来进行。该ioctl由通用网络代码处理,并在ioctl要求的情况下滴流到相关的驱动程序。
我不知道ALTQ如何与链接聚合交互。确保使用最新版本的FreeBSD,因为以前该版本不起作用,但现在可以使用。
* BSD为什么将驱动程序专用名称用于网络接口?
使事情变得简单。如果您查看一个名为的接口bge0
并查看手册或使用助记符链接系统,您将很快记住该驱动程序是Broadcom千兆以太网。该文档也很有用。
这是否意味着内核中没有描述“通用网络接口”的抽象层,所以每个驱动程序都将通过自己的API在内部进行寻址?
这里的规则是:
无需抽象层。这么简单。
(如何)影响链路聚合,流量整形,QoS(ALTQ),过滤等子系统?
接口名称不应干扰流量交换。
准确地说,在pfSense下,我无法将ALTQ与链接聚合(LAG)虚拟接口一起使用。
今天它应该工作:
由于缺少适当的抽象层,这是BSD的内部限制吗?
不是说没有合适的层来处理这个问题。这是因为您可以使用其他资源来处理这些名称,例如创建接口名称(/etc/rc.conf
)或在主板设置上更改其pci id。就像其他人在这个问题上所说的那样,即使Linux也会使用biosdevname
。