What's DPP?
DPP:Device Provisioning Protocol
It is also called: Wi-Fi Easy Connect.
The DUT is a device that needs to join the network. It actively initiates DPP authentication (Initiator + Enrollee), which is configured by CTT1, and finally joins the Wi-Fi network provided by CTT2 (Responder + AP) as a STA.
DPP Role introduction:
Below is the process flow:
1.Add a Configurator and generate QR code on CTT1 (configurator).
2.Authenticate the DUT on DUT(STA)
3.Generate the QR Code and get URI on CTT2
4.Enter the QR Code on CTT1 and authenticate
5.Update AP configuration on CTT2
6.The connection between the DUT (STA) and CTT2 (AP) is successful.
Reference:
https://docs.nxp.com/bundle/RM00297/page/connectivity-features/topics/wi-fi_easy_connect_dpp.html
Wi-Fi Easy Connect Specification
The red fonts in the pdf are commands.
The green fonts in the pdf are comments.
|
CTT1:Configurator Typically, it's a mobile phone or PC used to scan QR codes and issue Wi-Fi credentials. IMX93-EVK+IW612 module imx93evk login: root root@imx93evk:~# uname -a Linux imx93evk 6.12.34-lts-next-gbe78e49cb433 #1 SMP PREEMPT Wed Sep 3 05:59:19 UTC 2025 aarch64 GNU/Linux root@imx93evk:~# cat /lib/firmware/nxp/wifi_mod_para.conf SDIW612 = { cfg80211_wext=0xf max_vir_bss=1 cal_data_cfg=none ps_mode=2 auto_ds=2 host_mlme=1 drv_mode=0x17 fw_name=nxp/sduart_nw61x_v1.bin.se } root@imx93evk:~# vi wpa_supplicant.conf root@imx93evk:~# cat wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=0 update_config=1 dpp_config_processing=2 modprobe moal mod_para=nxp/wifi_mod_para.conf root@imx93evk:~# wpa_supplicant -i mlan0 -D nl80211 -c wpa_supplicant.conf -B & [1] 678 root@imx93evk:~# Successfully initialized wpa_supplicant rfkill: Cannot open RFKILL control device [1]+ Done wpa_supplicant -i mlan0 -D nl80211 -c wpa_supplicant.conf -B root@imx93evk:~# root@imx93evk:~# root@imx93evk:~# wpa_cli wpa_cli v2.11-M005 Copyright (c) 2004-2024, Jouni Malinen This software may be distributed under the terms of the BSD license. See README for more details. Selected interface 'mlan0' Interactive mode > DPP_CONFIGURATOR_ADD 1 > SET dpp_configurator_params " conf=sta-dpp configurator=1" OK > DPP_BOOTSTRAP_GEN type=qrcode chan=81/1 mac=fc:84:a7:51:87:fc //MAC address of CTT1 itself. 1 > DPP_BOOTSTRAP_GET_URI 1 //Attention here, after this command, will generate a QR code, which will be use on DUT with command:DPP_QR_CODE DPP:C:81/1;M:fc84a75187fc;V:2;K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgAD/bYibd4JdGvnK1etdgX/z4P+aJE2ztv89Q8xwjmbZNc=;; > DPP_LISTEN 2412 role=configurator OK //Hold on here, and now go to DUT side to authenticate the DUT with above QR Code. After authenticate on DUT, will auto output below logs. <3>DPP-RX src=20:4e:f6:bb:08:d9 freq=2412 type=0 <3>DPP-TX dst=20:4e:f6:bb:08:d9 freq=2412 type=1 <3>DPP-TX-STATUS dst=20:4e:f6:bb:08:d9 freq=2412 result=SUCCESS <3>DPP-RX src=20:4e:f6:bb:08:d9 freq=2412 type=2 <3>DPP-AUTH-SUCCESS init=0 pkhash=74a40ec058ac8c7f7acb6589253e76f5d1a9582359353bcd5e6983ee97c3a382 own=1 peer=-1 <3>DPP-CONF-REQ-RX src=20:4e:f6:bb:08:d9 <3>DPP-BAND-SUPPORT 81,82,83,84,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130 <3>DPP-RX src=20:4e:f6:bb:08:d9 freq=2412 type=11 <3>DPP-CONF-SENT conf_status=0 //Now continue, after you generate the QR Code and get URI on CTT2. Enter the QR Code on CTT1 and authenticate: > DPP_QR_CODE DPP:C:81/1;M:02e93a0db8cd;V:2;K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgACQOp5kWO1ex4L2U5rRXdS9yPYWA9NdRXTsuT+v5L/jvc=;; 2 //On successfully adding QR Code, a bootstrapping info id is returned as shown 2 in above command and should input in below command DPP_AUTH_INIT > DPP_AUTH_INIT peer=2 conf=ap-dpp configurator=1 OK //Now go to CTT2 to update AP configurations. <3>DPP-TX dst=02:e9:3a:0d:b8:cd freq=2412 type=0 <3>DPP-TX-STATUS dst=02:e9:3a:0d:b8:cd freq=2412 result=SUCCESS <3>DPP-RX src=02:e9:3a:0d:b8:cd freq=2412 type=1 <3>DPP-AUTH-DIRECTION mutual=0 <3>DPP-TX dst=02:e9:3a:0d:b8:cd freq=2412 type=2 <3>DPP-TX-STATUS dst=02:e9:3a:0d:b8:cd freq=2412 result=SUCCESS <3>DPP-AUTH-SUCCESS init=1 pkhash=22233c6d83a272944eeb9788870b0b564b46ba8d48fd80787f5cc22bcec95c87 own=-1 peer=2 <3>DPP-CONF-REQ-RX src=02:e9:3a:0d:b8:cd <3>DPP-RX src=02:e9:3a:0d:b8:cd freq=2412 type=11 <3>DPP-CONF-SENT conf_status=0 > list_networks network id / ssid / bssid / flags > quit root@imx93evk:~# cat /proc/mwlan/adapter0/mlan0/info driver_name = "wlan" driver_version = SDIW612---18.99.3.p26.7-MM6X18540.p7-(FP92) interface_name="mlan0" firmware_major_version=18.99.3 uuid = 1653948cf99e5b2bbe5ad9b851d6151a bss_mode ="Managed" media_state="Disconnected" mac_address="fc:84:a7:51:87:fc" multicast_count="2" essid="" bssid="00:00:00:00:00:00" channel="0" region_code = "00" multicast_address[0]="33:33:00:00:00:01" multicast_address[1]="01:00:5e:00:00:01" num_tx_bytes = 0 num_rx_bytes = 0 num_tx_pkts = 0 num_rx_pkts = 0 num_tx_pkts_dropped = 0 num_rx_pkts_dropped = 0 num_tx_pkts_err = 0 num_rx_pkts_err = 0 carrier off tx queue 0: stopped tx queue 1: stopped tx queue 2: stopped tx queue 3: stopped === tp_acnt.on:0 drop_point:0 === ====Tx accounting==== [0] Tx packets : 0 [0] Tx packets last: 0 [0] Tx packets rate: 0 [0] Tx bytes : 0 [0] Tx bytes last : 0 [0] Tx bytes rate : 0Mbps [1] Tx packets : 0 [1] Tx packets last: 0 [1] Tx packets rate: 0 [1] Tx bytes : 0 [1] Tx bytes last : 0 [1] Tx bytes rate : 0Mbps [2] Tx packets : 0 [2] Tx packets last: 0 [2] Tx packets rate: 0 [2] Tx bytes : 0 [2] Tx bytes last : 0 [2] Tx bytes rate : 0Mbps [3] Tx packets : 0 [3] Tx packets last: 0 [3] Tx packets rate: 0 [3] Tx bytes : 0 [3] Tx bytes last : 0 [3] Tx bytes rate : 0Mbps [4] Tx packets : 0 [4] Tx packets last: 0 [4] Tx packets rate: 0 [4] Tx bytes : 0 [4] Tx bytes last : 0 [4] Tx bytes rate : 0Mbps Tx amsdu cnt : 0 Tx amsdu cnt last : 0 Tx amsdu cnt rate : 0 Tx amsdu pkt cnt : 0 Tx amsdu pkt cnt last : 0 Tx amsdu pkt cnt rate : 0 Tx intr cnt : 1 Tx intr last : 0 Tx intr rate : 0 Tx pending : 0 Tx xmit skb realloc : 0 Tx stop queue cnt : 0 ====Rx accounting==== [0] Rx packets : 0 [0] Rx packets last: 0 [0] Rx packets rate: 0 [0] Rx bytes : 0 [0] Rx bytes last : 0 [0] Rx bytes rate : 0Mbps [1] Rx packets : 0 [1] Rx packets last: 0 [1] Rx packets rate: 0 [1] Rx bytes : 0 [1] Rx bytes last : 0 [1] Rx bytes rate : 0Mbps [2] Rx packets : 0 [2] Rx packets last: 0 [2] Rx packets rate: 0 [2] Rx bytes : 0 [2] Rx bytes last : 0 [2] Rx bytes rate : 0Mbps [3] Rx packets : 0 [3] Rx packets last: 0 [3] Rx packets rate: 0 [3] Rx bytes : 0 [3] Rx bytes last : 0 [3] Rx bytes rate : 0Mbps [4] Rx packets : 0 [4] Rx packets last: 0 [4] Rx packets rate: 0 [4] Rx bytes : 0 [4] Rx bytes last : 0 [4] Rx bytes rate : 0Mbps Rx amsdu cnt : 0 Rx amsdu cnt last : 0 Rx amsdu cnt rate : 0 Rx amsdu pkt cnt : 0 Rx amsdu pkt cnt last : 0 Rx amsdu pkt cnt rate : 0 Rx intr cnt : 7 Rx intr last : 0 Rx intr rate : 0 Rx pending : 0 Rx pause : 0 Rx rdptr full cnt : 0 root@imx93evk:~# |
|
CTT2 (AP):Responder + AP + Enrollee IMX8MPlus EVK + 88W8997 module root@imx8mpevk:~# uname -a Linux imx8mpevk 6.12.49-lts-next-gdf24f9428e38 #1 SMP PREEMPT Fri Nov 21 03:24:46 UTC 2025 aarch64 GNU/Linux root@imx8mpevk:~# cat /lib/firmware/nxp/wifi_mod_para.conf PCIE8997 = { cfg80211_wext=0xf max_vir_bss=1 cal_data_cfg=none ps_mode=1 auto_ds=1 host_mlme=1 fw_name=nxp/pcieuart8997_combo_v4.bin } root@imx8mpevk:~# hostapd hostapd.conf -B & [1] 1731 root@imx8mpevk:~# HT (IEEE 802.11n) with WPA/WPA2 requires CCMP/GCMP to be enabled, disabling HT capabilities rfkill: Cannot open RFKILL control device uap0: interface state UNINITIALIZED->ENABLED uap0: AP-ENABLED [1]+ Done hostapd hostapd.conf -B root@imx8mpevk:~# hostapd_cli hostapd_cli v2.11-M005 Copyright (c) 2004-2024, Jouni Malinen This software may be distributed under the terms of the BSD license. See README for more details. Selected interface 'uap0' Interactive mode > DPP_BOOTSTRAP_GEN type=qrcode chan=81/1 mac=02:e9:3a:0d:b8:cd //MAC address of CTT2 itself and returned 1 is bootstrap info id which require to get QR code in below command. 1> DPP_BOOTSTRAP_GET_URI 1 //Attention here, after this command, will generate a QR code, which will be use on CTT1 with command:DPP_QR_CODE. Then directly go to CTT1 to enter the QR Code. DPP:C:81/1;M:02e93a0db8cd;V:2;K:MDkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDIgACQOp5kWO1ex4L2U5rRXdS9yPYWA9NdRXTsuT+v5L/jvc=;;> //Hold on here, and now go to CTT1 to authenticate this AP with above QR Code. After authenticate on CTT1 with QR Code, will auto output below logs. Pay attention on the keys and connectors info, will use them later when you update the AP. > <3>DPP-RX src=fc:84:a7:51:87:fc freq=2412 type=0 <3>DPP-TX dst=fc:84:a7:51:87:fc freq=2412 type=1 <3>DPP-TX-STATUS dst=fc:84:a7:51:87:fc result=SUCCESS <3>DPP-RX src=fc:84:a7:51:87:fc freq=2412 type=2 <3>DPP-AUTH-SUCCESS init=0 pkhash=8b3e0f88b70610446a84f53ea9d792f5631b2b87e30cd219a8059c6f7893c501 own=1 peer=-1 <3>GAS-QUERY-START addr=fc:84:a7:51:87:fc dialog_token=0 freq=2412 <3>GAS-QUERY-DONE addr=fc:84:a7:51:87:fc dialog_token=0 freq=2412 status_code=0 result=SUCCESS <3>DPP-CONF-RECEIVED <3>DPP-CONFOBJ-AKM dpp <3>DPP-CONFOBJ-SSID test <3>DPP-CONNECTOR eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJWV0hoQmp0enJVZ0xTSjhpTTJDRmRtNkxPQ0FFWHVCSWJEU3hzMEhaSDhnIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJEbVRmSVFTRFNPVXVkVFBkN0pobEQtQ2xOa0U3U2lEWmctLWpYeGdNRXRJIiwieSI6Iml2NlVCc1J0YXhGSEpzcEtPbWFQSktqUmNDTFV5REh6WHFFeWtLbkhsOGcifX0.vEzfQywitO8AMvmcXenL_qidmkNl7t_jen2YW9OV8M5OID9jmTu-GqVUUkMEQE7R7Ja5vGnOMQ2-x-h7qyRKIQ <3>DPP-C-SIGN-KEY 3039301306072a8648ce3d020106082a8648ce3d0301070322000226d58dd75a168da8b901b47e01694868af2158d57db2984784349e12768e668b <3>DPP-NET-ACCESS-KEY 307702010104200be4b069c34a39d844fca856dd1e583a729e74f394370a4da8bc7d68d0dfadc2a00a06082a8648ce3d030107a144034200040e64df21048348e52e7533ddec98650fe0a536413b4a20d983efa35f180c12d28afe9406c46d6b114726ca4a3a668f24a8d17022d4c831f35ea13290a9c797c8 <3>DPP-TX dst=fc:84:a7:51:87:fc freq=2412 type=11 <3>DPP-TX-STATUS dst=fc:84:a7:51:87:fc result=SUCCESS //Now update AP configurations on CTT2: //First disable AP: > disable <3>AP-DISABLED OK //Update AP parameters: > set ssid test OK > set wpa 2 OK > set wpa_key_mgmt DPP OK > set ieee80211w 2 OK > set rsn_pairwise CCMP OK > set dpp_connector eyJ0eXAiOiJkcHBDb24iLCJraWQiOiJWV0hoQmp0enJVZ0xTSjhpTTJDRmRtNkxPQ0FFWHVCSWJEU3hzMEhaSDhnIiwiYWxnIjoiRVMyNTYifQ.eyJncm91cHMiOlt7Imdyb3VwSWQiOiIqIiwibmV0Um9sZSI6ImFwIn1dLCJuZXRBY2Nlc3NLZXkiOnsia3R5IjoiRUMiLCJjcnYiOiJQLTI1NiIsIngiOiJEbVRmSVFTRFNPVXVkVFBkN0pobEQtQ2xOa0U3U2lEWmctLWpYeGdNRXRJIiwieSI6Iml2NlVCc1J0YXhGSEpzcEtPbWFQSktqUmNDTFV5REh6WHFFeWtLbkhsOGcifX0.vEzfQywitO8AMvmcXenL_qidmkNl7t_jen2YW9OV8M5OID9jmTu-GqVUUkMEQE7R7Ja5vGnOMQ2-x-h7qyRKIQ OK > set dpp_csign 3039301306072a8648ce3d020106082a8648ce3d0301070322000226d58dd75a168da8b901b47e01694868af2158d57db2984784349e12768e668b OK > set dpp_netaccesskey 307702010104200be4b069c34a39d844fca856dd1e583a729e74f394370a4da8bc7d68d0dfadc2a00a06082a8648ce3d030107a144034200040e64df21048348e52e7533ddec98650fe0a536413b4a20d983efa35f180c12d28afe9406c46d6b114726ca4a3a668f24a8d17022d4c831f35ea13290a9c797c8 OK //Re-enable the AP after updates: > enable <3>AP-ENABLED OK //just wait here, it will output below logs after some seconds. > <3>DPP-RX src=20:4e:f6:bb:08:d9 freq=2412 type=5 <3>DPP-TX dst=20:4e:f6:bb:08:d9 freq=2412 type=6 status=0 <3>DPP-TX-STATUS dst=20:4e:f6:bb:08:d9 result=SUCCESS <3>AP-STA-CONNECTED 20:4e:f6:bb:08:d9 dpp_pkhash=74a40ec058ac8c7f7acb6589253e76f5d1a9582359353bcd5e6983ee97c3a382 <3>EAPOL-4WAY-HS-COMPLETED 20:4e:f6:bb:08:d9 > quit > root@imx8mpevk:~# cat /proc/mwlan/adapter0/uap0/info driver_name = "uap" driver_version = PCIE8997--w8997o-V4, RF878X, FP92, 16.92.21.p153.7-MM6X16540.p33-GPL-(FP92) interface_name="uap0" firmware_major_version=16.92.21 media_state="Connected" mac_address="02:e9:3a:0d:b8:cd" num_tx_bytes = 462 num_rx_bytes = 2248 num_tx_pkts = 4 num_rx_pkts = 20 num_tx_pkts_dropped = 0 num_rx_pkts_dropped = 0 num_tx_pkts_err = 60 num_rx_pkts_err = 0 carrier on tx queue 0: started tx queue 1: started tx queue 2: started tx queue 3: started tkip_mic_failures = 0 ccmp_decrypt_errors = 0 wep_undecryptable_count = 0 wep_icv_error_count = 0 decrypt_failure_count = 0 mcast_tx_count = 20 failed_count = 3 retry_count = 0 multiple_retry_count = 0 frame_duplicate_count = 0 rts_success_count = 0 rts_failure_count = 0 ack_failure_count = 30 rx_fragment_count = 55 mcast_rx_frame_count = 18 fcs_error_count = 401368 tx_frame_count = 22 rsna_tkip_cm_invoked = 0 rsna_4way_hshk_failures = 0 === tp_acnt.on:0 drop_point:0 === ====Tx accounting==== [0] Tx packets : 0 [0] Tx packets last: 0 [0] Tx packets rate: 0 [0] Tx bytes : 0 [0] Tx bytes last : 0 [0] Tx bytes rate : 0Mbps [1] Tx packets : 0 [1] Tx packets last: 0 [1] Tx packets rate: 0 [1] Tx bytes : 0 [1] Tx bytes last : 0 [1] Tx bytes rate : 0Mbps [2] Tx packets : 0 [2] Tx packets last: 0 [2] Tx packets rate: 0 [2] Tx bytes : 0 [2] Tx bytes last : 0 [2] Tx bytes rate : 0Mbps [3] Tx packets : 0 [3] Tx packets last: 0 [3] Tx packets rate: 0 [3] Tx bytes : 0 [3] Tx bytes last : 0 [3] Tx bytes rate : 0Mbps [4] Tx packets : 0 [4] Tx packets last: 0 [4] Tx packets rate: 0 [4] Tx bytes : 0 [4] Tx bytes last : 0 [4] Tx bytes rate : 0Mbps Tx amsdu cnt : 0 Tx amsdu cnt last : 0 Tx amsdu cnt rate : 0 Tx amsdu pkt cnt : 0 Tx amsdu pkt cnt last : 0 Tx amsdu pkt cnt rate : 0 Tx intr cnt : 22 Tx intr last : 0 Tx intr rate : 0 Tx pending : 0 Tx xmit skb realloc : 64 Tx stop queue cnt : 0 ====Rx accounting==== [0] Rx packets : 0 [0] Rx packets last: 0 [0] Rx packets rate: 0 [0] Rx bytes : 0 [0] Rx bytes last : 0 [0] Rx bytes rate : 0Mbps [1] Rx packets : 0 [1] Rx packets last: 0 [1] Rx packets rate: 0 [1] Rx bytes : 0 [1] Rx bytes last : 0 [1] Rx bytes rate : 0Mbps [2] Rx packets : 0 [2] Rx packets last: 0 [2] Rx packets rate: 0 [2] Rx bytes : 0 [2] Rx bytes last : 0 [2] Rx bytes rate : 0Mbps [3] Rx packets : 0 [3] Rx packets last: 0 [3] Rx packets rate: 0 [3] Rx bytes : 0 [3] Rx bytes last : 0 [3] Rx bytes rate : 0Mbps [4] Rx packets : 0 [4] Rx packets last: 0 [4] Rx packets rate: 0 [4] Rx bytes : 0 [4] Rx bytes last : 0 [4] Rx bytes rate : 0Mbps Rx amsdu cnt : 0 Rx amsdu cnt last : 0 Rx amsdu cnt rate : 0 Rx amsdu pkt cnt : 0 Rx amsdu pkt cnt last : 0 Rx amsdu pkt cnt rate : 0 Rx intr cnt : 28229 Rx intr last : 0 Rx intr rate : 0 Rx pending : 0 Rx pause : 0 Rx rdptr full cnt : 0 root@imx8mpevk:~# |
||
|
|
|
|
||
|
|
|
|