Wi-Fi Easy Connect

Android 10 introduces support for the Wi-Fi Easy Connect protocol, also known as the device provisioning protocol (DPP). Wi-Fi Easy Connect was introduced by the Wi-Fi Alliance (WFA) as an alternative to Wi-Fi Protected Setup (WPS). WPS was deprecated in Android 9.

Wi-Fi Easy Connect provides a simple and secure method to:

  • Onboard Wi-Fi devices (including headless devices) to a network without entering a password.
  • Join Wi-Fi networks without knowing or entering a password.

Bootstrapping and authentication is configured using a URI, which is acquired by scanning a QR code (using a camera), or is configured out-of-band, for example, using BLE or NFC.

Wi-Fi Easy Connect uses an encrypted channel to send Wi-Fi credentials between devices, and because public action frames are used, devices can use existing access points.

Android 10 supports Wi-Fi Easy Connect only in initiator mode (responder mode is not supported). These modes of operation are supported:

  • Initiator-Configurator: Send network credentials to a new device by scanning its QR code.
  • Initiator-Enrollee: Join a network by scanning the network QR code.

Android 10 supports the pre-shared key (PSK) protocol for WPA2 and the simultaneous authentication of equals (SAE) protocol for WPA3.

Wi-Fi Easy Connect is only supported in client mode (SoftAP mode is not supported).

Implementation

To support Wi-Fi Easy Connect, implement the supplicant HAL interface design language (HIDL) provided in the Android Open Source Project (AOSP) at hardware/interfaces/wifi/supplicant/1.2/ or a later version.

The following are required to support DPP:

  • Linux kernel patches to support DPP:

    • cfg80211
    • nl80211
  • wpa_supplicant with support for DPP

  • Wi-Fi driver with support for DPP

  • Wi-Fi firmware with support for DPP

Public APIs are available in Android 10 for use by apps:

Enabling Wi-Fi Easy Connect

To enable Wi-Fi Easy Connect in the Android framework, include the CONFIG_DPP compilation option in the wpa_supplicant configuration file, android.config:

# Easy Connect (Device Provisioning Protocol - DPP)
CONFIG_DPP=y

Validation

To test your implementation, run the following tests.

Unit tests

Run DppManagerTest to verify the behavior of the capability flags for DPP.

atest DppManagerTest

Integration test (ACTS)

To run an integration test, use the Android Comms Test Suite (ACTS) file, WifiDppTest.py, located in tools/test/connectivity/acts/tests/google/wifi.

VTS tests

Run VtsHalWifiSupplicantV1_2Host to test the behavior of the supplicant HAL v1.2.

vts-tradefed run commandAndExit vts --skip-all-system-status-check --primary-abi-only --skip-preconditions --module VtsHalWifiSupplicantV1_2Host