From: Johannes Berg <johannes@sipsolutions.net>
To: Helmut Schaa <helmut.schaa@googlemail.com>
Cc: linux-wireless@vger.kernel.org, Ivo van Doorn <ivdoorn@gmail.com>,
Gertjan van Wingerde <gwingerde@gmail.com>
Subject: Re: rt2x00 & mac80211: correct usage of ieee80211_beacon_get_tim?
Date: Thu, 24 Jun 2010 17:51:54 +0200 [thread overview]
Message-ID: <1277394714.3870.8.camel@jlt3.sipsolutions.net> (raw)
In-Reply-To: <201006241521.47623.helmut.schaa@googlemail.com>
On Thu, 2010-06-24 at 15:21 +0200, Helmut Schaa wrote:
> I've just reviewed the beacon handling in rt2x00 in AP mode and experienced
> some inconsistencies. The DTIM count is not correctly updated: sometimes
> multiple beacons are sent out using the same DTIM count.
Er, so there's your problem already.
> rt2x00 calls ieee80211_beacon_get_tim right after the current beacon was
> sent out to fetch the next one. However, rt2x00 also implements the set_tim
> callback and updates the beacon in each call to set_tim. As far as I
> understood the code in mac80211 the set_tim callback is called when the
> first frame for a powersaving station gets queued.
>
> Since every call to ieee80211_beacon_get_tim updates the DTIM count the
> following can happen (assuming a DTIM period of 2):
>
> - the hw sends out the current beacon (DTIM count == 0)
> - call to ieee80211_beacon_get_tim fetches the next beacon (DTIM count == 1)
> - the first frame for a PS STA gets queued -> set_tim
> - again call ieee80211_beacon_get_tim (DTIM count == 0)
> - hw sends out the beacon with incorrect DTIM count
>
> A proper way of fixing this issue would be not to use the set_tim callback but
> just fetch the next beacon right before it gets send out (like ath* does).
> However, that's not easily possible with rt2x00 devices older then rt2800 as
> they only generate beacon_done interrupts (which is obviously too late for
> fetching the current beacon ;) ).
>
> So, is the current implementation in rt2x00 supposed to work and mac80211
> needs fixing?
>
> Could we add a parameter to ieee80211_beacon_get_tim that indicates if a _new_
> beacon should be generated or if the _current_ beacon should be updated in
> response to the set_tim callback?
>
> Any other ideas?
No, your entire description makes no sense. There are two possibilities:
a) You get a new beacon from mac80211 each time you send it. Then you
don't have to worry about the set_tim() callback at all -- don't
assign it!
b) You need to get a new beacon frame from mac80211 only when it
changes. You can do this from set_tim(). HOWEVER: since you're not
getting a new one from mac80211 all the time anyway, you NEED to
have the driver or firmware overwrite the DTIM count, like b43's
firmware for example will do.
Ok so maybe there are more possibilities like the firmware filling the
TIM IE differently and you would use set_tim() differently then.
However, *fundamentally*, any time you don't get a new skb from mac80211
for each transmitted beacon you NEED to overwrite the DTIM count in it.
johannes
next prev parent reply other threads:[~2010-06-24 15:51 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-24 13:21 rt2x00 & mac80211: correct usage of ieee80211_beacon_get_tim? Helmut Schaa
2010-06-24 14:32 ` John W. Linville
2010-06-24 15:51 ` Johannes Berg [this message]
2010-06-24 15:53 ` Johannes Berg
2010-06-24 15:54 ` Johannes Berg
2010-06-24 16:20 ` Helmut Schaa
2010-06-25 16:01 ` Helmut Schaa
2010-06-26 15:32 ` John W. Linville
2010-06-27 8:21 ` Johannes Berg
2010-06-27 19:00 ` Helmut Schaa
2010-07-02 17:12 ` Johannes Berg
2010-07-02 17:59 ` Helmut Schaa
2010-07-02 18:06 ` Johannes Berg
2010-07-02 18:20 ` Helmut Schaa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1277394714.3870.8.camel@jlt3.sipsolutions.net \
--to=johannes@sipsolutions.net \
--cc=gwingerde@gmail.com \
--cc=helmut.schaa@googlemail.com \
--cc=ivdoorn@gmail.com \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).