Simultaneidad de STA/STA de Wi-Fi

Android 12 incorpora la simultaneidad de STA/STA de Wi-Fi, que permite que los dispositivos se conecten a dos redes Wi-Fi de manera simultánea. Esta función opcional habilita las siguientes funciones.

  • Conexión antes de desconexión: El dispositivo se conecta a una nueva red Wi-Fi antes de interrumpir la conexión existente. Esto genera transiciones más fluidas cuando se cambia entre redes Wi-Fi.
  • Conexión simultánea solo local y a Internet: El dispositivo se conecta a una red solo local sin interrumpir la conexión principal que proporciona Internet.
  • Conexión simultánea restringida y a Internet: El dispositivo se conecta a una red restringida (disponible solo para ciertas apps con privilegios) sin interrumpir la conexión principal del dispositivo que proporciona Internet.
  • (Android 13 o versiones posteriores) Conexión simultánea a Internet en varias redes: El dispositivo se conecta a dos redes que no tienen restricciones, están disponibles para todas las apps y proporcionan conectividad a Internet.

En esta página, se describe el comportamiento del dispositivo cuando se habilita esta función y los detalles de implementación para los fabricantes y proveedores de dispositivos.

Implementación

Para implementar la simultaneidad de STA/STA de Wi-Fi, los dispositivos deben admitir lo siguiente:

  • El chip o el firmware de Wi-Fi deben admitir dos conexiones STA simultáneas. El firmware debe admitir todas las combinaciones de canales y bandas para ambas conexiones. Para evitar problemas de rendimiento, te recomendamos que uses un chip Wi-Fi compatible con DBS de 2x2 + 2x2.

  • El dispositivo debe admitir las siguientes APIs en la implementación de IWifiChip en AIDL o HIDL.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • La combinación de la interfaz Wi-Fi del HAL debe tener dos interfaces STA simultáneas expuestas con un formato de especificación como [{STA} <= 2, ...]. Para obtener más información, consulta Simultaneidad de varias interfaces de Wi-Fi.

Si se cumplen esos requisitos previos, implementa la simultaneidad de STA/STA de Wi-Fi de la siguiente manera:

  1. Habilita una o más funciones de forma individual con superposiciones de recursos de tiempo de ejecución (inhabilitadas de forma predeterminada).

    • Make-before-break: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Conexión simultánea solo local y a Internet: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Restricciones simultáneas y conexión a Internet: config_wifiMultiStaRestrictedConcurrencyEnabled
    • Varias redes simultáneas con conexión a Internet: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Valida cada implementación como se describe en sus respectivas secciones.

Para mejorar la compatibilidad con la simultaneidad de STA/STA de Wi-Fi, recomendamos que los frameworks y las apps personalizados por el OEM usen el método NetworkCallback#onCapabilitiesChanged() en lugar de WifiManager#getConnectionInfo(), que solo devuelve WifiInfo para una sola red y dejó de estar disponible en Android 12. Para obtener más información, consulta la API de Wi-Fi Network Request para la conectividad entre pares.

Conexión antes de desconexión

La función make-before-break permite que los dispositivos se conecten a una nueva red Wi-Fi y mantengan la conexión existente, y solo se desconecten de la red anterior cuando se conecten correctamente a la nueva red Wi-Fi y tengan acceso a Internet.

El caso de uso de make-before-break aborda los siguientes problemas en Android 11 o versiones anteriores, en los que el dispositivo debe desconectarse de la red Wi-Fi existente antes de conectarse a una red nueva (break-before-make).

  • Cuando se conecta a una red nueva, es posible que el dispositivo descubra que tiene guardada una contraseña de Wi-Fi incorrecta o que la red nueva no tiene acceso a Internet. Esto obliga al dispositivo a volver a la red anterior, lo que genera una cantidad significativa de tiempo sin conectividad Wi-Fi.

  • La red anterior se desconecta de forma abrupta, lo que significa que se cierran todos los sockets. A menudo, las apps no reaccionan bien ante una pérdida repentina de conectividad, lo que puede provocar que el usuario experimente unos segundos sin conectividad a Internet hasta que se establezca por completo la nueva conexión.

  • La red predeterminada cambia dos veces, de la red Wi-Fi anterior a la red celular y, luego, de la red celular a la nueva red Wi-Fi. Esto hace que las apps reaccionen a los cambios de red dos veces. El dispositivo también debe usar datos móviles durante un breve período.

El flujo de conexión antes de desconexión solo se usa para los cambios automáticos de red Wi-Fi iniciados por el SO. Los cambios de red iniciados por el usuario utilizan el flujo heredado de interrupción antes de establecer la conexión, en el que la red anterior se desconecta por completo antes de que se conecte la nueva red. En ciertos casos, el flujo de desconexión antes de conexión se usa incluso en los cambios automáticos iniciados por el SO, por ejemplo, cuando se cambia entre dos redes configuradas para usar la dirección MAC de fábrica.

Las apps pueden verificar si este caso de uso es compatible con el dispositivo a través de la API de WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

Valida la función de conexión antes de desconexión

Para validar tu implementación, activa un cambio automático de red Wi-Fi (asegúrate de que haya disponible una red con una intensidad de señal mayor que la de la red conectada) y verifica que el dispositivo mantenga la conexión existente mientras se conecta a la nueva red. Para ver el estado de ambas interfaces de Wi-Fi y verificar que ambas estén conectadas, usa el siguiente comando.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

Si la red nueva no tiene conectividad, el dispositivo intenta conectarse a ella, mientras mantiene la conexión con la red existente y anula el intento cuando detecta que la red nueva no tiene Internet. Luego, el dispositivo sigue usando la conexión existente como la red Wi-Fi principal.

Conexión simultánea a Internet y solo local

La función de conexión simultánea solo local y a Internet permite que los dispositivos se conecten a una conexión solo local, como una conexión a un dispositivo IoT, de forma simultánea con la red principal que proporciona Internet. Esta función mejora la experiencia del usuario cuando se conecta directamente a dispositivos IoT, como cámaras, lo que es posible a través de la API de WifiNetworkSpecifier agregada en Android 10.

En Android 11 y versiones anteriores, los dispositivos se desconectan de la red Wi-Fi principal cuando se conectan a un dispositivo IoT, lo que provoca una pérdida de conectividad a Internet (a menos que el dispositivo tenga otro tipo de transporte disponible, como datos móviles).

Las apps pueden verificar si esta función es compatible con el dispositivo a través de la API de WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

Para obtener más información sobre los cambios en la función de conexión simultánea solo local y a Internet en Android 12, consulta la API de Wi-Fi Network Request para la conectividad entre pares.

Valida la conexión a Internet y la conexión solo local

Para validar esta función, usa la prueba de CTS MultiStaConcurrencyWifiNetworkSpecifierTest.

Conexión simultánea restringida y a Internet

La función de conexión simultánea restringida y a Internet permite que el dispositivo se conecte de forma simultánea a una red Wi-Fi principal para el usuario y a una red Wi-Fi restringida que solo está disponible para apps seleccionadas.

Las apps pueden verificar si esta función es compatible con el dispositivo a través de la API de WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

Para permitir que un dispositivo se conecte a redes Wi-Fi secundarias restringidas, sigue estos pasos:

  1. Agrega sugerencias de redes Wi-Fi con setOemPaid o setOemPrivate establecido como verdadero.

  2. En ConnectivityManager, presenta un NetworkRequest con las capacidades correspondientes:

Cuando el dispositivo detecta resultados de análisis con una red que coincide con la sugerencia privada o pagada del OEM, se conecta automáticamente a ella como red secundaria.

Valida la conexión a Internet y las restricciones simultáneas

Para validar esta función, usa la prueba de CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

Conexión simultánea a Internet en varias redes

Disponible para Android 13 o versiones posteriores, la función de conexión simultánea a Internet en varias redes permite que el dispositivo se conecte simultáneamente a dos redes (PA), que no tendrán restricciones (todas las apps tienen acceso) y ofrecerán acceso a Internet.

Las apps pueden verificar si el dispositivo admite esta función con el método WifiManager#isStaConcurrencyForMultiInternetSupported().

Si se admite la función, las apps con privilegios pueden habilitarla con el método WifiManager#setStaConcurrencyForMultiInternetMode(int mode). La función tiene los siguientes modos:

Para consultar el modo de función activo actualmente, usa el método WifiManager#getStaConcurrencyForMultiInternetMode().

Cuando la función esté habilitada, sigue estos pasos para solicitar una red Wi-Fi adicional que proporcione Internet.

  1. Crea un especificador de red Wi-Fi con WifiNetworkSpecifier.Builder. Elige una banda para el especificador con el método setBand(). No especifiques el SSID ni el BSSID, ya que el framework de Wi-Fi selecciona la red adicional para la banda especificada.

  2. Con ConnectivityManager, crea un NetworkRequest con la capacidad NET_CAPABILITY_INTERNET.

  3. Agrega el especificador a la solicitud de red junto con una instancia de NetworkCallback para hacer un seguimiento del estado de la solicitud y envía la solicitud a ConnectivityManager. Si hay una red guardada con la banda solicitada disponible en el resultado del análisis y la conexión a la red es exitosa, se invoca a NetworkCallback.onAvailable() en el objeto de devolución de llamada.

Valida la conexión simultánea a Internet en varias redes

Para validar esta función, usa la siguiente prueba de CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Lineamientos para el chip Wi-Fi de proveedores

Los proveedores de chips Wi-Fi deben seguir los lineamientos que se indican a continuación para admitir la simultaneidad de STA/STA de Wi-Fi.

El chip Wi-Fi debe admitir conexiones STA simultáneas dobles. Esto significa que admite lo siguiente:

  • Cada interfaz de STA tiene una MAC única que el framework puede programar.
  • La interfaz de STA secundaria se puede crear y destruir de forma dinámica.
  • Cada STA se puede conectar a un SSID diferente (ya sea dentro de la misma banda o en una banda diferente).
  • Cada STA se puede conectar al mismo SSID (ya sea dentro de la misma banda o en una banda diferente). Las dos STA nunca deben conectarse al mismo BSSID.

Las funciones críticas deben operar por interfaz y estar disponibles en la interfaz principal. A continuación, se incluye una lista de estas funciones críticas:

  • La itinerancia debe ser compatible con al menos la interfaz principal (configurada con IWifiChip.setMultiStaPrimaryConnection()). Si la itinerancia es compatible con ambas interfaces, las decisiones sobre una conexión no deben entrar en conflicto con la segunda conexión simultánea. Por ejemplo, una interfaz no debe cambiar al BSSID de la otra conexión.

  • El APF (y otras descargas, como ARP y NS) debe ser compatible con al menos la interfaz principal (establecida con IWifiChip.setMultiStaPrimaryConnection()).

  • Las estadísticas de la capa de vínculo deben operar por interfaz.

A continuación, se indican las implementaciones recomendadas de chips Wi-Fi para diferentes situaciones de simultaneidad:

  • El chip Wi-Fi debe permitir que el framework llame a IWifiChip.setMultiStaUseCase() con una de las siguientes constantes para especificar la función actual:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Especifica la función Make-Before-Break. Se debe priorizar la calidad de la conexión principal por sobre la conexión secundaria.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: Especifica la función de conexión simultánea solo local y a Internet o la función de conexión simultánea restringida y a Internet. Se debe priorizar la calidad de ambas conexiones por igual.
  • Dado que las STA simultáneas duales pueden generar modos de operación de MCC, SCC y DBS, la implementación del proveedor debe elegir la mejor configuración de radio cuando el framework llama a IWifiChip.setMultiStaUseCase() para indicar la función. A continuación, se indican algunos lineamientos generales:

    • Se prefiere la DBS de 2x2+2x2 si está disponible.
    • Evita los DBS de 1 x 1 + 1 x 1 si es posible debido al impacto excesivo en la calidad de la conexión. En su lugar, prefiere MCC.
    • El ciclo de trabajo del MCC debe poder configurarlo el controlador o el firmware para las distintas funciones. El framework no establece el ciclo de trabajo del MCC directamente, sino que consulta esta información con StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • Si usas MCC, recomendamos los siguientes ciclos de trabajo entre las conexiones principal y secundaria:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% principal y 30% secundaria.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% principal, 50% secundaria.