>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:
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to