2009-03-03 04:49:12

by Sujith

[permalink] [raw]
Subject: [PATCH] mac80211: Update IBSS beacon timestamp properly

In IBSS mode, the beacon timestamp has to be filled with the
BSS's timestamp when joining, and set to zero when creating
a new BSS.

Signed-off-by: Sujith <[email protected]>
---
net/mac80211/ibss.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index a96ce9d..f4becc1 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -64,7 +64,7 @@ static int __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
const int freq,
const size_t supp_rates_len,
const u8 *supp_rates,
- const u16 capability)
+ const u16 capability, u64 tsf)
{
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
struct ieee80211_local *local = sdata->local;
@@ -127,6 +127,7 @@ static int __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
memcpy(mgmt->bssid, ifibss->bssid, ETH_ALEN);
mgmt->u.beacon.beacon_int =
cpu_to_le16(local->hw.conf.beacon_int);
+ mgmt->u.beacon.timestamp = cpu_to_le64(tsf);
mgmt->u.beacon.capab_info = cpu_to_le16(capability);

pos = skb_put(skb, 2 + ifibss->ssid_len);
@@ -199,7 +200,8 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
bss->cbss.beacon_interval,
bss->cbss.channel->center_freq,
bss->supp_rates_len, bss->supp_rates,
- bss->cbss.capability);
+ bss->cbss.capability,
+ bss->cbss.tsf);
}

static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
@@ -502,7 +504,7 @@ static int ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
bssid, local->hw.conf.beacon_int,
local->hw.conf.channel->center_freq,
sband->n_bitrates, supp_rates,
- capability);
+ capability, 0);
}

static int ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
--
1.6.1



2009-03-08 12:52:55

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Update IBSS beacon timestamp properly

On Tue, 2009-03-03 at 10:15 +0530, Sujith wrote:
> In IBSS mode, the beacon timestamp has to be filled with the
> BSS's timestamp when joining, and set to zero when creating
> a new BSS.

I don't quite understand why, do we read it out again at any point?

johannes

> Signed-off-by: Sujith <[email protected]>
> ---
> net/mac80211/ibss.c | 8 +++++---
> 1 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
> index a96ce9d..f4becc1 100644
> --- a/net/mac80211/ibss.c
> +++ b/net/mac80211/ibss.c
> @@ -64,7 +64,7 @@ static int __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
> const int freq,
> const size_t supp_rates_len,
> const u8 *supp_rates,
> - const u16 capability)
> + const u16 capability, u64 tsf)
> {
> struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
> struct ieee80211_local *local = sdata->local;
> @@ -127,6 +127,7 @@ static int __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
> memcpy(mgmt->bssid, ifibss->bssid, ETH_ALEN);
> mgmt->u.beacon.beacon_int =
> cpu_to_le16(local->hw.conf.beacon_int);
> + mgmt->u.beacon.timestamp = cpu_to_le64(tsf);
> mgmt->u.beacon.capab_info = cpu_to_le16(capability);
>
> pos = skb_put(skb, 2 + ifibss->ssid_len);
> @@ -199,7 +200,8 @@ static int ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
> bss->cbss.beacon_interval,
> bss->cbss.channel->center_freq,
> bss->supp_rates_len, bss->supp_rates,
> - bss->cbss.capability);
> + bss->cbss.capability,
> + bss->cbss.tsf);
> }
>
> static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
> @@ -502,7 +504,7 @@ static int ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
> bssid, local->hw.conf.beacon_int,
> local->hw.conf.channel->center_freq,
> sband->n_bitrates, supp_rates,
> - capability);
> + capability, 0);
> }
>
> static int ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part

2009-03-08 13:04:51

by Sujith

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Update IBSS beacon timestamp properly

Johannes Berg wrote:
> On Tue, 2009-03-03 at 10:15 +0530, Sujith wrote:
> > In IBSS mode, the beacon timestamp has to be filled with the
> > BSS's timestamp when joining, and set to zero when creating
> > a new BSS.
>
> I don't quite understand why, do we read it out again at any point?
>

Drivers do, when they do a beacon_get(). And the timestamp in the
beacon is used to calculate TBTT.

Sujith

2009-03-08 13:08:12

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Update IBSS beacon timestamp properly

On Sun, 2009-03-08 at 18:34 +0530, Sujith wrote:
> Johannes Berg wrote:
> > On Tue, 2009-03-03 at 10:15 +0530, Sujith wrote:
> > > In IBSS mode, the beacon timestamp has to be filled with the
> > > BSS's timestamp when joining, and set to zero when creating
> > > a new BSS.
> >
> > I don't quite understand why, do we read it out again at any point?
> >
>
> Drivers do, when they do a beacon_get(). And the timestamp in the
> beacon is used to calculate TBTT.

Oh ok.

johannes


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part