Warum verwendet * BSD treiberspezifische Namen für Netzwerkschnittstellen? Bedeutet dies Einschränkungen?

12

Ich stelle fest, dass die Schnittstellennamen je nach Marke der Netzwerkkarte unterschiedlich sind (ich nehme an, treiberabhängig).

  • 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 wird?
  • (wie) wirkt es sich auf Subsysteme wie Link Aggregation, Traffic Shaping, QoS ( ALTQ ), Filterung und andere aus?

Genau genommen kann ich unter pfSense ALTQ nicht mit einer virtuellen Schnittstelle für Link Aggregation (LAG) verwenden.

Handelt es sich um eine BSD-interne Einschränkung, da keine entsprechende Abstraktionsschicht vorhanden ist?

Totor
quelle

Antworten:

7

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, sodass sie für zwei separate Schnittstellen gleich sind, wenn sie denselben Treiber verwenden.

Es hat einen praktischen Vorteil: Unter BSD haben die Netzwerktreiber ihre eigenen Handbuchseiten in Abschnitt 4. dc(4)Informiert Sie also über den DEC 21143-Treiber, der den dc0Netzwerkadapter steuern würde .

Sie sehen dies auch in anderen Teilen von BSD Unix, z. B. auf Festplatten.

Handelt es sich um eine BSD-interne Einschränkung, da keine entsprechende Abstraktionsschicht vorhanden ist?

Nein.

Für was es wert ist , wird Überschrift Linux einen ähnlichen Weg nach unten . Die Zeiten der einfachen Namensregeln für Ethernet-Adapter verschwinden, da das Netzwerk immer komplizierter wird.

Warren Young
quelle
Vielen Dank. Wissen Sie, warum ich ALTQ dann nicht mit einer Link-Aggregation verwenden kann?
Totor
Bitte eine Frage pro Frage. Konzentrieren wir uns hier auf die Benennung von BSD-Geräten.
Warren Young
Ich würde das neue udev-Netzwerkgerät nicht mit einem ähnlichen Pfad wie BSD bezeichnen. Soweit ich weiß, wird standardmäßig eine Art Buspfad verwendet, um die Geräte zu identifizieren, nicht der Treibername mit einem Zufallszahlenschema.
Pavel Šimerda
@ PavelŠimerda: Ich habe nur gemeint, dass Linux-Systeme, die dieses Schema verwenden, nicht mehr eth0durchlaufen ethINFINITY. Sie werden nicht mehr in der Lage sein zu geben ifconfig eth0und erwartet , dass Sie bei dem ersten Ethernet - Schnittstelle suchen werden, die ein solche Linux - Systeme funktionell ähnlich aus einem Benutzeroberfläche Standpunkt zu FreeBSD macht, wo Sie braucht , entweder a - priori - Wissen über die Namen der Schnittstellen auf dem System, oder Sie müssen zuerst eine Liste mit einem unqualifizierten ifconfigBefehl abrufen . Die zugrunde liegenden Kernelmechanismen sind natürlich völlig anders.
Warren Young
5

Die Auswahl generischer oder treiberspezifischer Namen hat nichts mit einer Treiberbeschränkung zu tun.

Es ist meist eine kosmetische Wahl. Die Verwendung von generischen Namen hat den Vorteil, dass Informationen ausgeblendet werden, die fast immer irrelevant sind - eine Netzwerkschnittstelle ist eine Netzwerkschnittstelle, unabhängig davon, wer sie erstellt hat. Die Funktionen eines Geräts hängen vom genauen Modell und seiner Konfiguration ab und nicht davon, welcher Treiber verwendet wird. Der Vorteil bestimmter Namen ist für den Administrator: Wenn in einer Fehlermeldung erwähnt wird eth0(ok, also ist die eine 0 und die andere 1), ist dies weniger informativ als wenn erwähnt wird wlan0(ah, das ist die WLAN-Schnittstelle) oder bcm0(ah, das ist die WLAN-Schnittstelle) die Broadcom-Schnittstelle).

Unter FreeBSD funktionieren Netzwerk-Setup-Vorgänge, indem ioctlein Unix-Socket aufgerufen wird. Dieses ioctl wird vom generischen Netzwerkcode verarbeitet und läuft auf den entsprechenden Treiber herunter, wenn das ioctl dies verlangt.

Ich weiß nicht, wie ALTQ mit der Linkaggregation interagiert. Stellen Sie sicher, dass Sie eine neuere Version von FreeBSD verwenden, da dies früher nicht funktioniert hat, jetzt aber .

Gilles 'SO - hör auf böse zu sein'
quelle
3

Auf diese Weise können Sie leichter feststellen, mit welcher Netzwerkkarte Sie sprechen.

Wenn Sie einen Intel (igb0) und einen Realtek (rl0) haben, können Sie sie jetzt sofort auseinanderhalten.

Verschiedene Treiber unterstützen auch verschiedene Funktionen. Einige Treiber unterstützen pollingund andere nicht. Eine gewisse Unterstützung LRO, TSOund RSSetc. Es ist leichter zu verfolgen , welche Unterstützung die , wenn sie nicht alle eben genannten eth.

eth Wenn Sie über viele andere Arten von Netzwerkschnittstellen verfügen, ist dies möglicherweise sinnvoll, aber nur selten.

Allan Jude
quelle
+1, weil ich weiß, wer du bist. :) Danke für den Podcast !
Warren Young
1

Warum verwendet * BSD treiberspezifische Namen für Netzwerkschnittstellen?

Um es einfach zu machen. Wenn Sie eine benannte Schnittstelle aufrufen bge0und die Handbücher lesen oder Ihr mnemonisches Link-System verwenden, werden Sie schnell merken, dass es sich bei diesem Treiber um einen Broadcom Gigabit Etherhet handelt . Dieses Dokument 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 wird?

Die Regel hier ist:

  • 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.

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

Schnittstellennamen sollten beim Traffic Shapping nicht stören.

Genau genommen kann ich unter pfSense ALTQ nicht mit einer virtuellen Schnittstelle für Link Aggregation (LAG) verwenden.

Heute sollte es klappen:

Handelt es sich um eine BSD-interne Einschränkung, da keine entsprechende Abstraktionsschicht vorhanden ist?

Es ist nicht so, dass es keine geeignete Schicht dafür gibt. Es liegt daran, dass Sie andere Ressourcen verwenden könnten, um diese Namen zu verarbeiten, wie z. B. das Erstellen von Schnittstellennamen ( /etc/rc.conf) oder das Ändern der PCI-ID im Motherboard-Setup. Und wie von anderen zu dieser Frage gesagt, geht auch Linux diesen Weg mit biosdevname.


quelle