wpa_supplicant: fix calling channel switch via wpa_cli on mesh interfaces
authorFelix Fietkau <nbd@nbd.name>
Mon, 28 Jan 2019 20:36:44 +0000 (21:36 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 29 Jan 2019 10:27:13 +0000 (11:27 +0100)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch [new file with mode: 0644]

diff --git a/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch b/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch
new file mode 100644 (file)
index 0000000..b9a0b23
--- /dev/null
@@ -0,0 +1,39 @@
+--- 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 */