aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Gottlieb <matti.gottlieb@intel.com>2016-04-06 14:14:40 (GMT)
committerJouni Malinen <j@w1.fi>2016-04-08 10:13:55 (GMT)
commite42adb9a75d140ea504203dfffbad492fa4e5c73 (patch)
tree1829470fd036421a72171ceed8597812818b832c
parentae33239c555313e547b9a2a376c927ec50e2b9de (diff)
downloadhostap-e42adb9a75d140ea504203dfffbad492fa4e5c73.zip
hostap-e42adb9a75d140ea504203dfffbad492fa4e5c73.tar.gz
hostap-e42adb9a75d140ea504203dfffbad492fa4e5c73.tar.bz2
driver: Add a packet filtering function declaration
Add a new function declaration that will allow wpa_supplicant to request the driver to configure data frame filters for specific cases. Add definitions that will allow frame filtering for stations as required by Hotspot 2.0: 1. Gratuitous ARP 2. Unsolicited NA 3. Unicast IP packets encrypted with GTK Signed-off-by: Matti Gottlieb <matti.gottlieb@intel.com>
-rw-r--r--src/drivers/driver.h16
-rw-r--r--wpa_supplicant/driver_i.h9
2 files changed, 25 insertions, 0 deletions
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 7948950..a787d7d 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -54,6 +54,13 @@
#define HOSTAPD_CHAN_VHT_130_30 0x04000000
#define HOSTAPD_CHAN_VHT_150_10 0x08000000
+/* Filter gratuitous ARP */
+#define WPA_DATA_FRAME_FILTER_FLAG_ARP BIT(0)
+/* Filter unsolicited Neighbor Advertisement */
+#define WPA_DATA_FRAME_FILTER_FLAG_NA BIT(1)
+/* Filter unicast IP packets encrypted using the GTK */
+#define WPA_DATA_FRAME_FILTER_FLAG_GTK BIT(2)
+
/**
* enum reg_change_initiator - Regulatory change initiator
*/
@@ -3538,6 +3545,15 @@ struct wpa_driver_ops {
* Returns 0 on success, -1 on failure
*/
int (*abort_scan)(void *priv);
+
+ /**
+ * configure_data_frame_filters - Request to configure frame filters
+ * @priv: Private driver interface data
+ * @filter_flags: The type of frames to filter (bitfield of
+ * WPA_DATA_FRAME_FILTER_FLAG_*)
+ * Returns: 0 on success or -1 on failure
+ */
+ int (*configure_data_frame_filters)(void *priv, u32 filter_flags);
};
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
index 699fd4f..7a213b6 100644
--- a/wpa_supplicant/driver_i.h
+++ b/wpa_supplicant/driver_i.h
@@ -917,4 +917,13 @@ static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s)
return wpa_s->driver->abort_scan(wpa_s->drv_priv);
}
+static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s,
+ u32 filters)
+{
+ if (!wpa_s->driver->configure_data_frame_filters)
+ return -1;
+ return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv,
+ filters);
+}
+
#endif /* DRIVER_I_H */