rfkill 输出中的设备名称与 ip 中的设备名称不匹配

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 使用的设备名称是如何分配的呢?

答案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

你明白了。

相关内容