blob: ebc4408b8b6d781d9e9e2ae52bd73e61eee04f5a [file] [log] [blame]
developerd243af02023-12-21 14:49:33 +08001From 765215ac465b90e20c52dd48d51859d849834c80 Mon Sep 17 00:00:00 2001
developer2a209692023-08-14 20:23:42 +08002From: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
3Date: Tue, 8 Aug 2023 19:21:41 +0800
developerd243af02023-12-21 14:49:33 +08004Subject: [PATCH 33/54] mtk: hostapd: add back ht vht cap missing field before
developerdfb50982023-09-11 13:34:36 +08005 dfs channel fallback
developer2a209692023-08-14 20:23:42 +08006
7hostapd_event_ch_switch would set / clear ht_capab and vht_capab, based
8on the bandwidth of switched channel.
9For example, vht bw 160 support field would be cleared if we switch to
10non bw 160 channel.
11This design works fine with NON-DFS channel switch.
12However, for those DFS channels who require CAC, channel switch command
13calls hostapd_switch_channel_fallback instead of hostapd_switch_channel.
14This is simply restarting the interface not CHANNEL SWITCHING, so
15hostapd will not receive any ch_switch event from kernel.
16Therefore, the cleared field in vht_capab will not be set back to 1,
17even if we channel switch to dfs channel bw 160.
18
19Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com>
20---
21 src/ap/hostapd.c | 7 +++++++
22 1 file changed, 7 insertions(+)
23
24diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
developerd243af02023-12-21 14:49:33 +080025index a28466405..ec7677f6a 100644
developer2a209692023-08-14 20:23:42 +080026--- a/src/ap/hostapd.c
27+++ b/src/ap/hostapd.c
developerd243af02023-12-21 14:49:33 +080028@@ -4112,6 +4112,13 @@ hostapd_switch_channel_fallback(struct hostapd_iface *iface,
developer2a209692023-08-14 20:23:42 +080029 break;
30 }
31
32+ if ((iface->current_mode->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET) &&
33+ freq_params->bandwidth > 20)
34+ iface->conf->ht_capab |= HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET;
35+ if ((iface->current_mode->vht_capab & VHT_CAP_SUPP_CHAN_WIDTH_160MHZ) &&
36+ freq_params->bandwidth == 160)
37+ iface->conf->vht_capab |= VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
38+
39 iface->freq = freq_params->freq;
40 iface->conf->channel = freq_params->channel;
41 iface->conf->secondary_channel = freq_params->sec_channel_offset;
42--
432.18.0
44