diff options
author | sam <sam@FreeBSD.org> | 2008-05-28 23:41:40 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2008-05-28 23:41:40 +0000 |
commit | 11e29467dc6308420ac30ffd1de9c7bc7fbd3ab7 (patch) | |
tree | a587184da5d7f67fa3f511b4bae2c39d59d3eb44 /sys/dev | |
parent | 1322406ed1a845343543e57df1c694e5f1c198cc (diff) | |
download | FreeBSD-src-11e29467dc6308420ac30ffd1de9c7bc7fbd3ab7.zip FreeBSD-src-11e29467dc6308420ac30ffd1de9c7bc7fbd3ab7.tar.gz |
send EAPOL frames at the same rate used for mgt frames
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/ath/if_ath.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c index ab21df3..92763f2 100644 --- a/sys/dev/ath/if_ath.c +++ b/sys/dev/ath/if_ath.c @@ -4638,6 +4638,7 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf flags = HAL_TXDESC_CLRDMASK; /* XXX needed for crypto errs */ ismrr = 0; /* default no multi-rate retry*/ pri = M_WME_GETAC(m0); /* honor classification */ + /* XXX use txparams instead of fixed values */ /* * Calculate Atheros packet type from IEEE80211 packet header, * setup for rate calculations, and select h/w transmit queue. @@ -4673,8 +4674,8 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf atype = HAL_PKT_TYPE_NORMAL; /* default */ /* * Data frames: multicast frames go out at a fixed rate, - * otherwise consult the rate control module for the - * rate to use. + * EAPOL frames use the mgmt frame rate; otherwise consult + * the rate control module for the rate to use. */ if (ismcast) { rix = an->an_mcastrix; @@ -4682,6 +4683,13 @@ ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf if (shortPreamble) txrate |= rt->info[rix].shortPreamble; try0 = 1; + } else if (m0->m_flags & M_EAPOL) { + /* XXX? maybe always use long preamble? */ + rix = an->an_mgmtrix; + txrate = rt->info[rix].rateCode; + if (shortPreamble) + txrate |= rt->info[rix].shortPreamble; + try0 = ATH_TXMAXTRY; /* XXX?too many? */ } else { ath_rate_findrate(sc, an, shortPreamble, pktlen, &rix, &try0, &txrate); |