| --- a/wpa_supplicant/ap.c |
| +++ b/wpa_supplicant/ap.c |
| @@ -1611,15 +1611,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 */ |
| |