From: Peter Seiderer <hidden> Date: 2021-11-16 21:28:40
Despite the 'RTS thr:off' setting a wireshark trace of IBSS
traffic with HT40 mode enabled between two ath9k cards revealed
some RTS/CTS traffic.
Debug and code analysis showed that most places setting
IEEE80211_TX_RC_USE_RTS_CTS respect the RTS strategy by
evaluating rts_threshold, e.g. net/mac80211/tx.c:
698 /* set up RTS protection if desired */
699 if (len > tx->local->hw.wiphy->rts_threshold) {
700 txrc.rts = true;
701 }
702
703 info->control.use_rts = txrc.rts;
or drivers/net/wireless/ath/ath9k/xmit.c
1238 /*
1239 * Handle RTS threshold for unaggregated HT frames.
1240 */
1241 if (bf_isampdu(bf) && !bf_isaggr(bf) &&
1242 (rates[i].flags & IEEE80211_TX_RC_MCS) &&
1243 unlikely(rts_thresh != (u32) -1)) {
1244 if (!rts_thresh || (len > rts_thresh))
1245 rts = true;
1246 }
The only place setting IEEE80211_TX_RC_USE_RTS_CTS unconditionally
was found in net/mac80211/rc80211_minstrel_ht.c.
As the use_rts value is only calculated after hitting the minstrel_ht code
preferre to not set IEEE80211_TX_RC_USE_RTS_CTS (and overruling the
RTS threshold setting) for the fallback rates case.
Signed-off-by: Peter Seiderer <redacted>
---
Changes v1 -> v2:
- change from 'respect RTS threshold setting' to 'do not set RTS/CTS
flag for fallback rates' (see commit message for reasoning)
---
net/mac80211/rc80211_minstrel_ht.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
From: Felix Fietkau <nbd@nbd.name> Date: 2021-11-26 13:36:28
On 2021-11-16 22:28, Peter Seiderer wrote:
Despite the 'RTS thr:off' setting a wireshark trace of IBSS
traffic with HT40 mode enabled between two ath9k cards revealed
some RTS/CTS traffic.
Debug and code analysis showed that most places setting
IEEE80211_TX_RC_USE_RTS_CTS respect the RTS strategy by
evaluating rts_threshold, e.g. net/mac80211/tx.c:
698 /* set up RTS protection if desired */
699 if (len > tx->local->hw.wiphy->rts_threshold) {
700 txrc.rts = true;
701 }
702
703 info->control.use_rts = txrc.rts;
or drivers/net/wireless/ath/ath9k/xmit.c
1238 /*
1239 * Handle RTS threshold for unaggregated HT frames.
1240 */
1241 if (bf_isampdu(bf) && !bf_isaggr(bf) &&
1242 (rates[i].flags & IEEE80211_TX_RC_MCS) &&
1243 unlikely(rts_thresh != (u32) -1)) {
1244 if (!rts_thresh || (len > rts_thresh))
1245 rts = true;
1246 }
The only place setting IEEE80211_TX_RC_USE_RTS_CTS unconditionally
was found in net/mac80211/rc80211_minstrel_ht.c.
As the use_rts value is only calculated after hitting the minstrel_ht code
preferre to not set IEEE80211_TX_RC_USE_RTS_CTS (and overruling the
RTS threshold setting) for the fallback rates case.
The idea behind the this part of minstrel_ht code is to avoid the
overhead of RTS/CTS for transmissions using the primary rate and to
increase the reliability of retransmissions by adding it for fallback
rates. This is completely unrelated to the RTS threshold.
If you don't want this behavior, I'm fine with adding a way to
explicitly disable it. However, I do think leaving it on by default
makes sense.
- Felix
From: Peter Seiderer <hidden> Date: 2021-11-26 14:28:14
Hello Felix,
On Fri, 26 Nov 2021 13:47:07 +0100, Felix Fietkau [off-list ref] wrote:
On 2021-11-16 22:28, Peter Seiderer wrote:
quoted
Despite the 'RTS thr:off' setting a wireshark trace of IBSS
traffic with HT40 mode enabled between two ath9k cards revealed
some RTS/CTS traffic.
Debug and code analysis showed that most places setting
IEEE80211_TX_RC_USE_RTS_CTS respect the RTS strategy by
evaluating rts_threshold, e.g. net/mac80211/tx.c:
698 /* set up RTS protection if desired */
699 if (len > tx->local->hw.wiphy->rts_threshold) {
700 txrc.rts = true;
701 }
702
703 info->control.use_rts = txrc.rts;
or drivers/net/wireless/ath/ath9k/xmit.c
1238 /*
1239 * Handle RTS threshold for unaggregated HT frames.
1240 */
1241 if (bf_isampdu(bf) && !bf_isaggr(bf) &&
1242 (rates[i].flags & IEEE80211_TX_RC_MCS) &&
1243 unlikely(rts_thresh != (u32) -1)) {
1244 if (!rts_thresh || (len > rts_thresh))
1245 rts = true;
1246 }
The only place setting IEEE80211_TX_RC_USE_RTS_CTS unconditionally
was found in net/mac80211/rc80211_minstrel_ht.c.
As the use_rts value is only calculated after hitting the minstrel_ht code
preferre to not set IEEE80211_TX_RC_USE_RTS_CTS (and overruling the
RTS threshold setting) for the fallback rates case.
The idea behind the this part of minstrel_ht code is to avoid the
overhead of RTS/CTS for transmissions using the primary rate and to
increase the reliability of retransmissions by adding it for fallback
rates. This is completely unrelated to the RTS threshold.
How does it avoid RTS/CTS (if it is set independent by RTS threshold
evaluation mac80211 and/or hardware driver)?
If you don't want this behavior, I'm fine with adding a way to
explicitly disable it. However, I do think leaving it on by default
makes sense.
I expected this (as otherwise the flag setting would not be there) ;-)
Any hint how to implement an additional RTS/CTS on/off feature despite
the RTS threshold one for use explicit by minstrel_ht? Configure option,
module option, ...?
Regards,
Peter
From: Johannes Berg <johannes@sipsolutions.net> Date: 2021-11-29 08:48:39
On Fri, 2021-11-26 at 15:25 +0100, Peter Seiderer wrote:
quoted
If you don't want this behavior, I'm fine with adding a way to
explicitly disable it. However, I do think leaving it on by default
makes sense.
I expected this (as otherwise the flag setting would not be there) ;-)
To be fair, that setting (RTS threshold) has been there for 20 years or
more, and comes from a much simpler time when the reasoning for RTS/CTS
was mostly about hidden stations, not about protecting the transmissions
from older clients that don't understand the newer PHY protocols, etc.
johannes