Wi-Fi アクセス ポイント(Soft AP)

Android は、Wi-Fi アクセス ポイントとローカル専用 Wi-Fi アクセス ポイントを介したテザリングを含む、Wi-Fi アクセス ポイント(Soft AP)をサポートしています。

Soft AP 機能により、以下の設定が可能になります。

  • SSID と BSSID
  • セキュリティの種類(WPA3 を含む)
  • ステルス SSID
  • 運用バンドと運用チャネル(ACS を含む)
  • 許可するクライアント数の上限
  • 自動シャットダウンのタイムアウト値
  • 関連付けられたデバイスのユーザー制御を可能にする許可リストとブロックリスト
  • AP の BSSID に対する MAC ランダム化のレベル
  • 802.11ax と 802.11be

デバイス制御の可用性はデバイス機能によって決まります。Android 11 では、このような機能を取得する API が導入されています。デバイス メーカーがオーバーレイを使用して基本デバイス機能を指定することもできます。

API の一部はシステム API で、システムの設定アプリのみがアクセスできるように権限によって制限されています。

アクセス ポイント API を使ったアプリの開発

テザリングされた Wi-Fi アクセス ポイントのデフォルト実装は AOSP 設定アプリによって提供されますが、Soft AP 設定のすべての API を利用しているとは限りません。

アクセス ポイントまたはローカル専用アクセス ポイントを介したテザリングをサポートするには、以下の関数を実行する必要があります。

  1. テザリングされたアクセス ポイントの場合は WifiManager#registerSoftApCallback、ローカル専用アクセス ポイントの場合は WifiManager#registerLocalOnlyHotspotSoftApCallback を使用して、デバイスの機能を取得するコールバックを登録します。

    SoftApCallback コールバックには、次のメソッドが用意されています。

    • SoftApCallback#onCapabilityChanged: デバイス機能に関する情報(サポートされるクライアントの最大数、SAE または ACS がサポートされるかどうかなど)を提供します。
    • SoftApCallback#onInfoChanged: バンドと周波数の情報を含む、実行中の Soft AP に関する情報を提供します(開始時のみ有効)。
    • SoftApCallback#onConnectedClientsChanged: 接続されているクライアントのリストを提供します。各クライアントの MAC アドレスを取得できます。IP 情報を取得するには、TetheringEventCallback#onClientsChanged コールバックを使用します。
    • SoftApCallback#onStateChanged: Soft AP が有効または無効になったときに状態の更新情報を提供します。
    • SoftApCallback#onBlockedClientConnecting: ブロックされたクライアントの情報をブロックされた理由を含めて提供します。理由は、デバイスがサポートできるクライアントの最大数に達したか、クライアントの接続が明示的に承認されていないかのいずれかです。

テザリングされたアクセス ポイントの場合:

  1. WifiManager#setSoftApConfiguration メソッドを呼び出し、SoftApConfiguration インスタンスを指定して、テザリング用の Soft AP 構成を設定します。SoftApConfiguration.Builder クラスを使用して SoftApConfiguration を構築します。
  2. TetheringManager#startTethering でテザリング メソッドを呼び出してテザリングを開始します。

ローカル専用アクセス ポイントの場合:

  1. 特定のソフト AP 構成のローカル専用アクセス ポイントを開始するには、WifiManager#startLocalOnlyHotspot メソッドを呼び出します。

許可リストとブロックリストの実装

一般的に、携帯通信会社は、Soft AP への関連付けを許可するデバイスの制御をユーザーに提供する必要があります。次に示すように、そのためのメカニズムはいくつかあります。

  • SoftApConfiguration.Builder#setMaxNumberOfClients を使用して、Soft AP に関連付けることができるデバイスの最大数を制限します。デバイスがサポートするクライアントの最大数より小さい値を指定する必要があります。最大数は SoftApCapability#getMaxSupportedClients から取得できます。
  • 許可リストとブロックリストを使用して動的な制御を提供します。

    • Soft AP のデフォルト構成では、MAC アドレスが SoftApConfiguration.Builder#setBlockedClientList に追加されているデバイスを除くすべてのデバイスを Soft AP に関連付けることができます。
    • Soft AP 設定で SoftApConfiguration.Builder#setClientControlByUserEnabled(true) が指定されている場合は、許可リストが使用されます。

      • MAC アドレスが SoftApConfiguration.Builder#setBlockedClientList に含まれているすべてのデバイスは、関連付けがブロックされます。
      • MAC アドレスが SoftApConfiguration.Builder#setAllowedClientList に含まれているすべてのデバイスは、関連付けが許可されます。
      • その他のすべてのデバイス(つまり、MAC アドレスが許可リストにもブロックリストにも含まれていないデバイス)は関連付けがブロックされますが、SoftApCallback#onBlockedClientConnecting が呼び出されて、制御アプリ(つまり、設定アプリ)によるアクションの実行が許可されます。たとえば、ユーザーに確認を求め、ユーザーの操作に応じてデバイスを許可リストまたはブロックリストに追加するアクションが可能です。

    デバイスが許可リスト機能を使用できるのは、この機能がデバイスでサポートされている場合のみです。デバイスでサポートされているかどうかは、SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT) を使用して確認できます。

実装

デバイス メーカーがアクセス ポイントを介したテザリング、またはローカル専用アクセス ポイントをサポートするには、設定アプリ、フレームワーク、HAL / ファームウェアのサポートを提供する必要があります。

  • 設定アプリ: AOSP 設定アプリは、SSID とセキュリティ認証情報を使用してテザリング アクセス ポイントを構成するためのベースラインを提供します。このコードはそのまま使用することも、アクセス ポイント API を使ったアプリの開発で説明されている追加機能を提供するために変更することもできます。

  • フレームワーク: AOSP フレームワークのコードでは、アクセス ポイント API を使ったアプリの開発で説明されているすべての機能がサポートされています。

  • アクセス ポイントの HAL / ファームウェア: HIDL IHostapd.hal バージョン 1.2 以降または AIDL IHostapd.aidl

カスタマイズ

デバイス メーカーが実装をカスタマイズするには、packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml に記載されている以下のオーバーレイと携帯通信会社構成を設定する必要があります。

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds: デフォルトのシャットダウン タイムアウト間隔。SoftApConfiguration#setAutoShutdownEnabled が有効になっている場合にのみ有効です。SoftApConfiguration#setShutdownTimeoutMillis でオーバーライドできます。
  • config_wifiHardwareSoftapMaxClientCount: サポートされているクライアントの最大数のハードウェア制限。デバイスがサポートするクライアントの最大数は、ハードウェアと携帯通信会社の制約の最小要件です(CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT で指定されます)。最終結果は SoftApCapabilities#getMaxSupportedClients でアプリに提供されます。
  • config_wifiSofapClientForceDisconnectSupported: デバイスが強制的にクライアントの接続を切断できるかどうか。許可リストとブロックリストを有効にする場合は必須です。SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT) を通じて制御アプリ(設定アプリ)に通知されます。
  • (13 から利用可能)config_wifiSoftapPassphraseAsciiEncodableCheck: Soft AP のパスフレーズが ASCII としてエンコード可能であることが必要かどうか。
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: 新しいデバイスがサポートされている場合に、クラウド構成の復元中に帯域設定構成をデュアルバンドに自動的にアップグレードするかどうか。
  • (13 から利用可能)config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: 共存の処理を回避するために、フレームワークが帯域構成に低帯域を自動的に付加するかどうか。
  • config_wifiSoftApDynamicCountryCodeUpdateSupported: AP モードにおける国コードの動的な更新がデバイスでサポートされるかどうか。
  • チャネル サポート: config_wifiSoftap2gChannelListconfig_wifiSoftap5gChannelListconfig_wifiSoftap6gChannelListconfig_wifiSoftap60gChannelList
  • 新しいデバイスでアクセス ポイント構成を復元する際に、対応するエントリをデフォルトにリセットするかどうかを指定する復元サポート: config_wifiSoftapResetChannelConfigconfig_wifiSoftapResetHiddenConfigconfig_wifiSoftapResetUserControlConfigconfig_wifiSoftapResetAutoShutdownTimerConfigconfig_wifiSoftapResetMaxClientSettingConfig。これらはデフォルトでは true に設定されます。つまり、値はリセットされます。このことは、新しいデバイスが構成をサポートしていない場合に重要です。
  • ハードウェア機能:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (13 から利用可能)config_wifiSoftapOweTransitionSupported
    • (13 から利用可能)config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (13 から利用可能)config_wifiSoftapIeee80211beSupported
    • config_wifiSoftapMacAddressCustomizationSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap24ghzSupported
    • config_wifiSoftap5ghzSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftap60ghzSupported
    • config_wifiSoftapAcsIncludeDfs

検証

Android には、アクセス ポイント機能を検証するための単体テスト、統合テスト(Android 接続テストスイート(ACTS))、互換性テストスイート(CTS)テストのセットが用意されています。アクセス ポイント機能は、ベンダー テストスイート(VTS)でもテストできます。

単体テスト

以下のテストにより、アクセス ポイント パッケージを検証します。

  • サービステスト:

    atest packages/modules/Wifi/service/tests/wifitests/
    
  • マネージャー テスト:

    atest packages/modules/Wifi/framework/tests/
    

統合テスト(ACTS)

tools/test/connectivity/acts_tests/tests/google/wifi/WifiSoftApTest.py にある ACTS アクセス ポイント テストスイートには、アクセス ポイント機能の機能テストが実装されています。

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

CTS テストにより、アクセス ポイント機能を検証します。CTS は機能が有効になったときに検出して、関連付けられたテストを自動的に組み込みます。

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

atest android.net.wifi.cts.WifiManagerTest

ベンダー テストスイート(VTS)

HIDL インターフェースが実装されている場合は、次のコマンドを実行します。

atest VtsHalWifiHostapdV1_2Target

AIDL インターフェースが実装されている場合は、次のコマンドを実行します。

atest VtsHalHostapdTargetTest