2013-09-29 19:39:38

by Felix Fietkau

[permalink] [raw]
Subject: [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing

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

Cc: [email protected]
Signed-off-by: Felix Fietkau <[email protected]>
---
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



2013-09-30 09:10:51

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames

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


2013-09-29 19:39:38

by Felix Fietkau

[permalink] [raw]
Subject: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames

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: [email protected]
Signed-off-by: Felix Fietkau <[email protected]>
---
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


2013-09-30 09:46:10

by Felix Fietkau

[permalink] [raw]
Subject: Re: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames

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

2013-09-30 10:34:25

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3.12 2/2] mac80211: update sta->last_rx on acked tx frames

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


2013-09-30 09:31:15

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH 3.12 1/2] mac80211: use sta_info_get_bss() for nl80211 tx and client probing

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