2012-06-11 15:02:19

by Eyal Shapira

[permalink] [raw]
Subject: [PATCH] wlcore: send EAPOLs with basic rate policy

EAPOLs are sent at high rates as they are considered
data packets. Some APs don't respond well to these rates
and don't respond with EAPOL 3/4.
Send EAPOLs with basic rate policy in order to avoid that.

Signed-off-by: Eyal Shapira <[email protected]>
---
drivers/net/wireless/ti/wlcore/tx.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
index 6983e7a..8ee82b9 100644
--- a/drivers/net/wireless/ti/wlcore/tx.c
+++ b/drivers/net/wireless/ti/wlcore/tx.c
@@ -305,11 +305,15 @@ static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct wl12xx_vif *wlvif,
if (is_dummy || !wlvif)
rate_idx = 0;
else if (wlvif->bss_type != BSS_TYPE_AP_BSS) {
- /* if the packets are destined for AP (have a STA entry)
- send them with AP rate policies, otherwise use default
- basic rates */
+ /*
+ * if the packets are destined for AP (have a STA entry)
+ * send them with AP rate policies (EAPOLs are an exception),
+ * otherwise use default basic rates
+ */
if (control->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
rate_idx = wlvif->sta.p2p_rate_idx;
+ else if (skb->protocol == cpu_to_be16(ETH_P_PAE))
+ rate_idx = wlvif->sta.basic_rate_idx;
else if (control->control.sta)
rate_idx = wlvif->sta.ap_rate_idx;
else
--
1.7.4.1



2012-06-11 15:08:58

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] wlcore: send EAPOLs with basic rate policy

On Mon, 2012-06-11 at 18:01 +0300, Eyal Shapira wrote:
> EAPOLs are sent at high rates as they are considered
> data packets. Some APs don't respond well to these rates
> and don't respond with EAPOL 3/4.
> Send EAPOLs with basic rate policy in order to avoid that.
>
> Signed-off-by: Eyal Shapira <[email protected]>
> ---
> drivers/net/wireless/ti/wlcore/tx.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
> index 6983e7a..8ee82b9 100644
> --- a/drivers/net/wireless/ti/wlcore/tx.c
> +++ b/drivers/net/wireless/ti/wlcore/tx.c
> @@ -305,11 +305,15 @@ static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct wl12xx_vif *wlvif,
> if (is_dummy || !wlvif)
> rate_idx = 0;
> else if (wlvif->bss_type != BSS_TYPE_AP_BSS) {
> - /* if the packets are destined for AP (have a STA entry)
> - send them with AP rate policies, otherwise use default
> - basic rates */
> + /*
> + * if the packets are destined for AP (have a STA entry)
> + * send them with AP rate policies (EAPOLs are an exception),
> + * otherwise use default basic rates
> + */

Might be worth indicating what APs have this bug, and possibly putting
something like this into mac80211 (as well)?

johannes