]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP2: Allow iteration count to be configured for DPP_RECONFIG
authorJouni Malinen <jouni@codeaurora.org>
Fri, 7 Aug 2020 20:22:31 +0000 (23:22 +0300)
committerJouni Malinen <j@w1.fi>
Fri, 7 Aug 2020 20:22:31 +0000 (23:22 +0300)
Add an optional iter=# parameter to DPP_RECONFIG similarly to the way
this was handled with DPP_CHIRP.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/dpp_supplicant.c
wpa_supplicant/dpp_supplicant.h

index 6dfce2aaa8890a01189c4551b009b79a42f2ae5f..4b669b057abea940028f702cab8387ff1a7c9048 100644 (file)
@@ -11217,10 +11217,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
        } else if (os_strcmp(buf, "DPP_STOP_CHIRP") == 0) {
                wpas_dpp_chirp_stop(wpa_s);
        } else if (os_strncmp(buf, "DPP_RECONFIG ", 13) == 0) {
-               struct wpa_ssid *ssid;
-
-               ssid = wpa_config_get_network(wpa_s->conf, atoi(buf + 13));
-               if (!ssid || wpas_dpp_reconfig(wpa_s, ssid) < 0)
+               if (wpas_dpp_reconfig(wpa_s, buf + 13) < 0)
                        reply_len = -1;
        } else if (os_strncmp(buf, "DPP_CA_SET ", 11) == 0) {
                if (wpas_dpp_ca_set(wpa_s, buf + 10) < 0)
index 1184591e4a0cdb5bff402cc5e1fe9880003f4b10..346fd9e282dc8773feb047d3245ea686b01163ea 100644 (file)
@@ -3636,11 +3636,26 @@ void wpas_dpp_chirp_stop(struct wpa_supplicant *wpa_s)
 }
 
 
-int wpas_dpp_reconfig(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
+int wpas_dpp_reconfig(struct wpa_supplicant *wpa_s, const char *cmd)
 {
-       if (!ssid->dpp_connector || !ssid->dpp_netaccesskey ||
-           !ssid->dpp_csign)
+       struct wpa_ssid *ssid;
+       int iter = 1;
+       const char *pos;
+
+       ssid = wpa_config_get_network(wpa_s->conf, atoi(cmd));
+       if (!ssid || !ssid->dpp_connector || !ssid->dpp_netaccesskey ||
+           !ssid->dpp_csign) {
+               wpa_printf(MSG_DEBUG,
+                          "DPP: Not a valid network profile for reconfiguration");
                return -1;
+       }
+
+       pos = os_strstr(cmd, " iter=");
+       if (pos) {
+               iter = atoi(pos + 6);
+               if (iter <= 0)
+                       return -1;
+       }
 
        if (wpa_s->dpp_auth) {
                wpa_printf(MSG_DEBUG,
@@ -3671,7 +3686,7 @@ int wpas_dpp_reconfig(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
                return -1;
        wpa_s->dpp_reconfig_ssid = ssid;
        wpa_s->dpp_reconfig_ssid_id = ssid->id;
-       wpa_s->dpp_chirp_iter = 1;
+       wpa_s->dpp_chirp_iter = iter;
        wpa_s->dpp_chirp_round = 0;
        wpa_s->dpp_chirp_scan_done = 0;
        wpa_s->dpp_chirp_listen = 0;
index 081615b950eb60f67b1646e4017af3b0bed8461a..b0d5fcf188354a91e12c1ed1ec4486f65727e801 100644 (file)
@@ -39,7 +39,7 @@ void wpas_dpp_send_conn_status_result(struct wpa_supplicant *wpa_s,
                                      enum dpp_status_error result);
 int wpas_dpp_chirp(struct wpa_supplicant *wpa_s, const char *cmd);
 void wpas_dpp_chirp_stop(struct wpa_supplicant *wpa_s);
-int wpas_dpp_reconfig(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
+int wpas_dpp_reconfig(struct wpa_supplicant *wpa_s, const char *cmd);
 int wpas_dpp_ca_set(struct wpa_supplicant *wpa_s, const char *cmd);
 
 #endif /* DPP_SUPPLICANT_H */