Linux

rfkill 輸出中的設備名稱與來自 ip 的設備名稱不匹配

  • September 2, 2020

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, usingiw 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顯示**rfkillZphyX之間的關係(除了 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/資訊中可用的內容,也可以通過多種可能的方式獲得:

wlanphyrfkill

$ 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

rfkillphywlan

$ 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

你明白了。

引用自:https://unix.stackexchange.com/questions/607389