mac80211: add rts-cts for dynamic SMPS stations
PATCH 1/1 mac80211: add rts-cts for dynamic SMPS stations
Checking whether dynamic SMPS is enabled at the receiver station for which packet is intended to be transmitted. Enable RTS protection for multi-stream rates for such packets.
--- net/mac80211/tx.c | 20 +++++++++++++++++++- 1 files changed, 19 insertions(+), 1 deletions(-)
net/mac80211/tx.c +19 -1
@@ -621,6 +621,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)int i;u32 len;bool inval = false, rts = false, short_preamble = false; +bool dyn_smps = false;struct ieee80211_tx_rate_control txrc;bool assoc = false;
@@ -738,6 +739,13 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx) info->control.rts_cts_rate_idx = baserate; } +/* check if dynamic SMPS is on at receiving station */ +if (tx->sta) { +if (tx->sta->sta.smps_mode ==WLAN_HT_CAP_SM_PS_DYNAMIC ) { + dyn_smps = true; + } + } +for (i =0 ; i <IEEE80211_TX_MAX_RATES ; i++) {/* * make sure there's no valid rate following
@@ -766,7 +774,17 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)if (rts) info->control.rates[i].flags |=IEEE80211_TX_RC_USE_RTS_CTS ; - +/* +* set up RTS protection for multi-stream rates if dynamic +* SMPS is enabled for the receiving station +*/ +if (dyn_smps) { +if ((info->control.rates[i].idx >7 ) && + (info->control.rates[i].idx !=32 )) + info->control.rates[i].flags |= +IEEE80211_TX_RC_USE_RTS_CTS ; + } +/* RC is busted */ if (WARN_ON_ONCE (info->control.rates[i].idx >= sband->n_bitrates)) {
Johannes Berg
maintainerVivek,
Please work with some of your colleagues at posedge to submit a proper patch. This is formatted completely wrongly in many ways.
net/mac80211/tx.c ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx) · line 783
Quoted 3 lines
net/mac80211/tx.c +3
-0+if (dyn_smps) { +if ((info->control.rates[i].idx >7 ) && + (info->control.rates[i].idx !=32 ))
This is also completely wrong. (hint, there are non-HT bitrates still)
johannes
Hi Johannes,
I ran checkpatch.pl script and found some trailing white spaces in the patch which i have now corrected.
Also,i had initially placed my code in minstrel_ht_get_rate but saw that the minstrel code is being changed.
hence, moved the code in to ieee80211_tx_h_rate_ctrl function.
there is a check in this function
if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) {
WARN_ON(info->control.rates[i].idx > 76);
continue;
}I feel it would be okay to move the code for dyn_smps within this loop as this would solve the check for MCS rates.
however i am not sure whether all ht rates flag settings need to be handled within minstrel_ht?
if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) {
WARN_ON(info->control.rates[i].idx > 76);+ if (dyn_smps) {
+ if ((info->control.rates[i].idx > 7) &&
+ (info->control.rates[i].idx != 32))
+ info->control.rates[i].flags |=
+ IEEE80211_TX_RC_USE_RTS_CTS;
continue;
}awaiting your inputs
thanks and regards
Vivek
Quoted 12 lines · Johannes Berg
Vivek,
Please work with some of your colleagues at posedge to submit a proper patch. This is formatted completely wrongly in many ways.
net/mac80211/tx.c ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx) · line 783
Quoted 3 lines
net/mac80211/tx.c +3
-0+if (dyn_smps) { +if ((info->control.rates[i].idx >7 ) && + (info->control.rates[i].idx !=32 ))This is also completely wrong. (hint, there are non-HT bitrates still)
johannes