linux系统实现WIFI热点服务一般是使用hostapd来完成的。802.11n标准可以使用20MHz、40MHz频宽,这在hostapd配置文件中可以指定。另外,还可以使用Short GI使速率提升10%。但在实践中,指定SHORT-GI-40后,发现还是处于20MHz的频宽,因此速率提不上去。跟踪调试信息发现,hostapd开始是使用40MHz的,只是当其检测到周边SSID使用40MHz时,就自动降为20MHz。目前还没仔细研究ieee802.11协议,不确定协议标准对此有没有什么约定规则。但看到很多路由器都是使用40MHz。于是上网找了资料,将hostapd强制使用40MHz。

hostapd自动降为20MHz,信息如下:

40 MHz affected channel range: [2422,2472] MHz

Neighboring BSS: 65:d7:33:44:bc:55freq=2412 pri=1 sec=5

40 MHz pri/sec mismatch with BSS 65:d7:33:44:bc:55<2412,2432> (chan=1+) vs. <2437,2457>

20/40 MHz operation not permitted on channel pri=6 sec=10 based on overlapping BSSes

Completing interface initialization

为了不对hostapd本身代码做更改,设计使用配置选项的方法添加“强制40MHz”的做法,即在hostapd配置文件使用force_40mhz=1来强制使用40MHz频宽。

具体代码修改如下所述。

1、ap_config.h文件hostapd_config结构体新加:

int force_40mhz; // force to 40MHz

2、ap_config.c文件hostapd_config_defaults函数初始化为0:

conf->force_40mhz = 0;

3、config_file.c文件hostapd_config_fill函数添加配置选项参数的传递:

else if (os_strcmp(buf, "force_40mhz") == 0) {

conf->force_40mhz = atoi(pos);

}

4、hw_features.c文件ieee80211n_check_scan函数做判断,当检测周边AP开启40MHz时,不再自动降为20MHz。

if (iface->current_mode->mode == HOSTAPD_MODE_IEEE80211A)

oper40 = ieee80211n_check_40mhz_5g(iface, scan_res);

else

oper40 = ieee80211n_check_40mhz_2g4(iface, scan_res);

wpa_scan_results_free(scan_res);

// new add by Late Lee

if (!oper40 && iface->conf->force_40mhz) {

wpa_printf(MSG_INFO, "But will force to 40MHz due to force_40mhz.");

oper40 = 1;

}

iface->secondary_ch = iface->conf->secondary_channel;

if (!oper40) {

wpa_printf(MSG_INFO, "20/40 MHz operation not permitted on "

"channel pri=%d sec=%d based on overlapping BSSes",

iface->conf->channel,

iface->conf->channel +

iface->conf->secondary_channel * 4);

iface->conf->secondary_channel = 0;

if (iface->drv_flags & WPA_DRIVER_FLAGS_HT_2040_COEX) {

/*

* TODO: Could consider scheduling another scan to check

* if channel width can be changed if no coex reports

* are received from associating stations.

*/

}

}5、ieee802_11_ht.c文件hostapd_2040_coex_action函数添加:

if (!(iface->conf->ht_capab & HT_CAP_INFO_SUPP_CHANNEL_WIDTH_SET))

return;

if (len < IEEE80211_HDRLEN + 2 + sizeof(*bc_ie))

return;

// new add by Late Lee

if (iface->conf->force_40mhz)

return;

至此,速率终于提升到300Mbps。

不过,强制为40MHz后,即使看到300Mbps的速度,但实际用iperf测试,也提高不了多少,因为实际使用过程中还有很多其它影响因素,如果不是十分必要,不建议修改hostapd机制达到目的。

本文参考以下文章:

李迟 2016.8.22 周一晚

linux内核中hostapd,linux系统hostapd强制使用40MHz频宽相关推荐

  1. linux系统hostapd强制使用40MHz频宽

    linux系统实现WIFI热点服务一般是使用hostapd来完成的.802.11n标准可以使用20MHz.40MHz频宽,这在hostapd配置文件中可以指定.另外,还可以使用Short GI使速率提 ...

  2. Linux内核中的GPIO系统之(3):pin controller driver代码分析

    一.前言 对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datash ...

  3. linux内核中union,Linux上的Union mount

    A union mount显示单个层次结构中多个目录(分支)的组合视图.好的,但我如何在实践中使用一个,哪一个? 许多联合装载技术可在现代Linux系统上使用:OverlayFS,aufs,Union ...

  4. linux内核中的GPIO系统之(2):pin control subsystem

    一.前言 在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况: (1)启动一个新的项目后,需要根据硬件平台的设定进行pin control相关的编码.例如:在b ...

  5. linux内核中的GPIO系统之(1):软件框架

    一.前言 作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务.对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver.LED d ...

  6. Linux内核中的GPIO系统

    一.前言 作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务.对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver.LED d ...

  7. linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结

    1. 前言 本站之前的三篇文章[1][2][3]介绍了pin controller(对应的pin controller subsystem).gpio controller(对应的GPIO subsy ...

  8. Ubuntu\linux,加载mcp2515的驱动,链接mcp2515,mcp2515的这个驱动默认在linux内核中。jetson nao、香橙派、树莓派

    加载mcp2515的驱动,这个驱动默认在linux内核中. linux内核源码 1.树莓派+MCP2515+总线工具完成can报文收发 sudo modprobe mcp251x 2.树莓派CAN通讯 ...

  9. 【sdx62】WCN6855 WCN6856 WiFi 增加强制40MHz频宽的功能实现

    问题描述 高通默认hostapd不支持强制40MHz频宽功能,设置之后总会自动协商到20MHz 解决方案 修改hostapd代码,增加ht2040_coex_disable字段 代码修改 修改apps ...

最新文章

  1. ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7
  2. 记录一下PyQt5界面导入Python(绕开pyqt5-tools安装失败问题)
  3. HDU2076 夹角有多大
  4. 【Tiny4412】最小网络文件系统制作
  5. 连接相机无法识别_车牌识别一体机在汽修门店安装中要注意的事项
  6. LeetCode OJ - Populating Next Right Pointers in Each Node II
  7. 超1亿人选择朋友圈三天可见,背后的原因值得深思
  8. 最大堆的Java实现
  9. 自适应滤波器原理第四版计算机实验,自适应滤波器原理(中文第4版)答案
  10. Varnish 缓存服务器配置
  11. Swift 使用SwiftyJSON解析JSON数据
  12. 松下PLC REXT总线伺服案例 本案例采用松下FPXH系列的总线型 PLC和松下总线伺服共8轴的系统
  13. 几个函数泰勒展开式及其记忆技巧
  14. 中国交通标志检测数据集
  15. 做python的心得体会_实训python的心得体会
  16. WebSocket 简述
  17. 用户界面测试(来源于百度百科)
  18. hook系统调用(一):爬取MSDN官网上的API调用并改为自己的API(c++正则表达式的应用)
  19. 微软针对lapsus$事件的最新调查报告 中文版
  20. 啦啦外卖开源至尊独立稳定版小程序 V43.0+客户端+配送端+商户端多个小程序安装及配置教程

热门文章

  1. verilog 1bit跨时钟同步器
  2. sql 节假日判断(春节、中秋、国庆、周末等)
  3. 每日一题#10-22 Ransomware
  4. 41首送别诗词,首首经典,值得为孩子们收藏!
  5. k8s/Kubernetes集群安装
  6. XDOJ-直角三角形
  7. CUT&RUN——检测蛋白-DNA相互作用的强大通用技术
  8. 酒水知识(六大基酒之朗姆酒_Rum)
  9. MySQL数据库id主键或密码使用MD5加密
  10. 独家-县域统计年鉴Excel版(2000-2021年)-包含县市及乡镇卷