diff mbox series

[2/2] mac80211: add assoc-at support.

Message ID 20190809174656.20872-2-greearb@candelatech.com (mailing list archive)
State Superseded
Delegated to: Johannes Berg
Headers show
Series [1/2] wireless: Support assoc-at timer in sta-info | expand

Commit Message

Ben Greear Aug. 9, 2019, 5:46 p.m. UTC
From: Ben Greear <greearb@candelatech.com>

Report timestamp for when sta becomes associated.

Signed-off-by: Ben Greear <greearb@candelatech.com>
---
 net/mac80211/sta_info.c | 3 +++
 net/mac80211/sta_info.h | 2 ++
 2 files changed, 5 insertions(+)

Comments

Sebastian Gottschall Aug. 16, 2019, 4:09 a.m. UTC | #1
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 greearb@candelatech.com:
> From: Ben Greear <greearb@candelatech.com>
>
> Report timestamp for when sta becomes associated.
>
> Signed-off-by: Ben Greear <greearb@candelatech.com>
> ---
>   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 Aug. 16, 2019, 1:04 p.m. UTC | #2
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 greearb@candelatech.com:
>> From: Ben Greear <greearb@candelatech.com>
>>
>> Report timestamp for when sta becomes associated.
>>
>> Signed-off-by: Ben Greear <greearb@candelatech.com>
>> ---
>>   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 */
>
diff mbox series

Patch

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 */