為什麼 *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等等TSORSSeth

eth如果您有很多其他類型的網路接口,這可能是有意義的,但您很少這樣做。

答案4

為什麼 *BSD 使用網路介面的驅動程式特定名稱?

讓事情變得簡單。如果您查看名為的介面bge0並查看手冊或使用您的助記詞連結系統你很快就會記住這個司機是Broadcom 千兆位元以太網文件也很有用。

這是否意味著核心中沒有描述「通用網路介面」的抽象層,因此每個驅動程式都將透過自己的 API 在內部進行尋址?

這裡的規則是:

  • 使用驅動程式的名稱建立設備名稱;
  • 使用最低的 PCI id 在設備名稱後面建立編號;

不需要抽象層。就這麼簡單。

(如何)影響連結聚合、流量整形、QoS (ALTQ)、過濾等子系統?

介面名稱不應幹擾流量整形。

準確地說,在 pfSense 下,我無法將 ALTQ 與連結聚合 (LAG) 虛擬介面一起使用。

今天它應該可以工作:

這是由於缺乏適當的抽象層而導致的 BSD 內部限制嗎?

這並不是說沒有合適的層來處理這個問題。這是因為您可以使用其他資源來處理這些名稱,例如建立介面名稱/etc/rc.conf), 或者更改它的 pci id在主機板設定上。正如其他人在這個問題上所說的那樣,即使 Linux 也會走上這條路biosdevname

相關內容