All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing
@ 2013-09-29 19:39 Felix Fietkau
  2013-09-29 19:39 ` [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames Felix Fietkau
  2013-09-30  9:31 ` [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing Johannes Berg
  0 siblings, 2 replies; 6+ messages in thread
From: Felix Fietkau @ 2013-09-29 19:39 UTC (permalink / raw)
  To: linux-wireless; +Cc: johannes

This allows calls for clients in AP_VLANs (e.g. for 4-addr) to succeed

Cc: stable@vger.kernel.org
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 net/mac80211/cfg.c | 2 +-
 net/mac80211/tx.c  | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 2e7855a..629dee7 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -3518,7 +3518,7 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
 		return -EINVAL;
 	}
 	band = chanctx_conf->def.chan->band;
-	sta = sta_info_get(sdata, peer);
+	sta = sta_info_get_bss(sdata, peer);
 	if (sta) {
 		qos = test_sta_flag(sta, WLAN_STA_WME);
 	} else {
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 3456c04..70b5a05 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1120,7 +1120,8 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata,
 		tx->sta = rcu_dereference(sdata->u.vlan.sta);
 		if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)
 			return TX_DROP;
-	} else if (info->flags & IEEE80211_TX_CTL_INJECTED ||
+	} else if (info->flags & (IEEE80211_TX_CTL_INJECTED |
+				  IEEE80211_TX_INTFL_NL80211_FRAME_TX) ||
 		   tx->sdata->control_port_protocol == tx->skb->protocol) {
 		tx->sta = sta_info_get_bss(sdata, hdr->addr1);
 	}
-- 
1.8.0.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames
  2013-09-29 19:39 [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing Felix Fietkau
@ 2013-09-29 19:39 ` Felix Fietkau
  2013-09-30  9:10   ` Johannes Berg
  2013-09-30  9:31 ` [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing Johannes Berg
  1 sibling, 1 reply; 6+ messages in thread
From: Felix Fietkau @ 2013-09-29 19:39 UTC (permalink / raw)
  To: linux-wireless; +Cc: johannes

When clients are idle for too long, hostapd sends nullfunc frames for
probing. When those are acked by the client, the idle time needs to be
updated.

To make this work (and to avoid unnecessary probing), update sta->last_rx
whenever an ACK was received for a tx packet. Only do this if the flag
IEEE80211_HW_REPORTS_TX_ACK_STATUS is set.

Cc: stable@vger.kernel.org
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 net/mac80211/status.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index 368837f..78dc2e9 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -180,6 +180,9 @@ static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb)
 	struct ieee80211_local *local = sta->local;
 	struct ieee80211_sub_if_data *sdata = sta->sdata;
 
+	if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
+		sta->last_rx = jiffies;
+
 	if (ieee80211_is_data_qos(mgmt->frame_control)) {
 		struct ieee80211_hdr *hdr = (void *) skb->data;
 		u8 *qc = ieee80211_get_qos_ctl(hdr);
-- 
1.8.0.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames
  2013-09-29 19:39 ` [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames Felix Fietkau
@ 2013-09-30  9:10   ` Johannes Berg
  2013-09-30  9:46     ` Felix Fietkau
  0 siblings, 1 reply; 6+ messages in thread
From: Johannes Berg @ 2013-09-30  9:10 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: linux-wireless

On Sun, 2013-09-29 at 21:39 +0200, Felix Fietkau wrote:
> When clients are idle for too long, hostapd sends nullfunc frames for
> probing. When those are acked by the client, the idle time needs to be
> updated.
> 
> To make this work (and to avoid unnecessary probing), update sta->last_rx
> whenever an ACK was received for a tx packet. Only do this if the flag
> IEEE80211_HW_REPORTS_TX_ACK_STATUS is set.

Why that last bit? If we got an ack status, wouldn't it be OK to do
either way? Or are you saying drivers are lying more often than not
otherwise?

johannes


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing
  2013-09-29 19:39 [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing Felix Fietkau
  2013-09-29 19:39 ` [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames Felix Fietkau
@ 2013-09-30  9:31 ` Johannes Berg
  1 sibling, 0 replies; 6+ messages in thread
From: Johannes Berg @ 2013-09-30  9:31 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: linux-wireless

On Sun, 2013-09-29 at 21:39 +0200, Felix Fietkau wrote:
> This allows calls for clients in AP_VLANs (e.g. for 4-addr) to succeed

Applied.

johannes


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames
  2013-09-30  9:10   ` Johannes Berg
@ 2013-09-30  9:46     ` Felix Fietkau
  2013-09-30 10:34       ` Johannes Berg
  0 siblings, 1 reply; 6+ messages in thread
From: Felix Fietkau @ 2013-09-30  9:46 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless

On 2013-09-30 11:10 AM, Johannes Berg wrote:
> On Sun, 2013-09-29 at 21:39 +0200, Felix Fietkau wrote:
>> When clients are idle for too long, hostapd sends nullfunc frames for
>> probing. When those are acked by the client, the idle time needs to be
>> updated.
>> 
>> To make this work (and to avoid unnecessary probing), update sta->last_rx
>> whenever an ACK was received for a tx packet. Only do this if the flag
>> IEEE80211_HW_REPORTS_TX_ACK_STATUS is set.
> 
> Why that last bit? If we got an ack status, wouldn't it be OK to do
> either way? Or are you saying drivers are lying more often than not
> otherwise?
I added that just in case, some drivers might not be fully reliable wrt.
reporting the ACK status.

- Felix

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames
  2013-09-30  9:46     ` Felix Fietkau
@ 2013-09-30 10:34       ` Johannes Berg
  0 siblings, 0 replies; 6+ messages in thread
From: Johannes Berg @ 2013-09-30 10:34 UTC (permalink / raw)
  To: Felix Fietkau; +Cc: linux-wireless

On Mon, 2013-09-30 at 11:46 +0200, Felix Fietkau wrote:
> On 2013-09-30 11:10 AM, Johannes Berg wrote:
> > On Sun, 2013-09-29 at 21:39 +0200, Felix Fietkau wrote:
> >> When clients are idle for too long, hostapd sends nullfunc frames for
> >> probing. When those are acked by the client, the idle time needs to be
> >> updated.
> >> 
> >> To make this work (and to avoid unnecessary probing), update sta->last_rx
> >> whenever an ACK was received for a tx packet. Only do this if the flag
> >> IEEE80211_HW_REPORTS_TX_ACK_STATUS is set.
> > 
> > Why that last bit? If we got an ack status, wouldn't it be OK to do
> > either way? Or are you saying drivers are lying more often than not
> > otherwise?
> I added that just in case, some drivers might not be fully reliable wrt.
> reporting the ACK status.

Ok, I'll apply it.

johannes


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-09-30 10:34 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-29 19:39 [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing Felix Fietkau
2013-09-29 19:39 ` [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames Felix Fietkau
2013-09-30  9:10   ` Johannes Berg
2013-09-30  9:46     ` Felix Fietkau
2013-09-30 10:34       ` Johannes Berg
2013-09-30  9:31 ` [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing Johannes Berg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.