文件位置:/lib/wifi/rt2860v2.sh
#!/bin/sh
#
# by lintel@gmail.com, hoowa.sun@gmail.com
#
# by memccpy@gmail.com 2014.8
append DRIVERS "rt2860v2"
prepare_config() {
#获取参数 存储配置的变量 目标配置关键字
local num=0 mode disabled
#准备产生RaX的无线配置
local device=$1
#获取当前用户配置的无线Mac
config_get macaddr $device macaddr
#获取当前的无线频道
config_get channel $device channel
#获取当前的802.11无线模式
config_get hwmode $device mode
#获取WMM支持
config_get wmm $device wmm
#获取设备的传输功率
config_get txpower $device txpower
#获取设备的HT(频宽)
config_get ht $device ht
#获取国家代码
config_get country $device country
#是否有MAC过滤
config_get macpolicy $device macpolicy
#MAC地址过滤列表
config_get maclist $device maclist
#字符格式转义
ra_maclist="${maclist// /;};"
#是否支持GREEN AP功能
config_get_bool greenap $device greenap 0
config_get_bool antdiv "$device" diversity
config_get frag "$device" frag 2346
config_get rts "$device" rts 2347
config_get distance "$device" distance
config_get hidessid "$device" hidden 0
#获取该Radio下面的虚拟接口
config_get vifs "$device" vifs
#获取虚拟接口的数量,并提前配置SSID
for vif in $vifs; do
let num+=1
config_get_bool disabled "$vif" disabled 0
config_get mode "$vif" mode 0
#如果某个SSID接口需要隐藏,则所有的接口都隐藏
[ "$hidessid" == "0" ] && {
config_get hidessid $vif hidden 0
}
#已经关闭的接口以及sta模式的排除在外。
[ "$mode" = "sta" ]&& {
let num-=1
continue
}
[ "$disabled" == "1" ]&& {
let num-=1
continue
}
case $num in
1)
config_get ssid1 "$vif" ssid
;;
2)
config_get ssid2 "$vif" ssid
;;
3)
config_get ssid3 "$vif" ssid
;;
4)
config_get ssid4 "$vif" ssid
;;
*)
;;
esac
done
#开始准备HT模式配置,注意HT模式仅在11N下有效。
HT=1
HT_CE=1
if [ "$ht" = "20" ]; then
HT=0
elif [ "$ht" = "20+40" ]; then
HT=1
HT_CE=1
elif [ "$ht" = "40" ] ; then
HT=1
HT_CE=0
else
echo "ht config has some problem!use default!!!"
HT=0
HT_CE=1
fi
# 在HT40模式下,需要另外的一个频道,如果EXTCHA=0,则当前第二频道为$channel + 4.
# 如果EXTCHA=1,则当前的第二频道为$channel - 4.
# 如果当前频道被限制在1-4,则是当前频道+ 4,若否,则为当前频道-4
EXTCHA=1
[ "$channel" != auto ] && [ "$channel" -lt "5" ] && EXTCHA=1
#配置自动选择无线频道
[ "$channel" == "auto" ] && {
channel=11
AutoChannelSelect=2
}
#开始判断WiFi的MAC过滤方式.
case "$macpolicy" in
allow|2)
ra_macfilter=1;
;;
deny|1)
ra_macfilter=2;
;;
*|disable|none|0)
ra_macfilter=0;
;;
esac
cat > /tmp/RT2860.dat<<EOF
#The word of "Default" must not be removed
Default
CountryRegion=0
CountryRegionABand=7
CountryCode=${country:-US}
BssidNum=${num:-1}
SSID1=${ssid1:-OpenWrt_SSID1}
SSID2=${ssid2:-OpenWrt_SSID2}
SSID3=${ssid3:-OpenWrt_SSID3}
SSID4=${ssid4:-OpenWrt_SSID4}
SSID5=
SSID6=
SSID7=
SSID8=
WirelessMode=${hwmode:-9}
FixedTxMode=
TxRate=0
MacAddress=${macaddr}
Channel=${channel:-11}
BasicRate=15
BeaconPeriod=100
DtimPeriod=1
TxPower=${txpower:-100}
DisableOLBC=0
BGProtection=0
TxAntenna=
RxAntenna=
TxPreamble=1
RTSThreshold=${rts:-2347}
FragThreshold=${frag:-2346}
TxBurst=1
PktAggregate=1
AutoProvisionEn=0
FreqDelta=0
TurboRate=0
WmmCapable=${wmm:-0}
APAifsn=3;7;1;1
APCwmin=4;4;3;2
APCwmax=6;10;4;3
APTxop=0;0;94;47
APACM=0;0;0;0
BSSAifsn=3;7;2;2
BSSCwmin=4;4;3;2
BSSCwmax=10;10;4;3
BSSTxop=0;0;94;47
BSSACM=0;0;0;0
AckPolicy=0;0;0;0
APSDCapable=0
DLSCapable=0
NoForwarding=0
NoForwardingBTNBSSID=0
HideSSID=${hidessid:-0}
ShortSlot=1
AutoChannelSelect=${AutoChannelSelect:-0}
IEEE8021X=0
IEEE80211H=0
CarrierDetect=0
ITxBfEn=0
PreAntSwitch=
PhyRateLimit=0
DebugFlags=0
ETxBfEnCond=0
ITxBfTimeout=0
ETxBfTimeout=0
ETxBfNoncompress=0
ETxBfIncapable=0
FineAGC=0
StreamMode=0
StreamModeMac0=
StreamModeMac1=
StreamModeMac2=
StreamModeMac3=
CSPeriod=6
RDRegion=
StationKeepAlive=0
DfsLowerLimit=0
DfsUpperLimit=0
DfsOutdoor=0
SymRoundFromCfg=0
BusyIdleFromCfg=0
DfsRssiHighFromCfg=0
DfsRssiLowFromCfg=0
DFSParamFromConfig=0
FCCParamCh0=
FCCParamCh1=
FCCParamCh2=
FCCParamCh3