为什么 *BSD 使用网络接口的驱动程序特定名称?这是否意味着限制?

为什么 *BSD 使用网络接口的驱动程序特定名称?这是否意味着限制?

我注意到,根据网卡的品牌,接口名称有所不同(我想取决于驱动程序)。

  • 为什么 *BSD 使用网络接口的驱动程序特定名称?
  • 这是否意味着内核中没有描述“通用网络接口”的抽象层,因此每个驱动程序都将通过其自己的 API 在内部进行寻址?
  • (如何)影响链路聚合、流量整形、QoS 等子系统(ALTQ)、过滤等?

准确地说,在 pfSense 下,我无法将 ALTQ 与链路聚合 (LAG) 虚拟接口一起使用。

这是由于缺乏适当的抽象层而导致的 BSD 内部限制吗?

答案1

为什么 *BSD 使用网络接口的驱动程序特定名称?

这只是历史的选择。名称中的字母来自与卡通信的驱动程序,因此如果两个单独的接口碰巧使用相同的驱动程序,则它们将是相同的。

它确实有一个实际的好处:在 BSD 上,网络驱动程序在第 4 节中有自己的手册页。因此,dc(4)告诉您有关 DEC 21143 驱动程序的信息,该驱动程序将控制dc0网络适配器。

您在 BSD Unix 的其他部分也可以看到这一点,例如硬盘。

这是由于缺乏适当的抽象层而导致的 BSD 内部限制吗?

不。

物有所值,Linux 也正走着类似的道路。随着网络变得更加复杂,以太网适配器简单命名规则的时代正在消失。

答案2

选择使用通用名称或特定于驱动程序的名称与任何驱动程序限制无关。

这主要是化妆品的选择。使用通用名称的优点是隐藏几乎总是不相关的信息——网络接口就是网络接口,无论是谁创建的。设备的功能取决于确切的型号及其配置,而不取决于所使用的驱动程序。特定名称的优点是对于管理员来说:如果错误消息提到eth0(好吧,哪一个是 0,哪一个是 1),它比提到wlan0(啊,那是 wifi 接口)或bcm0(啊,那是博通接口)。

在 FreeBSD 上,网络设置操作通过调用ioctl在 Unix 套接字上。该 ioctl 由通用网络代码处理,并在 ioctl 需要时向下传递到相关驱动程序。

我不知道 ALTQ 如何与链路聚合交互。确保使用最新版本的 FreeBSD,如下所示这曾经不起作用,但现在可以了

答案3

它可以更轻松地判断您正在与哪个网卡通信。

如果您有 Intel (igb0) 和 Realtek (rl0) 网卡,您现在可以立即区分它们。

此外,不同的驱动程序支持不同的功能。有些驱动程序支持polling,有些则不支持。一些支持LRO等等TSORSS当它们不是全部被命名时,更容易跟踪哪些支持eth

eth如果您有很多其他类型的网络接口,这可能是有意义的,但您很少这样做。

答案4

为什么 *BSD 使用网络接口的驱动程序特定名称?

让事情变得简单。如果您查看名为的接口bge0并查看手册或使用您的助记词链接系统你很快就会记住这个司机是Broadcom 千兆位以太网文档也很有用。

这是否意味着内核中没有描述“通用网络接口”的抽象层,因此每个驱动程序都将通过其自己的 API 在内部进行寻址?

这里的规则是:

  • 使用驱动程序的名称创建设备名称;
  • 使用最低的 PCI id 在设备名称后面创建编号;

不需要抽象层。就这么简单。

(如何)影响链路聚合、流量整形、QoS (ALTQ)、过滤等子系统?

接口名称不应干扰流量整形。

准确地说,在 pfSense 下,我无法将 ALTQ 与链路聚合 (LAG) 虚拟接口一起使用。

今天它应该可以工作:

这是由于缺乏适当的抽象层而导致的 BSD 内部限制吗?

这并不是说没有合适的层来处理这个问题。这是因为您可以使用其他资源来处理这些名称,例如创建接口名称/etc/rc.conf), 或者更改它的 pci id在主板设置上。正如其他人在这个问题上所说的那样,即使 Linux 也会走上这条路biosdevname

相关内容