web-dev-qa-db-ja.com

「iw set freq」のパラメーターを計算する方法

80MHzのチャネル幅を持つ802.11acワイヤレスネットワークの問題のトラブルシューティングを求められました。ワイヤレスデバイスを監視モードで設定するときに、80 MHzのチャネル幅を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チャネル幅になります。

2
Huckle

OPには遅すぎるかもしれませんが、Google経由で到着する人々にとっては...

802.11acでは、80 MHzチャネルは4つの20 MHzチャネルをカバーします。 20 MHzチャネルの1つが制御チャネルとして指定されています。 OPによって引用された図 はこれをうまく示しています。チャネル40を制御チャネルとして使用する場合、80 MHzチャネルはチャネル36、40、44、および48をカバーします。チャネル36は、40 MHzと同じ40 MHzおよび80 MHzチャネルを共有します。ホストがチャネル36でフレームを送信する場合、チャネル40のネットワークは、チャネル36のトラフィックがクリアされるのを待たなくても、20 MHzのチャネル40を使用して送信できます。

中心周波数iw <dev> set freqは、80 MHzチャネルの中心に必要です。中心周波数は、図の80 MHzチャネル境界から(5170 MHz + 5250 MHz)/ 2 = 5210 MHzとして、またはサブチャネル中心周波数(5180 MHz + 5240 MHz)/ 2 = 5210 MHzから計算できます。

何らかの理由でチャートが手元にない場合、チャネルから周波数へのマッピングを取得する別の方法は、[周波数]セクションにサポートされているチャネルとその20 MHz中心周波数の両方をリストするiw listを使用することです。

チャネル40は5200 MHzなので、Sudo iw wlo1 set freq 5200 80 5210が機能しているはずです。

Intel NICの使用について言及しているが、どのモデルについて言及していない。チェックするいくつかの事柄:

  1. VHTはiw listの出力の「機能」セクションに表示されます。 AC7265を使用していますが、最大2つのストリームで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を使用する場合は 大幅なパフォーマンスの向上 です。

5
wrdieter