インターフェース名(ex: enp1s0)とPCIe BDF名(ex: 02:00.1)を一度に調べる簡単な方法をメモ。
( PCIe BDF = Bus:Device.Function )
これまでは新しいNICを追加する度に、 lspci | grep -i <vendor_name>
で追加したインターフェースのPCIe番号を探し、$ip a
で表示されるインターフェース名から目的のものらしきものを探しては ethtools -i <interface_name>
で PCIe BDF を調べて確認していました。
メンドクサイな~ と思っていたら、 $udevadm info /sys/class/net/<dev>
に必要な情報が全部載っており、以下1行で表示できる事を発見。
$ for DEV in $(ls /sys/class/net/); do udevadm info /sys/class/net/$DEV | grep -e INTERFACE -e "ID_PATH=pci" -e ID_MODEL_FROM_DATABASE; echo "---"; done
見やすく書くとこんな感じ
# !/bin/bash
for DEV in $(ls /sys/class/net/)
do
udevadm info /sys/class/net/$DEV | grep -e INTERFACE -e "ID_PATH=pci" -e ID_MODEL_FROM_DATABAS
echo "---"
done
--> 追記:実は
lshw -class network
という便利なコマンドがあったという罠。
ebiken@supermicro:~$ sudo lshw -class network
*-network DISABLED
description: Ethernet interface
product: FastLinQ QL45000 Series 100GbE Controller
vendor: QLogic Corp.
physical id: 0
bus info: pci@0000:02:00.0
logical name: enp2s0
version: 10
serial: 00:0e:1e:c6:40:92
width: 64 bits
clock: 33MHz
capabilities: pm vpd msi msix pciexpress bus_master cap_list rom ethernet physical fibre autonegotiation
configuration: autonegotiation=on broadcast=yes driver=qede driverversion=8.4.0.0 firmware=mfw 8.9.2.0 storm 8.4.2.0 latency=0 link=no multicast=yes
resources: irq:26 memory:b8080000-b80bffff memory:b8000000-b807ffff memory:b80c0000-b80cffff memory:d6500000-d653ffff
*-network:0
description: Ethernet interface
product: MT27700 Family [ConnectX-4]
vendor: Mellanox Technologies
physical id: 0
...
<-- 追記
2日に1回は ethtool -i
してるので、これからは楽できそうです。
output memo
- ip a / ethtool 利用:
- インターフェース名(enpXsY)とlspci BDF(X:Y.0)が一致していない場合、 ethtool -i を延々と繰り返すことになりツライ。
ebiken@supermicro:~$ lspci | grep FastLinQ
02:00.0 Ethernet controller: QLogic Corp. FastLinQ QL45000 Series 100GbE Controller (rev 10)
ebiken@supermicro:~$ ip a | grep ^[0-9]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
3: enp6s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
4: enp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
5: ens1f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-ens1f0 state UP group default qlen 1000
6: ens1f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-ens1f1 state UP group default qlen 1000
7: ens3f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
8: ens3f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
ebiken@supermicro:~$ ethtool -i enp2s0
driver: qede
version: 8.4.0.0
firmware-version: mfw 8.9.2.0 storm 8.4.2.0
expansion-rom-version:
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
- 1行コマンドで一覧表示
- ConnectX-4 Lx はインターフェース名(enpXsY)とlspci BDF(X:Y.0)が一致していない
ebiken@supermicro:~$ for DEV in $(ls /sys/class/net/); do udevadm info /sys/class/net/$DEV | grep -e INTERFACE -e "ID_PATH=pci" -e ID_MODEL_FROM_DATABASE; echo "---"; done
E: INTERFACE=br0
---
E: INTERFACE=br-ens1f0
---
E: INTERFACE=br-ens1f1
---
E: ID_MODEL_FROM_DATABASE=FastLinQ QL45000 Series 100GbE Controller (FastLinQ QL45611H 100GbE Adapter)
E: ID_PATH=pci-0000:02:00.0
E: INTERFACE=enp2s0
---
E: ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
E: ID_PATH=pci-0000:05:00.0
E: INTERFACE=enp5s0
---
E: ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
E: ID_PATH=pci-0000:06:00.0
E: INTERFACE=enp6s0
---
E: ID_MODEL_FROM_DATABASE=MT27700 Family [ConnectX-4]
E: ID_PATH=pci-0000:03:00.0
E: INTERFACE=ens1f0
---
E: ID_MODEL_FROM_DATABASE=MT27700 Family [ConnectX-4]
E: ID_PATH=pci-0000:03:00.1
E: INTERFACE=ens1f1
---
E: ID_MODEL_FROM_DATABASE=MT27710 Family [ConnectX-4 Lx]
E: ID_PATH=pci-0000:81:00.0
E: INTERFACE=ens3f0
---
E: ID_MODEL_FROM_DATABASE=MT27710 Family [ConnectX-4 Lx]
E: ID_PATH=pci-0000:81:00.1
E: INTERFACE=ens3f1
---