]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
hostapd: add ifname to the sta_set_flags callback
authorFelix Fietkau <nbd@openwrt.org>
Sat, 6 Mar 2010 18:44:31 +0000 (20:44 +0200)
committerJouni Malinen <j@w1.fi>
Sat, 6 Mar 2010 18:44:31 +0000 (20:44 +0200)
This fixes multi-BSS STA operations (e.g., setting AUTHORIZED flag) with
nl80211-based drivers.

src/ap/ap_drv_ops.c
src/drivers/driver.h
src/drivers/driver_atheros.c
src/drivers/driver_bsd.c
src/drivers/driver_hostap.c
src/drivers/driver_madwifi.c
src/drivers/driver_nl80211.c
wpa_supplicant/driver_i.h

index 80beac703fc7abad3a354f23aa1862a2382fd28e..956b546a63a33acd1506b0b762f07010fe25542d 100644 (file)
@@ -490,7 +490,7 @@ int hostapd_sta_set_flags(struct hostapd_data *hapd, u8 *addr,
 {
        if (hapd->driver == NULL || hapd->driver->sta_set_flags == NULL)
                return 0;
-       return hapd->driver->sta_set_flags(hapd->drv_priv, addr, total_flags,
+       return hapd->driver->sta_set_flags(hapd->conf->iface, hapd->drv_priv, addr, total_flags,
                                           flags_or, flags_and);
 }
 
index 7f8473dfec345e5dca030f4c2deee875bfc88eb9..3c8ccd1307e68d84b67eedcfcdb156c2e70c9c19 100644 (file)
@@ -1419,6 +1419,7 @@ struct wpa_driver_ops {
 
        /**
         * sta_set_flags - Set station flags (AP only)
+        * @ifname: Interface name (for multi-SSID/VLAN support)
         * @priv: Private driver interface data
         * @addr: Station address
         * @total_flags: Bitmap of all WPA_STA_* flags currently set
@@ -1426,7 +1427,7 @@ struct wpa_driver_ops {
         * @flags_and: Bitmap of WPA_STA_* flags to us as a mask
         * Returns: 0 on success, -1 on failure
         */
-       int (*sta_set_flags)(void *priv, const u8 *addr,
+       int (*sta_set_flags)(const char *ifname, void *priv, const u8 *addr,
                             int total_flags, int flags_or, int flags_and);
 
        /**
index f24a40f59d0a65e4b2515560823f88150ee121c0..94e139a838b03d96b4fe5d6feff2cb892835453b 100644 (file)
@@ -339,8 +339,8 @@ madwifi_set_sta_authorized(void *priv, const u8 *addr, int authorized)
 }
 
 static int
-madwifi_sta_set_flags(void *priv, const u8 *addr, int total_flags,
-                     int flags_or, int flags_and)
+madwifi_sta_set_flags(const char *ifname, void *priv, const u8 *addr,
+                     int total_flags, int flags_or, int flags_and)
 {
        /* For now, only support setting Authorized flag */
        if (flags_or & WPA_STA_AUTHORIZED)
index 2ba7c8b985314676360dfdd66f64f1f4d6afd656..7e060d4962f571230df29e82d9501dd54d5324cd 100644 (file)
@@ -468,8 +468,8 @@ bsd_set_ieee8021x(void *priv, struct wpa_bss_params *params)
 }
 
 static int
-bsd_set_sta_authorized(void *priv, const u8 *addr, int total_flags,
-                      int flags_or, int flags_and)
+bsd_set_sta_authorized(const char *ifname, void *priv, const u8 *addr,
+                      int total_flags, int flags_or, int flags_and)
 {
        int authorized = -1;
 
index 64b345f446efe393ffd5dbbb82c7bf7f457ace2c..b461e96995c6d50c414a7f821f0429321b8c78e3 100644 (file)
@@ -333,7 +333,7 @@ static int hostap_send_eapol(void *priv, const u8 *addr, const u8 *data,
 }
 
 
-static int hostap_sta_set_flags(void *priv, const u8 *addr,
+static int hostap_sta_set_flags(const char *ifname, void *priv, const u8 *addr,
                                int total_flags, int flags_or, int flags_and)
 {
        struct hostap_driver_data *drv = priv;
@@ -664,7 +664,8 @@ static int hostap_sta_remove(void *priv, const u8 *addr)
        struct hostap_driver_data *drv = priv;
        struct prism2_hostapd_param param;
 
-       hostap_sta_set_flags(drv, addr, 0, 0, ~WPA_STA_AUTHORIZED);
+       hostap_sta_set_flags(drv->iface, drv, addr, 0, 0,
+                            ~WPA_STA_AUTHORIZED);
 
        memset(&param, 0, sizeof(param));
        param.cmd = PRISM2_HOSTAPD_REMOVE_STA;
index 475334e1df7b7caf153603b32ad5f942b16d8928..90036cf3fc930cc2a7fc8eccc8164e4744dab2f3 100644 (file)
@@ -384,8 +384,8 @@ madwifi_set_sta_authorized(void *priv, const u8 *addr, int authorized)
 }
 
 static int
-madwifi_sta_set_flags(void *priv, const u8 *addr, int total_flags,
-                     int flags_or, int flags_and)
+madwifi_sta_set_flags(const char *ifname, void *priv, const u8 *addr,
+                     int total_flags, int flags_or, int flags_and)
 {
        /* For now, only support setting Authorized flag */
        if (flags_or & WPA_STA_AUTHORIZED)
index a5622d5ac50f256de03e4812cce035676f1a57bf..95cec95d45cbdb412328a36db5778022b7417c91 100644 (file)
@@ -3409,9 +3409,9 @@ static u32 sta_flags_nl80211(int flags)
 }
 
 
-static int wpa_driver_nl80211_sta_set_flags(void *priv, const u8 *addr,
-                                           int total_flags, int flags_or,
-                                           int flags_and)
+static int wpa_driver_nl80211_sta_set_flags(const char *ifname, void *priv,
+                                           const u8 *addr, int total_flags,
+                                           int flags_or, int flags_and)
 {
        struct wpa_driver_nl80211_data *drv = priv;
        struct nl_msg *msg, *flags = NULL;
@@ -3431,7 +3431,7 @@ static int wpa_driver_nl80211_sta_set_flags(void *priv, const u8 *addr,
                    0, NL80211_CMD_SET_STATION, 0);
 
        NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX,
-                   if_nametoindex(drv->ifname));
+                   if_nametoindex(ifname));
        NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr);
 
        /*
index 7f64c4c66b6afcdc608f8d241219e48523212b87..c835e91504d655050b0db952d20ca5eef7e76342 100644 (file)
@@ -367,7 +367,8 @@ static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
                                        int flags_or, int flags_and)
 {
        if (wpa_s->driver->sta_set_flags)
-               return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
+               return wpa_s->driver->sta_set_flags(wpa_s->ifname,
+                                                   wpa_s->drv_priv, addr,
                                                    total_flags, flags_or,
                                                    flags_and);
        return -1;