Browse Source

hostapd: Set STA flags when adding a new station

When adding a new station, set the STA flags as part of the sta_add()
command. This ensures the flags are up to date when the station is added
by lower level drivers.

Signed-off-by: Arik Nemtsov <arik@wizery.com>
Arik Nemtsov 13 years ago
parent
commit
d83ab1fe37
4 changed files with 8 additions and 3 deletions
  1. 3 1
      src/ap/ap_drv_ops.c
  2. 2 1
      src/ap/ap_drv_ops.h
  3. 2 1
      src/ap/ieee802_11.c
  4. 1 0
      src/drivers/driver.h

+ 3 - 1
src/ap/ap_drv_ops.c

@@ -314,7 +314,8 @@ int hostapd_sta_add(struct hostapd_data *hapd,
 		    const u8 *addr, u16 aid, u16 capability,
 		    const u8 *supp_rates, size_t supp_rates_len,
 		    u16 listen_interval,
-		    const struct ieee80211_ht_capabilities *ht_capab)
+		    const struct ieee80211_ht_capabilities *ht_capab,
+		    u32 flags)
 {
 	struct hostapd_sta_add_params params;
 
@@ -331,6 +332,7 @@ int hostapd_sta_add(struct hostapd_data *hapd,
 	params.supp_rates_len = supp_rates_len;
 	params.listen_interval = listen_interval;
 	params.ht_capabilities = ht_capab;
+	params.flags = hostapd_sta_flags_to_drv(flags);
 	return hapd->driver->sta_add(hapd->drv_priv, &params);
 }
 

+ 2 - 1
src/ap/ap_drv_ops.h

@@ -36,7 +36,8 @@ int hostapd_sta_add(struct hostapd_data *hapd,
 		    const u8 *addr, u16 aid, u16 capability,
 		    const u8 *supp_rates, size_t supp_rates_len,
 		    u16 listen_interval,
-		    const struct ieee80211_ht_capabilities *ht_capab);
+		    const struct ieee80211_ht_capabilities *ht_capab,
+		    u32 flags);
 int hostapd_set_privacy(struct hostapd_data *hapd, int enabled);
 int hostapd_set_generic_elem(struct hostapd_data *hapd, const u8 *elem,
 			     size_t elem_len);

+ 2 - 1
src/ap/ieee802_11.c

@@ -1705,7 +1705,8 @@ static void handle_assoc_cb(struct hostapd_data *hapd,
 	if (hostapd_sta_add(hapd, sta->addr, sta->aid, sta->capability,
 			    sta->supported_rates, sta->supported_rates_len,
 			    sta->listen_interval,
-			    sta->flags & WLAN_STA_HT ? &ht_cap : NULL)) {
+			    sta->flags & WLAN_STA_HT ? &ht_cap : NULL,
+			    sta->flags)) {
 		hostapd_logger(hapd, sta->addr, HOSTAPD_MODULE_IEEE80211,
 			       HOSTAPD_LEVEL_NOTICE,
 			       "Could not add STA to kernel driver");

+ 1 - 0
src/drivers/driver.h

@@ -602,6 +602,7 @@ struct hostapd_sta_add_params {
 	size_t supp_rates_len;
 	u16 listen_interval;
 	const struct ieee80211_ht_capabilities *ht_capabilities;
+	u32 flags; /* bitmask of WPA_STA_* flags */
 };
 
 struct hostapd_freq_params {