From 0086c145285f0c9372c0f1908127270ceef67567 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Tue, 12 May 2020 00:57:44 +0300 Subject: [PATCH] DPP: Extend NFC bootstrapping script for more control by caller Add more parameters to dpp-nfc.py to allow it to be used with more detailed control by the caller. This allows Enrollee/Configurator roles to be selected and Configurator parameters to be specified on the command line. Signed-off-by: Jouni Malinen --- wpa_supplicant/examples/dpp-nfc.py | 48 +++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/wpa_supplicant/examples/dpp-nfc.py b/wpa_supplicant/examples/dpp-nfc.py index f49da34f4..173416794 100755 --- a/wpa_supplicant/examples/dpp-nfc.py +++ b/wpa_supplicant/examples/dpp-nfc.py @@ -255,18 +255,28 @@ def dpp_handover_client(llc): success_report("DPP handover reported successfully (initiator)") print("peer_id=" + res) peer_id = int(res) - # TODO: Single Configurator instance wpas = wpas_connect() if wpas is None: break - res = wpas.request("DPP_CONFIGURATOR_ADD") - if "FAIL" in res: - print("Failed to initiate Configurator") - break - conf_id = int(res) + + global enrollee_only + global config_params + if enrollee_only: + extra = " role=enrollee" + elif config_params: + extra = " role=configurator " + config_params + else: + # TODO: Single Configurator instance + res = wpas.request("DPP_CONFIGURATOR_ADD") + if "FAIL" in res: + print("Failed to initiate Configurator") + break + conf_id = int(res) + extra = " conf=sta-dpp configurator=%d" % conf_id global own_id print("Initiate DPP authentication") - cmd = "DPP_AUTH_INIT peer=%d own=%d conf=sta-dpp configurator=%d" % (peer_id, own_id, conf_id) + cmd = "DPP_AUTH_INIT peer=%d own=%d" % (peer_id, own_id) + cmd += extra res = wpas.request(cmd) if "FAIL" in res: print("Failed to initiate DPP authentication") @@ -356,7 +366,14 @@ class HandoverServer(nfc.handover.HandoverServer): if freq is None: print("No channel negotiated over NFC - use channel 1") freq = 2412 - res = wpas.request("DPP_LISTEN %d" % freq) + cmd = "DPP_LISTEN %d" % freq + global enrollee_only + global configurator_only + if enrollee_only: + cmd += " role=enrollee" + elif configurator_only: + cmd += " role=configurator" + res = wpas.request(cmd) if "OK" not in res: print("Failed to start DPP listen") break @@ -592,6 +609,12 @@ def main(): help='tag read only (do not allow connection handover)') parser.add_argument('--handover-only', action='store_true', help='connection handover only (do not allow tag read)') + parser.add_argument('--enrollee', action='store_true', + help='run as Enrollee-only') + parser.add_argument('--configurator', action='store_true', + help='run as Configurator-only') + parser.add_argument('--config-params', default='', + help='configurator parameters') parser.add_argument('--summary', help='summary file for writing status updates') parser.add_argument('--success', @@ -618,6 +641,15 @@ def main(): global init_on_touch init_on_touch = args.init_on_touch + global enrollee_only + enrollee_only = args.enrollee + + global configurator_only + configurator_only = args.configurator + + global config_params + config_params = args.config_params + if args.ifname: global ifname ifname = args.ifname