Ponto de acesso Wi-Fi (Soft AP)

O Android oferece suporte a pontos de acesso Wi-Fi (Soft AP), incluindo tethering. através 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 ordem aleatória de MAC para o BSSID do AP
  • 802.11ax e 802.11be

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

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

Desenvolver apps com APIs de ponto de acesso

A implementação padrão de um ponto de acesso Wi-Fi vinculado é fornecida pelo Settings, mas não exerce todas as APIs do Soft AP configuração do Terraform.

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

  1. Registre um callback para acessar os recursos do dispositivo usando WifiManager#registerSoftApCallback para um ponto de acesso vinculado; ou WifiManager#registerLocalOnlyHotspotSoftApCallback para uma loja ponto de acesso.

    O callback SoftApCallback fornece os seguintes métodos:

    • SoftApCallback#onCapabilityChanged: Fornece informações sobre as capacidades do dispositivo, incluindo o máximo número de clientes compatíveis e se são compatíveis com SAE ou ACS.
    • 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, é possível receber e o endereço MAC. Para obter as informações de IP, use o TetheringEventCallback#onClientsChanged.
    • SoftApCallback#onStateChanged: Fornece atualizações sobre o estado do Soft AP conforme ele é ativado e desativado.
    • SoftApCallback#onBlockedClientConnecting: fornece as informações do cliente bloqueado com uma das opções a seguir. motivos para o bloqueio: o dispositivo atingiu o número máximo de aos quais ele oferece suporte ou que não está explicitamente autorizado a conectar.

Para um ponto de acesso vinculado:

  1. Configure a configuração de soft AP para tethering chamando o método WifiManager#setSoftApConfiguration e fornecendo uma instância de SoftApConfiguration. Construção SoftApConfiguration usando o método 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 de soft AP específica: chamando WifiManager#startLocalOnlyHotspot .

Implementar listas de permissão e bloqueio

Um requisito típico das operadoras é fornecer ao usuário os controles da que podem se associar ao Soft AP. Existem várias mecanismos para fazer isso:

  • Limitar o número máximo de dispositivos que podem ser associados ao soft AP usando SoftApConfiguration.Builder#setMaxNumberOfClients. Não se esqueça de especificar um número menor que o máximo de clientes aceitos. pelo dispositivo. Para conseguir o número máximo, 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 ser associada ao soft AP, exceto para dispositivos com endereços MAC que sejam adicionado 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 SoftApConfiguration.Builder#setBlockedClientList estão bloqueados de associação.
      • Todos os dispositivos com endereços MAC SoftApConfiguration.Builder#setAllowedClientList são permitidos associação.
      • Todos os outros dispositivos (ou seja, dispositivos com endereços MAC não estão na lista de permissões ou de bloqueio) não têm permissão para associação, mas SoftApCallback#onBlockedClientConnecting está chamado, permitindo que o app de controle (ou seja, o app Configurações) acesse realizam uma ação, por exemplo, pedir a confirmação do usuário e e 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 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 somente ao local, faça o seguinte: os fabricantes de dispositivos precisam fornecer o app Configurações, framework e suporte a HAL/firmware:

Personalização

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

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds: o padrão ou intervalo de tempo limite de desligamento. Válido apenas se SoftApConfiguration#setAutoShutdownEnabled está ativado. Podem ser substituídas usando SoftApConfiguration#setShutdownTimeoutMillis.
  • config_wifiHardwareSoftapMaxClientCount: a limitação de hardware para o número máximo de clientes aceitos. O número máximo de clientes compatíveis com o dispositivo é o mínimo de hardware e restrições (especificadas pelo 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 a permissão e listas de bloqueio. Comunicado ao app de controle (app Configurações) usando SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT):
  • (disponível nas 13 opções) config_wifiSoftapPassphraseAsciiEncodableCheck: Se a senha longa de soft AP precisa ou não ser codificável em ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: se ou não para atualizar automaticamente a configuração da configuração de banda para banda dupla durante restauração de configuração de nuvem quando um novo dispositivo é compatível.
  • (disponível nas 13 opções) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: Se o framework anexa automaticamente bandas inferiores à configuração de bandas para evitar o tratamento da coexistência.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported: se é dinâmico ou não atualização de código de país no modo AP são suportados no dispositivo
  • Suporte ao canal: config_wifiSoftap2gChannelList, config_wifiSoftap5gChannelList, config_wifiSoftap6gChannelList e config_wifiSoftap60gChannelList.
  • Restaure o suporte especificando se as entradas correspondentes serã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. Observe que eles estão definidos como true por padrão, o que significa que os valores são redefinidos. Isso é fundamental se o novo dispositivo não é compatível com a configuração.
  • Recursos de hardware:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (disponível nas 13 opções) config_wifiSoftapOweTransitionSupported
    • (disponível nas 13 opções) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (disponível nas 13 opções) 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 de 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 testes de fornecedor (VTS, na sigla em inglês).

Testes de unidade

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

  • Testes de serviço:

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

    atest packages/modules/Wifi/framework/tests/
    

Testes do conjunto de teste de compatibilidade (CTS)

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

Para acionar os testes de 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