如何计算“iw set freq”的参数

如何计算“iw set freq”的参数

我被要求解决通道宽度为 80MHz 的 802.11ac 无线网络的问题。在监控模式下设置无线设备时,我在将 80Mhz 通道宽度指定为 时遇到问题iw

我已验证我的调节器域允许 80 MHz 通道

iw reg get
country US: DFS-FCC
    (2402 - 2472 @ 40), (N/A, 30), (N/A)
    (5170 - 5250 @ 80), (N/A, 17), (N/A)
    (5250 - 5330 @ 80), (N/A, 23), (0 ms), DFS
    (5490 - 5730 @ 160), (N/A, 23), (0 ms), DFS
    (5735 - 5835 @ 80), (N/A, 30), (N/A)
    (57240 - 63720 @ 2160), (N/A, 40), (N/A)

但是,当我发出以下iw命令来使用 Channel 40 时,我只收到错误消息。

# iw dev <devname> set freq <control freq> [20|40|80|80+80|160] [<center freq 1>] [<center freq 2>]
$ sudo iw wlo1 set freq 5200 80
command failed: Invalid argument (-22)
$ sudo iw wlo1 set freq 5210 80
command failed: Invalid argument (-22)
$ sudo iw wlo1 set freq 5200 80 5210
command failed: Invalid argument (-22)
$ sudo iw wlo1 set freq 5210 80 5210
command failed: Invalid argument (-22)
$ sudo iw wlo1 set freq 5210 80 5200
command failed: Invalid argument (-22)
$ sudo iw wlo1 set channel 42
command failed: Invalid argument (-22)

我对控制频率和中心频率之间的区别以及它们与通道号的关系也有点困惑。维基百科WLAN 信道列表表示信道宽度为 20 MHz 的信道 40 跨越频率 5190-5210 MHz。这似乎意味着,如果我使用 80 MHz 通道宽度,那么我实际上使用的是通道 42,但这也不起作用。这个插图很好地说明了渠道。如果我将“中心频率”解释为“最高频率和最低频率之间的中间频率”,那么那就是 5210 MHz,那么控制频率是多少?频道 40 是 5200 MHz 吗?通道 42 为 5210 MHz?

唯一iw有效的命令是set channel 40,它会产生 20 MHz 通道宽度。

答案1

对于OP来说可能为时已晚,但对于通过谷歌到达的人们来说......

在 802.11ac 中,80 MHz 信道覆盖 4 个 20 MHz 信道。 20 MHz 信道之一被指定为控制信道。这OP引用的数字很好地展示了这一点。当使用通道 40 作为控制通道时,80 MHz 通道将覆盖通道 36、40、44 和 48。通道 36 与 40 MHz 共享相同的 40 MHz 和 80 MHz 通道。如果主机在通道 36 上传输帧,则通道 40 上的网络仍可以使用 20 MHz 通道 40 进行传输,而不必等待通道 36 上的流量清除。

中心频率iw <dev> set freq需要位于 80 MHz 信道的中心。中心频率可以根据图中的 80 MHz 信道边界计算为 (5170 MHz + 5250 MHz) / 2 = 5210 MHz,或者根据子信道中心频率 (5180 MHz + 5240 MHz) / 2 = 5210 MHz。

如果由于某种原因您没有方便的图表,获取通道到频率映射的另一种方法是通过iw list,它在“频率”部分列出了支持的通道及其 20 MHz 中心频率。

频道 40 是 5200 MHz,所以sudo iw wlo1 set freq 5200 80 5210应该可以工作。

您提到使用英特尔网卡,但没有提到哪种型号。需要检查的几件事:

  1. VHT 应列在iw list输出的“功能”部分中。我有一个 AC7265,它支持 MCS 0-9 的 VHT RX 和 TX,最多有两个流。
  2. 确保您拥有最新的固件。如果您通过 Ubuntu 获得内核并且使用的是最新的 LTS,那么您可能拥有相当最新的固件,除非您拥有最新的平台。如果您有最新的平台(例如 2017 年的 Skylake),您可能想尝试硬件支持堆栈dmesg加载驱动程序时,引导消息中将显示固件存在问题的指示符。假设您的英特尔网卡使用 iwlwifi,您应该看到类似“iwlwifi 0000:03:00.0: 已加载固件版本 22.391740.0 op_mode iwlmvm”的内容。如果在最终成功消息之前出现多条失败消息,请不要担心。只要确保最终加载即可。这iwlwifi 驱动程序页面,固件部分描述如果您想确保没有更新版本,如何获取最新固件。
  3. 启用 802.11ac 的模块选项。在 中/etc/modprobe.d/iwlwifi.conf,我有以下内容:

    # /etc/modprobe.d/iwlwifi.conf
    # iwlwifi will dyamically load either iwldvm or iwlmvm depending on the
    # microcode file installed on the system. When removing iwlwifi, first
    # remove the iwl?vm module and then iwlwifi.
    remove iwlwifi \
    (/sbin/lsmod | grep -o -e ^iwlmvm -e ^iwldvm -e ^iwlwifi | xargs /sbin/rmmod) \
    && /sbin/modprobe -r mac80211
    
    options iwlwifi 11n_disable=8 amsdu_size=3
    

选项amsdu_size=3增加传入缓冲区大小足以接收 12 KB 聚合。它会增加驱动程序的内存占用量,但如果没有它,嗅探器将丢弃更大的聚合。

11n_disable=8选项启用传输数据包聚合,这对于监控模式来说并不是严格需要的,但它是一个显着的性能提升如果您在监控模式之外使用过 Wi-Fi。

相关内容