Search Linux Wireless

[RFC] mac80211: Wait with enabling beacons on DFS channels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,
  Basic DFS functionality requires that when we change to radar
enabled channels we need to wait and listen before we can send
beacons/frames -> Channel Availability Check (CAC).
There is a case when we can switch to it immediately if we have
been monitoring it off_channel for specific time. This is bit
more complicated and doesn't need to be implemented in the first 
place because it's sort of functional optimization.

Anyway there is a need for mechanism to control when to enable
beacons if we switch to radar channel.

Pseudo-code-diff bellow is an example for ath9k where we could enable
beacons at once or fire a worker to re-enable it after CAC expires
if radar hasn't been detected. In theory we need only to disable
beacons because we shouldn't get any directed frames we could reply
to and stations anyway can't probe directly. In practice to be 
sure it couldn't be probably done with making rx filters more 
restrictive during CAC period. Maybe there are other ways as well.

--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c 
@@ -285,8 +285,14 @@
 	ath9k_hw_set_interrupts(ah, ah->imask);
 
 	if (!(sc->sc_flags & (SC_OP_OFFCHANNEL))) {
-		if (sc->sc_flags & SC_OP_BEACONS)
-			ath_beacon_config(sc, NULL);
+
+		if (sc->sc_flags & SC_OP_BEACONS) {
+			if (channel->flags & IEEE80211_CHAN_RADAR 
+                            && !(channel->flags & IEEE80211_CHAN_NOL_FREE))
+				ieee80211_queue_delayed_work
+                                      (sc->hw, &sc->dfs_wait_cac_work, 0);
+			else
+				ath_beacon_config(sc, NULL);
+		}
+
 		ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
 		ath_start_ani(common);
 	}



Problem with this solution is that every driver would need to do
their own timers and state machines to get this functionality which
is shared by all.
I don't know about other driver's structures but maybe a better way
would be to implement mac80211 command to disable/enable beacons and
set rx filters which every driver supporting DFS would have to implement.
Mac80211 would have then timer which would control when to enable
beacons. I guess Non Occupancy List (NOL) would be handled there as
well so all the DFS timers could be in the same place.

Any comments?


Br,
Wojtek
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux