]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DFS: Fix overlapped() function to check only DFS channels
authorJanusz Dziedzic <janusz.dziedzic@tieto.com>
Sat, 26 Oct 2013 13:30:42 +0000 (16:30 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 26 Oct 2013 14:48:46 +0000 (17:48 +0300)
This fixes a problem when operating on non-DFS channel and receiving a
radar event for that channel. Previously, we would have decided to
switch channels.

Signed-hostap: Janusz Dziedzic <janusz.dziedzic@tieto.com>

src/ap/dfs.c

index 3abcf5b3224be5a3584b584723890603207596aa..27048a3e4d0f48134b85795d8d4f4f952c42c2b9 100644 (file)
@@ -417,14 +417,15 @@ static int dfs_are_channels_overlapped(struct hostapd_data *hapd, int freq,
        u8 radar_chan;
        int res = 0;
 
-       if (hapd->iface->freq == freq)
-               res++;
-
        /* Our configuration */
        mode = hapd->iface->current_mode;
        start_chan_idx = dfs_get_start_chan_idx(hapd);
        n_chans = dfs_get_used_n_chans(hapd);
 
+       /* Check we are on DFS channel(s) */
+       if (!dfs_check_chans_radar(hapd, start_chan_idx, n_chans))
+               return 0;
+
        /* Reported via radar event */
        switch (chan_width) {
        case CHAN_WIDTH_20_NOHT:
@@ -454,6 +455,8 @@ static int dfs_are_channels_overlapped(struct hostapd_data *hapd, int freq,
 
        for (i = 0; i < n_chans; i++) {
                chan = &mode->channels[start_chan_idx + i];
+               if (!(chan->flag & HOSTAPD_CHAN_RADAR))
+                       continue;
                for (j = 0; j < radar_n_chans; j++) {
                        wpa_printf(MSG_DEBUG, "checking our: %d, radar: %d",
                                   chan->chan, radar_chan + j * 4);