Browse Source

AP: Consider U-APSD driver support

Check whether the driver advertises support for U-APSD
in AP mode, and evaluate wmm_uapsd only in this case.

Signed-off-by: Eliad Peller <eliad@wizery.com>
Eliad Peller 13 years ago
parent
commit
70619a5d8a
3 changed files with 7 additions and 1 deletions
  1. 2 1
      src/ap/wmm.c
  2. 2 0
      src/drivers/driver.h
  3. 3 0
      src/drivers/driver_nl80211.c

+ 2 - 1
src/ap/wmm.c

@@ -72,7 +72,8 @@ u8 * hostapd_eid_wmm(struct hostapd_data *hapd, u8 *eid)
 	wmm->version = WMM_VERSION;
 	wmm->qos_info = hapd->parameter_set_count & 0xf;
 
-	if (hapd->conf->wmm_uapsd)
+	if (hapd->conf->wmm_uapsd &&
+	    (hapd->iface->drv_flags & WPA_DRIVER_FLAGS_AP_UAPSD))
 		wmm->qos_info |= 0x80;
 
 	wmm->reserved = 0;

+ 2 - 0
src/drivers/driver.h

@@ -774,6 +774,8 @@ struct wpa_driver_capa {
 #define WPA_DRIVER_FLAGS_TDLS_EXTERNAL_SETUP		0x00100000
 /* Driver indicates support for Probe Response offloading in AP mode */
 #define WPA_DRIVER_FLAGS_PROBE_RESP_OFFLOAD		0x00200000
+/* Driver supports U-APSD in AP mode */
+#define WPA_DRIVER_FLAGS_AP_UAPSD			0x00400000
 	unsigned int flags;
 
 	int max_scan_ssids;

+ 3 - 0
src/drivers/driver_nl80211.c

@@ -2434,6 +2434,9 @@ broken_combination:
 	/* default to 5000 since early versions of mac80211 don't set it */
 	capa->max_remain_on_chan = 5000;
 
+	if (tb[NL80211_ATTR_SUPPORT_AP_UAPSD])
+		capa->flags |= WPA_DRIVER_FLAGS_AP_UAPSD;
+
 	if (tb[NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION])
 		capa->max_remain_on_chan =
 			nla_get_u32(tb[NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION]);