テザリングの Wi-Fi アクセス ポイント(Soft AP)のサポート

Android は、Wi-Fi アクセス ポイント(Soft AP)を介したテザリングをサポートします。Android 11 以降は、デバイス メーカーが利用できる Soft AP 構成によって、次のような構成を含む携帯通信会社向けのユースケースとカスタマイズのサポートが拡大されています。

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

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

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

例とソース

デフォルトの実装は AOSP 設定アプリによって提供されていますが、Soft AP 構成のすべての API を実行できるわけではありません。呼び出し元アプリは、次の 3 つの機能を実行する必要があります。

  1. WifiManager#registerSoftApCallback を使用して、デバイス機能を取得するコールバックを登録します。この SoftApCallback コールバックは、次に示すいくつかのメソッドを提供します。

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

  3. TetheringManager#startTethering でテザリング メソッドを呼び出してテザリングを開始します。

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

一般的に、携帯通信会社は、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) を使用して確認できます。

実装

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

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

  • フレームワーク: AOSP フレームワークのコードは、例とソースで説明されているすべての機能をサポートします。

  • アクセス ポイント用の HAL / ファームウェア: IHostapd.HAL

カスタマイズ

デバイス メーカーが実装をカスタマイズするには、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) を通じて制御アプリ(設定アプリ)に通知されます。
  • (Android T(AOSP 試験運用版)以降で利用可能)config_wifiSoftapPassphraseAsciiEncodableCheck: Soft AP のパスフレーズが ASCII としてエンコード可能であることが必要かどうか。
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: 新しいデバイスがサポートされている場合に、クラウド構成の復元中に帯域設定構成をデュアルバンドに自動的にアップグレードするかどうか。
  • (Android T(AOSP 試験運用版)以降で利用可能)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
    • (Android T(AOSP 試験運用版)以降で利用可能)config_wifiSoftapOweTransitionSupported
    • (Android T(AOSP 試験運用版)以降で利用可能)config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Android T(AOSP 試験運用版)以降で利用可能)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)

VTS テストを実施するには、次のコマンドを実行します。

atest VtsHalHostapdTargetTest