Wifi

如何計算“iw set freq”的參數

  • February 29, 2020

我被要求對具有 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 嗎?5210 MHz 用於通道 42?

唯一iw有效的命令是set channel 40,它會產生 20 MHz 的通道寬度。

對於 OP 來說可能為時已晚,但對於通過Google到達的人來說……

在 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應該可以工作。

您提到使用 Intel NIC,但沒有提到使用哪種型號。要檢查的幾件事:

  1. VHT 應該列在 ‘iw list輸出的 ‘capabilities’ 部分。我有一個 AC7265,它支持 MCS 0-9 的 VHT RX 和 TX,最多有兩個流。
  2. 確保您擁有最新的韌體。如果您通過 Ubuntu 獲得核心並且您使用的是最新的 LTS,那麼您可能擁有相當最新的韌體,除非您擁有最新的平台。如果您擁有最新的平台(例如,2017 年的 Skylake),您可能想嘗試硬體支持堆棧。當驅動程序載入時,韌體存在問題的指示符將出現在dmesg引導消息中。假設您的 Intel NIC 使用 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 ,則會顯著提高性能。

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