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 使用的设备名称是如何分配的呢?
答案1
无线有两个方面:
- 无线硬件设备物理层,通常命名为物理X。
- 其关联的网络接口开发者通常命名为无线网络。
对于给定的无线硬件设备 phyX,甚至可以创建与其关联的附加网络接口,当它有能力这样做时。这就是为什么可以使用同一张卡(当它有能力时)同时充当客户端和接入点。这可能就是为什么有一个附加层的原因。该较低层全部由命令管理iw
,而不是ip link
仅控制最终网络接口的命令。
除此之外,系统可以选择重命名(从无线网络) 这网络接口根据所谓的一致的网络接口设备命名或也称为可预测的网络接口名称。这是一个不相关的主题,因为它不会更好地猜测之间的关联物理X(通常是动态的)和任何姓名。
iw
的手册页几乎是空的,但该命令仍然有一个(非常)大的帮助页面。
# iw help | less
[...]
dev
List all network interfaces for wireless hardware.
dev <devname> info
Show information for this interface.
[...]
对于给定的网络接口无线网络,使用iw dev wlanY info
将在其结果中显示一个名为的条目wiphy
和一个索引。这是匹配的索引 X物理层界面。所以你可以获得无线网络->物理X关系。
例子:
# 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和物理X(除了 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/
信息中可用的内容,也可以通过不止一种可能的方式获得:
从无线局域网到物理层到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到物理层到无线局域网:
$ 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
你明白了。