Linux
rfkill 輸出中的設備名稱與來自 ip 的設備名稱不匹配
rfkill 命令列出的設備與 ip 命令列出的設備名稱完全不同:
> rfkill ID TYPE DEVICE SOFT HARD 0 wwan tpacpi_wwan_sw unblocked blocked 1 wlan phy0 unblocked blocked 8 wlan phy7 unblocked unblocked > ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether 1d:28:4c:95:e6:9b brd ff:ff:ff:ff:ff:ff 3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 22:5e:9b:23:24:86 brd ff:ff:ff:ff:ff:ff 25: wwp0s20u4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 2e:e1:3b:d9:bc:b2 brd ff:ff:ff:ff:ff:ff 26: wlxda2487111f99: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000 link/ether da:24:87:11:1f:99 brd ff:ff:ff:ff:ff:ff
為什麼會這樣,我如何確定它們是如何匹配的?
我讀了這篇文章,解釋瞭如何分配使用 ip 的設備名稱:為什麼我的乙太網介面被稱為 enp0s10 而不是 eth0? 但是 rfkill 使用的設備名稱是如何分配的?
無線有兩個方面:
- 無線硬體設備phy,通常命名為phyX。
- 其關聯的網路介面開發通常命名為wlanY。
對於給定的無線硬體設備 phyX,甚至可以創建與其相關聯的附加網路介面,只要它有能力這樣做。這就是例如可以使用同一張卡(當它有能力時)同時作為客戶端和接入點的方式。這可能就是為什麼有一個額外的層。該較低層全部由
iw
命令管理,而不是ip link
僅控制最終網路介面的命令。與此分開,系統可以選擇根據所謂的一致網路介面設備命名或也稱為可預測的網路介面名稱來重命名(從wlanY)網路介面。這是一個不相關的話題,因為猜測phyX(通常是動態的)和任何名稱之間的關聯無濟於事。
iw
的手冊頁幾乎是空的,但該命令仍然有一個(非常)大的幫助頁面。# iw help | less [...] dev List all network interfaces for wireless hardware. dev <devname> info Show information for this interface. [...]
對於給定的網路介面wlanY, using
iw dev wlanY info
將在其結果中顯示一個名為的條目wiphy
和一個索引。那是匹配的phy介面的索引 X。所以你可以得到wlanY -> phyX關係。例子:
# iw dev wlan1 info Interface wlan1 ifindex 45 wdev 0x300000001 addr 16:c3:0c:a5:63:62 type managed wiphy 3 txpower 0.00 dBm
或者,您可以獲得按 phyX 排序的硬體設備列表(顯示
phy#X
)及其匹配的網路介面。例如:# iw dev phy#4 Interface wlan2 ifindex 46 wdev 0x500000001 addr 2a:5f:7f:7a:30:1b type managed txpower 0.00 dBm phy#3 Interface wlan1 ifindex 45 wdev 0x300000001 addr 16:c3:0c:a5:63:62 type managed txpower 0.00 dBm phy#0 Interface wlan0 ifindex 3 wdev 0x1 addr be:2d:23:03:29:c5 type managed txpower 0.00 dBm
rfkill顯示**rfkillZ和phyX之間的關係(除了 LTE 調製解調器和藍牙)。
# rfkill -o ID,TYPE,DEVICE,SOFT,HARD list ID TYPE DEVICE SOFT HARD 0 wlan phy0 unblocked unblocked 4 wlan phy3 unblocked unblocked 5 wlan phy4 unblocked unblocked 9 bluetooth hci0 blocked unblocked
通過瀏覽符號連結並閱讀
/sys/class/
資訊中可用的內容,也可以通過多種可能的方式獲得:從wlan到phy到rfkill:
$ ls -l /sys/class/net/wlan1/phy80211 lrwxrwxrwx. 1 root root 0 Sep 1 20:58 /sys/class/net/wlan1/phy80211 -> ../../ieee80211/phy3 $ grep ^ /sys/class/net/*/phy80211/name /sys/class/net/wlan0/phy80211/name:phy0 /sys/class/net/wlan1/phy80211/name:phy3 /sys/class/net/wlan2/phy80211/name:phy4 $ ls -1d /sys/class/net/*/phy80211/rfkill* /sys/class/net/wlan0/phy80211/rfkill0 /sys/class/net/wlan1/phy80211/rfkill4 /sys/class/net/wlan2/phy80211/rfkill5
從rfkill到phy到wlan:
$ ls -l /sys/class/rfkill/rfkill4/device lrwxrwxrwx. 1 root root 0 Sep 1 21:05 /sys/class/rfkill/rfkill4/device -> ../../phy3 $ grep ^ /sys/class/rfkill/rfkill*/device/name /sys/class/rfkill/rfkill0/device/name:phy0 /sys/class/rfkill/rfkill4/device/name:phy3 /sys/class/rfkill/rfkill5/device/name:phy4 $ ls -1d /sys/class/rfkill/rfkill*/device/device/ieee80211/* /sys/class/rfkill/rfkill0/device/device/ieee80211/phy0 /sys/class/rfkill/rfkill4/device/device/ieee80211/phy3 /sys/class/rfkill/rfkill5/device/device/ieee80211/phy4
(上面的藍牙設備佈局不同,所以不會這樣顯示)
ls -1d /sys/class/rfkill/rfkill*/device/device/net/* /sys/class/rfkill/rfkill0/device/device/net/wlan0 /sys/class/rfkill/rfkill4/device/device/net/wlan1 /sys/class/rfkill/rfkill5/device/device/net/wlan2 # iw phy phy4 interface add onemorewlan type managed addr 12:34:56:78:ab:cd $ ls -1d /sys/class/ieee80211/phy*/device/net/* /sys/class/ieee80211/phy0/device/net/wlan0 /sys/class/ieee80211/phy3/device/net/wlan1 /sys/class/ieee80211/phy4/device/net/onemorewlan /sys/class/ieee80211/phy4/device/net/wlan2
你明白了。