Hotspot Wi-Fi (programowy AP)

Android zapewnia obsługę hotspotu Wi-Fi (soft AP), w tym tetheringu przez hotspot Wi-Fi i lokalne hotspoty Wi-Fi.

Funkcja miękkiego AP pozwala na konfigurację następujących elementów:

  • SSID i BSSID
  • Typ zabezpieczeń (w tym WPA3)
  • Ukryty identyfikator SSID
  • Pasmo i kanał operacyjny (w tym ACS)
  • Maksymalna liczba dozwolonych klientów
  • Wartość limitu czasu automatycznego wyłączania
  • Listy dozwolonych i blokowanych umożliwiające użytkownikowi kontrolę nad powiązanymi urządzeniami
  • Poziom randomizacji MAC dla BSSID AP
  • 802.11ax i 802.11be

Możliwości urządzenia określają dostępność tych elementów sterujących. W systemie Android 11 wprowadzono interfejsy API umożliwiające uzyskanie tych możliwości. Producenci urządzeń mogą również określić możliwości urządzenia podstawowego za pomocą nakładek.

Należy pamiętać, że niektóre interfejsy API są systemowymi interfejsami API i są ograniczone uprawnieniami, tak że dostęp do nich może uzyskać tylko systemowa aplikacja Ustawienia.

Tworzenie aplikacji za pomocą interfejsów API hotspotów

Domyślna implementacja hotspotu Wi-Fi na uwięzi jest zapewniana przez aplikację Ustawienia AOSP, jednak nie wykorzystuje ona wszystkich interfejsów API do konfiguracji Soft AP.

Aby obsługiwać tethering przez hotspot lub hotspot lokalny, aplikacja musi spełniać następujące funkcje:

  1. Zarejestruj wywołanie zwrotne, aby uzyskać możliwości urządzenia, używając WifiManager#registerSoftApCallback dla hotspotu na uwięzi lub WifiManager#registerLocalOnlyHotspotSoftApCallback dla hotspotu tylko lokalnego.

    Wywołanie zwrotne SoftApCallback udostępnia następujące metody:

    • SoftApCallback#onCapabilityChanged : zawiera informacje o możliwościach urządzenia, w tym o maksymalnej liczbie obsługiwanych klientów oraz o tym, czy obsługiwane są SAE lub ACS.
    • SoftApCallback#onInfoChanged : Zawiera informacje o działającym programie Soft AP (ważne tylko po uruchomieniu), w tym informacje o paśmie i częstotliwości.
    • SoftApCallback#onConnectedClientsChanged : Zawiera listę podłączonych klientów. Dla każdego klienta można uzyskać adres MAC. Aby uzyskać informacje o adresie IP, użyj wywołania zwrotnego TetheringEventCallback#onClientsChanged .
    • SoftApCallback#onStateChanged : Zapewnia aktualizacje stanu miękkiego punktu dostępowego w miarę jego włączania i wyłączania.
    • SoftApCallback#onBlockedClientConnecting : udostępnia informacje o zablokowanym kliencie z jedną z następujących przyczyn blokady: urządzenie osiągnęło maksymalną liczbę klientów, których może obsłużyć lub klient nie ma jawnej autoryzacji do połączenia.

W przypadku hotspotu na uwięzi:

  1. Skonfiguruj konfigurację programowego punktu dostępowego na potrzeby tetheringu, wywołując metodę WifiManager#setSoftApConfiguration i udostępniając instancję SoftApConfiguration . Skonstruuj SoftApConfiguration przy użyciu klasy SoftApConfiguration.Builder .
  2. Rozpocznij tethering, wywołując metodę tetheringu pod TetheringManager#startTethering .

W przypadku hotspotu lokalnego:

  1. Uruchom lokalny hotspot z określoną konfiguracją programowego punktu dostępowego, wywołując metodę WifiManager#startLocalOnlyHotspot .

Implementowanie list dozwolonych i blokowanych

Typowym wymaganiem operatora jest zapewnienie użytkownikowi kontroli nad urządzeniami, które mogą łączyć się z miękkim punktem dostępowym. Można to zrobić na kilka mechanizmów:

  • Ogranicz maksymalną liczbę urządzeń, które można skojarzyć z miękkim punktem dostępowym za pomocą SoftApConfiguration.Builder#setMaxNumberOfClients . Pamiętaj, aby podać liczbę mniejszą niż maksymalna liczba klientów obsługiwanych przez urządzenie. Maksymalną liczbę można uzyskać z SoftApCapability#getMaxSupportedClients .
  • Zapewnij dynamiczną kontrolę za pomocą list dozwolonych i blokowanych:

    • Domyślna konfiguracja miękkiego punktu dostępowego pozwala wszystkim urządzeniom na skojarzenie z miękkim punktem dostępowym z wyjątkiem urządzeń, których adresy MAC są dodane do SoftApConfiguration.Builder#setBlockedClientList .
    • Jeśli programowy punkt dostępowy jest skonfigurowany z SoftApConfiguration.Builder#setClientControlByUserEnabled( true ) , używana jest lista dozwolonych.

      • Wszystkie urządzenia, których adresy MAC znajdują się w SoftApConfiguration.Builder#setBlockedClientList są zablokowane.
      • Wszystkie urządzenia, których adresy MAC znajdują się w SoftApConfiguration.Builder#setAllowedClientList mogą być skojarzone.
      • Wszystkie inne urządzenia (tzn. urządzenia, których adresów MAC nie ma na liście dozwolonych lub blokowanych) są blokowane przed skojarzeniem, ale wywoływana jest funkcja SoftApCallback#onBlockedClientConnecting , która umożliwia aplikacji sterującej (czyli aplikacji Ustawienia) podjęcie działania, np. na przykład pytanie użytkownika o potwierdzenie, a następnie dodanie urządzenia do listy dozwolonych lub do listy zablokowanych, w zależności od zachowania użytkownika.

    Pamiętaj, że urządzenia mogą korzystać z funkcji listy dozwolonych tylko wtedy, gdy jest ona obsługiwana przez urządzenie. Możesz sprawdzić obsługę urządzenia za pomocą SoftApCapability#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .

Realizacja

Aby obsługiwać tethering przez hotspot lub hotspot dostępny tylko lokalnie, producenci urządzeń muszą zapewnić aplikację Ustawienia, platformę i obsługę HAL/oprogramowania sprzętowego:

Dostosowywanie

Aby dostosować implementację, producenci urządzeń powinni skonfigurować następujące konfiguracje nakładek i nośników, które są udokumentowane w packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml :

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds : Domyślny limit czasu zamknięcia. Działa tylko wtedy, gdy włączona jest SoftApConfiguration#setAutoShutdownEnabled . Można zastąpić za pomocą SoftApConfiguration#setShutdownTimeoutMillis .
  • config_wifiHardwareSoftapMaxClientCount : Ograniczenie sprzętowe dla maksymalnej liczby obsługiwanych klientów. Maksymalna liczba klientów obsługiwanych przez urządzenie to minimum ograniczeń sprzętowych i nośnych (określonych przez CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT ). Ostateczny wynik jest dostarczany do aplikacji za pomocą SoftApCapabilities#getMaxSupportedClients .
  • config_wifiSofapClientForceDisconnectSupported : czy urządzenie ma możliwość wymuszenia rozłączenia klienta. Wymagane do włączenia list dozwolonych i blokowanych. Komunikowany z aplikacją kontrolującą (aplikacją Ustawienia) za pośrednictwem SoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .
  • (Dostępne od wersji 13) config_wifiSoftapPassphraseAsciiEncodableCheck : Określa, czy miękkie hasło AP musi być kodowane w formacie ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported : Określa, czy automatycznie aktualizować konfigurację ustawień pasma do dwóch pasm podczas przywracania konfiguracji w chmurze, gdy obsługiwane jest nowe urządzenie.
  • (Dostępne od wersji 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled : Określa, czy struktura automatycznie dołącza dolne pasma do konfiguracji pasma, aby uniknąć obsługi współistnienia.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported : czy urządzenie obsługuje dynamiczną aktualizację kodu kraju w trybie AP
  • Obsługa kanałów: config_wifiSoftap2gChannelList , config_wifiSoftap5gChannelList , config_wifiSoftap6gChannelList i config_wifiSoftap60gChannelList .
  • Przywróć obsługę określając config_wifiSoftapResetUserControlConfig czy odpowiednie wpisy są resetowane do domyślnie podczas przywracania konfiguracji hotspot do nowego urządzenia: config_wifiSoftapResetChannelConfig , config_wifiSoftapResetHiddenConfig , config_wifiSoftapResetAutoShutdownTimerConfig , config_wifiSoftapResetMaxClientSettingConfig . Należy pamiętać, że domyślnie mają one wartość true , co oznacza, że ​​wartości są resetowane. Ma to kluczowe znaczenie, jeśli nowe urządzenie nie obsługuje tej konfiguracji.
  • Możliwości sprzętowe:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Dostępne od 13) config_wifiSoftapOweTransitionSupported
    • (Dostępne od 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Dostępne od 13) config_wifiSoftapIeee80211beSupported
    • config_wifiSoftapMacAddressCustomizationSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap24ghzSupported
    • config_wifiSoftap5ghzSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftap60ghzSupported
    • config_wifiSoftapAcsIncludeDfs

Walidacja

Android udostępnia zestaw testów jednostkowych, testów integracyjnych (Android Connectivity Test Suite, ACTS) i testów zgodności (CTS) w celu sprawdzenia poprawności funkcji hotspotu. Funkcję hotspotu można także przetestować za pomocą pakietu Vendor Test Suite (VTS).

Testy jednostkowe

Sprawdź pakiet hotspotu, korzystając z poniższych testów.

  • Testy serwisowe:

    atest packages/modules/Wifi/service/tests/wifitests/
    
  • Testy menadżerskie:

    atest packages/modules/Wifi/framework/tests/
    

Testy integracyjne (ACTS)

Zestaw testów hotspotów ACTS , znajdujący się w tools/test/connectivity/acts_tests/tests/google/wifi/WifiSoftApTest.py , implementuje testy funkcjonalne funkcji hotspot.

Testy zestawu testów zgodności (CTS).

Użyj testów CTS , aby sprawdzić funkcję hotspotu. CTS wykrywa, kiedy funkcja jest włączona i automatycznie uwzględnia powiązane testy.

Aby uruchomić testy CTS, uruchom:

atest android.net.wifi.cts.WifiManagerTest

Zestaw testów dostawców (VTS)

Jeśli zaimplementowano interfejs HIDL, uruchom:

atest VtsHalWifiHostapdV1_2Target

Jeśli zaimplementowano interfejs AIDL, uruchom:

atest VtsHalHostapdTargetTest