OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -1363,15 +1363,35 @@ int ap_switch_channel(struct wpa_supplic
 
 
 #ifdef CONFIG_CTRL_IFACE
+
+static int __ap_ctrl_iface_chanswitch(struct hostapd_iface *iface,
+                                     struct csa_settings *settings)
+{
+#ifdef NEED_AP_MLME
+       if (!iface || !iface->bss[0])
+               return 0;
+
+       return hostapd_switch_channel(iface->bss[0], settings);
+#else
+       return -1;
+#endif
+}
+
+
 int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos)
 {
        struct csa_settings settings;
        int ret = hostapd_parse_csa_settings(pos, &settings);
 
+       if (!(wpa_s->ap_iface && wpa_s->ap_iface->bss[0]) &&
+           !(wpa_s->ifmsh && wpa_s->ifmsh->bss[0]))
+               return -1;
+
+       ret = __ap_ctrl_iface_chanswitch(wpa_s->ap_iface, &settings);
        if (ret)
                return ret;
 
-       return ap_switch_channel(wpa_s, &settings);
+       return __ap_ctrl_iface_chanswitch(wpa_s->ifmsh, &settings);
 }
 #endif /* CONFIG_CTRL_IFACE */