Ponto de acesso Wi-Fi (Soft AP)

O Android oferece suporte a pontos 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 de soft AP permite a configuração do 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 de 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 Configurações do AOSP. No entanto, ele não usa todas as APIs da configuração do Soft AP.

Para oferecer suporte ao tethering por meio de um ponto de acesso ou somente local, o app precisa executar 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 conectado:

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

Para pontos de acesso somente locais:

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

Implementar listas de permissão e 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 máximo de clientes aceito pelo dispositivo. Você pode conferir o número máximo em SoftApCapability#getMaxSupportedClients.
  • Forneça controle dinâmico usando listas de permissão e 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 estiver 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 para associação.
      • A associação é permitida para todos os dispositivos com endereços MAC em SoftApConfiguration.Builder#setAllowedClientList.
      • 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 padrão de tempo limite de desligamento. 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 forçar a desconexão de um cliente. Necessário para ativar listas de permissões e de bloqueio. Comunicado ao app de controle (app Configurações) por SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).
  • (Disponível a partir de 13) config_wifiSoftapPassphraseAsciiEncodableCheck: se a senha longa de soft AP precisa ou não ser codificável 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: define 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.
  • Restaurar o suporte 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 em 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