2019-04-15 17:05:46

by Ben Greear

[permalink] [raw]
Subject: [PATCH-v2 1/2] wireless: Support assoc-at-ms timer in sta-info

From: Ben Greear <[email protected]>

Report time stamp of when sta became associated.

Signed-off-by: Ben Greear <[email protected]>
---
include/net/cfg80211.h | 2 ++
include/uapi/linux/nl80211.h | 2 ++
net/wireless/nl80211.c | 1 +
3 files changed, 5 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index f49eb1464b7a..430501c09c01 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1268,6 +1268,7 @@ struct cfg80211_tid_stats {
* indicate the relevant values in this struct for them
* @connected_time: time(in secs) since a station is last connected
* @inactive_time: time since last station activity (tx/rx) in milliseconds
+ * @auth_at_ms: time in ms of the last assoc -> auth transition.
* @rx_bytes: bytes (size of MPDUs) received from this station
* @tx_bytes: bytes (size of MPDUs) transmitted to this station
* @llid: mesh local link id
@@ -1324,6 +1325,7 @@ struct station_info {
u64 filled;
u32 connected_time;
u32 inactive_time;
+ u64 auth_at_ms;
u64 rx_bytes;
u64 tx_bytes;
u16 llid;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 0f03cfcda965..8d0b7a88877c 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3079,6 +3079,7 @@ enum nl80211_sta_bss_param {
* @NL80211_STA_INFO_TX_DURATION: aggregate PPDU duration for all frames
* sent to the station (u64, usec)
* @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16)
+ * @NL80211_STA_INFO_AUTH_AT_MS: Timestamp of last assoc -> auth transition, in ms
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
@@ -3124,6 +3125,7 @@ enum nl80211_sta_info {
NL80211_STA_INFO_CONNECTED_TO_GATE,
NL80211_STA_INFO_TX_DURATION,
NL80211_STA_INFO_AIRTIME_WEIGHT,
+ NL80211_STA_INFO_AUTH_AT_MS,

/* keep last */
__NL80211_STA_INFO_AFTER_LAST,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index bcb432815c64..74be48c1ae02 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4763,6 +4763,7 @@ static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid,

PUT_SINFO(CONNECTED_TIME, connected_time, u32);
PUT_SINFO(INACTIVE_TIME, inactive_time, u32);
+ PUT_SINFO_U64(AUTH_AT_MS, auth_at_ms);

if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) |
BIT_ULL(NL80211_STA_INFO_RX_BYTES64)) &&
--
2.20.1



2019-04-15 17:05:48

by Ben Greear

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

From: Ben Greear <[email protected]>

Report 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 044120c45950..6dab7abe1603 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1980,6 +1980,7 @@ int sta_info_move_state(struct sta_info *sta,
break;
case IEEE80211_STA_AUTHORIZED:
if (sta->sta_state == IEEE80211_STA_ASSOC) {
+ sta->auth_at_ms = ktime_to_ms(ktime_get_real());
ieee80211_vif_inc_num_mcast(sta->sdata);
set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
ieee80211_check_fast_xmit(sta);
@@ -2197,6 +2198,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_AUTH_AT_MS) |
BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);

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

sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
+ sinfo->auth_at_ms = sta->auth_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 c5d557032be5..97777978b8f5 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -455,6 +455,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
+ * @auth_at_ms: time (in ms) of last assoc -> auth transition
* @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)
@@ -531,6 +532,7 @@ struct sta_info {
unsigned long driver_buffered_tids;
unsigned long txq_buffered_tids;

+ unsigned long auth_at_ms;
long last_connected;

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


2019-04-15 17:08:09

by Ben Greear

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

Please ignore, I edited the wrong files.

Go Monday!

Ben

On 4/15/19 10:05 AM, [email protected] wrote:
> From: Ben Greear <[email protected]>
>
> Report 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 044120c45950..6dab7abe1603 100644
> --- a/net/mac80211/sta_info.c
> +++ b/net/mac80211/sta_info.c
> @@ -1980,6 +1980,7 @@ int sta_info_move_state(struct sta_info *sta,
> break;
> case IEEE80211_STA_AUTHORIZED:
> if (sta->sta_state == IEEE80211_STA_ASSOC) {
> + sta->auth_at_ms = ktime_to_ms(ktime_get_real());
> ieee80211_vif_inc_num_mcast(sta->sdata);
> set_bit(WLAN_STA_AUTHORIZED, &sta->_flags);
> ieee80211_check_fast_xmit(sta);
> @@ -2197,6 +2198,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_AUTH_AT_MS) |
> BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
>
> if (sdata->vif.type == NL80211_IFTYPE_STATION) {
> @@ -2205,6 +2207,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
> }
>
> sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
> + sinfo->auth_at_ms = sta->auth_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 c5d557032be5..97777978b8f5 100644
> --- a/net/mac80211/sta_info.h
> +++ b/net/mac80211/sta_info.h
> @@ -455,6 +455,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
> + * @auth_at_ms: time (in ms) of last assoc -> auth transition
> * @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)
> @@ -531,6 +532,7 @@ struct sta_info {
> unsigned long driver_buffered_tids;
> unsigned long txq_buffered_tids;
>
> + unsigned long auth_at_ms;
> long last_connected;
>
> /* Updated from RX path only, no locking requirements */
>


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