问题描述
高通默认hostapd不支持强制40MHz频宽功能,设置之后总会自动协商到20MHz
解决方案
修改hostapd代码,增加ht2040_coex_disable字段
代码修改
修改apps_proc/src/external/wpa_supplicant_8/hostapd/config_file.c
在hostapd_config_fill函数添加配置选项参数的传递
bss->wds_sta = atoi(pos);
} else if (os_strcmp(buf, "start_disabled") == 0) {
bss->start_disabled = atoi(pos);
+ } else if (os_strcmp(buf, "ht2040_coex_disable") == 0) { //add force 40MHz bandwidth
+ conf->ht2040_coex_disable = atoi(pos);
+
} else if (os_strcmp(buf, "ap_isolate") == 0) {
bss->isolate = atoi(pos);
} else if (os_strcmp(buf, "ap_max_inactivity") == 0) {
修改apps_proc/src/external/wpa_supplicant_8/src/ap/ap_config.c
在hostapd_config_defaults函数中增加初始化
return NULL;
}
conf->bss[0] = bss;
-
+ conf->ht2040_coex_disable = 0; //force 40MHz
bss->radius = os_zalloc(sizeof(*bss->radius));
if (bss->radius == NULL) {
os_free(conf->bss);
修改apps_proc/src/external/wpa_supplicant_8/src/ap/ap_config.h
hostapd_config结构体增加ht_2040_coex_disable
int fragm_threshold;
u8 op_class;
u8 channel;
+ int ht2040_coex_disable; //force to 40MHz
int enable_edmg;
u8 edmg_channel;
u8 acs;
修改apps_proc/src/external/wpa_supplicant_8/src/ap/hw_features.c
ieee80211n_check_scan函数做判断,当开启ht2040_coex_disable时,不再自动降为20MHz
else
oper40 = ieee80211n_check_40mhz_2g4(iface, scan_res);
wpa_scan_results_free(scan_res);
-
+ // force 40MHz
+ if (!oper40 && iface->conf->ht2040_coex_disable) {
+ wpa_printf(MSG_INFO, "Force to 40MHz due to ht2040_coex_disable is 1.");
+ oper40 = 1;
+ }
iface->secondary_ch = iface->conf->secondary_channel;
if (!oper40) {
wpa_printf(MSG_INFO, "20/40 MHz operation not permitted on "
修改apps_proc/src/external/wpa_supplicant_8/src/ap/ieee802_11_ht.c文件
hostapd_2040_coex_action函数增加判断,开启40MHz强制之后,IE字段不在添加20/40自适应
"Ignore too short 20/40 BSS Coexistence Management frame");
return;
}
+ if (iface->conf->ht2040_coex_disable) //add force 40MHz
+ {
+ wpa_printf(MSG_DEBUG,
+ "Force 40MHz");
+ return;
+ }
/* 20/40 BSS Coexistence element */
bc_ie = (struct ieee80211_2040_bss_coex_ie *) data;
参考链接: