drivers: Add freq parameter to send_mlme() function
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>
Wed, 10 Jun 2015 08:43:34 +0000 (11:43 +0300)
committerJouni Malinen <j@w1.fi>
Sun, 14 Jun 2015 20:16:55 +0000 (23:16 +0300)
Change send_mlme() API to allow sending management frames on a specific
channel, overriding the internal driver decision.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Reviewed-by: Ilan Peer <ilan.peer@intel.com>
src/ap/ap_drv_ops.c
src/drivers/driver.h
src/drivers/driver_atheros.c
src/drivers/driver_hostap.c
src/drivers/driver_nl80211.c
wpa_supplicant/driver_i.h

index 60c8f8c..f3f7edd 100644 (file)
@@ -633,7 +633,7 @@ int hostapd_drv_send_mlme(struct hostapd_data *hapd,
 {
        if (hapd->driver == NULL || hapd->driver->send_mlme == NULL)
                return 0;
-       return hapd->driver->send_mlme(hapd->drv_priv, msg, len, noack);
+       return hapd->driver->send_mlme(hapd->drv_priv, msg, len, noack, 0);
 }
 
 
index 0324339..d452d8c 100644 (file)
@@ -1940,10 +1940,12 @@ struct wpa_driver_ops {
         * @data: IEEE 802.11 management frame with IEEE 802.11 header
         * @data_len: Size of the management frame
         * @noack: Do not wait for this frame to be acked (disable retries)
+        * @freq: Frequency (in MHz) to send the frame on, or 0 to let the
+        * driver decide
         * Returns: 0 on success, -1 on failure
         */
        int (*send_mlme)(void *priv, const u8 *data, size_t data_len,
-                        int noack);
+                        int noack, unsigned int freq);
 
        /**
         * update_ft_ies - Update FT (IEEE 802.11r) IEs
index b8e7864..aaada0a 100644 (file)
@@ -1840,7 +1840,7 @@ static int atheros_set_ap(void *priv, struct wpa_driver_ap_params *params)
 #ifdef CONFIG_IEEE80211R
 
 static int atheros_send_mgmt(void *priv, const u8 *frm, size_t data_len,
-                            int noack)
+                            int noack, unsigned int freq)
 {
        struct atheros_driver_data *drv = priv;
        u8 buf[1510];
index 84b98fb..14c52d2 100644 (file)
@@ -266,7 +266,8 @@ static int hostap_init_sockets(struct hostap_driver_data *drv, u8 *own_addr)
 }
 
 
-static int hostap_send_mlme(void *priv, const u8 *msg, size_t len, int noack)
+static int hostap_send_mlme(void *priv, const u8 *msg, size_t len, int noack,
+                           unsigned int freq)
 {
        struct hostap_driver_data *drv = priv;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) msg;
index 590731d..02aa6d3 100644 (file)
@@ -7245,11 +7245,12 @@ static int driver_nl80211_if_remove(void *priv, enum wpa_driver_if_type type,
 
 
 static int driver_nl80211_send_mlme(void *priv, const u8 *data,
-                                   size_t data_len, int noack)
+                                   size_t data_len, int noack,
+                                   unsigned int freq)
 {
        struct i802_bss *bss = priv;
        return wpa_driver_nl80211_send_mlme(bss, data, data_len, noack,
-                                           0, 0, 0, 0);
+                                           freq, 0, 0, 0);
 }
 
 
index ffee1f7..b5b34c2 100644 (file)
@@ -290,7 +290,7 @@ static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
 {
        if (wpa_s->driver->send_mlme)
                return wpa_s->driver->send_mlme(wpa_s->drv_priv,
-                                               data, data_len, noack);
+                                               data, data_len, noack, 0);
        return -1;
 }