correct header length calculations on tx path for QoS-encapsulated frames

when IEEE80211_F_DATAPAD is set (e.g. ath); must use ieee80211_hdrspace
instead of ieee80211_hdrsize
This commit is contained in:
Sam Leffler 2004-12-31 20:51:41 +00:00
parent d0d4cc63e3
commit 4e844c9453
3 changed files with 11 additions and 5 deletions

View File

@ -136,10 +136,12 @@ ccmp_setkey(struct ieee80211_key *k)
static int
ccmp_encap(struct ieee80211_key *k, struct mbuf *m, u_int8_t keyid)
{
struct ccmp_ctx *ctx = k->wk_private;
struct ieee80211com *ic = ctx->cc_ic;
u_int8_t *ivp;
int hdrlen;
hdrlen = ieee80211_hdrsize(mtod(m, void *));
hdrlen = ieee80211_hdrspace(ic, mtod(m, void *));
/*
* Copy down 802.11 header and add the IV, KeyID, and ExtIV.

View File

@ -171,7 +171,7 @@ tkip_encap(struct ieee80211_key *k, struct mbuf *m, u_int8_t keyid)
ic->ic_stats.is_crypto_tkipcm++;
return 0;
}
hdrlen = ieee80211_hdrsize(mtod(m, void *));
hdrlen = ieee80211_hdrspace(ic, mtod(m, void *));
/*
* Copy down 802.11 header and add the IV, KeyID, and ExtIV.
@ -215,10 +215,13 @@ tkip_enmic(struct ieee80211_key *k, struct mbuf *m)
if (k->wk_flags & IEEE80211_KEY_SWMIC) {
struct ieee80211_frame *wh = mtod(m, struct ieee80211_frame *);
int hdrlen = ieee80211_hdrsize(wh);
struct ieee80211com *ic = ctx->tc_ic;
int hdrlen;
uint8_t mic[IEEE80211_WEP_MICLEN];
ctx->tc_ic->ic_stats.is_crypto_tkipenmic++;
ic->ic_stats.is_crypto_tkipenmic++;
hdrlen = ieee80211_hdrspace(ic, wh);
michael_mic(ctx, k->wk_txmic,
m, hdrlen, m->m_pkthdr.len - hdrlen, mic);

View File

@ -120,11 +120,12 @@ static int
wep_encap(struct ieee80211_key *k, struct mbuf *m, u_int8_t keyid)
{
struct wep_ctx *ctx = k->wk_private;
struct ieee80211com *ic = ctx->wc_ic;
u_int32_t iv;
u_int8_t *ivp;
int hdrlen;
hdrlen = ieee80211_hdrsize(mtod(m, void *));
hdrlen = ieee80211_hdrspace(ic, mtod(m, void *));
/*
* Copy down 802.11 header and add the IV + KeyID.