2011-08-21 15:43:48

by Mohammed Shafi Shajakhan

[permalink] [raw]
Subject: [RFC] mac80211: Add a debug entry to track last beacon

From: Mohammed Shafi Shajakhan <[email protected]>

when we obtain time_since_last_beacon_ms parameter from the mac80211
debugfs it should be always less than 100, otherwise we are missing
beacons.

Signed-off-by: Mohammed Shafi Shajakhan <[email protected]>
---
net/mac80211/debugfs_netdev.c | 14 ++++++++++++++
net/mac80211/ieee80211_i.h | 3 +++
net/mac80211/mlme.c | 2 ++
3 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index 9ea7c0d..18e1bfc 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -157,6 +157,19 @@ IEEE80211_IF_FILE(aid, u.mgd.aid, DEC);
IEEE80211_IF_FILE(last_beacon, u.mgd.last_beacon_signal, DEC);
IEEE80211_IF_FILE(ave_beacon, u.mgd.ave_beacon_signal, DEC_DIV_16);

+static ssize_t ieee80211_if_fmt_time_since_last_beacon_ms(
+ const struct ieee80211_sub_if_data *sdata, char *buf, int buflen)
+{
+ const struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
+ unsigned long time_since_last_beacon;
+
+ time_since_last_beacon = jiffies_to_msecs(jiffies -
+ ifmgd->last_beacon_timestamp);
+ return scnprintf(buf, buflen, "%lu\n",
+ time_since_last_beacon);
+}
+__IEEE80211_IF_FILE(time_since_last_beacon_ms, NULL);
+
static int ieee80211_set_smps(struct ieee80211_sub_if_data *sdata,
enum ieee80211_smps_mode smps_mode)
{
@@ -394,6 +407,7 @@ static void add_sta_files(struct ieee80211_sub_if_data *sdata)

DEBUGFS_ADD(bssid);
DEBUGFS_ADD(aid);
+ DEBUGFS_ADD(time_since_last_beacon_ms);
DEBUGFS_ADD(last_beacon);
DEBUGFS_ADD(ave_beacon);
DEBUGFS_ADD_MODE(smps, 0600);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index ea74190..ec532a5 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -410,6 +410,9 @@ struct ieee80211_if_managed {

u8 use_4addr;

+ /* timestamp of the last Beacon frame in the current BSS. */
+ unsigned long last_beacon_timestamp;
+
/* Signal strength from the last Beacon frame in the current BSS. */
int last_beacon_signal;

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index d6470c7..13ee1b6 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1758,6 +1758,8 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
if (memcmp(bssid, mgmt->bssid, ETH_ALEN) != 0)
return;

+ ifmgd->last_beacon_timestamp = jiffies;
+
/* Track average RSSI from the Beacon frames of the current AP */
ifmgd->last_beacon_signal = rx_status->signal;
if (ifmgd->flags & IEEE80211_STA_RESET_SIGNAL_AVE) {
--
1.7.0.4



2011-08-22 13:59:30

by Mohammed Shafi Shajakhan

[permalink] [raw]
Subject: Re: [RFC] mac80211: Add a debug entry to track last beacon

On Sunday 21 August 2011 09:28 PM, mohammed wrote:
> On Sunday 21 August 2011 09:13 PM, Mohammed Shafi Shajakhan wrote:
>> From: Mohammed Shafi Shajakhan<[email protected]>
>>
>> when we obtain time_since_last_beacon_ms parameter from the mac80211
>> debugfs it should be always less than 100, otherwise we are missing
>> beacons.
>
> made a mistake in the commit-log
> 'time_since_last_beacon_ms' should be always less than the configured
> beacon interval in the AP, otherwise we are missing beacons


also the case of station not getting associated should be taken care.
will sending a proper patch addressing the above two. thanks!

>
>>
>> Signed-off-by: Mohammed Shafi Shajakhan<[email protected]>
>

2011-08-21 15:58:17

by Mohammed Shafi Shajakhan

[permalink] [raw]
Subject: Re: [RFC] mac80211: Add a debug entry to track last beacon

On Sunday 21 August 2011 09:13 PM, Mohammed Shafi Shajakhan wrote:
> From: Mohammed Shafi Shajakhan<[email protected]>
>
> when we obtain time_since_last_beacon_ms parameter from the mac80211
> debugfs it should be always less than 100, otherwise we are missing
> beacons.

made a mistake in the commit-log
'time_since_last_beacon_ms' should be always less than the configured
beacon interval in the AP, otherwise we are missing beacons

>
> Signed-off-by: Mohammed Shafi Shajakhan<[email protected]>
> ---
> net/mac80211/debugfs_netdev.c | 14 ++++++++++++++
> net/mac80211/ieee80211_i.h | 3 +++
> net/mac80211/mlme.c | 2 ++
> 3 files changed, 19 insertions(+), 0 deletions(-)
>
> diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
> index 9ea7c0d..18e1bfc 100644
> --- a/net/mac80211/debugfs_netdev.c
> +++ b/net/mac80211/debugfs_netdev.c
> @@ -157,6 +157,19 @@ IEEE80211_IF_FILE(aid, u.mgd.aid, DEC);
> IEEE80211_IF_FILE(last_beacon, u.mgd.last_beacon_signal, DEC);
> IEEE80211_IF_FILE(ave_beacon, u.mgd.ave_beacon_signal, DEC_DIV_16);
>
> +static ssize_t ieee80211_if_fmt_time_since_last_beacon_ms(
> + const struct ieee80211_sub_if_data *sdata, char *buf, int buflen)
> +{
> + const struct ieee80211_if_managed *ifmgd =&sdata->u.mgd;
> + unsigned long time_since_last_beacon;
> +
> + time_since_last_beacon = jiffies_to_msecs(jiffies -
> + ifmgd->last_beacon_timestamp);
> + return scnprintf(buf, buflen, "%lu\n",
> + time_since_last_beacon);
> +}
> +__IEEE80211_IF_FILE(time_since_last_beacon_ms, NULL);
> +
> static int ieee80211_set_smps(struct ieee80211_sub_if_data *sdata,
> enum ieee80211_smps_mode smps_mode)
> {
> @@ -394,6 +407,7 @@ static void add_sta_files(struct ieee80211_sub_if_data *sdata)
>
> DEBUGFS_ADD(bssid);
> DEBUGFS_ADD(aid);
> + DEBUGFS_ADD(time_since_last_beacon_ms);
> DEBUGFS_ADD(last_beacon);
> DEBUGFS_ADD(ave_beacon);
> DEBUGFS_ADD_MODE(smps, 0600);
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index ea74190..ec532a5 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -410,6 +410,9 @@ struct ieee80211_if_managed {
>
> u8 use_4addr;
>
> + /* timestamp of the last Beacon frame in the current BSS. */
> + unsigned long last_beacon_timestamp;
> +
> /* Signal strength from the last Beacon frame in the current BSS. */
> int last_beacon_signal;
>
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index d6470c7..13ee1b6 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -1758,6 +1758,8 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
> if (memcmp(bssid, mgmt->bssid, ETH_ALEN) != 0)
> return;
>
> + ifmgd->last_beacon_timestamp = jiffies;
> +
> /* Track average RSSI from the Beacon frames of the current AP */
> ifmgd->last_beacon_signal = rx_status->signal;
> if (ifmgd->flags& IEEE80211_STA_RESET_SIGNAL_AVE) {