summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_superg.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-03-26 19:13:11 +0000
committersam <sam@FreeBSD.org>2009-03-26 19:13:11 +0000
commit382385b98bb9e174b6bf1c038c108e2c0104349b (patch)
tree7ec9f633a8f8c210fba0f4321d210b769e266cb2 /sys/net80211/ieee80211_superg.c
parent9ca2b364dab13d9032e52880cacd89bdeeb3ff32 (diff)
downloadFreeBSD-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.c23
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)
{
OpenPOWER on IntegriCloud