summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_hostap.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-03-24 20:39:08 +0000
committersam <sam@FreeBSD.org>2009-03-24 20:39:08 +0000
commit88b91b235f5ae6e04f407012ae5eb0da3d64facc (patch)
tree082efe3e253ba758a9687229364efee996a6bfae /sys/net80211/ieee80211_hostap.c
parentff1a464cfe436346fa187a3148a6067339e4cd2b (diff)
downloadFreeBSD-src-88b91b235f5ae6e04f407012ae5eb0da3d64facc.zip
FreeBSD-src-88b91b235f5ae6e04f407012ae5eb0da3d64facc.tar.gz
split Atheros SuperG support out into it's own file that's included only
with a new IEEE80211_SUPPORT_SUPERG option
Diffstat (limited to 'sys/net80211/ieee80211_hostap.c')
-rw-r--r--sys/net80211/ieee80211_hostap.c36
1 files changed, 12 insertions, 24 deletions
diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c
index e0f831b..c47262a 100644
--- a/sys/net80211/ieee80211_hostap.c
+++ b/sys/net80211/ieee80211_hostap.c
@@ -57,6 +57,9 @@ __FBSDID("$FreeBSD$");
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_hostap.h>
#include <net80211/ieee80211_input.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
#include <net80211/ieee80211_wds.h>
#define IEEE80211_RATE2MBS(r) (((r) & IEEE80211_RATE_VAL) / 2)
@@ -752,32 +755,13 @@ hostap_input(struct ieee80211_node *ni, struct mbuf *m,
m = ieee80211_decap_amsdu(ni, m);
if (m == NULL)
return IEEE80211_FC0_TYPE_DATA;
- } else if (IEEE80211_ATH_CAP(vap, ni, IEEE80211_NODE_FF) &&
-#define FF_LLC_SIZE (sizeof(struct ether_header) + sizeof(struct llc))
- m->m_pkthdr.len >= 3*FF_LLC_SIZE) {
- struct llc *llc;
-
- /*
- * Check for fast-frame tunnel encapsulation.
- */
- if (m->m_len < FF_LLC_SIZE &&
- (m = m_pullup(m, FF_LLC_SIZE)) == NULL) {
- IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
- ni->ni_macaddr, "fast-frame",
- "%s", "m_pullup(llc) failed");
- vap->iv_stats.is_rx_tooshort++;
+ } else {
+#ifdef IEEE80211_SUPPORT_SUPERG
+ m = ieee80211_decap_fastframe(vap, ni, m);
+ if (m == NULL)
return IEEE80211_FC0_TYPE_DATA;
- }
- llc = (struct llc *)(mtod(m, uint8_t *) +
- sizeof(struct ether_header));
- if (llc->llc_snap.ether_type == htons(ATH_FF_ETH_TYPE)) {
- m_adj(m, FF_LLC_SIZE);
- m = ieee80211_decap_fastframe(ni, m);
- if (m == NULL)
- return IEEE80211_FC0_TYPE_DATA;
- }
+#endif
}
-#undef FF_LLC_SIZE
if (dir == IEEE80211_FC1_DIR_DSTODS && ni->ni_wdsvap != NULL)
ieee80211_deliver_data(ni->ni_wdsvap, ni, m);
else
@@ -1967,8 +1951,10 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
wpa = frm;
else if (iswmeinfo(frm))
wme = frm;
+#ifdef IEEE80211_SUPPORT_SUPERG
else if (isatherosoui(frm))
ath = frm;
+#endif
else if (vap->iv_flags_ext & IEEE80211_FEXT_HTCOMPAT) {
if (ishtcapoui(frm) && htcap == NULL)
htcap = frm;
@@ -2106,6 +2092,7 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
ni->ni_flags |= IEEE80211_NODE_QOS;
} else
ni->ni_flags &= ~IEEE80211_NODE_QOS;
+#ifdef IEEE80211_SUPPORT_SUPERG
if (ath != NULL) {
setie(ath_ie, ath - sfrm);
/*
@@ -2113,6 +2100,7 @@ hostap_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0,
*/
ieee80211_parse_ath(ni, ni->ni_ies.ath_ie);
} else
+#endif
ni->ni_ath_flags = 0;
#undef setie
} else {
OpenPOWER on IntegriCloud