399 lines
11 KiB
Bash
Executable File
399 lines
11 KiB
Bash
Executable File
# this file will be included in
|
|
# /lib/wifi/mt{chipname}.sh
|
|
|
|
sync_uci_with_dat() {
|
|
echo "sync_uci_with_dat($1,$2,$3,$4)" >> /tmp/mt76xx.sh.log
|
|
local device="$1"
|
|
local datpath="$2"
|
|
local CountryCode
|
|
CountryCode=`nvram get CountryCode`
|
|
|
|
if [ $CountryCode ]; then
|
|
uci set wireless.$device.country=$CountryCode
|
|
uci commit wireless
|
|
else
|
|
uci set wireless.$device.country=CN
|
|
uci commit wireless
|
|
fi
|
|
|
|
# if [ "$CountryCode" = "TW" ]; then
|
|
# uci set wireless.$device.country=TW
|
|
# uci set wireless.$device.region=0
|
|
# uci set wireless.$device.aregion=19
|
|
# uci commit
|
|
# elif [ "$CountryCode" = "HK" ]; then
|
|
# uci set wireless.$device.country=HK
|
|
# uci set wireless.$device.region=1
|
|
# uci set wireless.$device.aregion=0
|
|
# uci commit
|
|
# elif [ "$CountryCode" = "US" ]; then
|
|
# uci set wireless.$device.country=US
|
|
# uci set wireless.$device.region=0
|
|
# uci set wireless.$device.aregion=0
|
|
# uci commit
|
|
# else
|
|
# uci set wireless.$device.country=CN
|
|
# uci set wireless.$device.region=1
|
|
# uci set wireless.$device.aregion=0
|
|
# uci commit
|
|
# fi
|
|
|
|
uci2dat -d $device -f $datpath > /tmp/uci2dat_$device.log
|
|
}
|
|
|
|
|
|
|
|
# $1=device, $2=module
|
|
reinit_wifi() {
|
|
echo "reinit_wifi($1,$2,$3,$4)" >> /tmp/mt76xx.sh.log
|
|
local device="$1"
|
|
local module="$2"
|
|
config_get vifs "$device" vifs
|
|
for vif in $vifs; do
|
|
config_get ifname $vif ifname
|
|
ifconfig $ifname down
|
|
done
|
|
|
|
# some changes will lead to reinstall driver. (mbssid eg)
|
|
echo "rmmod $module" >>/dev/null
|
|
rmmod $module
|
|
echo "insmod $module" >> /tmp/mt76xx.sh.log
|
|
insmod $module
|
|
for vif in $vifs; do
|
|
config_get ifname $vif ifname
|
|
config_get disabled $vif disabled
|
|
if [ "$disabled" == "1" ]; then
|
|
continue
|
|
else
|
|
ifconfig $ifname up
|
|
fi
|
|
done
|
|
}
|
|
|
|
prepare_ralink_wifi() {
|
|
echo "prepare_ralink_wifi($1,$2,$3,$4)" >> /tmp/mt76xx.sh.log
|
|
local device=$1
|
|
config_get channel $device channel
|
|
config_get ssid $2 ssid
|
|
config_get mode $device mode
|
|
config_get ht $device ht
|
|
config_get country $device country
|
|
config_get regdom $device regdom
|
|
|
|
# HT40 mode can be enabled only in bgn (mode = 9), gn (mode = 7)
|
|
# or n (mode = 6).
|
|
HT=0
|
|
[ "$mode" = 6 -o "$mode" = 7 -o "$mode" = 9 ] && [ "$ht" != "20" ] && HT=1
|
|
|
|
# In HT40 mode, a second channel is used. If EXTCHA=0, the extra
|
|
# channel is $channel + 4. If EXTCHA=1, the extra channel is
|
|
# $channel - 4. If the channel is fixed to 1-4, we'll have to
|
|
# use + 4, otherwise we can just use - 4.
|
|
EXTCHA=0
|
|
[ "$channel" != auto ] && [ "$channel" -lt "5" ] && EXTCHA=1
|
|
|
|
}
|
|
|
|
wifi_service_stop() {
|
|
killall acsc 2>/dev/null
|
|
}
|
|
|
|
scan_ralink_wifi() {
|
|
local device="$1"
|
|
local module="$2"
|
|
echo "scan_ralink_wifi($1,$2,$3,$4)" > /tmp/mt76xx.sh.log
|
|
sync_uci_with_dat $device /etc/Wireless/$device/$device.dat
|
|
}
|
|
|
|
disable_ralink_wifi() {
|
|
echo "disable_ralink_wifi($1,$2,$3,$4)" >> /tmp/mt76xx.sh.log
|
|
local device="$1"
|
|
set_wifi_down "$device"
|
|
config_get vifs "$device" vifs
|
|
for vif in $vifs; do
|
|
config_get ifname $vif ifname
|
|
ifconfig $ifname down
|
|
done
|
|
}
|
|
|
|
enable_ralink_wifi() {
|
|
echo "enable_ralink_wifi($1,$2,$3,$4)" >> /tmp/mt76xx.sh.log
|
|
local device="$1" dmode channel radio
|
|
local module="$2"
|
|
#reinit_wifi $device $module
|
|
config_get dmode $device mode
|
|
config_get channel $device channel
|
|
config_get radio $device radio
|
|
config_get vifs "$device" vifs
|
|
config_get disabled "$device" disabled
|
|
config_get country $device country
|
|
if [ -f /lib/wifi/singlesku/"$country"_SingleSKU.dat ];then
|
|
if [ -f /etc/Wireless/"$device"/SingleSKU.dat ];then
|
|
rm /etc/Wireless/"$device"/SingleSKU.dat
|
|
fi
|
|
cp /lib/wifi/singlesku/"$country"_SingleSKU.dat /etc/Wireless/"$device"/SingleSKU.dat
|
|
else
|
|
cp /lib/wifi/singlesku/CN_SingleSKU.dat /etc/Wireless/"$device"/SingleSKU.dat
|
|
fi
|
|
[ "$disabled" == "1" ] && return
|
|
for vif in $vifs; do
|
|
local ifname encryption key ssid mode hidden enctype
|
|
config_get ifname $vif ifname
|
|
[ "$radio" != "" ] && iwpriv $ifname set RadioOn=$radio
|
|
config_get encryption $vif encryption
|
|
config_get key $vif key
|
|
config_get ssid $vif ssid
|
|
# config_get wpa_crypto $vif wpa_crypto
|
|
config_get hidden $vif hidden
|
|
config_get mode $vif mode
|
|
config_get wps $vif wps
|
|
config_get isolate $vif isolate
|
|
config_get disabled $vif disabled
|
|
if [ "$disabled" == "1" ]; then
|
|
continue
|
|
else
|
|
set_wifi_up "$vif" "$ifname"
|
|
ifconfig $ifname up
|
|
fi
|
|
|
|
# Skip this interface if no SSID was configured
|
|
[ "$ssid" -a "$ssid" != "off" ] || continue
|
|
|
|
if [ "$ssid" == "miwifi_ready" ]; then
|
|
ready_ifname="$ifname"
|
|
fi
|
|
|
|
[ "$mode" == "sta" ] && {
|
|
config_get enctype $vif enctype
|
|
case "$encryption" in
|
|
NONE|none)
|
|
iwpriv $ifname set Channel=$channel
|
|
iwpriv $ifname set ApCliEnable=0
|
|
iwpriv $ifname set ApCliAuthMode=OPEN
|
|
iwpriv $ifname set ApCliEncrypType=NONE
|
|
iwpriv $ifname set ApCliSsid="$ssid"
|
|
iwpriv $ifname set ApCliAutoConnect=1
|
|
;;
|
|
WEP|wep)
|
|
iwpriv $ifname set Channel=$channel
|
|
iwpriv $ifname set ApCliEnable=0
|
|
iwpriv $ifname set ApCliAuthMode=OPEN
|
|
iwpriv $ifname set ApCliEncrypType=WEP
|
|
iwpriv $ifname set ApCliDefaultKeyID=1
|
|
iwpriv $ifname set ApCliKey1="$key"
|
|
iwpriv $ifname set ApCliSsid="$ssid"
|
|
iwpriv $ifname set ApCliAutoConnect=1
|
|
;;
|
|
SHARED|shared)
|
|
iwpriv $ifname set Channel=$channel
|
|
iwpriv $ifname set ApCliEnable=0
|
|
iwpriv $ifname set ApCliAuthMode=SHARED
|
|
iwpriv $ifname set ApCliEncrypType=WEP
|
|
iwpriv $ifname set ApCliDefaultKeyID=1
|
|
iwpriv $ifname set ApCliKey1="$key"
|
|
iwpriv $ifname set ApCliSsid="$ssid"
|
|
iwpriv $ifname set ApCliAutoConnect=1
|
|
;;
|
|
WPAPSK|wpa-psk)
|
|
iwpriv $ifname set Channel=$channel
|
|
iwpriv $ifname set ApCliEnable=0
|
|
iwpriv $ifname set ApCliAuthMode=WPAPSK
|
|
if [ -z "$enctype" ]; then
|
|
enctype="TKIP"
|
|
fi
|
|
iwpriv $ifname set ApCliEncrypType=$enctype
|
|
iwpriv $ifname set ApCliSsid="$ssid"
|
|
iwpriv $ifname set ApCliWPAPSK="$key"
|
|
iwpriv $ifname set ApCliAutoConnect=1
|
|
;;
|
|
WPA2PSK|wpa2-psk|mixed-psk)
|
|
iwpriv $ifname set Channel=$channel
|
|
echo "AP Client configure" >> /tmp/mt76xx.sh.log
|
|
iwpriv $ifname set ApCliEnable=0
|
|
echo "iwpriv $ifname set ApCliEnable=0" >> /tmp/mt76xx.sh.log
|
|
iwpriv $ifname set ApCliAuthMode=WPA2PSK
|
|
echo "iwpriv $ifname set ApCliAuthMode=WPA2PSK" >> /tmp/mt76xx.sh.log
|
|
if [ -z "$enctype" ]; then
|
|
enctype="AES"
|
|
fi
|
|
iwpriv $ifname set ApCliEncrypType=$enctype
|
|
echo "iwpriv $ifname set ApCliEncrypType=$enctype" >> /tmp/mt76xx.sh.log
|
|
iwpriv $ifname set ApCliSsid="$ssid"
|
|
echo "iwpriv $ifname set ApCliSsid=\"$ssid\"" >> /tmp/mt76xx.sh.log
|
|
iwpriv $ifname set ApCliWPAPSK="$key"
|
|
echo "iwpriv $ifname set ApCliWPAPSK=\"$key\"" >> /tmp/mt76xx.sh.log
|
|
iwpriv $ifname set ApCliAutoConnect=1
|
|
echo "iwpriv $ifname set ApCliAutoConnect=1" >> /tmp/mt76xx.sh.log
|
|
echo "AP Client configure done" >> /tmp/mt76xx.sh.log
|
|
;;
|
|
esac
|
|
|
|
}
|
|
[ "$mode" == "sta" ] || {
|
|
[ "$dmode" == "6" ] && wpa_crypto="aes"
|
|
ifconfig $ifname up
|
|
case "$encryption" in
|
|
psk*|wpa*|WPA*|*Mixed*|*mixed*)
|
|
local enc="OPEN"
|
|
local crypto="NONE"
|
|
case "$encryption" in
|
|
*mixed*|*Mixed*) enc=WPAPSKWPA2PSK crypto=TKIPAES;;
|
|
psk2*|WPA2*|wpa2*) enc=WPA2PSK crypto=AES;;
|
|
psk*|WPA*|WPA1*|wpa*|wpa1*) enc=WPAPSK crypto=TKIPAES;;
|
|
esac
|
|
case "$encryption" in
|
|
*tkip+ccmp) crypto=TKIPAES;;
|
|
*tkip) crypto=TKIP;;
|
|
*ccmp) crypto=AES;;
|
|
esac
|
|
iwpriv $ifname set AuthMode=$enc
|
|
iwpriv $ifname set EncrypType=$crypto
|
|
iwpriv $ifname set IEEE8021X=0
|
|
iwpriv $ifname set "WPAPSK=${key}"
|
|
# iwpriv $ifname set DefaultKeyID=2
|
|
iwpriv $ifname set "SSID=${ssid}"
|
|
# if [ "$wps" == "1" ]; then
|
|
# iwpriv $ifname set WscConfMode=7
|
|
# else
|
|
# iwpriv $ifname set WscConfMode=0
|
|
# fi
|
|
;;
|
|
WEP*|wep*)
|
|
local enc="OPEN"
|
|
local crypto="WEP"
|
|
case "$encryption" in
|
|
*open) enc=OPEN;;
|
|
*shared) enc=SHARED;;
|
|
esac
|
|
iwpriv $ifname set AuthMode=$enc
|
|
iwpriv $ifname set EncrypType=$crypto
|
|
[ -n "$key" ] && iwpriv $ifname set "Key1=${key}"
|
|
iwpriv $ifname set DefaultKeyID=1
|
|
iwpriv $ifname set "SSID=${ssid}"
|
|
#iwpriv $ifname set WscConfMode=0
|
|
iwpriv $ifname set WscModeOption=0
|
|
;;
|
|
none|open)
|
|
iwpriv $ifname set AuthMode=OPEN
|
|
iwpriv $ifname set EncrypType=NONE
|
|
#iwpriv $ifname set WscConfMode=0
|
|
;;
|
|
esac
|
|
}
|
|
|
|
local net_cfg bridge
|
|
net_cfg="$(find_net_config "$vif")"
|
|
[ -z "$net_cfg" ] || {
|
|
bridge="$(bridge_interface "$net_cfg")"
|
|
config_set "$vif" bridge "$bridge"
|
|
start_net "$ifname" "$net_cfg"
|
|
}
|
|
|
|
# If isolation is requested, disable forwarding between
|
|
# wireless clients (both within the same BSSID and
|
|
# between BSSID's, though the latter is probably not
|
|
# relevant for our setup).
|
|
# iwpriv $ifname set NoForwarding="${isolate:-0}"
|
|
# iwpriv $ifname set NoForwardingBTNBSSID="${isolate:-0}"
|
|
done
|
|
|
|
apmode=`uci get xiaoqiang.common.NETMODE 2> /dev/null`
|
|
|
|
echo "ap $apmode mi $ready_ifname" >> /tmp/mt76xx.sh.log
|
|
if [ "$apmode" == "wifiapmode" -o "$apmode" == "lanapmode" ]; then
|
|
echo "ifconfig $ready_ifname down" >> /tmp/mt76xx.sh.log
|
|
ifconfig $ready_ifname down
|
|
fi
|
|
|
|
if [ "$device" == "mt7628" -o "$device" == "mt7620" ]; then
|
|
acsc > /dev/null
|
|
fi
|
|
}
|
|
|
|
detect_ralink_wifi() {
|
|
echo "detect_ralink_wifi($1,$2,$3,$4)" >> /tmp/mt76xx.sh.log
|
|
local channel ssid
|
|
local device="$1"
|
|
local module="$2"
|
|
local ifname
|
|
local CountryCode
|
|
CountryCode=`bdata get CountryCode`
|
|
|
|
if [ !$CountryCode ]; then
|
|
CountryCode="CN"
|
|
fi
|
|
|
|
cd /sys/module/
|
|
[ -d $module ] || return
|
|
config_get channel $device channel
|
|
[ -z "$channel" ] || return
|
|
case "$device" in
|
|
mt7628 | mt7602 | mt7620 )
|
|
ifname="wl1"
|
|
ssid=`nvram get wl1_ssid`
|
|
hwband="2_4G"
|
|
hwmode="11ng"
|
|
;;
|
|
mt7610e | mt7612 )
|
|
ifname="wl0"
|
|
ssid=`nvram get wl0_ssid`
|
|
hwband="5G"
|
|
hwmode="11ac"
|
|
;;
|
|
* )
|
|
echo "device $device not recognized!! " >> /tmp/mt76xx.sh.log
|
|
;;
|
|
esac
|
|
cat <<EOF
|
|
config wifi-device '$device'
|
|
option type '$device'
|
|
option vendor 'ralink'
|
|
option channel '0'
|
|
option bw '0'
|
|
option autoch '2'
|
|
option radio '1'
|
|
option txpwr 'max'
|
|
option hwband '$hwband'
|
|
option hwmode '$hwmode'
|
|
option disabled '0'
|
|
option country '$CountryCode'
|
|
option region '1'
|
|
option aregion '0'
|
|
|
|
config wifi-iface
|
|
option device '$device'
|
|
option ifname '$ifname'
|
|
option network 'lan'
|
|
option mode 'ap'
|
|
option ssid '$ssid'
|
|
option encryption 'none'
|
|
|
|
EOF
|
|
if [ "$device" = "mt7628" ]; then
|
|
cat <<EOF
|
|
config wifi-iface 'miwifi_ready'
|
|
option disabled '0'
|
|
option device 'mt7628'
|
|
option ifname 'wl2'
|
|
option network 'ready'
|
|
option mode 'ap'
|
|
option ssid 'miwifi_ready'
|
|
option hidden '1'
|
|
option encryption 'none'
|
|
option dynbcn '1'
|
|
|
|
EOF
|
|
fi
|
|
if [ "$device" = "mt7628" ]; then
|
|
cat <<EOF
|
|
config wifi-iface 'guest_2G'
|
|
option disabled '1'
|
|
option device 'mt7628'
|
|
option ifname 'wl3'
|
|
option network 'guest'
|
|
option mode 'ap'
|
|
|
|
EOF
|
|
fi
|
|
}
|