Warum verwendet *BSD treiberspezifische Namen für Netzwerkschnittstellen? Bringt das Einschränkungen mit sich?

Warum verwendet *BSD treiberspezifische Namen für Netzwerkschnittstellen? Bringt das Einschränkungen mit sich?

Mir ist aufgefallen, dass die Schnittstellennamen je nach Marke der Netzwerkkarte unterschiedlich sind (ich nehme an, das hängt vom Treiber ab).

  • Warum verwendet *BSD treiberspezifische Namen für Netzwerkschnittstellen?
  • Bedeutet dies, dass es im Kernel keine Abstraktionsschicht gibt, die „eine generische Netzwerkschnittstelle“ beschreibt, sodass jeder Treiber intern über seine eigene API angesprochen würde?
  • (wie) wirkt es sich auf Subsysteme wie Link Aggregation, Traffic Shaping, QoS aus (ALTQ), Filterung und andere?

Genauer gesagt sieht es so aus, als ob ich unter pfSense ALTQ nicht mit einer virtuellen Link Aggregation (LAG)-Schnittstelle verwenden kann.

Handelt es sich hierbei um eine BSD-interne Einschränkung aufgrund des Fehlens einer geeigneten Abstraktionsschicht?

Antwort1

Warum verwendet *BSD treiberspezifische Namen für Netzwerkschnittstellen?

Es ist nur eine historische Entscheidung. Die Buchstaben im Namen stammen von dem Treiber, der mit der Karte kommuniziert, daher sind sie für zwei separate Schnittstellen gleich, wenn sie zufällig denselben Treiber verwenden.

Es hat einen praktischen Vorteil: Unter BSD haben die Netzwerktreiber ihre eigenen Manualpages in Abschnitt 4.dc(4)dc0informiert Sie über den Treiber DEC 21143, der den Netzwerkadapter steuert .

Sie sehen dies auch in anderen Teilen von BSD Unix, beispielsweise bei Festplatten.

Handelt es sich hierbei um eine BSD-interne Einschränkung aufgrund des Fehlens einer geeigneten Abstraktionsschicht?

NEIN.

Wie dem auch sei,Linux geht einen ähnlichen Weg. Die Zeiten einfacher Benennungsregeln für Ethernet-Adapter sind vorbei, da die Vernetzung immer komplexer wird.

Antwort2

Die Entscheidung, generische oder treiberspezifische Namen zu verwenden, hat nichts mit etwaigen Treiberbeschränkungen zu tun.

Es ist hauptsächlich eine kosmetische Entscheidung. Die Verwendung generischer Namen hat den Vorteil, dass Informationen verborgen werden, die fast immer irrelevant sind – eine Netzwerkschnittstelle ist eine Netzwerkschnittstelle, egal, wer sie erstellt hat. Die Fähigkeiten eines Geräts hängen vom genauen Modell und seiner Konfiguration ab, nicht davon, welcher Treiber verwendet wird. Der Vorteil spezifischer Namen liegt für den Administrator: Wenn eine Fehlermeldung erwähnt eth0(ok, also welches ist 0 und welches ist 1), ist sie weniger informativ, als wenn sie erwähnt wlan0(ah, das ist die WLAN-Schnittstelle) oder bcm0(ah, das ist die Broadcom-Schnittstelle).

Unter FreeBSD funktionieren Netzwerk-Setup-Operationen durch den Aufrufioctlauf einem Unix-Socket. Dieses Ioctl wird vom allgemeinen Netzwerkcode verarbeitet und an den entsprechenden Treiber weitergegeben, wenn das Ioctl dies verlangt.

Ich weiß nicht, wie ALTQ mit Link Aggregation interagiert. Stellen Sie sicher, dass Sie eine aktuelle Version von FreeBSD verwenden, dadas hat früher nicht funktioniert, jetzt aber.

Antwort3

So lässt sich leichter erkennen, mit welcher Netzwerkkarte Sie kommunizieren.

Wenn Sie eine Intel-Netzwerkkarte (igb0) und eine Realtek-Netzwerkkarte (rl0) haben, können Sie sie jetzt sofort unterscheiden.

Außerdem unterstützen verschiedene Treiber unterschiedliche Funktionen. Manche Treiber unterstützen pollingund manche nicht. Manche unterstützen LROund TSOso RSSweiter. Es ist einfacher nachzuverfolgen, welche welche unterstützen, wenn sie nicht alle nur benannt sind eth.

ethkönnte sinnvoll sein, wenn Sie über viele andere Arten von Netzwerkschnittstellen verfügen, ist aber selten der Fall.

Antwort4

Warum verwendet *BSD treiberspezifische Namen für Netzwerkschnittstellen?

Um die Dinge einfach zu machen. Wenn Sie sich eine Schnittstelle namensbge0und werfen Sie einen Blick in die Handbücher oder verwenden Sie IhreMnemotechnisches VerknüpfungssystemSie werden schnell merken, dass dieser Treiber einBroadcom Gigabit Ethernet.DasDokument ist auch nützlich.

Bedeutet dies, dass es im Kernel keine Abstraktionsschicht gibt, die „eine generische Netzwerkschnittstelle“ beschreibt, sodass jeder Treiber intern über seine eigene API angesprochen würde?

Hier gilt die Regel:

  • Verwenden Sie den Treibernamen, um einen Gerätenamen zu erstellen;
  • Verwenden Sie die niedrigste PCI-ID, um die Nummer direkt nach dem Gerätenamen zu erstellen.

Keine Abstraktionsschicht erforderlich. So einfach ist das.

(Wie) wirkt es sich auf Subsysteme wie Link Aggregation, Traffic Shaping, QoS (ALTQ), Filterung und andere aus?

Schnittstellennamen sollten die Verkehrsgestaltung nicht beeinträchtigen.

Genauer gesagt sieht es so aus, als ob ich unter pfSense ALTQ nicht mit einer virtuellen Link Aggregation (LAG)-Schnittstelle verwenden kann.

Heute sollte es klappen:

Handelt es sich hierbei um eine BSD-interne Einschränkung aufgrund des Fehlens einer geeigneten Abstraktionsschicht?

Es ist nicht so, dass es keine geeignete Ebene gibt, um dies zu handhaben. Es liegt daran, dass Sie andere Ressourcen verwenden könnten, um diese Namen zu handhaben, wieErstellen von Schnittstellennamen( /etc/rc.conf), oderÄndern der PCI-IDvom Motherboard-Setup. Und wie andere zu dieser Frage bereits sagten, geht sogar Linux diesen Weg mit biosdevname.

verwandte Informationen