Wi-Fi Direct

Функция Wi-Fi Direct, также известная как Wi-Fi P2P, позволяет устройствам, поддерживающим протокол Wi-Fi Direct, обнаруживать друг друга и подключаться напрямую без доступа к интернету или мобильной сети. Эта функция, основанная на спецификации Wi-Fi Direct от Wi-Fi Alliance (WFA), позволяет обмениваться данными с высокой пропускной способностью между надежными устройствами и приложениями, которые не подключены к сети.

Примеры и источник

Чтобы использовать эту функцию, производители устройств должны реализовать интерфейсы Wi-Fi Vendor и Supplicant HAL.

В Android 13 интерфейс Supplicant использует AIDL для определения HAL. В Android 14 и более поздних версиях интерфейс Vendor HAL использует AIDL. В Android 12 и более ранних версий интерфейсы Supplicant и Vendor HAL определяются с помощью HIDL.

Для использования функции Wi-Fi Direct требуются следующие поверхности HAL Wi-Fi:

  • hardware/interfaces/wifi/aidl или hardware/interfaces/wifi/1.3 и выше
  • hardware/interfaces/wifi/supplicant/aidl или hardware/interfaces/wifi/supplicant/1.2 или выше

Реализация

Производители устройств должны обеспечить поддержку как на уровне фреймворка, так и на уровне HAL/встроенного ПО:

  • Framework:
    • Код AOSP
    • Включить Wi-Fi Direct: требуется флаг функции
  • Поддержка HAL Wi-Fi Direct (P2P) (что подразумевает поддержку встроенного ПО).

Чтобы реализовать эту функцию, производители устройств внедряют интерфейсы Wi-Fi HIDL или AIDL и включают флаг функции для Wi-Fi Direct. В файле device.mk, расположенном в device/<oem>/<device>, измените переменную среды PRODUCT_COPY_FILES, чтобы добавить поддержку функции Wi-Fi Direct:

PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml

Все остальные требования для поддержки Wi-Fi Direct включены в AOSP.

Случайное назначение MAC-адреса

В Android адрес устройства и адрес интерфейса Wi-Fi Direct должны быть рандомизированы. Они должны отличаться от настоящего MAC-адреса устройства и соответствовать следующим требованиям:

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

Случайный выбор MAC-адресов Wi-Fi Direct реализован в wpa_supplicant и управляется двумя конфигурациями: p2p_device_random_mac_addr и p2p_interface_random_mac_addr.

Чтобы включить эту функцию, производители устройств должны:

  • Реализуйте Wi-Fi Supplicant API ISupplicantP2pIface::setMacRandomization. В зависимости от реализованного интерфейса это может быть:
    • hardware/interface/wifi/supplicant/1.2 для HIDL
    • hardware/interface/wifi/supplicant/aidl для AIDL
  • Установите для параметра config_wifi_p2p_mac_randomization_supported значение true в пользовательском оверлее устройства.

Проверка

Android предоставляет набор модульных тестов, тестов Compatibility Test Suite (CTS) и тестов CTS Verifier для проверки функции Wi-Fi Direct. Проверить Wi-Fi Direct можно также с помощью набора тестов поставщика (VTS).

Модульные тесты

Проверьте пакет Wi-Fi Direct, выполнив следующие тесты.

Тестирование сервисов:

atest com.android.server.wifi.p2p

Тесты в управляющем аккаунте:

atest android.net.wifi.p2p

Тесты Compatibility Test Suite (CTS)

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

Чтобы запустить тесты CTS, выполните следующую команду:

atest android.net.wifi.p2p.cts

Тесты CTS Verifier

Тесты CTS Verifier проверяют поведение Wi-Fi Direct с помощью двух устройств: тестового и исправного. Чтобы запустить тесты, откройте CTS Verifier и перейдите в раздел Wi-Fi Direct Tests (Тесты Wi-Fi Direct).