TLDR:Raspberry Pi一時的なWiFiネットワークで同僚との無線通信を防止したいが、インターフェイスをオフにしたり無効にしたくない。これは、ノードが互いに範囲外にあることをシミュレートするためのものです。
私は一時的なネットワーク(「PiFi」)を実行している3つのRaspberry Piで構成されるワイヤレスネットワークを持っています。各Piでは、インターフェイスにwlan0
固定IPアドレス(1、2、または3)10.0.0.x
が割り当てられます。x
デバッグ目的で、Piはイーサネットスイッチに接続され、SSH経由で制御できます。この有線ネットワークが使用され、192.168.2.*
そのアドレスは私のラップトップのDHCPによって割り当てられます。ネットワークを有効にするには、各デバイスで次のコマンドを使用します。 (メッシュネットワークでレイヤ2ルーティングを処理するためにBATMANも実行していますが、関連性がないと思います。)
起動時のコマンド:
iw wlan0 set type ibss
ip link set wlan0 up
iw wlan0 ibss join "PiFi" 2432
/etc/dhcpcd.conf
:
interface wlan0
static ip_address=10.0.0.x/24
私の問題は、各ノードをテストする必要があることです。ワイヤレス電話ネットワークはワイヤレスで他のノードの範囲外にあるときに実行されます(私のソフトウェアにはタイムアウトが発生し、定期的に接続を再試行する必要があるTCP接続があります)。 Piを互いに範囲外に物理的に移動してテストするのは困難です。残念ながら、次のことは私には適していません。
- インターフェイスを無効にします(
ip link set wlan0 down
)。これはバインディングを許可しません10.0.0.x
。 - 送信機の電源を切ります(
iwconfig wlan0 txpower off
)。同じ問題です(バインドできません)。 - 送信機の電源を切ります(
iwconfig wlan0 txpower 1mW
)。デバイスは互いに近いので、ワイヤレスで簡単に通信できます。 - ノード(
iw wlan0 ibss leave; iw wlan0 ibss join "FakeFi" 2432
)でESSIDを切り替えます。これは奇妙な効果をもたらすことができます。時には動作しますが、通常ソケットの接続端が時々(1/5)にバインドされます192.168.2.*
(強制)。つながる退会/購読が発生すると、バインドされたソケットは10.0.0.x
失敗します。EADDRNOTAVAIL
私のソケットが正しいアドレスにバインドされるようにインターフェイスを維持する方法が必要ですが、どういうわけか実際の無線通信を無効にすることができます。理論的には、物理アンテナを無効にするか、送信電力をゼロに設定することでこれを実行できますが、これを行う方法を見つけることができませんでした。私はどんな解決策でも開いています。