Параллелизм Wi-Fi STA/STA

Android 12 представляет Wi-Fi STA/STA concurrency, что позволяет устройствам подключаться к двум сетям Wi-Fi одновременно. Эта дополнительная функция включает следующие функции.

  • Make-before-break : Устройство подключается к новой сети Wi-Fi перед разрывом существующего соединения. Это обеспечивает более плавные переходы при переключении между сетями Wi-Fi
  • Одновременное локальное и интернет-подключение : устройство подключается только к локальной сети, не нарушая основного интернет-подключения устройства.
  • Одновременное ограниченное подключение к Интернету : устройство подключается к ограниченной сети (доступной только для определенных привилегированных приложений), не нарушая основное подключение устройства к Интернету.
  • (Android 13 или выше) Одновременное подключение к нескольким сетям с подключением к Интернету : устройство подключается к двум сетям, обе из которых не имеют ограничений и доступны для всех приложений, а также обеспечивают подключение к Интернету.

На этой странице описывается поведение устройства при включении этой функции, а также подробности реализации для производителей и поставщиков устройств.

Выполнение

Для реализации параллелизма Wi-Fi STA/STA устройства должны поддерживать следующее:

  • Чип или прошивка Wi-Fi должны поддерживать два одновременных соединения STA. Прошивка должна поддерживать все комбинации каналов и диапазонов для обоих соединений. Чтобы избежать проблем с производительностью, мы рекомендуем использовать чип Wi-Fi с поддержкой 2x2+2x2 DBS.

  • Устройство должно поддерживать следующие API в реализации AIDL или HIDL IWifiChip .

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • Комбинация интерфейсов HAL Wi-Fi должна иметь два параллельных интерфейса STA, представленных с использованием формата спецификации, например [{STA} <= 2, ...] . Для получения дополнительной информации см. раздел Параллелизм нескольких интерфейсов Wi-Fi .

Если эти предварительные условия выполнены, реализуйте параллелизм Wi-Fi STA/STA, выполнив следующие действия:

  1. Включите одну или несколько функций по отдельности с помощью наложений ресурсов времени выполнения (по умолчанию отключено).

    • Включение перед выключением : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • Одновременное локальное и интернет-подключение : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • Одновременное ограниченное и интернет-подключение : config_wifiMultiStaRestrictedConcurrencyEnabled
    • Одновременное подключение нескольких сетей к Интернету : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. Проверьте каждую реализацию, как описано в соответствующих разделах.

Для лучшей поддержки параллелизма Wi-Fi STA/STA мы рекомендуем, чтобы фреймворки и приложения, настроенные OEM-производителями, использовали метод NetworkCallback#onCapabilitiesChanged() вместо WifiManager#getConnectionInfo() , который возвращает WifiInfo только для одной сети и был объявлен устаревшим в Android 12. Для получения дополнительной информации см. API запросов Wi-Fi Network для однорангового подключения .

Сделать-до-разрушения

Функция «замкнуть перед разрывом» позволяет устройствам подключаться к новой сети Wi-Fi, сохраняя при этом существующее сетевое соединение Wi-Fi, отключаясь от старой сети только после успешного подключения к новой сети Wi-Fi и получения доступа в Интернет.

Вариант использования make-before-break решает следующие проблемы в Android 11 или более ранних версиях, где устройство должно отключиться от существующей сети Wi-Fi перед подключением к новой сети (break-before-make).

  • При подключении к новой сети устройство может обнаружить, что у него сохранен неверный пароль Wi-Fi или что новая сеть не имеет доступа к Интернету. Это заставляет устройство переключиться обратно на старую сеть, что приводит к значительному количеству времени без подключения к Wi-Fi.

  • Старая сеть внезапно отключается, что означает, что все сокеты закрываются. Приложения часто плохо реагируют на внезапную потерю подключения, и это может привести к тому, что пользователь будет испытывать несколько секунд без подключения к Интернету, пока новое подключение не будет полностью установлено.

  • Сеть по умолчанию меняется дважды: со старой сети Wi-Fi на сотовую, затем с сотовой на новую сеть Wi-Fi. Это заставляет приложения дважды реагировать на изменения сети. Устройство также должно провести короткое время, используя сотовые данные.

Поток «make-before-break» используется только для автоматических сетевых переключателей Wi-Fi, инициированных ОС. Сетевые переключатели, инициированные пользователем, используют устаревший поток «break-before-make», где предыдущая сеть полностью отключается перед подключением новой сети. В некоторых случаях поток «break-before-make» используется даже в автоматических переключателях, инициированных ОС, например, при переключении между двумя сетями, обе из которых настроены на использование заводского MAC-адреса.

Приложения могут проверить, поддерживается ли этот вариант использования на устройстве, с помощью API WifiManager#isMakeBeforeBreakWifiSwitchingSupported() .

Проверить соединение до разрыва

Для проверки вашей реализации запустите автоматическое переключение сети Wi-Fi (обеспечив наличие сети с более сильным сигналом, чем подключенная сеть) и проверьте, что устройство поддерживает существующее соединение при подключении к новой сети. Чтобы просмотреть состояние обоих интерфейсов Wi-Fi и убедиться, что оба подключены, используйте следующую команду.

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

Если в новой сети нет подключения, устройство пытается подключиться к сети, сохраняя при этом соединение с существующей сетью, и прерывает попытку, когда обнаруживает, что в новой сети нет интернета. Затем устройство продолжает использовать существующее подключение в качестве основной сети Wi-Fi.

Одновременное локальное и интернет-подключение

Функция одновременного локального и интернет-подключения позволяет устройствам подключаться к локальному подключению, например, к подключению к устройству IoT, одновременно с основной сетью, предоставляющей интернет. Эта функция улучшает пользовательский опыт при прямом подключении к устройствам IoT, например, камерам, что возможно через API WifiNetworkSpecifier , добавленный в Android 10.

В Android 11 и более ранних версиях устройства отключаются от основной сети Wi-Fi при подключении к устройству IoT, что приводит к потере подключения к Интернету (если только на устройстве не доступен другой тип транспорта, например, сотовые данные).

Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью API WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() .

Дополнительную информацию об изменениях в функции одновременного локального и интернет-подключения в Android 12 см. в разделе API запросов сети Wi-Fi для однорангового подключения .

Проверить только локальное и интернет-подключение

Для проверки этой функции используйте тест CTS MultiStaConcurrencyWifiNetworkSpecifierTest .

Одновременное ограниченное и интернет-подключение

Функция одновременного ограниченного подключения к Интернету позволяет устройству одновременно подключаться к основной сети Wi-Fi пользователя и к ограниченной сети Wi-Fi, которая доступна только для выбранных приложений.

Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью API WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() .

Чтобы разрешить устройству подключаться к дополнительным ограниченным сетям Wi-Fi, выполните следующие действия:

  1. Добавьте предложения сетей Wi-Fi, для которых setOemPaid или setOemPrivate заданы как true.

  2. В ConnectivityManager подайте NetworkRequest с соответствующими возможностями:

Когда устройство обнаруживает результаты сканирования с сетью, соответствующей предложению платного OEM-производителя или частного OEM-производителя, оно автоматически подключается к ней как к вторичной сети.

Проверить одновременное ограниченное и интернет-подключение

Для проверки этой функции используйте тест CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest .

Одновременное подключение нескольких сетей к Интернету

Функция одновременного подключения к нескольким сетям с подключением к Интернету, доступная для Android 13 и выше, позволяет устройству одновременно подключаться к двум сетям (точкам доступа), обе из которых не имеют ограничений (все приложения имеют доступ) и обеспечивают доступ в Интернет.

Приложения могут проверить, поддерживается ли эта функция на устройстве, с помощью метода WifiManager#isStaConcurrencyForMultiInternetSupported() .

Если функция поддерживается, привилегированные приложения могут включить ее с помощью метода WifiManager#setStaConcurrencyForMultiInternetMode(int mode) . Функция имеет следующие режимы:

Чтобы запросить текущий активный режим функции, используйте метод WifiManager#getStaConcurrencyForMultiInternetMode() .

Когда функция включена, выполните следующие действия, чтобы запросить дополнительную сеть Wi-Fi, предоставляющую доступ в Интернет.

  1. Создайте спецификатор сети Wi-Fi с помощью WifiNetworkSpecifier.Builder . Выберите диапазон для спецификатора с помощью метода setBand() . Не указывайте SSID или BSSID, так как дополнительная сеть для указанного диапазона выбирается фреймворком Wi-Fi.

  2. Используя ConnectivityManager , создайте NetworkRequest с возможностью NET_CAPABILITY_INTERNET .

  3. Добавьте спецификатор к сетевому запросу вместе с экземпляром NetworkCallback для отслеживания статуса запроса и отправьте запрос в ConnectivityManager . Если сохраненная сеть с запрошенной полосой доступна в результате сканирования и подключение к сети успешно, NetworkCallback.onAvailable() вызывается для объекта обратного вызова.

Проверка одновременной работы нескольких сетей с подключением к Интернету

Для проверки этой функции используйте следующий тест CTS:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

Рекомендации поставщика по чипам Wi-Fi

Поставщикам чипов Wi-Fi следует использовать следующие рекомендации для поддержки параллелизма Wi-Fi STA/STA.

Чип Wi-Fi должен поддерживать два одновременных соединения STA. Это означает, что он поддерживает следующее:

  • Каждый интерфейс STA имеет уникальный MAC-адрес, программируемый фреймворком.
  • Вторичный интерфейс STA может динамически создаваться и уничтожаться.
  • Каждая STA может быть подключена к разным SSID (как в пределах того же диапазона, так и в разных диапазонах).
  • Каждая STA может быть подключена к одному и тому же SSID (в пределах одного или разных диапазонов). Две STA никогда не должны быть подключены к одному и тому же BSSID.

Критические функции должны работать на основе интерфейса и должны быть доступны на основном интерфейсе. Ниже приведен список этих критических функций:

  • Роуминг должен поддерживаться как минимум на основном интерфейсе (устанавливается с помощью IWifiChip.setMultiStaPrimaryConnection() ). Если роуминг поддерживается на обоих интерфейсах, решения по одному подключению не должны конфликтовать со вторым одновременным подключением. Например, один интерфейс не должен перемещаться на BSSID другого подключения.

  • APF (и другие разгрузки, такие как ARP и NS) должны поддерживаться как минимум на основном интерфейсе (устанавливается с помощью IWifiChip.setMultiStaPrimaryConnection() ).

  • Статистика канального уровня должна обрабатываться для каждого интерфейса отдельно.

Ниже приведены рекомендуемые реализации чипов Wi-Fi для различных сценариев параллелизма:

  • Чип Wi-Fi должен позволять фреймворку вызывать IWifiChip.setMultiStaUseCase() с одной из следующих констант для указания текущей функции:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : Определяет функцию Make-Before-Break. Качество первичного соединения должно иметь приоритет над вторичным соединением.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : Указывает функцию одновременного локального и интернет-подключения или одновременного ограниченного и интернет-подключения . Качество обоих подключений должно быть одинаково приоритетным.
  • Поскольку двойные параллельные STA могут привести к режимам работы MCC, SCC и DBS, реализация поставщика должна выбрать наилучшую конфигурацию радио, когда фреймворк вызывает IWifiChip.setMultiStaUseCase() для указания функции. Ниже приведены общие рекомендации:

    • При наличии возможности предпочтительнее использовать схему 2x2+2x2 DBS.
    • По возможности избегайте 1x1+1x1 DBS из-за чрезмерного влияния на качество соединения. Вместо этого предпочитайте MCC.
    • Рабочий цикл MCC должен настраиваться драйвером или прошивкой для различных функций. Фреймворк не устанавливает рабочий цикл MCC напрямую, а запрашивает эту информацию с помощью StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent .
    • При использовании MCC мы рекомендуем следующие рабочие циклы между первичными и вторичными соединениями:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70% первичный, 30% вторичный.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50% первичный, 50% вторичный.