diff options
author | Andriy Voskoboinyk <avos@FreeBSD.org> | 2017-02-26 20:49:35 +0000 |
---|---|---|
committer | Andriy Voskoboinyk <avos@FreeBSD.org> | 2017-02-26 20:49:35 +0000 |
commit | f6313575401b3e97469df997e8b9d1a18fb485d0 (patch) | |
tree | 157d78224587d45de6f2a92e09caff18cbfe7fac /sys/dev/ral | |
parent | 2fa6d2fe8429a0bdcead3f328e95f3158f30244d (diff) | |
download | src-f6313575401b3e97469df997e8b9d1a18fb485d0.tar.gz src-f6313575401b3e97469df997e8b9d1a18fb485d0.zip |
net80211 drivers: fix rate setup for EAPOL frames, obtain Tx parameters
directly from the node.
- Use ni_txparms directly instead of calculating them manually every time
- Move M_EAPOL flag check upper; otherwise it may be skipped due to
'ucastrate' / 'mcastrate' check
- Use 'mgtrate' for control frames too (see ifconfig(8), mgtrate parameter)
- Add few more M_EAPOL checks where it was missing (zyd(4), ural(4),
urtw(4))
- Few unrelated cleanups
Tested with:
- Intel 6205 (iwn(4)), STA mode;
- WUSB54GC (rum(4)), HOSTAP mode + RTL8188EU (rtwn(4)), STA mode.
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D9811
Notes
Notes:
svn path=/head/; revision=314315
Diffstat (limited to 'sys/dev/ral')
-rw-r--r-- | sys/dev/ral/rt2560.c | 11 | ||||
-rw-r--r-- | sys/dev/ral/rt2661.c | 11 | ||||
-rw-r--r-- | sys/dev/ral/rt2860.c | 9 |
3 files changed, 14 insertions, 17 deletions
diff --git a/sys/dev/ral/rt2560.c b/sys/dev/ral/rt2560.c index 99466a212aff..9da26a8f581a 100644 --- a/sys/dev/ral/rt2560.c +++ b/sys/dev/ral/rt2560.c @@ -1518,7 +1518,7 @@ rt2560_tx_mgt(struct rt2560_softc *sc, struct mbuf *m0, desc = &sc->prioq.desc[sc->prioq.cur]; data = &sc->prioq.data[sc->prioq.cur]; - rate = vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)].mgmtrate; + rate = ni->ni_txparms->mgmtrate; wh = mtod(m0, struct ieee80211_frame *); @@ -1746,7 +1746,7 @@ rt2560_tx_data(struct rt2560_softc *sc, struct mbuf *m0, struct rt2560_tx_desc *desc; struct rt2560_tx_data *data; struct ieee80211_frame *wh; - const struct ieee80211_txparam *tp; + const struct ieee80211_txparam *tp = ni->ni_txparms; struct ieee80211_key *k; struct mbuf *mnew; bus_dma_segment_t segs[RT2560_MAX_SCATTER]; @@ -1756,11 +1756,10 @@ rt2560_tx_data(struct rt2560_softc *sc, struct mbuf *m0, wh = mtod(m0, struct ieee80211_frame *); - tp = &vap->iv_txparms[ieee80211_chan2mode(ni->ni_chan)]; - if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { - rate = tp->mcastrate; - } else if (m0->m_flags & M_EAPOL) { + if (m0->m_flags & M_EAPOL) { rate = tp->mgmtrate; + } else if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { + rate = tp->mcastrate; } else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) { rate = tp->ucastrate; } else { diff --git a/sys/dev/ral/rt2661.c b/sys/dev/ral/rt2661.c index 3e4d7fdde42a..85112923ccdd 100644 --- a/sys/dev/ral/rt2661.c +++ b/sys/dev/ral/rt2661.c @@ -1286,7 +1286,7 @@ rt2661_tx_mgt(struct rt2661_softc *sc, struct mbuf *m0, desc = &sc->mgtq.desc[sc->mgtq.cur]; data = &sc->mgtq.data[sc->mgtq.cur]; - rate = vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)].mgmtrate; + rate = ni->ni_txparms->mgmtrate; wh = mtod(m0, struct ieee80211_frame *); @@ -1435,7 +1435,7 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m0, struct rt2661_tx_desc *desc; struct rt2661_tx_data *data; struct ieee80211_frame *wh; - const struct ieee80211_txparam *tp; + const struct ieee80211_txparam *tp = ni->ni_txparms; struct ieee80211_key *k; const struct chanAccParams *cap; struct mbuf *mnew; @@ -1446,11 +1446,10 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m0, wh = mtod(m0, struct ieee80211_frame *); - tp = &vap->iv_txparms[ieee80211_chan2mode(ni->ni_chan)]; - if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { - rate = tp->mcastrate; - } else if (m0->m_flags & M_EAPOL) { + if (m0->m_flags & M_EAPOL) { rate = tp->mgmtrate; + } else if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { + rate = tp->mcastrate; } else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) { rate = tp->ucastrate; } else { diff --git a/sys/dev/ral/rt2860.c b/sys/dev/ral/rt2860.c index 3f2b3559fef6..8eb2e3b4ee51 100644 --- a/sys/dev/ral/rt2860.c +++ b/sys/dev/ral/rt2860.c @@ -1459,7 +1459,7 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) struct rt2860_txd *txd; struct rt2860_txwi *txwi; struct ieee80211_frame *wh; - const struct ieee80211_txparam *tp; + const struct ieee80211_txparam *tp = ni->ni_txparms; struct ieee80211_key *k; struct mbuf *m1; bus_dma_segment_t segs[RT2860_MAX_SCATTER]; @@ -1488,11 +1488,10 @@ rt2860_tx(struct rt2860_softc *sc, struct mbuf *m, struct ieee80211_node *ni) hdrlen = ieee80211_anyhdrsize(wh); type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK; - tp = &vap->iv_txparms[ieee80211_chan2mode(ni->ni_chan)]; - if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { - rate = tp->mcastrate; - } else if (m->m_flags & M_EAPOL) { + if (m->m_flags & M_EAPOL) { rate = tp->mgmtrate; + } else if (IEEE80211_IS_MULTICAST(wh->i_addr1)) { + rate = tp->mcastrate; } else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE) { rate = tp->ucastrate; } else { |