diff options
author | sam <sam@FreeBSD.org> | 2009-03-26 19:13:11 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2009-03-26 19:13:11 +0000 |
commit | 382385b98bb9e174b6bf1c038c108e2c0104349b (patch) | |
tree | 7ec9f633a8f8c210fba0f4321d210b769e266cb2 /sys/net80211/ieee80211_superg.c | |
parent | 9ca2b364dab13d9032e52880cacd89bdeeb3ff32 (diff) | |
download | FreeBSD-src-382385b98bb9e174b6bf1c038c108e2c0104349b.zip FreeBSD-src-382385b98bb9e174b6bf1c038c108e2c0104349b.tar.gz |
Fix enough bits so that fast frames work again:
o include ath ie in beacon frames
o fix probe response check for including ath ie
o add ieee80211_add_athcap shorthand for ap-side ie additions
Diffstat (limited to 'sys/net80211/ieee80211_superg.c')
-rw-r--r-- | sys/net80211/ieee80211_superg.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/sys/net80211/ieee80211_superg.c b/sys/net80211/ieee80211_superg.c index d93bf3e..c7cc214 100644 --- a/sys/net80211/ieee80211_superg.c +++ b/sys/net80211/ieee80211_superg.c @@ -81,7 +81,7 @@ ieee80211_superg_vdetach(struct ieee80211vap *vap) * Add a WME information element to a frame. */ uint8_t * -ieee80211_add_ath(uint8_t *frm, uint8_t caps, uint16_t defkeyix) +ieee80211_add_ath(uint8_t *frm, uint8_t caps, ieee80211_keyix defkeyix) { static const struct ieee80211_ath_ie info = { .ath_id = IEEE80211_ELEMID_VENDOR, @@ -95,12 +95,29 @@ ieee80211_add_ath(uint8_t *frm, uint8_t caps, uint16_t defkeyix) memcpy(frm, &info, sizeof(info)); ath->ath_capability = caps; - ath->ath_defkeyix[0] = (defkeyix & 0xff); - ath->ath_defkeyix[1] = ((defkeyix >> 8) & 0xff); + if (defkeyix != IEEE80211_KEYIX_NONE) { + ath->ath_defkeyix[0] = (defkeyix & 0xff); + ath->ath_defkeyix[1] = ((defkeyix >> 8) & 0xff); + } else { + ath->ath_defkeyix[0] = 0xff; + ath->ath_defkeyix[1] = 0x7f; + } return frm + sizeof(info); } #undef ATH_OUI_BYTES +uint8_t * +ieee80211_add_athcaps(uint8_t *frm, const struct ieee80211_node *bss) +{ + const struct ieee80211vap *vap = bss->ni_vap; + + return ieee80211_add_ath(frm, + vap->iv_flags & IEEE80211_F_ATHEROS, + ((vap->iv_flags & IEEE80211_F_WPA) == 0 && + bss->ni_authmode != IEEE80211_AUTH_8021X) ? + vap->iv_def_txkey : IEEE80211_KEYIX_NONE); +} + void ieee80211_parse_ath(struct ieee80211_node *ni, uint8_t *ie) { |