Hotspot de Wi-Fi (PA secundario)

Android admite hotspots de Wi-Fi (PA secundario), lo que incluye la conexión mediante un hotspot de Wi-Fi y hotspots de Wi-Fi solo locales.

La función de PA secundario permite la configuración de lo siguiente:

  • SSID y BSSID
  • Tipo de seguridad (incluido WPA3)
  • SSID oculto
  • Banda y canal de operación (incluido ACS)
  • Cantidad máxima de clientes permitidos
  • Valor de tiempo de espera para el cierre automático
  • Lista de dispositivos permitidos y bloqueados para que los usuarios controlen los dispositivos asociados
  • Nivel de aleatorización de MAC para el BSSID del AP
  • 802.11ax y 802.11be

Las capacidades del dispositivo determinan la disponibilidad de estos controles. Android 11 presenta APIs para obtener estas capacidades. Los fabricantes de dispositivos también pueden especificar las capacidades del dispositivo base por medio de superposiciones.

Ten en cuenta que algunas de las APIs son APIs del sistema y están restringidas a través de permisos para que solo la app de Configuración del sistema pueda acceder a ellas.

Cómo desarrollar apps con APIs de hotspot

La app de configuración del AOSP proporciona una implementación predeterminada de un hotspot de Wi-Fi mediante dispositivo móvil; sin embargo, no utiliza todas las APIs para la configuración de PA secundario.

Para admitir la conexión mediante un hotspot o un hotspot solo local, la app debe realizar las siguientes funciones:

  1. Registra una devolución de llamada para obtener las capacidades del dispositivo con WifiManager#registerSoftApCallback para un hotspot de conexión mediante dispositivo móvil o WifiManager#registerLocalOnlyHotspotSoftApCallback para un hotspot solo local.

    La devolución de llamada SoftApCallback proporciona los siguientes métodos:

    • SoftApCallback#onCapabilityChanged: Proporciona información sobre las capacidades del dispositivo, incluida la cantidad máxima de clientes admitidos y si se admiten SAE o ACS.
    • SoftApCallback#onInfoChanged: Proporciona información sobre el PA secundario en ejecución (solo válido una vez que se inició), incluida la información de la banda y la frecuencia.
    • SoftApCallback#onConnectedClientsChanged: Proporciona una lista de clientes conectados. Para cada cliente, puedes obtener la dirección MAC. Para obtener la información de IP, usa la devolución de llamada TetheringEventCallback#onClientsChanged.
    • SoftApCallback#onStateChanged: Proporciona actualizaciones sobre el estado del PA secundario a medida que se habilita o se inhabilita.
    • SoftApCallback#onBlockedClientConnecting: Proporciona la información del cliente bloqueado con uno de los siguientes motivos para el bloqueo: el dispositivo alcanzó la cantidad máxima de clientes que puede admitir o el cliente no está autorizado de forma explícita para conectarse.

Para un hotspot de conexión mediante dispositivo móvil:

  1. Configura la configuración del PA secundario para la conexión mediante una llamada al método WifiManager#setSoftApConfiguration y proporciona una instancia de SoftApConfiguration. Construye SoftApConfiguration con la clase SoftApConfiguration.Builder.
  2. Para iniciar la conexión mediante dispositivo móvil, llama al método correspondiente en TetheringManager#startTethering.

Para hotspot solo local:

  1. Inicia el hotspot solo local con una configuración de AP de software específica mediante una llamada al método WifiManager#startLocalOnlyHotspot.

Implementa listas de entidades permitidas y bloqueadas

Un requisito típico del operador es proporcionarle al usuario el control de los dispositivos que pueden asociarse al PA secundario. Existen varios mecanismos para hacerlo:

  • Limita la cantidad máxima de dispositivos que se pueden asociar al PA de software mediante SoftApConfiguration.Builder#setMaxNumberOfClients. Asegúrate de especificar un número que sea inferior a la cantidad máxima de clientes que admite el dispositivo. Puedes obtener la cantidad máxima en SoftApCapability#getMaxSupportedClients.
  • Ofrece un control dinámico con listas de entidades permitidas y bloqueadas:

    • La configuración predeterminada de un PA secundario permite que todos los dispositivos se asocien a él, excepto los dispositivos cuyas direcciones MAC se agregan a SoftApConfiguration.Builder#setBlockedClientList.
    • Si el PA secundario se configura con SoftApConfiguration.Builder#setClientControlByUserEnabled(true), se usa la lista de permitidos.

      • Todos los dispositivos cuyas direcciones MAC se encuentran en SoftApConfiguration.Builder#setBlockedClientList están bloqueadas de la asociación.
      • Se permite la asociación con todos los dispositivos cuyas direcciones MAC se encuentren en SoftApConfiguration.Builder#setAllowedClientList.
      • Todos los demás dispositivos (es decir, aquellos cuyas direcciones MAC no están en la lista de direcciones permitidas o bloqueadas) están bloqueados, pero se llama a SoftApCallback#onBlockedClientConnecting, lo que permite que la app de control (es decir, la app de Configuración) realice una acción, por ejemplo, solicitarle confirmación al usuario y, luego, agregar el dispositivo a la lista de entidades permitidas o bloqueadas, según su comportamiento.

    Ten en cuenta que los dispositivos solo pueden usar la función de lista de entidades permitidas si son compatibles con el dispositivo. Puedes verificar la compatibilidad del dispositivo con SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).

Implementación

Para admitir la conexión mediante un hotspot o un hotspot solo local, los fabricantes de dispositivos deben proporcionar compatibilidad con la app de Configuración, el framework y la HAL o el firmware:

  • App de configuración: La app de Configuración del AOSP proporciona un modelo de referencia para configurar un hotspot de conexión mediante dispositivo móvil con SSID y credenciales de seguridad. Este código se puede usar como está o modificarse para proporcionar capacidades adicionales, como se describe en Cómo desarrollar apps con las APIs de hotspot.

  • Framework: El código del framework del AOSP admite todas las funciones que se describen en Cómo desarrollar apps con APIs de hotspot.

  • HAL/firmware para hotspot: puede ser el IHostapd.hal versión 1.2 o posterior de HIDL o el IHostapd.aidl del AIDL.

Personalización

Para personalizar la implementación, los fabricantes de dispositivos deben configurar las siguientes superposiciones y configuraciones de proveedores, que se documentan en packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml:

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds: Es el intervalo de tiempo de espera de apagado predeterminado. Solo es válida si se habilita SoftApConfiguration#setAutoShutdownEnabled. Se puede anular con SoftApConfiguration#setShutdownTimeoutMillis.
  • config_wifiHardwareSoftapMaxClientCount: La limitación de hardware para la cantidad máxima de clientes admitidos. La cantidad máxima de clientes que admite el dispositivo es la cantidad mínima de restricciones de hardware y de proveedores (especificadas por CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT). El resultado final se proporciona a la app con SoftApCapabilities#getMaxSupportedClients.
  • config_wifiSofapClientForceDisconnectSupported: Indica si el dispositivo puede forzar la desconexión de un cliente. Es obligatorio para habilitar las listas de entidades permitidas y bloqueadas. Se comunica a la app de control (app de Configuración) a través de SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT).
  • (Disponible a partir de la versión 13) config_wifiSoftapPassphraseAsciiEncodableCheck: Indica si se requiere o no que la frase de contraseña de AP de software sea codificable en ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported: Indica si se debe actualizar automáticamente la configuración de banda a doble banda durante el restablecimiento de la configuración en la nube cuando se admite un dispositivo nuevo.
  • (Disponible a partir de la versión 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled: Indica si el framework agrega automáticamente las bandas inferiores a la configuración de bandas para evitar el manejo de coexistencia.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported: Indica si el dispositivo admite o no la actualización dinámica del código de país en modo PA.
  • Compatibilidad con canales: config_wifiSoftap2gChannelList, config_wifiSoftap5gChannelList, config_wifiSoftap6gChannelList y config_wifiSoftap60gChannelList.
  • Se admite el restablecimiento que especifica si las entradas correspondientes se restablecen a la configuración predeterminada cuando se restablece la configuración del hotspot en un dispositivo nuevo: config_wifiSoftapResetChannelConfig, config_wifiSoftapResetHiddenConfig, config_wifiSoftapResetUserControlConfig, config_wifiSoftapResetAutoShutdownTimerConfig y config_wifiSoftapResetMaxClientSettingConfig. Ten en cuenta que estos se configuran en true de forma predeterminada, lo que significa que los valores se restablecen. Esto es fundamental si el dispositivo nuevo no admite la configuración.
  • Funciones de hardware:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Disponible a partir de 13) config_wifiSoftapOweTransitionSupported
    • (Disponible a partir de 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Disponible 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

Validación

Android proporciona un conjunto de pruebas de unidades y del Conjunto de pruebas de compatibilidad (CTS) para validar la función de hotspot. La función de hotspot también se puede probar con el Conjunto de pruebas de proveedores (VTS).

Pruebas de unidades

Verifica el paquete del hotspot mediante las siguientes pruebas.

  • Pruebas de servicio:

    atest packages/modules/Wifi/service/tests/wifitests/
    
  • Pruebas del administrador:

    atest packages/modules/Wifi/framework/tests/
    

Pruebas del Conjunto de pruebas de compatibilidad (CTS)

Usa pruebas CTS para validar la función de hotspot. El CTS detecta cuándo la función está habilitada y, luego, incluye automáticamente las pruebas asociadas.

Para activar las pruebas del CTS, ejecuta lo siguiente:

atest android.net.wifi.cts.WifiManagerTest

Conjunto de pruebas de proveedores (VTS)

Si se implementa la interfaz HIDL, ejecuta lo siguiente:

atest VtsHalWifiHostapdV1_2Target

Si se implementa la interfaz del AIDL, ejecuta el siguiente comando:

atest VtsHalHostapdTargetTest