Search Linux Wireless

[PATCH 2/2] mac80211: Always send EAPOL frames at lowest rate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Since EAPOL frames are normal data frames they are treated by the rate
control algorithm as such. Thus it can happen that the rate control
algorithm chooses an inappropriate rate (minstrel_ht uses MCS rates for
example) for the 4-way handshake and under low signal conditions the
handshake may time out.

To fix this issue always treat EAPOL frames the same as management
frames and send them with the lowest available rate.

Signed-off-by: Helmut Schaa <helmut.schaa@xxxxxxxxxxxxxx>
---
 net/mac80211/rate.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
index 3d5a2cb..c307b7b 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -199,6 +199,13 @@ static void rate_control_release(struct kref *kref)
 	kfree(ctrl_ref);
 }
 
+static bool rc_is_port_control(struct ieee80211_sta *pubsta,
+			       struct ieee80211_tx_rate_control *txrc)
+{
+	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
+	return sta->sdata->control_port_protocol == txrc->skb->protocol;
+}
+
 static bool rc_no_data_or_no_ack(struct ieee80211_tx_rate_control *txrc)
 {
 	struct sk_buff *skb = txrc->skb;
@@ -241,7 +248,8 @@ bool rate_control_send_low(struct ieee80211_sta *sta,
 	struct ieee80211_supported_band *sband = txrc->sband;
 	int mcast_rate;
 
-	if (!sta || !priv_sta || rc_no_data_or_no_ack(txrc)) {
+	if (!sta || !priv_sta || rc_no_data_or_no_ack(txrc) ||
+	    rc_is_port_control(sta, txrc)) {
 		info->control.rates[0].idx = rate_lowest_index(txrc->sband, sta);
 		info->control.rates[0].count =
 			(info->flags & IEEE80211_TX_CTL_NO_ACK) ?
-- 
1.7.3.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux