J'ai un petit routeur domestique exécutant OpenWrt (sorte de Linux embarqué pour les routeurs). Il a cinq ports Ethernet, un WAN étiqueté et quatre LAN 1 à 4. labeld. Il a les interfaces réseau suivantes définies selon ifconfig
:
root@TIBERIUS: ~ > ifconfig | grep Link
br-lan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
eth0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan1 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan2 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan3 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lan4 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
lo Link encap:Local Loopback
pppoe-wan Link encap:Point-to-Point Protocol
wan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
wlan0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
Comme vous pouvez le voir, un certain nombre d'appareils, mais une seule adresse MAC.
Je comprends que certains de ces appareils sont virtuels. Mettons de côté lo
et pppoe-wan
, c'est le périphérique de bouclage et ma connexion PPPoE. Mais pour les autres, comment suis-je censé pouvoir dire s'ils sont physiques ou virtuels? Je comprends qu'il existe une convention de dénomination pour étiqueter les interfaces virtuelles comme eth0.1
, mais qui n'est évidemment pas respectée ici. Voyons la sortie de ifconfig
pour deux de ces interfaces:
root@TIBERIUS: ~ > ifconfig wan
wan Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15007 errors:0 dropped:0 overruns:0 frame:0
TX packets:12055 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13341276 (12.7 MiB) TX bytes:1831757 (1.7 MiB)
root@TIBERIUS: ~ > ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:23:CD:20:C3:B0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25799 errors:0 dropped:0 overruns:23 frame:0
TX packets:25294 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15481996 (14.7 MiB) TX bytes:15160380 (14.4 MiB)
Interrupt:4
Mis à part le détail obscur d' txqueuelen
avoir un non-zéro pour eth0
, la seule différence frappante est qu'il eth0
a une Interrupt
entrée, qui pour autant que je sache, est une fonctionnalité matérielle. Alors, c'est comme ça que vous dites qu'une interface réseau est physique ou non, en recherchant une Interrupt
entrée dans ifconfig
? Ou existe-t-il une meilleure façon? Un moyen simple et direct de savoir si un périphérique réseau est physique ou virtuel?
Notez qu'il y a une question connexe mais bien qu'elle ait une réponse acceptée, elle n'est pas concluante.
Mise à jour
En réponse à la réponse de Derobert, voici des informations dérivées de ls -l /sys/class/net
:
br-lan -> ../../devices/virtual/net/br-lan
eth0 -> ../../devices/platform/ag71xx.0/net/eth0
lan1 -> ../../devices/platform/dsa.0/net/lan1
lan2 -> ../../devices/platform/dsa.0/net/lan2
lan3 -> ../../devices/platform/dsa.0/net/lan3
lan4 -> ../../devices/platform/dsa.0/net/lan4
lo -> ../../devices/virtual/net/lo
pppoe-wan -> ../../devices/virtual/net/pppoe-wan
wan -> ../../devices/platform/dsa.0/net/wan
[Addendum à cette liste: se wlan0
serait également affiché wlan0 -> ../../devices/platform/ath9k/net/wlan0
, mais lorsque j'ai copié la liste ci-dessus, le WLAN était désactivé, c'est pourquoi il ne s'est pas affiché .]
Je dirais que eth0
c'est le seul appareil. Pas clair ce qui dsa.0
est.
Et en réponse à la réponse de Bryan Agee:
root@TIBERIUS: ~ > cat /etc/config/network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'eth'
option ifname 'eth0'
option proto 'none'
config interface 'lan'
option ifname 'lan1 lan2 lan3 lan4'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.33.1'
option netmask '255.255.255.0'
config interface 'wan'
option ifname 'wan'
option proto 'pppoe'
option username '…'
option password '…'
la source
lshw -class network
lshw
ne figure pas dans la liste des paquets. Un gars bien informé et déterminé pourrait réussir à installer des outils de développementtmpfs
, mais cela en vaut-il la peine? Je vais approfondir ma compréhension des réseaux Linux au moyen d'un PC standard. Ça va être plus facile. Bien que je ne comprenne pas correctement cette configuration de routeur, cela fonctionne bien. Merci de votre aide.Réponses:
Vous pouvez vérifier
/sys
:Ainsi, les périphériques réels s'affichent dans / sys / class / net. Notez que les alias (comme lan: 0) ne le font pas (vous pouvez donc savoir quels sont les alias). Et vous pouvez clairement voir quels sont les matériels réels (lan) et ceux qui ne le sont pas (br0, lo, tun0).
clarifier
Vous pouvez dire lesquels sont réels dans ce qui précède, car les virtuels sont tous virtuels. Et LAN est sur le bus PCI.
Dans votre cas, vous en avez six: eth0, wan et lan1–4. C'est plutôt étrange, car vous dites que vous n'avez que cinq ports au total. Je suppose que eth0 est en fait câblé à une puce de commutation, et les 5 autres ports sont des ports sur ce commutateur. wlan0 est probablement réel aussi (ce serait l'adaptateur sans fil), bien qu'il ne s'affiche pas dans / sys….
Donc, je dirais qu'à toutes fins pratiques, vos ports réels sont wan, lan1–4 et wlan0. br-lan est un pont configuré pour que les 4 ports lan fonctionnent comme un commutateur (vous pourrez donc peut-être diviser ce commutateur).
la source
ag71xx
cela qui me fait penser que c'est du matériel, car il ressemble à un pilote.wlan0
aurait été présente dans la liste des périphériques sous/sys/class/net
chapeau, il a été activé lorsque j'ai copié la liste. :) Je l'ai maintenant ajouté ci-dessus. Je ne suis pas d'accord avec vous sur le nombre d'appareils, je pense qu'il n'y en a que deux, LAN et WLAN. Mais c'est un point mineur… bonne réponse, acceptée, merci!brctrl delif br-lan lan1
(ou similaire) pour supprimer un port du pont. Je soupçonne qu'il fonctionnera alors comme un port séparé (ne faisant pas partie du commutateur LAN).En supposant que votre adresse MAC d'interface n'a pas été usurpée , vous pouvez essayer d'utiliser ethtool :
" Adresse permanente: 00: 00: 00: 00: 00: 00 " indiquera qu'il s'agit d'une interface réseau virtuelle.
La boucle bash suivante affichera l'adresse MAC pour toutes les interfaces réseau:
la source
Je commencerais par regarder dedans
/etc/network/config
; la plupart des distributions ont un fichier similaire pour définir et configurer les périphériques réseau. Dans debian / Ubuntu, c'est / etc / network / interfaces. Si vous deviez publier le contenu de cela, nous pourrions identifier les entrées d'alias, de lien et de pont; le reste serait vos appareils physiques.En regardant la
ifconfig
sortie, vous pouvez voir (comme vous l'avez mentionné) les périphériques qui ont des interruptions (IRQ); beaucoup ont également de la mémoire, contrairement aux interfaces virtuelles.Vous ne pouvez jamais juger uniquement par les adresses mac, car les liaisons ( agrégation de liens ) remplaceront le mac des appareils individuels et les ponts l'utiliseront. Donc, si vous avez deux appareils liés et pontés - une configuration commune pour les hôtes et routeurs virtuels HA - il y aura quatre appareils avec le même mac:
Il est clair que les alias utilisés dans openwrt ne sont pas ceux ci-dessus, mais le concept est valable; Je les ai utilisés car ils sont une pratique standard.
la source
/etc
. Par exemple, les interfaces créées par NetworkManager n'y sont pas mentionnées.Je pense que le simple fait de vérifier si la valeur de
/sys/class/net/<interface>/type
est 1 (ARPHRD_ETHER) devrait suffire pour comprendre si l'appareil est physique.http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30
par exemple. nom de base $ (dirname
grep -l ^1$ /sys/class/net/*/type
)la source