Suporte Wi-Fi Hotspot (Soft AP) para Tethering

O Android suporta tethering através de um hotspot Wi-Fi (Soft AP). A partir do Android 11, a configuração de Soft AP disponível para fabricantes de dispositivos oferece suporte a mais casos de uso e personalizações de operadoras, incluindo a configuração do seguinte:

  • SSID e BSSID
  • Tipo de segurança (incluindo WPA3)
  • SSID oculto
  • Banda e canal de operação (incluindo ACS)
  • Número máximo de clientes permitidos
  • Valor de tempo limite de desligamento automático
  • Lista de permissões e lista de bloqueio para permitir o controle do usuário de dispositivos associados

Os recursos do dispositivo determinam a disponibilidade desses controles. O Android 11 apresenta APIs para obter esses recursos. Os fabricantes de dispositivos também podem especificar os recursos básicos do dispositivo usando sobreposições.

Observe que algumas das APIs são APIs do sistema e são restritas por meio de permissões para que apenas o aplicativo Configurações do sistema possa acessá-las.

Exemplos e fonte

Uma implementação padrão é fornecida pelo aplicativo AOSP Settings, mas não exerce todas as APIs para configuração de Soft AP. Um aplicativo de chamada deve executar estas três funções:

  1. Registre um retorno de chamada para obter os recursos do dispositivo usando WifiManager#registerSoftApCallback . O retorno de chamada SoftApCallback fornece vários métodos:

    • SoftApCallback#onCapabilityChanged : Fornece informações sobre os recursos do dispositivo, incluindo o número máximo de clientes suportados e se SAE ou ACS são suportados.
    • SoftApCallback#onInfoChanged : Fornece informações sobre o Soft AP em execução (válido apenas uma vez iniciado), incluindo informações de banda e frequência.
    • SoftApCallback#onConnectedClientsChanged : Fornece uma lista de clientes conectados. Para cada cliente, você pode obter o endereço MAC. Para obter as informações de IP, use o retorno de chamada TetheringEventCallback#onClientsChanged .
    • SoftApCallback#onStateChanged : Fornece atualizações sobre o estado do Soft AP conforme ele é habilitado e desabilitado.
    • SoftApCallback#onBlockedClientConnecting : Fornece as informações do cliente bloqueado com um dos seguintes motivos para o bloqueio: o dispositivo atingiu o número máximo de clientes que pode suportar ou o cliente não está explicitamente autorizado a se conectar.
  2. Configure a configuração do Soft AP a ser usada para tethering chamando o método WifiManager#setSoftApConfiguration e fornecendo uma instância SoftApConfiguration . Você pode construir SoftApConfiguration usando a classe SoftApConfiguration.Builder .

  3. Inicie o tethering chamando o método de tethering em TetheringManager#startTethering .

Implementando listas de permissões e bloqueios

Um requisito típico da operadora é fornecer ao usuário os controles dos dispositivos que podem ser associados ao Soft AP. Existem vários mecanismos para fazer isso:

  • Limite o número máximo de dispositivos que podem ser associados ao soft AP usando SoftApConfiguration.Builder#setMaxNumberOfClients . Certifique-se de especificar um número inferior ao número máximo de clientes suportados pelo dispositivo. Você pode obter o número máximo de SoftApCapability#getMaxSupportedClients .
  • Forneça controle dinâmico usando listas de permissão e bloqueio:

    • A configuração padrão de um Soft AP permite que todos os dispositivos se associem ao soft AP, exceto os dispositivos cujos endereços MAC são adicionados a SoftApConfiguration.Builder#setBlockedClientList .
    • Se o Soft AP estiver configurado com SoftApConfiguration.Builder#setClientControlByUserEnabled( true ) , a lista de permissões será usada.

      • Todos os dispositivos cujos endereços MAC estão em SoftApConfiguration.Builder#setBlockedClientList estão bloqueados para associação.
      • Todos os dispositivos cujos endereços MAC estão em SoftApConfiguration.Builder#setAllowedClientList têm permissão de associação.
      • Todos os outros dispositivos (ou seja, dispositivos cujos endereços MAC não estão na lista de permissão ou bloqueio) são bloqueados da associação, mas SoftApCallback#onBlockedClientConnecting é chamado, permitindo que o aplicativo de controle (ou seja, o aplicativo Configurações) execute uma ação, por Por exemplo, solicitando a confirmação do usuário e, em seguida, adicionando o dispositivo à lista de permissões ou à lista de bloqueio, dependendo do comportamento do usuário.

    Observe que os dispositivos só podem usar a funcionalidade de lista de permissões se ela for compatível com o dispositivo. Você pode verificar o suporte do dispositivo usando SoftApCapability#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .

Implementação

Para oferecer suporte ao tethering por meio de um ponto de acesso Wi-Fi (Soft AP), os fabricantes de dispositivos devem fornecer suporte ao aplicativo Configurações, estrutura e HAL/firmware:

  • Aplicativo de configurações: o aplicativo de configurações do AOSP fornece uma linha de base para configurar um ponto de acesso de tethering com SSID e credenciais de segurança. Esse código pode ser usado como está ou modificado para fornecer recursos adicionais conforme descrito em Exemplos e fonte .

  • Estrutura: O código da estrutura AOSP oferece suporte a todas as funcionalidades descritas em Exemplos e fonte .

  • HAL/firmware para hotspot: IHostapd.HAL versão 1.2 ou superior.

Costumização

Para personalizar a implementação, os fabricantes de dispositivos devem configurar as seguintes sobreposições e configurações de operadora, documentadas em packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml :

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds : o intervalo de tempo limite de desligamento padrão. Válido somente se SoftApConfiguration#setAutoShutdownEnabled estiver habilitado. Pode ser substituído usando SoftApConfiguration#setShutdownTimeoutMillis .
  • config_wifiHardwareSoftapMaxClientCount : A limitação de hardware para o número máximo de clientes suportados. O número máximo de clientes que o dispositivo suporta é o mínimo das restrições de hardware e operadora (especificada por CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT ). O resultado final é fornecido ao aplicativo com SoftApCapabilities#getMaxSupportedClients .
  • config_wifiSofapClientForceDisconnectSupported : se o dispositivo tem a capacidade de forçar a desconexão de um cliente. Necessário para habilitar listas de permissões e bloqueios. Comunicado ao aplicativo de controle (aplicativo Configurações) por meio SoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .
  • Suporte de canal: config_wifiSoftap2gChannelList , config_wifiSoftap5gChannelList e config_wifiSoftap6gChannelList .
  • Suporte de restauração especificando se as entradas correspondentes são redefinidas para o padrão ao restaurar a configuração do hotspot para um novo dispositivo: config_wifiSoftapResetChannelConfig , config_wifiSoftapResetHiddenConfig , config_wifiSoftapResetUserControlConfig , config_wifiSoftapResetAutoShutdownTimerConfig , config_wifiSoftapResetMaxClientSettingConfig . Observe que eles são definidos como true por padrão, o que significa que os valores são redefinidos. Isso é crítico se o novo dispositivo não oferecer suporte à configuração.
  • Recursos de hardware:

    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftapAcsIncludeDfs

Validação

O Android fornece um conjunto de testes de unidade, testes de integração (Android Connectivity Test Suite ou ACTS) e testes de Compatibility Test Suite (CTS) para validar o recurso de ponto de acesso. O recurso de hotspot também pode ser testado usando o Vendor Test Suite (VTS).

Testes de unidade

Verifique o pacote de hotspot usando os seguintes testes.

  • Testes de serviço:

    atest packages/modules/Wifi/service/tests/wifitests/
    
  • Testes do gerente:

    atest packages/modules/Wifi/framework/tests/
    

Testes de integração (ACTS)

O conjunto de testes ACTS hotspot, localizado em tools/test/connectivity/acts_tests/tests/google/wifi/WifiSoftApTest.py , implementa testes funcionais do recurso hotspot.

Testes do Compatibility Test Suite (CTS)

Use os testes CTS para validar o recurso de ponto de acesso. O CTS detecta quando o recurso está habilitado e inclui automaticamente os testes associados.

Para acionar os testes CTS, execute:

atest android.net.wifi.cts.WifiManagerTest

Pacote de teste do fornecedor (VTS)

Para executar os testes VTS, execute:

atest VtsHalWifiHostapdV1_2Target