Ponto de acesso Wi-Fi (Soft AP)

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

O recurso de AP flexível permite configurar o seguinte:

  • SSID e BSSID;
  • tipo de segurança (WPA3 incluso);
  • SSID oculto;
  • banda e canal operacional (ACS incluso);
  • número máximo de clientes permitidos;
  • valor do tempo limite do encerramento automático;
  • lista de permissões e lista de bloqueio para permitir o controle do usuário dos dispositivos associados.
  • Nível de ordenação aleatória de MAC para o BSSID do AP
  • 802.11ax e 802.11be

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

Algumas das APIs são do sistema e são restritas por permissões para que apenas o app Configurações do sistema possa acessá-las.

Desenvolver apps com APIs de ponto de acesso

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

Para oferecer suporte ao tethering por um ponto de acesso ou um ponto de acesso somente local, o app precisa realizar as seguintes funções:

  1. Registre um callback para receber os recursos do dispositivo usando WifiManager#registerSoftApCallback para um ponto de acesso vinculado ou WifiManager#registerLocalOnlyHotspotSoftApCallback para um ponto de acesso somente local.

    O callback SoftApCallback fornece os seguintes métodos:

    • SoftApCallback#onCapabilityChanged: fornece informações sobre os recursos do dispositivo, incluindo o número máximo de clientes com suporte e se o SAE ou o ACS são compatíveis.
    • SoftApCallback#onInfoChanged: fornece informações sobre o Soft AP em execução (válido apenas após ser iniciado), incluindo informações de banda e frequência.
    • SoftApCallback#onConnectedClientsChanged: fornece uma lista de clientes conectados. Para cada cliente, é possível conferir o endereço MAC. Para receber as informações de IP, use o callback TetheringEventCallback#onClientsChanged.
    • SoftApCallback#onStateChanged: fornece atualizações sobre o estado do AP virtual conforme ele é ativado e desativado.
    • SoftApCallback#onBlockedClientConnecting: fornece as informações do cliente bloqueado com um dos seguintes motivos: 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 com tethering:

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

Para ponto de acesso somente local:

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

Implementar listas de permissões e de bloqueio

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

  • Limite o número máximo de dispositivos que podem se associar ao AP virtual usando SoftApConfiguration.Builder#setMaxNumberOfClients. Especifique um número menor que o número máximo de clientes aceitos pelo dispositivo. Você pode conferir o número máximo em SoftApCapability#getMaxSupportedClients.
  • Forneça controle dinâmico usando listas de permissões e de bloqueio:

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

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

    Os dispositivos só podem usar a funcionalidade de lista de permissões se ela tiver suporte no dispositivo. É possível verificar a compatibilidade do dispositivo usando SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).

Implementação

Para oferecer suporte ao tethering por um ponto de acesso ou a um ponto de acesso somente local, os fabricantes de dispositivos precisam oferecer suporte ao app Configurações, ao framework e ao HAL/firmware:

Personalização

Para personalizar a implementação, os fabricantes de dispositivos precisam 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 apenas se SoftApConfiguration#setAutoShutdownEnabled estiver ativado. Pode ser substituído usando SoftApConfiguration#setShutdownTimeoutMillis.
  • config_wifiHardwareSoftapMaxClientCount: a limitação de hardware para o número máximo de clientes com suporte. O número máximo de clientes com que o dispositivo é compatível é o mínimo das restrições de hardware e de operadora (especificado por CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT). O resultado final é fornecido ao app com SoftApCapabilities#getMaxSupportedClients.
  • config_wifiSofapClientForceDisconnectSupported: se o dispositivo tem a capacidade de desconectar um cliente à força. Necessário para ativar listas de permissões e bloqueios. Comunicado ao app de controle (app Configurações) por SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).
  • (Disponível a partir da versão 13) config_wifiSoftapPassphraseAsciiEncodableCheck: define se a senha longa do AP flexível precisa ser codificada em ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: define se a configuração da banda será atualizada automaticamente para bandas duplas durante a restauração da configuração da nuvem quando um novo dispositivo tiver suporte.
  • (Disponível a partir da versão 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: indica se o framework anexa automaticamente bandas mais baixas à configuração de banda para evitar o processamento de coexistência.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported: se a atualização dinâmica do código do país no modo AP é compatível com o dispositivo
  • Suporte a canais: config_wifiSoftap2gChannelList, config_wifiSoftap5gChannelList, config_wifiSoftap6gChannelList e config_wifiSoftap60gChannelList.
  • Suporte à restauração especificando se as entradas correspondentes são redefinidas para o padrão ao restaurar a configuração do ponto de acesso em um novo dispositivo: config_wifiSoftapResetChannelConfig, config_wifiSoftapResetHiddenConfig, config_wifiSoftapResetUserControlConfig, config_wifiSoftapResetAutoShutdownTimerConfig, config_wifiSoftapResetMaxClientSettingConfig. Eles são definidos como true por padrão, o que significa que os valores são redefinidos. Isso é essencial se o novo dispositivo não tiver suporte à configuração.
  • Recursos de hardware:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Disponível a partir da versão 13) config_wifiSoftapOweTransitionSupported
    • (Disponível a partir da versão 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Disponível a partir da versão 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 oferece um conjunto de testes de unidade e do conjunto de teste de compatibilidade (CTS) para validar o recurso de ponto de acesso. O recurso de ponto de acesso também pode ser testado usando o pacote de teste do fornecedor (VTS).

Testes de unidade

Verifique o pacote de ponto de acesso usando os testes a seguir.

  • Testes de serviço:

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

    atest packages/modules/Wifi/framework/tests/

Testes do conjunto de teste de compatibilidade (CTS)

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

Para acionar os testes do CTS, execute:

atest android.net.wifi.cts.WifiManagerTest

Teste de fornecedor (VTS)

Se a interface HIDL estiver implementada, execute:

atest VtsHalWifiHostapdV1_2Target

Se a interface AIDL estiver implementada, execute:

atest VtsHalHostapdTargetTest