mac80211: add helper for management / no-ack frame rate decision
All current rate control algorithms agree to send management and no-ack frames at the lowest rate. They also agree to do this when sta and the private rate control data is NULL. We add a hlper to mac80211 for this and simplify the rate control algorithm code. Developers wishing to make enhancements to rate control algorithms are for broadcast/multicast can opt to not use this in their gate_rate() mac80211 callback. Cc: Zhu Yi <yi.zhu@intel.com> Acked-by: Reinette Chatre <reinette.chatre@intel.com> Cc: ipw3945-devel@lists.sourceforge.net Cc: Gabor Juhos <juhosg@openwrt.org> Acked-by: Felix Fietkau <nbd@openwrt.org> Cc: Derek Smithies <derek@indranet.co.nz> Cc: Chittajit Mitra <Chittajit.Mitra@Atheros.com> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
这个提交包含在:
@@ -1518,23 +1518,11 @@ exit:
|
||||
static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
|
||||
struct ieee80211_tx_rate_control *txrc)
|
||||
{
|
||||
struct ieee80211_supported_band *sband = txrc->sband;
|
||||
struct sk_buff *skb = txrc->skb;
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
||||
struct ath_softc *sc = priv;
|
||||
struct ath_rate_priv *ath_rc_priv = priv_sta;
|
||||
__le16 fc = hdr->frame_control;
|
||||
|
||||
/* lowest rate for management and NO_ACK frames */
|
||||
if (!ieee80211_is_data(fc) ||
|
||||
tx_info->flags & IEEE80211_TX_CTL_NO_ACK || !sta) {
|
||||
tx_info->control.rates[0].idx = rate_lowest_index(sband, sta);
|
||||
tx_info->control.rates[0].count =
|
||||
(tx_info->flags & IEEE80211_TX_CTL_NO_ACK) ?
|
||||
1 : ATH_MGT_TXMAXTRY;
|
||||
if (rate_control_send_low(sta, priv_sta, txrc))
|
||||
return;
|
||||
}
|
||||
|
||||
/* Find tx rate for unicast frames */
|
||||
ath_rc_ratefind(sc, ath_rc_priv, txrc);
|
||||
|
在新工单中引用
屏蔽一个用户