On Mon, Apr 20, 2015 at 10:52 PM, Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx> wrote: > From: Avri Altman <avri.altman@xxxxxxxxx> > > This concerns a bugy behavior of some APs, that advertise themselves > falsely as supporting U-APSD, but they don't which affects throughput. > It was detected in iPhones, but recently also with some Netgear models. > Those devices also advertise their capabilities as SISO, so use that > and disable U-APSD if connected to a SISO AP. > > Signed-off-by: Avri Altman <avri.altman@xxxxxxxxx> > Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx> > --- [...] > static bool is_uapsd_supported(struct ieee802_11_elems *elems) > { > u8 qos_info; > + int i; > > if (elems->wmm_info && elems->wmm_info_len == 7 > && elems->wmm_info[5] == 1) > @@ -53,6 +54,22 @@ static bool is_uapsd_supported(struct ieee802_11_elems *elems) > /* no valid wmm information or parameter element found */ > return false; > > + /* > + * if the AP does not advertise MIMO capabilities - > + * disable U-APSD. iPhones, among others, advertise themselves > + * as U-APSD capable when they aren't. Avoid connecting to > + * those devices in U-APSD enabled. > + */ > + if (elems->parse_error || !elems->ht_cap_elem) > + goto mimo; > + > + for (i = 1; i < 4; i++) { > + if (elems->ht_cap_elem->mcs.rx_mask[i]) > + goto mimo; > + } > + return false; > + > +mimo: > return qos_info & IEEE80211_WMM_IE_AP_QOSINFO_UAPSD; > } this is pretty confusing, as MIMO really has nothing to do with uapsd. i guess this is only some heuristics for "incompatible ap". better move it into a new function with a name indicating that this is only a workaround. this will also improve the function flow, which became a bit weird with this patch. Eliad. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html