Message ID | CABPxzYKPhgW6-ugi8kaO8sDvTKm-ScAOOXWavuTNo4w4+WS+6g@mail.gmail.com (mailing list archive) |
---|---|
State | RFC |
Delegated to: | Johannes Berg |
Headers | show |
On Thu, Mar 19, 2015 at 1:37 PM, Krishna Chaitanya <chaitanya.mgit@gmail.com> wrote: > Hi, > > In the Regulatory and DFS wiki it is mentioned that > beacon hints are not processed for DFS channels. > But i could not find the related piece of code which > does this. > > So in DFS channels can we process beacon hints? > Assuming that if AP is beaconing then there is no > RADAR in that channel. But how do we handle > channel switch (if we dont disconnect) then that > channel is enabled for active scan? > (or) > should be we have something like this: > > --- > > net/wireless/reg.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/wireless/reg.c b/net/wireless/reg.c > index 8c6cf52..25b3173 100644 > --- a/net/wireless/reg.c > +++ b/net/wireless/reg.c > @@ -1384,7 +1384,8 @@ static void handle_reg_beacon(struct wiphy > *wiphy, unsigned int chan_idx, > chan_before.center_freq = chan->center_freq; > chan_before.flags = chan->flags; > > - if (chan->flags & IEEE80211_CHAN_NO_IR) { > + if (!(chan->flags & IEEE80211_CHAN_RADAR) && > + (chan->flags & IEEE80211_CHAN_NO_IR)) { > chan->flags &= ~IEEE80211_CHAN_NO_IR; > channel_changed = true; > } > Luis, Any comments on this? We are seeing the below behavior: Channel 60 in US: Initially marked as NO_IR found a beacon: channel changed to ~NO_IR. AP found a radar, issued CSA and move to other channel. STA disconnected and does active scan in channel 60.. Now, a) we can disable beacons hints for DFS channels as per wiki, so all DFS channels will be marked as NO_IR. b) up on receiving the ECSA/CSA mark the channel as NO_IR. Let me know your thoughts. Regards, Chaitanya T K.
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 8c6cf52..25b3173 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -1384,7 +1384,8 @@ static void handle_reg_beacon(struct wiphy *wiphy, unsigned int chan_idx, chan_before.center_freq = chan->center_freq; chan_before.flags = chan->flags; - if (chan->flags & IEEE80211_CHAN_NO_IR) { + if (!(chan->flags & IEEE80211_CHAN_RADAR) && + (chan->flags & IEEE80211_CHAN_NO_IR)) { chan->flags &= ~IEEE80211_CHAN_NO_IR; channel_changed = true;