From patchwork Mon Apr 20 19:52:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emmanuel Grumbach X-Patchwork-Id: 6244051 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id D97C19F32B for ; Mon, 20 Apr 2015 19:52:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 23B0320435 for ; Mon, 20 Apr 2015 19:52:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 30C6A20429 for ; Mon, 20 Apr 2015 19:52:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752491AbbDTTwW (ORCPT ); Mon, 20 Apr 2015 15:52:22 -0400 Received: from mga11.intel.com ([192.55.52.93]:14340 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750872AbbDTTwV (ORCPT ); Mon, 20 Apr 2015 15:52:21 -0400 Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga102.fm.intel.com with ESMTP; 20 Apr 2015 12:52:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,610,1422950400"; d="scan'208";a="483307542" Received: from ehemo-mobl3.ger.corp.intel.com (HELO egrumbacBox.ger.corp.intel.com) ([10.255.204.144]) by FMSMGA003.fm.intel.com with ESMTP; 20 Apr 2015 12:52:19 -0700 From: Emmanuel Grumbach To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Avri Altman , Emmanuel Grumbach Subject: [PATCH] mac80211: Disable U-APSD if connected to a SISO AP Date: Mon, 20 Apr 2015 22:52:16 +0300 Message-Id: <1429559536-22907-1-git-send-email-emmanuel.grumbach@intel.com> X-Mailer: git-send-email 2.1.0 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Avri Altman 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 Signed-off-by: Emmanuel Grumbach --- net/mac80211/scan.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c index 7bb6a93..400ff62 100644 --- a/net/mac80211/scan.c +++ b/net/mac80211/scan.c @@ -42,6 +42,7 @@ void ieee80211_rx_bss_put(struct ieee80211_local *local, 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; }