[PATCH] mac80211: improved 802.11g CTS protection
Currently, CTS protection is partially implemented twice: 1. via prism2 ioctls, only used by hostapd 2. via STA beacon parsing, recorded in sta.use_protection but never used (other than printed in debugfs) Protection control should be implemented on a per-subif basis. For example, a single physical device may be running a soft AP on one channel, and a STA on another. The AP interface should use protection based on what hostapd told it, and the STA interface should use protection based on beacon parsing. These should operate independantly: one subif using protection should not influence the other. To implement this, I moved the use_protection flag into ieee80211_sub_if_data and removed the device-global cts_protect_erp_frames flag. I also made the PRISM2_PARAM_CTS_PROTECT_ERP_FRAMES write operation only available for AP interfaces, to avoid any possibility of the user messing with the behaviour of a STA. Signed-off-by: Daniel Drake <dsd@gentoo.org> Signed-off-by: Jiri Benc <jbenc@suse.cz> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
5628221caf
commit
63fc33ceb0
@ -442,7 +442,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_txrx_data *tx)
|
||||
if (!tx->u.tx.rate)
|
||||
return TXRX_DROP;
|
||||
if (tx->u.tx.mode->mode == MODE_IEEE80211G &&
|
||||
tx->local->cts_protect_erp_frames && tx->fragmented &&
|
||||
tx->sdata->use_protection && tx->fragmented &&
|
||||
extra.nonerp) {
|
||||
tx->u.tx.last_frag_rate = tx->u.tx.rate;
|
||||
tx->u.tx.probe_last_frag = extra.probe ? 1 : 0;
|
||||
@ -868,8 +868,7 @@ ieee80211_tx_h_misc(struct ieee80211_txrx_data *tx)
|
||||
* for the frame. */
|
||||
if (mode->mode == MODE_IEEE80211G &&
|
||||
(tx->u.tx.rate->flags & IEEE80211_RATE_ERP) &&
|
||||
tx->u.tx.unicast &&
|
||||
tx->local->cts_protect_erp_frames &&
|
||||
tx->u.tx.unicast && tx->sdata->use_protection &&
|
||||
!(control->flags & IEEE80211_TXCTL_USE_RTS_CTS))
|
||||
control->flags |= IEEE80211_TXCTL_USE_CTS_PROTECT;
|
||||
|
||||
|
Reference in New Issue
Block a user