Check for driver's DFS offload capability before handling DFS
authorSunil Dutt <usdutt@qti.qualcomm.com>
Mon, 22 Sep 2014 09:06:01 +0000 (14:36 +0530)
committerJouni Malinen <j@w1.fi>
Mon, 22 Sep 2014 13:50:28 +0000 (16:50 +0300)
This fixes couple of code paths where the WPA_DRIVER_FLAGS_DFS_OFFLOAD
flag was not checked properly and unexpected DFS operations were
initiated (and failed) in case the driver handles all these steps.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
src/ap/beacon.c
src/ap/hostapd.c

index b3b6149..4cae0d9 100644 (file)
@@ -113,6 +113,10 @@ static u8 * hostapd_eid_pwr_constraint(struct hostapd_data *hapd, u8 *eid)
            hapd->iface->current_mode->mode != HOSTAPD_MODE_IEEE80211A)
                return eid;
 
+       /* Let host drivers add this IE if DFS support is offloaded */
+       if (hapd->iface->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD)
+               return eid;
+
        /*
         * There is no DFS support and power constraint was not directly
         * requested by config option.
index 26aca2b..59567dd 100644 (file)
@@ -1182,12 +1182,15 @@ int hostapd_setup_interface_complete(struct hostapd_iface *iface, int err)
                           iface->conf->channel, iface->freq);
 
 #ifdef NEED_AP_MLME
-               /* Check DFS */
-               res = hostapd_handle_dfs(iface);
-               if (res <= 0) {
-                       if (res < 0)
-                               goto fail;
-                       return res;
+               /* Handle DFS only if it is not offloaded to the driver */
+               if (!(iface->drv_flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD)) {
+                       /* Check DFS */
+                       res = hostapd_handle_dfs(iface);
+                       if (res <= 0) {
+                               if (res < 0)
+                                       goto fail;
+                               return res;
+                       }
                }
 #endif /* NEED_AP_MLME */