2019-08-09 17:52:42

by Ben Greear

[permalink] [raw]
Subject: [PATCH 2/2] mac80211: add assoc-at support.

From: Ben Greear <[email protected]>

Report timestamp for when sta becomes associated.

Signed-off-by: Ben Greear <[email protected]>
---
net/mac80211/sta_info.c | 3 +++
net/mac80211/sta_info.h | 2 ++
2 files changed, 5 insertions(+)

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index cd88c8872372..f0820f058b5f 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
case IEEE80211_STA_ASSOC:
if (sta->sta_state == IEEE80211_STA_AUTH) {
set_bit(WLAN_STA_ASSOC, &sta->_flags);
+ sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
ieee80211_recalc_min_chandef(sta->sdata);
if (!sta->sta.support_p2p_ps)
ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
@@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
+ BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);

if (sdata->vif.type == NL80211_IFTYPE_STATION) {
@@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
}

sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
+ sinfo->assoc_at_ms = sta->assoc_at_ms;
sinfo->inactive_time =
jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));

diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index bb02d5fac7ba..906b11acb0e8 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
* the station when it leaves powersave or polls for frames
* @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
* @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
+ * @assoc_at_ms: time (in ms) of last association
* @last_connected: time (in seconds) when a station got connected
* @last_seq_ctrl: last received seq/frag number from this STA (per TID
* plus one for non-QoS frames)
@@ -565,6 +566,7 @@ struct sta_info {
unsigned long driver_buffered_tids;
unsigned long txq_buffered_tids;

+ unsigned long assoc_at_ms;
long last_connected;

/* Updated from RX path only, no locking requirements */
--
2.20.1


2019-08-16 04:30:22

by Sebastian Gottschall

[permalink] [raw]
Subject: Re: [PATCH 2/2] mac80211: add assoc-at support.

is this feature neccessary? we already have the information of the assoc
duration time. so its easy to calculate the assoc timestamp using the
current time without any patch
do i miss something here?

Am 09.08.2019 um 19:46 schrieb [email protected]:
> From: Ben Greear <[email protected]>
>
> Report timestamp for when sta becomes associated.
>
> Signed-off-by: Ben Greear <[email protected]>
> ---
> net/mac80211/sta_info.c | 3 +++
> net/mac80211/sta_info.h | 2 ++
> 2 files changed, 5 insertions(+)
>
> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
> index cd88c8872372..f0820f058b5f 100644
> --- a/net/mac80211/sta_info.c
> +++ b/net/mac80211/sta_info.c
> @@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
> case IEEE80211_STA_ASSOC:
> if (sta->sta_state == IEEE80211_STA_AUTH) {
> set_bit(WLAN_STA_ASSOC, &sta->_flags);
> + sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
> ieee80211_recalc_min_chandef(sta->sdata);
> if (!sta->sta.support_p2p_ps)
> ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
> @@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
> BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
> BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
> BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
> + BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
> BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
>
> if (sdata->vif.type == NL80211_IFTYPE_STATION) {
> @@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
> }
>
> sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
> + sinfo->assoc_at_ms = sta->assoc_at_ms;
> sinfo->inactive_time =
> jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
>
> diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
> index bb02d5fac7ba..906b11acb0e8 100644
> --- a/net/mac80211/sta_info.h
> +++ b/net/mac80211/sta_info.h
> @@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
> * the station when it leaves powersave or polls for frames
> * @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
> * @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
> + * @assoc_at_ms: time (in ms) of last association
> * @last_connected: time (in seconds) when a station got connected
> * @last_seq_ctrl: last received seq/frag number from this STA (per TID
> * plus one for non-QoS frames)
> @@ -565,6 +566,7 @@ struct sta_info {
> unsigned long driver_buffered_tids;
> unsigned long txq_buffered_tids;
>
> + unsigned long assoc_at_ms;
> long last_connected;
>
> /* Updated from RX path only, no locking requirements */

2019-08-16 13:04:58

by Ben Greear

[permalink] [raw]
Subject: Re: [PATCH 2/2] mac80211: add assoc-at support.


On 08/15/2019 09:09 PM, Sebastian Gottschall wrote:
> is this feature neccessary? we already have the information of the assoc duration time. so its easy to calculate the assoc timestamp using the current time without any patch
> do i miss something here?

The current reported timer is 1-sec resolution, and I need better precision so I can
know exactly how long a station was off the air while trying to roam, for instance.

Thanks,
Ben

>
> Am 09.08.2019 um 19:46 schrieb [email protected]:
>> From: Ben Greear <[email protected]>
>>
>> Report timestamp for when sta becomes associated.
>>
>> Signed-off-by: Ben Greear <[email protected]>
>> ---
>> net/mac80211/sta_info.c | 3 +++
>> net/mac80211/sta_info.h | 2 ++
>> 2 files changed, 5 insertions(+)
>>
>> diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
>> index cd88c8872372..f0820f058b5f 100644
>> --- a/net/mac80211/sta_info.c
>> +++ b/net/mac80211/sta_info.c
>> @@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
>> case IEEE80211_STA_ASSOC:
>> if (sta->sta_state == IEEE80211_STA_AUTH) {
>> set_bit(WLAN_STA_ASSOC, &sta->_flags);
>> + sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
>> ieee80211_recalc_min_chandef(sta->sdata);
>> if (!sta->sta.support_p2p_ps)
>> ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
>> @@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
>> BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
>> BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
>> BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
>> + BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
>> BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
>> if (sdata->vif.type == NL80211_IFTYPE_STATION) {
>> @@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
>> }
>> sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
>> + sinfo->assoc_at_ms = sta->assoc_at_ms;
>> sinfo->inactive_time =
>> jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
>> diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
>> index bb02d5fac7ba..906b11acb0e8 100644
>> --- a/net/mac80211/sta_info.h
>> +++ b/net/mac80211/sta_info.h
>> @@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
>> * the station when it leaves powersave or polls for frames
>> * @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
>> * @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
>> + * @assoc_at_ms: time (in ms) of last association
>> * @last_connected: time (in seconds) when a station got connected
>> * @last_seq_ctrl: last received seq/frag number from this STA (per TID
>> * plus one for non-QoS frames)
>> @@ -565,6 +566,7 @@ struct sta_info {
>> unsigned long driver_buffered_tids;
>> unsigned long txq_buffered_tids;
>> + unsigned long assoc_at_ms;
>> long last_connected;
>> /* Updated from RX path only, no locking requirements */
>

--
Ben Greear <[email protected]>
Candela Technologies Inc http://www.candelatech.com