]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP: Add driver operation for enabling/disabling listen mode
authorJouni Malinen <jouni@codeaurora.org>
Mon, 20 Apr 2020 20:52:04 +0000 (23:52 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 20 Apr 2020 20:52:04 +0000 (23:52 +0300)
This can be used to configure RX filter to be able to receive broadcast
DPP Public Action frames.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/drivers/driver.h
wpa_supplicant/dpp_supplicant.c
wpa_supplicant/driver_i.h

index 019a1081ea71616f964ca9011d7482ab9dcc47c7..c624c29c9b4b79a1ba4c72013da59f9a609b398f 100644 (file)
@@ -4424,6 +4424,17 @@ struct wpa_driver_ops {
         */
        int (*update_dh_ie)(void *priv, const u8 *peer_mac, u16 reason_code,
                            const u8 *ie, size_t ie_len);
+
+       /**
+        * dpp_listen - Notify driver about start/stop of DPP listen
+        * @priv: Private driver interface data
+        * @enable: Whether listen state is enabled (or disabled)
+        * Returns: 0 on success, -1 on failure
+        *
+        * This optional callback can be used to update RX frame filtering to
+        * explicitly allow reception of broadcast Public Action frames.
+        */
+       int (*dpp_listen)(void *priv, bool enable);
 };
 
 /**
index f90463ff6adb2c65387fcf8524918f338424a6e3..351f8da9d0c32efdc76fb53c6d005a6e9baa8e3f 100644 (file)
@@ -857,6 +857,7 @@ static void dpp_start_listen_cb(struct wpa_radio_work *work, int deinit)
        }
        wpa_s->off_channel_freq = 0;
        wpa_s->roc_waiting_drv_freq = lwork->freq;
+       wpa_drv_dpp_listen(wpa_s, true);
 }
 
 
@@ -931,6 +932,7 @@ void wpas_dpp_listen_stop(struct wpa_supplicant *wpa_s)
        wpa_printf(MSG_DEBUG, "DPP: Stop listen on %u MHz",
                   wpa_s->dpp_listen_freq);
        wpa_drv_cancel_remain_on_channel(wpa_s);
+       wpa_drv_dpp_listen(wpa_s, false);
        wpa_s->dpp_listen_freq = 0;
        wpas_dpp_listen_work_done(wpa_s);
 }
index 6a03d8e910e389c9e4c9ca72a1ff4555fc923604..d0bcc6c00f41cb4d1e19e4d13c02e2f7be2ec2be 100644 (file)
@@ -1108,4 +1108,11 @@ static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
                                             wpa_s->bridge_ifname, val);
 }
 
+static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable)
+{
+       if (!wpa_s->driver->dpp_listen)
+               return 0;
+       return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable);
+}
+
 #endif /* DRIVER_I_H */