Concurrence Wi-Fi STA/STA

Android 12 introduit la simultanéité Wi-Fi STA/STA, qui permet aux appareils de se connecter simultanément à deux réseaux Wi-Fi. Cette fonctionnalité facultative active les fonctions suivantes.

  • Établir avant de rompre : l'appareil établit une connexion à un nouveau réseau Wi-Fi avant de rompre la connexion existante. Cela se traduit par des transitions plus fluides lors du basculement entre les réseaux Wi-Fi
  • Connexion locale uniquement et Internet simultanée : l'appareil se connecte à un réseau uniquement local sans perturber la connexion Internet principale de l'appareil.
  • Connexion restreinte et Internet simultanée : l'appareil se connecte à un réseau restreint (disponible uniquement pour certaines applications privilégiées) sans perturber la connexion Internet principale de l'appareil.
  • (Android 13 ou version ultérieure) Plusieurs réseaux simultanés avec connexion Internet : l'appareil se connecte à deux réseaux, tous deux illimités et disponibles pour toutes les applications, et fournissent une connectivité Internet.

Cette page décrit le comportement de l'appareil lorsque cette fonctionnalité est activée et les détails de mise en œuvre pour les fabricants et fournisseurs d'appareils.

Mise en œuvre

Les appareils doivent prendre en charge les éléments suivants afin de mettre en œuvre la simultanéité Wi-Fi STA/STA :

  • La puce ou le micrologiciel Wi-Fi doit prendre en charge deux connexions STA simultanées. Le micrologiciel doit prendre en charge toutes les combinaisons de canaux et de bandes pour les deux connexions. Pour éviter les problèmes de performances, nous vous recommandons d'utiliser une puce Wi-Fi compatible DBS 2x2+2x2.

  • L'appareil doit prendre en charge les API suivantes dans l'implémentation AIDL ou HIDL d' IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • La combinaison d'interfaces Wi-Fi HAL doit avoir deux interfaces STA concurrentes exposées à l'aide d'un format de spécification tel que [{STA} <= 2, ...] . Pour plus d’informations, consultez Concurrence multi-interface Wi-Fi .

Si ces conditions préalables sont remplies, implémentez la simultanéité Wi-Fi STA/STA en procédant comme suit :

  1. Activez une ou plusieurs fonctions individuellement à l'aide des superpositions de ressources d'exécution (désactivées par défaut).

    • Création avant pause : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Connexion simultanée locale uniquement et Internet : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Connexion restreinte et Internet simultanée : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Plusieurs réseaux simultanés avec connexion Internet : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Validez chaque implémentation comme décrit dans leurs sections respectives ci-dessous.

Pour mieux prendre en charge la simultanéité Wi-Fi STA/STA, nous recommandons aux frameworks et applications personnalisés OEM d'utiliser la méthode NetworkCallback#onCapabilitiesChanged() au lieu de WifiManager#getConnectionInfo() , qui ne renvoie WifiInfo que pour un seul réseau et est obsolète dans Android 12. . Pour plus d'informations, consultez API de demande de réseau Wi-Fi pour la connectivité peer-to-peer .

À faire avant la pause

La fonction de création avant coupure permet aux appareils de se connecter à un nouveau réseau Wi-Fi tout en conservant la connexion au réseau Wi-Fi existante, en se déconnectant de l'ancien réseau uniquement lorsqu'ils se connectent avec succès au nouveau réseau Wi-Fi et disposent d'un accès Internet.

Le cas d'utilisation de création avant rupture résout les problèmes suivants dans Android 11 ou version antérieure, où l'appareil doit se déconnecter du réseau Wi-Fi existant avant de se connecter à un nouveau réseau (pause avant création).

  • Lors de la connexion à un nouveau réseau, l'appareil peut découvrir qu'il a enregistré un mot de passe Wi-Fi incorrect ou que le nouveau réseau n'a pas accès à Internet. Cela oblige l'appareil à revenir à l'ancien réseau, ce qui entraîne une période de temps importante sans connectivité Wi-Fi.

  • L'ancien réseau est brusquement déconnecté, ce qui signifie que toutes les prises sont fermées. Souvent, les applications ne réagissent pas bien à une perte soudaine de connectivité, ce qui peut conduire l'utilisateur à rester quelques secondes sans connexion Internet jusqu'à ce que la nouvelle connexion soit complètement établie.

  • Le réseau par défaut change deux fois, de l'ancien réseau Wi-Fi au cellulaire, puis du cellulaire au nouveau réseau Wi-Fi. Cela amène les applications à réagir deux fois aux changements de réseau. L'appareil doit également passer un peu de temps à utiliser les données cellulaires.

Le flux de création avant interruption n'est utilisé que pour les commutateurs de réseau Wi-Fi automatiques initiés par le système d'exploitation. Les commutateurs réseau lancés par l'utilisateur utilisent le flux existant "break-before-make", dans lequel le réseau précédent est entièrement déconnecté avant que le nouveau réseau ne soit connecté. Dans certains cas, le flux break-before-make est utilisé même dans les commutateurs automatiques initiés par le système d'exploitation, par exemple lors de la commutation entre deux réseaux tous deux configurés pour utiliser l'adresse MAC d'usine.

Les applications peuvent vérifier si ce cas d'utilisation est pris en charge sur l'appareil à l'aide de l'API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Validation du make-before-break

Pour valider votre implémentation, déclenchez un changement de réseau Wi-Fi automatique (en garantissant qu'un réseau avec une force de signal plus forte que le réseau actuellement connecté est disponible) et vérifiez que l'appareil maintient la connexion existante lors de la connexion au nouveau réseau. Pour afficher l'état des deux interfaces Wi-Fi et vérifier que les deux sont connectées, utilisez la commande suivante.

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

Si le nouveau réseau ne dispose pas de connectivité, l'appareil tente de se connecter au réseau, tout en maintenant la connexion avec le réseau existant, et abandonne la tentative lorsqu'il détecte que le nouveau réseau n'a pas Internet. L'appareil continue ensuite à utiliser la connexion existante comme réseau Wi-Fi principal.

Connexion simultanée locale uniquement et Internet

La fonction de connexion locale uniquement et Internet simultanée permet à des appareils de se connecter à une connexion locale uniquement, telle qu'une connexion à un appareil IoT, simultanément au réseau de fourniture Internet principal. Cette fonction améliore l'expérience utilisateur lors de la connexion directe à des appareils IoT, tels que des caméras, ce qui est possible grâce à l'API WifiNetworkSpecifier ajoutée dans Android 10.

Sous Android 11 et versions antérieures, les appareils se déconnectent du réseau Wi-Fi principal lors de la connexion à un appareil IoT, ce qui entraîne une perte de connectivité Internet (sauf si l'appareil dispose d'un autre type de transport disponible, tel que les données cellulaires).

Les applications peuvent vérifier si cette fonction est prise en charge sur l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Pour plus d'informations sur les modifications apportées à la fonction de connexion locale uniquement et Internet simultanée dans Android 12, consultez l'API de demande de réseau Wi-Fi pour la connectivité peer-to-peer .

Validation de la connexion locale uniquement et Internet

Pour valider cette fonction, utilisez les tests CTS et ACTS suivants :

  • CTS : MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTES : WifiStaConcurrencyNetworkRequestTest

Connexion restreinte et Internet simultanée

La fonction de connexion restreinte et Internet simultanée permet à l'appareil de se connecter simultanément à un réseau Wi-Fi principal pour l'utilisateur et à un réseau Wi-Fi restreint qui n'est disponible que pour certaines applications.

Les applications peuvent vérifier si cette fonction est prise en charge sur l'appareil à l'aide de l'API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Pour permettre à un appareil de se connecter à des réseaux Wi-Fi restreints secondaires, procédez comme suit :

  1. Ajoutez des suggestions de réseau Wi-Fi avec setOemPaid ou setOemPrivate défini sur true.

  2. Dans ConnectivityManager , déposez une NetworkRequest avec les fonctionnalités correspondantes :

Lorsque l'appareil détecte les résultats de l'analyse avec un réseau correspondant à la suggestion OEM payante ou privée OEM, il s'y connecte automatiquement en tant que réseau secondaire.

Validation des connexions restreintes et Internet simultanées

Pour valider cette fonction, utilisez les tests CTS et ACTS suivants :

  • CTS : MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTES : WifiStaConcurrencyNetworkRequestTest

Plusieurs réseaux simultanés avec connexion Internet

Disponible pour Android 13 ou version ultérieure, la fonction de réseaux multiples simultanés avec connexion Internet permet à l'appareil de se connecter simultanément à deux réseaux (AP), tous deux sans restriction (toutes les applications ont accès) et fournissent un accès à Internet.

Les applications peuvent vérifier si cette fonctionnalité est prise en charge sur l'appareil à l'aide de la méthode WifiManager#isStaConcurrencyForMultiInternetSupported() .

Si la fonctionnalité est prise en charge, les applications privilégiées peuvent activer la fonctionnalité à l'aide de la méthode WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . La fonctionnalité propose les modes suivants :

Pour interroger le mode de fonctionnalité actuellement actif, utilisez la méthode WifiManager#getStaConcurrencyForMultiInternetMode() .

Lorsque la fonctionnalité est activée, suivez les étapes suivantes pour demander un réseau Wi-Fi fournissant une connexion Internet supplémentaire.

  1. Créez un spécificateur de réseau Wi-Fi à l'aide de WifiNetworkSpecifier.Builder . Choisissez une bande pour le spécificateur à l'aide de la méthode setBand() . Ne spécifiez pas le SSID ou le BSSID car le réseau supplémentaire pour la bande spécifiée est sélectionné par le framework Wi-Fi.

  2. À l’aide ConnectivityManager , créez un NetworkRequest avec la fonctionnalité NET_CAPABILITY_INTERNET .

  3. Ajoutez le spécificateur à la demande réseau avec une instance NetworkCallback pour suivre l'état de la demande et envoyez la demande à ConnectivityManager . Si un réseau enregistré avec la bande demandée est disponible dans le résultat de l'analyse et que la connexion au réseau réussit, NetworkCallback.onAvailable() est invoqué sur l'objet de rappel.

Validation de plusieurs réseaux simultanés avec connexion Internet

Pour valider cette fonction, utilisez le test CTS suivant :

  • CTS : MultiStaConcurrencyMultiInternetWifiNetworkTest

Directives relatives aux puces Wi-Fi du fournisseur

Pour les fournisseurs de puces Wi-Fi, utilisez les directives suivantes pour prendre en charge la simultanéité Wi-Fi STA/STA.

La puce Wi-Fi doit prendre en charge deux connexions STA simultanées. Cela signifie qu'il prend en charge les éléments suivants :

  • Chaque interface STA possède un MAC unique programmable par le framework.
  • L'interface STA secondaire peut être créée et détruite dynamiquement.
  • Chaque STA peut être connectée à un SSID différent (soit dans la même bande, soit dans une bande différente).
  • Chaque STA peut être connectée au même SSID (soit dans la même bande, soit dans une bande différente). Les deux STA ne doivent jamais être connectées au même BSSID.

Les fonctionnalités critiques doivent fonctionner interface par interface et doivent être disponibles sur l’interface principale. Voici une liste de ces fonctionnalités critiques :

  • L'itinérance doit être prise en charge au moins sur l'interface principale (définie à l'aide de IWifiChip.setMultiStaPrimaryConnection() ). Si l'itinérance est prise en charge sur les deux interfaces, les décisions sur une connexion ne doivent pas entrer en conflit avec la deuxième connexion simultanée. Par exemple, une interface ne doit pas accéder au BSSID de l'autre connexion.

  • APF (et d'autres déchargements tels que ARP et NS) doivent être pris en charge au moins sur l'interface principale (définie à l'aide de IWifiChip.setMultiStaPrimaryConnection() ).

  • Les statistiques de la couche liaison doivent fonctionner par interface.

Voici les implémentations de puces Wi-Fi recommandées pour différents scénarios de concurrence :

  • La puce Wi-Fi doit permettre au framework d'appeler IWifiChip.setMultiStaUseCase() avec l'une des constantes suivantes pour spécifier la fonction actuelle :

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Spécifie la fonction Make-Before-Break. La qualité de la connexion principale doit être privilégiée par rapport à la connexion secondaire.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Spécifie la connexion simultanée locale uniquement et Internet ou la fonction simultanée de connexion restreinte et Internet . La qualité des deux connexions doit être également prioritaire.
  • Étant donné que les deux STA simultanées peuvent conduire aux modes de fonctionnement MCC, SCC et DBS, l'implémentation du fournisseur doit choisir la meilleure configuration radio lorsque l'infrastructure appelle IWifiChip.setMultiStaUseCase() pour indiquer la fonction. Voici les lignes directrices générales :

    • 2x2+2x2 DBS est préféré si disponible.
    • Évitez si possible le DBS 1x1+1x1 en raison de l’impact excessif sur la qualité de la connexion. Préférez plutôt MCC.
    • Le cycle de service MCC doit être configurable par le pilote ou le micrologiciel pour les différentes fonctions. Le framework ne définit pas directement le cycle de service MCC, mais interroge ces informations à l'aide de StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • Si vous utilisez MCC, nous recommandons les cycles de service suivants entre les connexions primaire et secondaire :

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% primaire, 30% secondaire.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% primaire, 50% secondaire.