summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2008-05-28 23:41:40 +0000
committersam <sam@FreeBSD.org>2008-05-28 23:41:40 +0000
commit11e29467dc6308420ac30ffd1de9c7bc7fbd3ab7 (patch)
treea587184da5d7f67fa3f511b4bae2c39d59d3eb44 /sys/dev
parent1322406ed1a845343543e57df1c694e5f1c198cc (diff)
downloadFreeBSD-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.c12
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);
OpenPOWER on IntegriCloud