From 8db3881c7684059f89d06753c1c45224297b6b01 Mon Sep 17 00:00:00 2001 From: Aloka Dixit Date: Tue, 19 Apr 2022 11:04:04 -0700 Subject: [PATCH] EHT: Add operating channel width configuration Add new configuration options to configure EHT operating channel width and center frequency. Signed-off-by: Aloka Dixit Signed-off-by: Pradeep Kumar Chitrapu --- hostapd/config_file.c | 4 ++++ hostapd/hostapd.conf | 9 +++++++++ src/ap/ap_config.h | 20 ++++++++++++++++++++ src/ap/ctrl_iface_ap.c | 13 +++++++++++++ 4 files changed, 46 insertions(+) diff --git a/hostapd/config_file.c b/hostapd/config_file.c index a3ebfb2bc..b60517db2 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -4701,6 +4701,10 @@ static int hostapd_config_fill(struct hostapd_config *conf, #ifdef CONFIG_IEEE80211BE } else if (os_strcmp(buf, "ieee80211be") == 0) { conf->ieee80211be = atoi(pos); + } else if (os_strcmp(buf, "eht_oper_chwidth") == 0) { + conf->eht_oper_chwidth = atoi(pos); + } else if (os_strcmp(buf, "eht_oper_centr_freq_seg0_idx") == 0) { + conf->eht_oper_centr_freq_seg0_idx = atoi(pos); #endif /* CONFIG_IEEE80211BE */ } else { wpa_printf(MSG_ERROR, diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf index b24cd6ffb..64e8cb3e8 100644 --- a/hostapd/hostapd.conf +++ b/hostapd/hostapd.conf @@ -1000,6 +1000,15 @@ wmm_ac_vo_acm=0 #disable_11be: Boolean (0/1) to disable EHT for a specific BSS #disable_11be=0 +# EHT operating channel information; see matching he_* parameters for details. +# The field eht_oper_centr_freq_seg0_idx field is used to indicate center +# frequency of 40, 80, and 160 MHz bandwidth operation. +# In the 6 GHz band, eht_oper_chwidth is ignored and the channel width is +# derived from the configured operating class (IEEE P802.11be/D1.5, +# Annex E.1 - Country information and operating classes). +#eht_oper_chwidth +#eht_oper_centr_freq_seg0_idx + ##### IEEE 802.1X-2004 related configuration ################################## # Require IEEE 802.1X authorization diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index 05bc380a1..b6f2ee701 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -1117,11 +1117,19 @@ struct hostapd_config { #endif /* CONFIG_AIRTIME_POLICY */ int ieee80211be; +#ifdef CONFIG_IEEE80211BE + u8 eht_oper_chwidth; + u8 eht_oper_centr_freq_seg0_idx; +#endif /* CONFIG_IEEE80211BE */ }; static inline u8 hostapd_get_oper_chwidth(struct hostapd_config *conf) { +#ifdef CONFIG_IEEE80211BE + if (conf->ieee80211be) + return conf->eht_oper_chwidth; +#endif /* CONFIG_IEEE80211BE */ #ifdef CONFIG_IEEE80211AX if (conf->ieee80211ax) return conf->he_oper_chwidth; @@ -1132,6 +1140,10 @@ static inline u8 hostapd_get_oper_chwidth(struct hostapd_config *conf) static inline void hostapd_set_oper_chwidth(struct hostapd_config *conf, u8 oper_chwidth) { +#ifdef CONFIG_IEEE80211BE + if (conf->ieee80211be) + conf->eht_oper_chwidth = oper_chwidth; +#endif /* CONFIG_IEEE80211BE */ #ifdef CONFIG_IEEE80211AX if (conf->ieee80211ax) conf->he_oper_chwidth = oper_chwidth; @@ -1142,6 +1154,10 @@ hostapd_set_oper_chwidth(struct hostapd_config *conf, u8 oper_chwidth) static inline u8 hostapd_get_oper_centr_freq_seg0_idx(struct hostapd_config *conf) { +#ifdef CONFIG_IEEE80211BE + if (conf->ieee80211be) + return conf->eht_oper_centr_freq_seg0_idx; +#endif /* CONFIG_IEEE80211BE */ #ifdef CONFIG_IEEE80211AX if (conf->ieee80211ax) return conf->he_oper_centr_freq_seg0_idx; @@ -1153,6 +1169,10 @@ static inline void hostapd_set_oper_centr_freq_seg0_idx(struct hostapd_config *conf, u8 oper_centr_freq_seg0_idx) { +#ifdef CONFIG_IEEE80211BE + if (conf->ieee80211be) + conf->eht_oper_centr_freq_seg0_idx = oper_centr_freq_seg0_idx; +#endif /* CONFIG_IEEE80211BE */ #ifdef CONFIG_IEEE80211AX if (conf->ieee80211ax) conf->he_oper_centr_freq_seg0_idx = oper_centr_freq_seg0_idx; diff --git a/src/ap/ctrl_iface_ap.c b/src/ap/ctrl_iface_ap.c index 1bc1b0b3b..00639ae2e 100644 --- a/src/ap/ctrl_iface_ap.c +++ b/src/ap/ctrl_iface_ap.c @@ -765,6 +765,19 @@ int hostapd_ctrl_iface_status(struct hostapd_data *hapd, char *buf, return len; len += ret; +#ifdef CONFIG_IEEE80211BE + if (iface->conf->ieee80211be && !hapd->conf->disable_11be) { + ret = os_snprintf(buf + len, buflen - len, + "eht_oper_chwidth=%d\n" + "eht_oper_centr_freq_seg0_idx=%d\n", + iface->conf->eht_oper_chwidth, + iface->conf->eht_oper_centr_freq_seg0_idx); + if (os_snprintf_error(buflen - len, ret)) + return len; + len += ret; + } +#endif /* CONFIG_IEEE80211BE */ + #ifdef CONFIG_IEEE80211AX if (iface->conf->ieee80211ax && !hapd->conf->disable_11ax) { ret = os_snprintf(buf + len, buflen - len,