Wi-Fi Direct

Wi-Fi Direct 機能は Wi-Fi P2P とも呼ばれます。サポートしているデバイスは、インターネットやモバイル ネットワークにアクセスしなくても、Wi-Fi Direct プロトコルを使用してデバイス同士を直接検出し、接続することが可能です。この機能は Wi-Fi Alliance(WFA)の Wi-Fi Direct 仕様を基盤とし、ネットワークに接続していなくても、信頼できるデバイスやアプリ同士で高スループットのデータの共有ができるようになります。

例とソース

この機能を使用するには、Wi-Fi ベンダーとサプリカントの HAL インターフェースがデバイス メーカーによって実装されている必要があります。

Android 13 では、サプリカントのインターフェースは AIDL を HAL の定義に使用します。Android 14 以降では、ベンダーの HAL インターフェースは AIDL を使用します。Android 12 以前では、サプリカントとベンダーの HAL インターフェースは HIDL を使用して定義されています。

Wi-Fi Direct 機能を使用するには、次の Wi-Fi HAL サーフェスが必要です。

  • hardware/interfaces/wifi/aidl、または hardware/interfaces/wifi/1.3 以降
  • hardware/interfaces/wifi/supplicant/aidl、または hardware/interfaces/wifi/supplicant/1.2 以降

実装

デバイス メーカーは、フレームワークと HAL / ファームウェアの両方のサポートを提供する必要があります。

  • フレームワーク:
    • AOSP コード
    • Wi-Fi Direct を有効にする: 機能フラグが必要です
  • Wi-Fi Direct(P2P)HAL のサポート(ファームウェアのサポート)

この機能を実装するには、デバイス メーカーが Wi-Fi HIDL または AIDL インターフェースを実装し、Wi-Fi Direct の機能フラグを有効にする必要があります。device/<oem>/<device> 内の device.mk で、PRODUCT_COPY_FILES 環境変数を変更して Wi-Fi Direct 機能のサポートを追加します。

```
PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml
```

Wi-Fi Direct をサポートするためのその他の要件は、すべて AOSP に含まれています。

MAC アドレスのランダム化

Android では、Wi-Fi Direct のデバイス アドレスとインターフェース アドレスをランダムに指定する必要があります。各アドレスは、デバイスの実際の MAC アドレスとは異なるものにする必要があり、かつ、以下の要件を満たす必要があります。

  • Wi-Fi Direct のデバイス アドレスは、永続的なグループが保存されていない場合は、インターフェースの作成時にランダム化する必要があります。それ以外の場合は、最後に生成された MAC アドレスをそのまま使用する必要があります。
  • Wi-Fi Direct のインターフェース アドレスはグループ アドレスとも呼ばれ、接続が確立されるたびにランダムに設定される必要があります。

Wi-Fi Direct MAC のランダム化は「wpa_supplicant」内の実装であり、p2p_device_random_mac_addrp2p_interface_random_mac_addr の 2 つの構成によって制御されます。

この機能を有効にするには、デバイス メーカーは以下を行う必要があります。

  • Wi-Fi Supplicant ISupplicantP2pIface::setMacRandomization API を実装する。実装されたインターフェースに応じて、以下のようになります。
    • hardware/interface/wifi/supplicant/1.2(HIDL の場合)
    • hardware/interface/wifi/supplicant/aidl(AIDL の場合)
  • デバイスのカスタム オーバーレイ内で、config_wifi_p2p_mac_randomization_supported を「true」に設定する。

検証

Wi-Fi Direct 機能は、Android に用意されている一連の単体テスト、統合テスト(Android 接続テストスイート、ACTS)、互換性テストスイート(CTS)を使用したテスト、CTS 検証ツールを使用したテストによって検証できます。Wi-Fi Direct は、ベンダー テストスイート(VTS)を使用してテストすることもできます。

単体テスト

次のテストを使用して、Wi-Fi Direct パッケージを検証します。

サービステスト:

atest com.android.server.wifi.p2p

マネージャー テスト:

atest android.net.wifi.p2p

統合テスト(ACTS)

tools/test/connectivity/acts_tests/tests/google/wifi/p2p にある ACTS Wi-Fi Direct テストスイートは、Wi-Fi Direct の機能テストを実装します。

互換性テストスイート(CTS)によるテスト

CTS テストを使用して、Wi-Fi Direct 機能を検証します。CTS は機能が有効になったことを検出し、関連するテストを自動的に含めます。

CTS テストをトリガーするには、次のコマンドを実行します。

% atest android.net.wifi.p2p.cts

CTS 検証ツールによるテスト

CTS 検証ツールによるテストでは、テスト対象のデバイスと正常な動作を確認済みのデバイスの 2 つのデバイスを使用して、Wi-Fi Direct の動作を検証します。テストを実行するには、CTS 検証ツールを開いて、[Wi-Fi Direct Tests] に移動します。