Pourquoi * BSD utilise-t-il des noms spécifiques aux pilotes pour les interfaces réseau? Cela implique-t-il des limitations?

12

Je remarque que selon la marque de la carte réseau, les noms d'interface diffèrent (selon le pilote, je suppose).

  • Pourquoi * BSD utilise-t-il des noms spécifiques aux pilotes pour les interfaces réseau?
  • Cela signifie-t-il qu'il n'y a pas de couche d'abstraction décrivant "une interface réseau générique" dans le noyau, de sorte que chaque pilote serait adressé en interne via sa propre API?
  • (comment) affecte-t-il les sous-systèmes comme l'agrégation de liens, la mise en forme du trafic, la QoS ( ALTQ ), le filtrage et autres?

Plus précisément, il ressemble à pfSense, je ne peux pas utiliser ALTQ avec une interface virtuelle d'agrégation de liens (LAG).

S'agit-il d'une limitation interne BSD due à l'absence d'une couche d'abstraction appropriée?

Totor
la source

Réponses:

7

Pourquoi * BSD utilise-t-il des noms spécifiques aux pilotes pour les interfaces réseau?

C'est juste un choix historique. Les lettres du nom proviennent du pilote qui parle à la carte, elles seront donc les mêmes pour deux interfaces distinctes si elles utilisent le même pilote.

Il a un avantage pratique: sur BSD, les pilotes réseau ont leurs propres pages de manuel dans la section 4. Donc, dc(4)vous parle du pilote DEC 21143, qui contrôlerait la dc0carte réseau.

Vous le voyez également dans d'autres parties de BSD Unix, comme les disques durs.

S'agit-il d'une limitation interne BSD due à l'absence d'une couche d'abstraction appropriée?

Non.

Pour ce que ça vaut, Linux emprunte un chemin similaire . L'époque des règles de dénomination simples pour les adaptateurs Ethernet est en train de disparaître, car la mise en réseau devient plus compliquée.

Warren Young
la source
Je vous remercie. Savez-vous pourquoi je ne peux pas utiliser ALTQ avec une agrégation de liens alors?
Totor
Une question par question, s'il vous plaît. Concentrons-nous sur le nommage des périphériques BSD.
Warren Young
Je n'appellerais pas le nouveau périphérique réseau udev nommant un chemin similaire à BSD. Pour autant que je sache, la façon par défaut est d'utiliser une sorte de chemin de bus pour identifier les périphériques, pas le nom du pilote avec un schéma de numérotation aléatoire.
Pavel Šimerda
@ PavelŠimerda: Je voulais simplement dire que les systèmes Linux qui utilisent ce système d'utilisation ne sont plus à eth0travers ethINFINITY. Vous ne pourrez plus simplement taper ifconfig eth0et vous attendre à regarder la première interface Ethernet, ce qui rend ces systèmes Linux fonctionnellement similaires du point de vue de l'interface utilisateur à FreeBSD, où vous avez besoin soit d' une connaissance a priori des noms des interfaces sur le système, ou vous devez d'abord obtenir une liste avec une ifconfigcommande non qualifiée . Les mécanismes sous-jacents du noyau sont bien sûr complètement différents.
Warren Young
5

Le choix d'utiliser des noms génériques ou spécifiques au pilote n'a rien à voir avec une limitation du pilote.

C'est surtout un choix cosmétique. L'utilisation de noms génériques a l'avantage de masquer des informations qui sont presque toujours hors de propos - une interface réseau est une interface réseau, peu importe qui l'a créée. Les capacités d'un périphérique dépendent du modèle exact et de sa configuration, et non du pilote utilisé. L'avantage des noms spécifiques est pour l'administrateur: si un message d'erreur mentionne eth0(ok, donc lequel est 0 et lequel est 1), c'est moins informatif que s'il mentionne wlan0(ah, c'est l'interface wifi) ou bcm0(ah, c'est l'interface Broadcom).

Sur FreeBSD, les opérations de configuration du réseau fonctionnent en appelant ioctlun socket Unix. Cet ioctl est traité par le code de réseau générique et se répercute sur le pilote approprié si l'ioctl le demande.

Je ne sais pas comment ALTQ interagit avec l'agrégation de liens. Assurez-vous d'utiliser une version récente de FreeBSD, car cela ne fonctionnait pas mais fonctionne maintenant .

Gilles 'SO- arrête d'être méchant'
la source
3

Il est plus facile de savoir à quelle carte réseau vous parlez.

Si vous avez un processeur Intel (igb0) et Realtek (rl0), vous pouvez maintenant les différencier immédiatement.

En outre, différents pilotes prennent en charge différentes fonctionnalités. Certains pilotes prennent en charge pollinget d'autres non. Un certain soutien LRO, TSOet RSSetc. Il est plus facile de suivre ce qui soutien que lorsqu'ils ne sont pas tout simplement nommés eth.

eth pourrait avoir un sens si vous aviez beaucoup d'autres types d'interfaces réseau, mais vous en avez rarement.

Allan Jude
la source
+1, parce que je sais qui tu es. :) Merci pour le podcast !
Warren Young
1

Pourquoi * BSD utilise-t-il des noms spécifiques aux pilotes pour les interfaces réseau?

Pour simplifier les choses. Si vous regardez une interface nommée bge0et jetez un œil aux manuels ou utilisez votre système de liaison mnémonique, vous vous souviendrez rapidement que ce pilote est un Broadcom Gigabit Etherhet . Ce document est également utile.

Cela signifie-t-il qu'il n'y a pas de couche d'abstraction décrivant "une interface réseau générique" dans le noyau, de sorte que chaque pilote serait adressé en interne via sa propre API?

La règle ici est:

  • Utilisez le nom du pilote pour créer un nom de périphérique;
  • Utilisez l'ID PCI le plus bas pour créer le numéro juste après le nom du périphérique;

Aucune couche d'abstraction n'est nécessaire. C'est simple.

(Comment) affecte-t-il les sous-systèmes tels que l'agrégation de liens, la mise en forme du trafic, la QoS (ALTQ), le filtrage et autres?

Les noms d'interface ne doivent pas interférer sur le trafic shaping.

Plus précisément, il ressemble à pfSense, je ne peux pas utiliser ALTQ avec une interface virtuelle d'agrégation de liens (LAG).

Aujourd'hui, cela devrait fonctionner:

S'agit-il d'une limitation interne BSD due à l'absence d'une couche d'abstraction appropriée?

Ce n'est pas qu'il n'y ait pas de couche appropriée pour gérer cela. C'est parce que vous pouvez utiliser d'autres ressources pour gérer ces noms comme créer des noms d'interface ( /etc/rc.conf), ou changer son identifiant pci dans la configuration de la carte mère. Et comme l'ont dit d'autres sur cette question, même Linux va sur cette voie avec biosdevname.


la source