Точка доступа Wi-Fi (программная точка доступа)

Android обеспечивает поддержку точек доступа Wi-Fi (Soft AP), включая подключение через точку доступа Wi-Fi и локальные точки доступа Wi-Fi.

Функция программной точки доступа позволяет настраивать следующее:

  • SSID и BSSID
  • Тип безопасности (включая WPA3)
  • Скрытый SSID
  • Рабочий диапазон и канал (включая ACS)
  • Максимальное количество разрешенных клиентов
  • Значение тайм-аута автоматического выключения
  • Белый и черный списки, позволяющие пользователю управлять связанными устройствами
  • Уровень рандомизации MAC для BSSID точки доступа
  • 802.11ax и 802.11be

Возможности устройства определяют доступность этих элементов управления. Android 11 представляет API для получения этих возможностей. Производители устройств также могут указывать базовые возможности устройства с помощью наложений.

Обратите внимание, что некоторые API являются системными API и ограничены разрешениями, так что доступ к ним может получить только приложение «Настройки» системы.

Разрабатывайте приложения с API точек доступа

Реализацию привязанной точки доступа Wi-Fi по умолчанию обеспечивает приложение «Настройки AOSP», однако оно не использует все API для настройки Soft AP.

Для поддержки подключения через точку доступа или локальную точку доступа приложение должно выполнять следующие функции:

  1. Зарегистрируйте обратный вызов, чтобы получить возможности устройства, используя WifiManager#registerSoftApCallback для привязанной точки доступа или WifiManager#registerLocalOnlyHotspotSoftApCallback для локальной точки доступа.

    Обратный вызов SoftApCallback предоставляет следующие методы:

    • SoftApCallback#onCapabilityChanged : предоставляет информацию о возможностях устройства, включая максимальное количество поддерживаемых клиентов, а также о том, поддерживаются ли SAE или ACS.
    • SoftApCallback#onInfoChanged : предоставляет информацию о работающей Soft AP (действительно только после запуска), включая информацию о диапазоне и частоте.
    • SoftApCallback#onConnectedClientsChanged : Предоставляет список подключенных клиентов. Для каждого клиента можно получить MAC-адрес. Чтобы получить информацию об IP, используйте обратный вызов TetheringEventCallback#onClientsChanged .
    • SoftApCallback#onStateChanged : предоставляет обновления состояния Soft AP при ее включении и отключении.
    • SoftApCallback#onBlockedClientConnecting : предоставляет информацию о заблокированном клиенте с указанием одной из следующих причин блокировки: устройство достигло максимального количества клиентов, которое оно может поддерживать, или клиент явно не авторизован для подключения.
    • SoftApCallback#onClientsDisconnected : Предоставляет список отключенных клиентов. Для каждого клиента можно получить причину отключения.

Для привязанной точки доступа:

  1. Настройте конфигурацию soft AP для привязки, вызвав метод WifiManager#setSoftApConfiguration и предоставив экземпляр SoftApConfiguration . Создайте SoftApConfiguration с помощью класса SoftApConfiguration.Builder .
  2. Запустите модем, вызвав метод модема в TetheringManager#startTethering .

Для локальной точки доступа:

  1. Запустите локальную точку доступа с определенной конфигурацией программной точки доступа, вызвав метод WifiManager#startLocalOnlyHotspot .

Внедрение списков разрешений и блокировок

Типичное требование оператора — предоставить пользователю элементы управления устройствами, которым разрешено подключаться к Soft AP. Для этого есть несколько механизмов:

  • Ограничьте максимальное количество устройств, которые могут быть связаны с soft AP, используя SoftApConfiguration.Builder#setMaxNumberOfClients . Обязательно укажите число, которое меньше максимального количества клиентов, поддерживаемых устройством. Вы можете получить максимальное количество из SoftApCapability#getMaxSupportedClients .
  • Обеспечьте динамический контроль с помощью списков разрешений и блокировок:

    • Конфигурация Soft AP по умолчанию позволяет всем устройствам подключаться к Soft AP, за исключением устройств, MAC-адреса которых добавлены в SoftApConfiguration.Builder#setBlockedClientList .
    • Если Soft AP настроен с помощью SoftApConfiguration.Builder#setClientControlByUserEnabled( true ) , используется список разрешенных адресов.

      • Все устройства, MAC-адреса которых указаны в SoftApConfiguration.Builder#setBlockedClientList блокируются для ассоциации.
      • Всем устройствам, MAC-адреса которых указаны в SoftApConfiguration.Builder#setAllowedClientList , разрешена ассоциация.
      • Все остальные устройства (то есть устройства, MAC-адреса которых не указаны в списке разрешенных или заблокированных) блокируются для ассоциации, но вызывается SoftApCallback#onBlockedClientConnecting , что позволяет контролирующему приложению (то есть приложению «Настройки») выполнить действие, например, запросить у пользователя подтверждение, а затем добавить устройство в список разрешенных или заблокированных в зависимости от поведения пользователя.

    Обратите внимание, что устройства могут использовать функциональность списка разрешений только в том случае, если она поддерживается на устройстве. Вы можете проверить поддержку устройства с помощью SoftApCapability#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .

Выполнение

Для поддержки модема через точку доступа или поддержки локальной точки доступа производители устройств должны обеспечить поддержку приложения «Настройки», фреймворка и HAL/прошивки:

  • Приложение настроек: приложение настроек AOSP обеспечивает базовую линию для настройки точки доступа с SSID и учетными данными безопасности. Этот код можно использовать как есть или изменить для предоставления дополнительных возможностей, как описано в разделе Разработка приложений с API точек доступа .

  • Фреймворк: Код фреймворка AOSP поддерживает все функции, описанные в разделе Разработка приложений с API точек доступа .

  • HAL/прошивка для точки доступа: HIDL IHostapd.hal версии 1.2 или выше, либо AIDL IHostapd.aidl .

Настройка

Для настройки реализации производители устройств должны настроить следующие оверлеи и конфигурации оператора, которые задокументированы в packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml :

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds : Интервал времени ожидания выключения по умолчанию. Действительно только если включен SoftApConfiguration#setAutoShutdownEnabled . Может быть переопределено с помощью SoftApConfiguration#setShutdownTimeoutMillis .
  • config_wifiHardwareSoftapMaxClientCount : Ограничение оборудования для максимального количества поддерживаемых клиентов. Максимальное количество клиентов, поддерживаемое устройством, является минимальным из ограничений оборудования и оператора (указанных CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT ). Окончательный результат предоставляется приложению с помощью SoftApCapabilities#getMaxSupportedClients .
  • config_wifiSofapClientForceDisconnectSupported : Имеет ли устройство возможность принудительно отключать клиента. Требуется для включения списков разрешенных и заблокированных устройств. Сообщается управляющему приложению (приложению «Настройки») через SoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .
  • (Доступно с версии 13) config_wifiSoftapPassphraseAsciiEncodableCheck : Должна ли кодовая фраза мягкой точки доступа быть кодируемой в формате ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported : следует ли автоматически обновлять конфигурацию настроек диапазона до двух диапазонов во время восстановления конфигурации облака, если поддерживается новое устройство.
  • (Доступно с версии 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled : добавляет ли фреймворк автоматически нижние диапазоны к конфигурации диапазонов для предотвращения обработки сосуществования.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported : поддерживается ли на устройстве динамическое обновление кода страны в режиме точки доступа
  • Поддержка каналов: config_wifiSoftap2gChannelList , config_wifiSoftap5gChannelList , config_wifiSoftap6gChannelList и config_wifiSoftap60gChannelList .
  • Поддержка восстановления, указывающая, сбрасываются ли соответствующие записи на значения по умолчанию при восстановлении конфигурации точки доступа на новом устройстве: config_wifiSoftapResetChannelConfig , config_wifiSoftapResetHiddenConfig , config_wifiSoftapResetUserControlConfig , config_wifiSoftapResetAutoShutdownTimerConfig , config_wifiSoftapResetMaxClientSettingConfig . Обратите внимание, что по умолчанию они установлены на true , что означает, что значения сбрасываются. Это критично, если новое устройство не поддерживает конфигурацию.
  • Аппаратные возможности:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Доступно с 13) config_wifiSoftapOweTransitionSupported
    • (Доступно с 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Доступно с 13) config_wifiSoftapIeee80211beSupported
    • config_wifiSoftapMacAddressCustomizationSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap24ghzSupported
    • config_wifiSoftap5ghzSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftap60ghzSupported
    • config_wifiSoftapAcsIncludeDfs

Проверка

Android предоставляет набор модульных тестов и тестов Compatibility Test Suite (CTS) для проверки функции точки доступа. Функция точки доступа также может быть протестирована с помощью Vendor Test Suite (VTS).

Тесты модулей

Проверьте пакет точки доступа, используя следующие тесты.

  • Сервисные испытания:

    atest packages/modules/Wifi/service/tests/wifitests/
  • Тесты менеджера:

    atest packages/modules/Wifi/framework/tests/

Тесты набора тестов совместимости (CTS)

Используйте тесты CTS для проверки функции точки доступа. CTS определяет, когда функция включена, и автоматически включает связанные тесты.

Чтобы запустить тесты CTS, выполните:

atest android.net.wifi.cts.WifiManagerTest

Тестовый набор поставщика (VTS)

Если реализован интерфейс HIDL, выполните:

atest VtsHalWifiHostapdV1_2Target

Если реализован интерфейс AIDL, выполните:

atest VtsHalHostapdTargetTest
,

Android обеспечивает поддержку точек доступа Wi-Fi (Soft AP), включая подключение через точку доступа Wi-Fi и локальные точки доступа Wi-Fi.

Функция программной точки доступа позволяет настраивать следующее:

  • SSID и BSSID
  • Тип безопасности (включая WPA3)
  • Скрытый SSID
  • Рабочий диапазон и канал (включая ACS)
  • Максимальное количество разрешенных клиентов
  • Значение тайм-аута автоматического выключения
  • Белый и черный списки, позволяющие пользователю управлять связанными устройствами
  • Уровень рандомизации MAC для BSSID точки доступа
  • 802.11ax и 802.11be

Возможности устройства определяют доступность этих элементов управления. Android 11 представляет API для получения этих возможностей. Производители устройств также могут указывать базовые возможности устройства с помощью наложений.

Обратите внимание, что некоторые API являются системными API и ограничены разрешениями, так что доступ к ним может получить только приложение «Настройки» системы.

Разрабатывайте приложения с API точек доступа

Реализацию привязанной точки доступа Wi-Fi по умолчанию обеспечивает приложение «Настройки AOSP», однако оно не использует все API для настройки Soft AP.

Для поддержки подключения через точку доступа или локальную точку доступа приложение должно выполнять следующие функции:

  1. Зарегистрируйте обратный вызов, чтобы получить возможности устройства, используя WifiManager#registerSoftApCallback для привязанной точки доступа или WifiManager#registerLocalOnlyHotspotSoftApCallback для локальной точки доступа.

    Обратный вызов SoftApCallback предоставляет следующие методы:

    • SoftApCallback#onCapabilityChanged : предоставляет информацию о возможностях устройства, включая максимальное количество поддерживаемых клиентов, а также о том, поддерживаются ли SAE или ACS.
    • SoftApCallback#onInfoChanged : предоставляет информацию о работающей Soft AP (действительно только после запуска), включая информацию о диапазоне и частоте.
    • SoftApCallback#onConnectedClientsChanged : Предоставляет список подключенных клиентов. Для каждого клиента можно получить MAC-адрес. Чтобы получить информацию об IP, используйте обратный вызов TetheringEventCallback#onClientsChanged .
    • SoftApCallback#onStateChanged : предоставляет обновления состояния Soft AP при ее включении и отключении.
    • SoftApCallback#onBlockedClientConnecting : предоставляет информацию о заблокированном клиенте с указанием одной из следующих причин блокировки: устройство достигло максимального количества клиентов, которое оно может поддерживать, или клиент явно не авторизован для подключения.
    • SoftApCallback#onClientsDisconnected : Предоставляет список отключенных клиентов. Для каждого клиента можно получить причину отключения.

Для привязанной точки доступа:

  1. Настройте конфигурацию soft AP для привязки, вызвав метод WifiManager#setSoftApConfiguration и предоставив экземпляр SoftApConfiguration . Создайте SoftApConfiguration с помощью класса SoftApConfiguration.Builder .
  2. Запустите модем, вызвав метод модема в TetheringManager#startTethering .

Для локальной точки доступа:

  1. Запустите локальную точку доступа с определенной конфигурацией программной точки доступа, вызвав метод WifiManager#startLocalOnlyHotspot .

Внедрение списков разрешений и блокировок

Типичное требование оператора — предоставить пользователю элементы управления устройствами, которым разрешено подключаться к Soft AP. Для этого есть несколько механизмов:

  • Ограничьте максимальное количество устройств, которые могут быть связаны с soft AP, используя SoftApConfiguration.Builder#setMaxNumberOfClients . Обязательно укажите число, которое меньше максимального количества клиентов, поддерживаемых устройством. Вы можете получить максимальное количество из SoftApCapability#getMaxSupportedClients .
  • Обеспечьте динамический контроль с помощью списков разрешений и блокировок:

    • Конфигурация Soft AP по умолчанию позволяет всем устройствам подключаться к Soft AP, за исключением устройств, MAC-адреса которых добавлены в SoftApConfiguration.Builder#setBlockedClientList .
    • Если Soft AP настроен с помощью SoftApConfiguration.Builder#setClientControlByUserEnabled( true ) , используется список разрешенных адресов.

      • Все устройства, MAC-адреса которых указаны в SoftApConfiguration.Builder#setBlockedClientList блокируются для ассоциации.
      • Всем устройствам, MAC-адреса которых указаны в SoftApConfiguration.Builder#setAllowedClientList , разрешена ассоциация.
      • Все остальные устройства (то есть устройства, MAC-адреса которых не указаны в списке разрешенных или заблокированных) блокируются для ассоциации, но вызывается SoftApCallback#onBlockedClientConnecting , что позволяет контролирующему приложению (то есть приложению «Настройки») выполнить действие, например, запросить у пользователя подтверждение, а затем добавить устройство в список разрешенных или заблокированных в зависимости от поведения пользователя.

    Обратите внимание, что устройства могут использовать функциональность списка разрешений только в том случае, если она поддерживается на устройстве. Вы можете проверить поддержку устройства с помощью SoftApCapability#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .

Выполнение

Для поддержки модема через точку доступа или поддержки локальной точки доступа производители устройств должны обеспечить поддержку приложения «Настройки», фреймворка и HAL/прошивки:

  • Приложение настроек: приложение настроек AOSP обеспечивает базовую линию для настройки точки доступа с SSID и учетными данными безопасности. Этот код можно использовать как есть или изменить для предоставления дополнительных возможностей, как описано в разделе Разработка приложений с API точек доступа .

  • Фреймворк: Код фреймворка AOSP поддерживает все функции, описанные в разделе Разработка приложений с API точек доступа .

  • HAL/прошивка для точки доступа: HIDL IHostapd.hal версии 1.2 или выше, либо AIDL IHostapd.aidl .

Настройка

Для настройки реализации производители устройств должны настроить следующие оверлеи и конфигурации оператора, которые задокументированы в packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml :

  • config_wifiFrameworkSoftApShutDownTimeoutMilliseconds : Интервал времени ожидания выключения по умолчанию. Действительно только если включен SoftApConfiguration#setAutoShutdownEnabled . Может быть переопределено с помощью SoftApConfiguration#setShutdownTimeoutMillis .
  • config_wifiHardwareSoftapMaxClientCount : Ограничение оборудования для максимального количества поддерживаемых клиентов. Максимальное количество клиентов, поддерживаемое устройством, является минимальным из ограничений оборудования и оператора (указанных CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT ). Окончательный результат предоставляется приложению с помощью SoftApCapabilities#getMaxSupportedClients .
  • config_wifiSofapClientForceDisconnectSupported : Имеет ли устройство возможность принудительно отключать клиента. Требуется для включения списков разрешенных и заблокированных устройств. Сообщается управляющему приложению (приложению «Настройки») через SoftApCapabilities#areFeaturesSupported( SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT ) .
  • (Доступно с версии 13) config_wifiSoftapPassphraseAsciiEncodableCheck : Должна ли кодовая фраза мягкой точки доступа быть кодируемой в формате ASCII.
  • config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported : следует ли автоматически обновлять конфигурацию настроек диапазона до двух диапазонов во время восстановления конфигурации облака, если поддерживается новое устройство.
  • (Доступно с версии 13) config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled : добавляет ли фреймворк автоматически нижние диапазоны к конфигурации диапазонов для предотвращения обработки сосуществования.
  • config_wifiSoftApDynamicCountryCodeUpdateSupported : поддерживается ли на устройстве динамическое обновление кода страны в режиме точки доступа
  • Поддержка каналов: config_wifiSoftap2gChannelList , config_wifiSoftap5gChannelList , config_wifiSoftap6gChannelList и config_wifiSoftap60gChannelList .
  • Поддержка восстановления, указывающая, сбрасываются ли соответствующие записи на значения по умолчанию при восстановлении конфигурации точки доступа на новом устройстве: config_wifiSoftapResetChannelConfig , config_wifiSoftapResetHiddenConfig , config_wifiSoftapResetUserControlConfig , config_wifiSoftapResetAutoShutdownTimerConfig , config_wifiSoftapResetMaxClientSettingConfig . Обратите внимание, что по умолчанию они установлены на true , что означает, что значения сбрасываются. Это критично, если новое устройство не поддерживает конфигурацию.
  • Аппаратные возможности:
    • config_wifi_softap_acs_supported
    • config_wifi_softap_sae_supported
    • (Доступно с 13) config_wifiSoftapOweTransitionSupported
    • (Доступно с 13) config_wifiSoftapOweSupported
    • config_wifi_softap_ieee80211ac_supported
    • config_wifiSoftapIeee80211axSupported
    • (Доступно с 13) config_wifiSoftapIeee80211beSupported
    • config_wifiSoftapMacAddressCustomizationSupported
    • config_wifiSoftapHeSuBeamformerSupported
    • config_wifiSoftapHeSuBeamformeeSupported
    • config_wifiSoftapHeMuBeamformerSupported
    • config_wifiSoftapHeTwtSupported
    • config_wifiSoftap24ghzSupported
    • config_wifiSoftap5ghzSupported
    • config_wifiSoftap6ghzSupported
    • config_wifiSoftap60ghzSupported
    • config_wifiSoftapAcsIncludeDfs

Проверка

Android предоставляет набор модульных тестов и тестов Compatibility Test Suite (CTS) для проверки функции точки доступа. Функция точки доступа также может быть протестирована с помощью Vendor Test Suite (VTS).

Тесты модулей

Проверьте пакет точки доступа, используя следующие тесты.

  • Сервисные испытания:

    atest packages/modules/Wifi/service/tests/wifitests/
  • Тесты менеджера:

    atest packages/modules/Wifi/framework/tests/

Тесты набора тестов совместимости (CTS)

Используйте тесты CTS для проверки функции точки доступа. CTS определяет, когда функция включена, и автоматически включает связанные тесты.

Чтобы запустить тесты CTS, выполните:

atest android.net.wifi.cts.WifiManagerTest

Тестовый набор поставщика (VTS)

Если реализован интерфейс HIDL, выполните:

atest VtsHalWifiHostapdV1_2Target

Если реализован интерфейс AIDL, выполните:

atest VtsHalHostapdTargetTest