一部のデバイスでWi-Fi P2P(「Wifi Direct」とも呼ばれます)が動作するようにしようとしています。私の目標は、彼らが「グループ所有者」(つまりアクセスポイントの役割)になるようにすることです。しかし、他のシステムでは非常に異なる結果が得られます。私は様々なハードウェアデバイスについて話していますが、考える私の質問はLinuxベースです。
私はPi 4BでRaspberry Pi OSを使用して成功しました。しかし、アラビア語を実行しているBanana Piで同じコマンドを試すと、非常に異なる結果が表示されます。しかし、究極の質問はシステムレベルだと思ってここに質問をするようになりました。
RPi OSで動作する方法は次のとおりです(device_nameは/etc/wpa_supplicant/wpa_supplicant.confに設定されています)。
wpa_cli p2p_group_add
ifconfig p2p-wlan0-0 192.168.0.34 metmask 255.255.0.0
dnsmasq -i p2p-wlan0-0 -F192.168.0.40,192.168.0.250 -p0 -z
wpa_cli set p2p_go_intent 15
ifconfig wlan0 down
wpa_cli wps_pbc
ここからAndroidデバイスから接続すると機能し、DHCP応答を受け取ります。残念ながら、ロギングが多く、他のものと比較することはできません。また試行錯誤を経てネットマスクが255.255.255.0であればこの方法が動作しないことを確認しました! ? ! ?変だがとにかく。
私のBanana Pi(Raspbian、Ubuntu、Armbianなど、いくつかのオペレーティングシステムがあります)で同じコマンドシーケンスを試してみると、いくつかの違いがあります。最初にwlan0を削除すると、それ以降は何も機能しません。したがって、そのままにしておくと「wpa_cli p2p_find」を実行しないと広告が表示されません。または「wpa_cli p2p_listen」。私の考えは少し変ですが、とにかく。ただし、ここではAndroidデバイスがネットワークを見つけて起動しますが、交渉は完了せず、DHCPリースは提供されません。ログ(RPiOSよりArmbianで良い)には、「P2P-DEVICE-FOUND、P2P-PROV-DISC-PBC-REQ」、および「P2P-GO-NEG-REQUEST」シーケンスが表示されますが、それ以降は何もありません。
とにかく、私はさまざまなバリエーション、さまざまなカーネル、さまざまなOSバージョンなどを試しました。可能私のバナナパイにハードウェアの問題がありますが、なぜこれが起こるのかわかりません。 Wi-Fiは一般的に大丈夫で、P2Pはドライバがサポートしていると言う新しいフレームタイプにすぎないと思います(brcmfmacを使用)。
NetworkManagerとのやりとりも奇妙ですが、NetworkManagerをオフにすることはできず、wpa_cliはまだ機能します。以前に syslog で P2P グループを有効にした場合、syslog に次のメッセージが表示されました。
wpa_supplicant: p2p-wlan0-0: interface state UNINITIALIZED->ENABLED
wpa_supplicant: p2p-wlan0-0: AP-ENABLED
wpa_supplicant: p2p-wlan0-0: CTRL-EVENT_CONNECTED
wpa_supplicant: P2P-GROUP-STARTED p2p-wlan0-0 GO .....
wpa_supplicant: bus: Register group object....
NetworkManager: <warn> device (p2p-dev-wlan0): P2P: WPA supplicant notified a group start but we are not trying to connect! Ignoring the event
wpa_supplicant: p2p-wlan0-0: interface state ENABLED->DISABLED
wpa_supplicant: p2p-wlan0-0: AP-DISABLED
wpa_supplicant: p2p-wlan0-0: CTRL-EVENT-DISCONNECTED
これが正常かどうかはわかりませんが(RPi 4はこのレベルで文書化されていないため)、APモードを有効にした後は無効になるようです。ただ、グループオーナーなのでAPモードにしておけばいいと思います。このイベントを無視するNetworkManagerが奇妙な動作を引き起こすかどうかはわかりません。これらの相互作用がどのように進むべきかはよくわかりません。
また、デフォルトのルート設定など、さまざまなバリエーションを試しましたが、役に立ちませんでした。誰でもどこに行くべきかを提案していただければとても感謝します。残念ながら、私が現在持っている唯一のLinuxシステムはPiだけなので、通常のPCでもこの機能を試すことはできません。
また、すべてのレイヤーがどのように連携するのかよくわかりません。特にWi-Fi P2Pに関する良いドキュメントがないので、より低いレベル(iwなどを使用)で何かを試すことができるかどうかはわかりません。どんな提案にも感謝します。
また、NetworkManagerを終了しようとしましたが、そうするたびにwpa_cliが完全に失敗するようです。
答え1
だから答えはかなり簡単であることがわかりました。 NetworkManagerを閉じる必要があります。ただし、NetworkManagerを閉じるときは、wpa_supplicantのプロファイルを指定する必要があります(例supplicant.conf
:)。そしてファイルには次の行が含まれています。
ctrl_interface=/run/wpa_supplicant
私はこれについてあまり知らないので、このディレクトリがディストリビューション専用かどうかはわかりません。
次に、wpa_supplicantを次のように起動します(私はに入れましたrc.local
)。
nohup wpa_supplicant -i wlan0 -c /path/to/supplicant.conf &
これにより、NetworkManagerはグループを終了せずにWifi Direct / WiFi P2Pコマンドを実行できます。