Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Feb 2013 00:07:43 GMT
From:      PseudoCylon <moonlightakkiy@yahoo.ca>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/176201: 11n station includes unrelated ht params into ASSOC_REQ packet
Message-ID:  <201302170007.r1H07hqk038722@red.freebsd.org>
Resent-Message-ID: <201302170010.r1H0A1AH044268@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         176201
>Category:       kern
>Synopsis:       11n station includes unrelated ht params into ASSOC_REQ packet
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Feb 17 00:10:01 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     PseudoCylon
>Release:        9.1-PRERELEASE
>Organization:
>Environment:
9.1-RELEASE #5: Sun Feb  3 16:22:34 MST 2013 root@mb0:/usr/obj/usr/src/sys/U300  amd64
>Description:
When an 11n capable station try to associate with an AP, the station does not include maximum Rx size and ampdu density set by the driver into an association request packet. So that, the AP might generate ampdu packets bigger than the station can handle.

Detailed discussion can be found here.
http://lists.freebsd.org/pipermail/freebsd-wireless/2013-February/002878.html
>How-To-Repeat:
1) Set up an 11n station.
2) Capture an ASSOC_REQ packet sent by the station.
3) Read HT params in the packet.
>Fix:
In a brief testing, attached patch fixed the issue. But, need to be checked the patch doesn't break anything.


Patch attached with submission follows:

diff --git a/sys/net80211/ieee80211_ht.c b/sys/net80211/ieee80211_ht.c
index 495c949..9fc5a45 100644
--- a/sys/net80211/ieee80211_ht.c
+++ b/sys/net80211/ieee80211_ht.c
@@ -2652,9 +2652,6 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni)
 			caps |= IEEE80211_HTCAP_CHWIDTH40;
 		else
 			caps &= ~IEEE80211_HTCAP_CHWIDTH40;
-		/* use advertised setting (XXX locally constraint) */
-		rxmax = MS(ni->ni_htparam, IEEE80211_HTCAP_MAXRXAMPDU);
-		density = MS(ni->ni_htparam, IEEE80211_HTCAP_MPDUDENSITY);
 
 		/*
 		 * NB: Hardware might support HT40 on some but not all
@@ -2672,9 +2669,11 @@ ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *ni)
 			caps |= IEEE80211_HTCAP_CHWIDTH40;
 		else
 			caps &= ~IEEE80211_HTCAP_CHWIDTH40;
-		rxmax = vap->iv_ampdu_rxmax;
-		density = vap->iv_ampdu_density;
 	}
+
+	rxmax = vap->iv_ampdu_rxmax;
+	density = vap->iv_ampdu_density;
+
 	/* adjust short GI based on channel and config */
 	if ((vap->iv_flags_ht & IEEE80211_FHT_SHORTGI20) == 0)
 		caps &= ~IEEE80211_HTCAP_SHORTGI20;


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302170007.r1H07hqk038722>