Ponto de acesso Wi-Fi (AP suave)

O Android oferece suporte para ponto de acesso Wi-Fi (Soft AP), incluindo tethering por meio de um ponto de acesso Wi-Fi e pontos de acesso Wi-Fi somente locais.

O recurso soft AP permite a configuração do seguinte:

  • SSID e BSSID
  • Tipo de segurança (incluindo WPA3)
  • SSID oculto
  • Banda operacional e canal (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 sobre dispositivos associados
  • Nível de randomização MAC para o AP BSSID
  • 802.11ax e 802.11be

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.

Desenvolvendo aplicativos com APIs de hotspot

Uma implementação padrão de um ponto de acesso Wi-Fi conectado é fornecida pelo aplicativo AOSP Settings, mas não utiliza todas as APIs para configuração do Soft AP.

Para oferecer suporte ao tethering por meio de um ponto de acesso ou de um ponto de acesso somente local, o aplicativo deve executar as seguintes funções:

  1. Registre um retorno de chamada para obter os recursos do dispositivo usando WifiManager#registerSoftApCallback para um ponto de acesso conectado ou WifiManager#registerLocalOnlyHotspotSoftApCallback para um ponto de acesso somente local.

    O retorno de chamada SoftApCallback fornece os seguintes 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 depois de 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 à medida que ele é ativado e desativado.
    • 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.

Para um ponto de acesso conectado:

  1. Configure a configuração do soft AP para tethering chamando o método WifiManager#setSoftApConfiguration e fornecendo uma instância SoftApConfiguration . Construa SoftApConfiguration usando a classe SoftApConfiguration.Builder .
  2. Inicie o tethering chamando o método tethering em TetheringManager#startTethering .

Para ponto de acesso somente local:

  1. Inicie o ponto de acesso somente local com uma configuração de soft AP específica chamando o método WifiManager#startLocalOnlyHotspot .

Implementando listas de permissões e bloqueios

Um requisito típico da operadora é fornecer ao usuário 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 em SoftApCapability#getMaxSupportedClients .
  • Forneça controle dinâmico usando listas de permissões e bloqueios:

    • 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 são bloqueados para associação.
      • Todos os dispositivos cujos endereços MAC estão em SoftApConfiguration.Builder#setAllowedClientList têm associação permitida.
      • Todos os outros dispositivos (ou seja, dispositivos cujos endereços MAC não estão na lista de permissões ou bloqueios) são bloqueados para 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, pedir confirmação ao usuário e, em seguida, adicionar o dispositivo à lista de permissões ou à lista de bloqueios, dependendo do comportamento do usuário.

    Observe que os dispositivos só poderão usar a funcionalidade da 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 ou para oferecer suporte a um ponto de acesso somente local, os fabricantes de dispositivos devem fornecer aplicativo de configurações, estrutura e suporte a HAL/firmware:

Costumização

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

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds : o intervalo de tempo limite de desligamento padrão. Válido apenas 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 (especificado 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 ativar listas de permissões e bloqueios. Comunicado ao aplicativo de controle (aplicativo Configurações) por meio de SoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .
  • (Disponível em 13) config_wifiSoftapPassphraseAsciiEncodableCheck : Se a senha do soft AP deve ou não ser codificável em ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported : se deve ou não atualizar automaticamente a configuração da banda para bandas duplas durante a restauração da configuração da nuvem quando um novo dispositivo for compatível.
  • (Disponível em 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled : se a estrutura anexa automaticamente bandas inferiores à configuração de banda para evitar o tratamento de coexistência.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported : se a atualização dinâmica do código de país no modo AP é suportada ou não no dispositivo
  • Suporte de canal: config_wifiSoftap2gChannelList , config_wifiSoftap5gChannelList , config_wifiSoftap6gChannelList e config_wifiSoftap60gChannelList .
  • Suporte de restauração especificando se as entradas correspondentes são redefinidas para o padrão ao restaurar a configuração do ponto de acesso 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. Isto é fundamental se o novo dispositivo não suportar a configuração.
  • Capacidades de hardware:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Disponível a partir de 13) config_wifiSoftapOweTransitionSupported
    • (Disponível a partir de 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Disponível a partir de 13) config_wifiSoftapIeee80211beSupported
    • config_wifiSoftapMacAddressCustomizationSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap24ghzSupported
    • config_wifiSoftap5ghzSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftap60ghzSupported
    • 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 unitários

Verifique o pacote de hotspot usando os testes a seguir.

  • Testes de serviço:

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

    atest packages/modules/Wifi/framework/tests/
    

Testes de integração (ACTS)

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

Testes do conjunto de testes de compatibilidade (CTS)

Use 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

Conjunto de testes de fornecedores (VTS)

Se a interface HIDL estiver implementada, execute:

atest VtsHalWifiHostapdV1_2Target

Se a interface AIDL estiver implementada, execute:

atest VtsHalHostapdTargetTest