【Linux】OpenWRT的⽆线设置注意事项——从2.4G到
5G,hwmode不简单
硬件说明:
操作系统:OpenWRT
⽹卡:AR9220R52Hn
⽹卡驱动:ath9k
OpenWRT在刷机完成之后,并不会⾃动开启⽆线功能,需要⼿动修改配置⽂件,然后重启⽹络服务。管理⽆线功能的配置⽂件是: /etc/config/wireless
内容有两部分组成:config wifi-device和config wifi-iface。前者配置⽆线⽹卡的⼯作模式、信道、MAC地址、使⽤哪些天线(⼀般有1、2、3三个天线,视⽹卡上有⼏个馈线接⼝⽽定)、是DSSS还是OFDM等信息。后者配置⽹卡接⼝信息,如接⼝的名称、ESSID、密码和加密⽅式,⽹络连接(net work配置项)等。⽹络连接network这⼀项必须和/etc/config/network中的某个interface⼀致,表⽰⽆线⽹卡对应哪⼀个interface(接⼝)。
例如下⾯这个配置,包含两个config wifi-device+config wifi-iface的配置块,这需要有两个⽹卡。(由于笔者写博客的电脑和管理OpenWRT 的电脑不是同⼀个,为了⽅便,以下内容是从别处复制⽽来的,并不影响叙述的正确性。)
1. # 1
2. config wifi-device 'radio0'
3. option type 'mac80211'
4. option hwmode '11ng'
5. option path 'platform/ar934x_wmac'
6. option htmode 'HT40+'
7. list ht_capab 'LDPC'
8. list ht_capab 'SHORT-GI-20'
9. list ht_capab 'SHORT-GI-40'
10. list ht_capab 'TX-STBC'
11. list ht_capab 'RX-STBC1'
12. list ht_capab 'DSSS_CCK-40'
13. option noscan '1'
14. option channel '7'
15. option txpower '27'
16. option country 'CN'
17.
18. config wifi-iface
19. option device 'radio0'
20. option network 'lan'
21. option mode 'ap'
22. option ssid 'openwrt_25g'
23. option encryption 'psk-mixed'
24. option key '11111111'
25.
26. #2
27. config wifi-device 'radio1'
28. option type 'mac80211'
29. option hwmode '11na'
30. option path 'pci0000:00/0000:00:00.0'
31. list ht_capab 'LDPC'
32. list ht_capab 'SHORT-GI-20'
33. list ht_capab 'SHORT-GI-40'
34. list ht_capab 'TX-STBC'
35. list ht_capab 'RX-STBC1'
36. list ht_capab 'DSSS_CCK-40'
37. option htmode 'HT40+'
38. option country 'CN'
39. option noscan '1'
40. option txpower '17'
41. option channel '149'
42.
43. config wifi-iface
44. option device 'radio1'
45. option network 'lan'
46. option mode 'ap'
47. option ssid 'openwrt_5g'
48. option encryption 'psk-mixed'
49. option key '11111111'
下⾯主要说下个别⼏个配置项,其他配置项要么不常⽤,要么⼀⽬了然。
1 channel:信道
Channel的值必须是正确的,想知道⽹卡⽀持那些信道,可以⽤iwlist命令查看:
iwlist c (或写全称:iwlist channel)
这⾥要注意的是,如果⽹卡⼯作在5G下,虽然根据802.11a的标准,5G下的信道从60到165之间有许多许多,⽽使⽤iwlist查询到的⽹卡信息也说明⽹卡⽀持这些信道,但也许channel配置项只能写149以上的值。因为我国的5G信道只允许使⽤149以上的信道。 2 hwmode:⼯作在什么标准下
hwmode和channel是对应的,例如,如果channel是149,意味着⽹卡⼯作在5G下,那么hwmode不能写11g,因为11g标准定义的通信频率是不包含5G的,只有11a才可以。
hwmode的值不能乱写(这也是我今天才知道的)。合法的值有:11a 11b 11g 11na 11ng等。使⽤其他奇怪的值,也许在⽹卡服务启动的时候内核不会complain,也许⽹络服务开启后,并⾮不能正常地部署好AP,但配置也许是错误的:在我的实验中,我需要将AP配置到11n下,但由于把hwmode的值写成了11an,结果并未如我所愿,⽹卡其实⼯作在了11a标准下,此时虽然可以建⽴AP,可以ping通,但是11n并未启⽤,不符合我的需求。
原因可以⽤下⾯这段shell来说明。在解析配置⽂件的时候,是下⾯代码中第8⾏开始的这段case代码
来解析的,从前往后依次尝试匹配11bg、11a、11b、11g,然后是11n*(也就是11na、11ng),然后是其他(⽤$default作为hwmode的值)。
1 wifi_fixup_hwmode() {
2 local device="$1"
3 local default="$2"
4 local hwmode hwmode_11n
5 config_get channel "$device" channel
6
7 config_get hwmode "$device" hwmode
8case"$hwmode"in
9 11bg) hwmode=bg;;
10 11a) hwmode=a;;
11 11b) hwmode=b;;
12 11g) hwmode=g;;
13 11n*)
14 hwmode_11n="${hwmode##11n}"
15case"$hwmode_11n"in
16 a|g) ;;
17 default) hwmode_11n="$default"
18esac
19 config_set "$device" hwmode_11n "$hwmode_11n"
20 ;;
21 *)
22 hwmode=
23if [ "${channel:-0}" -gt 0 ]; then
24if [ "${channel:-0}" -gt 14 ]; then
25 hwmode=a
26else
27 hwmode=g
28fi
29else
30 hwmode="$default"
31fi
32 ;;
33esac
34 config_set "$device" hwmode "$hwmode"
35 }
3 config wifi-iface中的mode
mode是⽹卡的⼯作模式,这个和hwmode(硬件模式)不同,值的是⽹卡作为什么⾓⾊在通信。⼀般会有以下⼏种⾓⾊,但⽹卡并不⼀定都⽀持这些⾓⾊:
sta:⽤户端,WiFi的使⽤者
master:接⼊点(AP)
ad-hoc:只有在这⼀模式下,设备可以和其他ad-hoc模式下的设备组成多跳⽹络(MESH⽹络),这需要⼀些⽆线ad-hoc路由协议,例如著名的batmand协议。
monitor:只有在这⼀模式下,⽹卡可以监听同信道上的其他设备的帧。可以获取这些帧的地址、内容、RSSI(甚⾄信道状态信息CSI,理论上可以,实际上根据我们的测试,基于Intel 5300⽹卡的CSI Tools并不能稳定⼯作在monitor模式下,这⼀点CSI Tools的作者Daniel也承认了)。
⽹卡⽀持的⼯作模式,可以⽤iw list命令查询。