aboutsummaryrefslogtreecommitdiff
path: root/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch
blob: 4a5852af2e45584296a601471c06f32281174b92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From: Felix Fietkau <nbd@nbd.name>
Date: Mon, 28 Jan 2019 21:36:44 +0100
Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on
 mesh interfaces

--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -1846,17 +1846,37 @@ 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 (ret)
-		return ret;
+	if (!(wpa_s->ap_iface && wpa_s->ap_iface->bss[0]) &&
+	    !(wpa_s->ifmsh && wpa_s->ifmsh->bss[0]))
+		return -1;
 
 	settings.link_id = -1;
 
-	return ap_switch_channel(wpa_s, &settings);
+	ret = __ap_ctrl_iface_chanswitch(wpa_s->ap_iface, &settings);
+	if (ret)
+		return ret;
+
+	return __ap_ctrl_iface_chanswitch(wpa_s->ifmsh, &settings);
 }
 #endif /* CONFIG_CTRL_IFACE */