1
1
Files
zyxel-vmg8825_b50b-cfw/package/ramips/base-files-ramips/files/lib/wifi/ralink_common.sh
T
2026-04-17 18:33:03 +02:00

272 lines
8.4 KiB
Bash
Executable File

# this file will be included in
# /lib/wifi/mt{chipname}.sh
repair_wireless_uci() {
echo "repair_wireless_uci" >>/tmp/wifi.log
vifs=`uci show wireless | grep "=wifi-iface" | sed -n "s/=wifi-iface//gp"`
echo $vifs >>/tmp/wifi.log
ifn5g=0
ifn2g=0
for vif in $vifs; do
local netif nettype device netif_new
echo "<<<<<<<<<<<<<<<<<" >>/tmp/wifi.log
netif=`uci -q get ${vif}.ifname`
nettype=`uci -q get ${vif}.network`
device=`uci -q get ${vif}.device`
if [ "$device" == "" ]; then
echo "device cannot be empty!!" >>/tmp/wifi.log
return
fi
echo "device name $device!!" >>/tmp/wifi.log
echo "netif $netif" >>/tmp/wifi.log
echo "nettype $nettype" >>/tmp/wifi.log
case "$device" in
mt7620 | mt7602e | mt7603e | mt7628 | mt7688 | mt7615e2)
netif_new="ra"${ifn2g}
ifn2g=$(( $ifn2g + 1 ))
;;
mt7610e | mt7612e | mt7615e5)
netif_new="rai"${ifn5g}
ifn5g=$(( $ifn5g + 1 ))
;;
* )
echo "device $device not recognized!! " >>/tmp/wifi.log
;;
esac
echo "ifn5g = ${ifn5g}, ifn2g = ${ifn2g}" >>/tmp/wifi.log
echo "netif_new = ${netif_new}" >>/tmp/wifi.log
#if [ "$netif" == "" ]; then
echo "ifname set to ${netif_new}" >>/tmp/wifi.log
uci -q set ${vif}.ifname=${netif_new}
#fi
if [ "$nettype" == "" ]; then
nettype="lan"
echo "nettype empty, we'll fix it with ${nettype}" >>/tmp/wifi.log
uci -q set ${vif}.network=${nettype}
fi
echo ">>>>>>>>>>>>>>>>>" >>/tmp/wifi.log
done
uci changes >>/tmp/wifi.log
uci commit
}
sync_uci_with_dat() {
echo "sync_uci_with_dat($1,$2,$3,$4)" >>/tmp/wifi.log
local device="$1"
local datpath="$2"
uci2dat -d $device -f $datpath > /tmp/uci2dat.log
}
chk8021x() {
local x8021x="0" encryption device="$1" prefix
#vifs=`uci show wireless | grep "=wifi-iface" | sed -n "s/=wifi-iface//gp"`
echo "u8021x dev $device" > /tmp/802.$device.log
config_get vifs "$device" vifs
for vif in $vifs; do
local ifname
config_get ifname $vif ifname
echo "ifname = $ifname" >> /tmp/802.$device.log
config_get encryption $vif encryption
echo "enc = $encryption" >> /tmp/802.$device.log
case "$encryption" in
wpa+*)
[ "$x8021x" == "0" ] && x8021x=1
echo 111 >> /tmp/802.$device.log
;;
wpa2+*)
[ "$x8021x" == "0" ] && x8021x=1
echo 1l2 >> /tmp/802.$device.log
;;
wpa-mixed*)
[ "$x8021x" == "0" ] && x8021x=1
echo 1l3 >> /tmp/802.$device.log
;;
esac
ifpre=$(echo $ifname | cut -c1-3)
echo "prefix = $ifpre" >> /tmp/802.$device.log
if [ "$ifpre" == "rai" ]; then
prefix="rai"
else
prefix="ra"
fi
if [ "1" == "$x8021x" ]; then
break
fi
done
echo "x8021x $x8021x, pre $prefix" >>/tmp/802.$device.log
if [ "1" == $x8021x ]; then
if [ "$prefix" == "ra" ]; then
echo "killall 8021xd" >>/tmp/802.$device.log
killall 8021xd
echo "/bin/8021xd -d 9" >>/tmp/802.$device.log
8021xd -d 9 >> /tmp/802.$device.log 2>&1
else # $prefixa == rai
echo "killall 8021xdi" >>/tmp/802.$device.log
killall 8021xdi
echo "/bin/8021xdi -d 9" >>/tmp/802.$device.log
8021xdi -d 9 >> /tmp/802.$device.log 2>&1
fi
else
if [ "$prefix" == "ra" ]; then
echo "killall 8021xd" >>/tmp/802.$device.log
killall 8021xd
else # $prefixa == rai
echo "killall 8021xdi" >>/tmp/802.$device.log
killall 8021xdi
fi
fi
}
prepare_ralink_wifi() {
echo "prepare_ralink_wifi($1,$2,$3,$4)" >>/tmp/wifi.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
}
scan_ralink_wifi() {
local device="$1"
local module="$2"
echo "scan_ralink_wifi($1,$2,$3,$4)" >>/tmp/wifi.log
repair_wireless_uci
sync_uci_with_dat $device /etc/wireless/$device/$device.dat
}
disable_ralink_wifi() {
echo "disable_ralink_wifi($1,$2,$3,$4)" >>/tmp/wifi.log
local device="$1"
config_get vifs "$device" vifs
for vif in $vifs; do
config_get ifname $vif ifname
ifconfig $ifname down
done
# kill any running ap_clients
killall ap_client || true
}
enable_ralink_wifi() {
echo "enable_ralink_wifi($1,$2,$3,$4)" >>/tmp/wifi.log
local device="$1"
local module="$2"
config_get vifs "$device" vifs
# shut down all vifs first
for vif in $vifs; do
config_get ifname $vif ifname
ifconfig $ifname down
done
# in some case we have to reload drivers. (mbssid)
ref=`cat /sys/module/$module/refcnt`
if [ $ref != "0" ]; then
# but for single driver, we only need to reload once.
echo "$module ref=$ref, skip reload module" >>/tmp/wifi.log
else
echo "rmmod $module" >>/tmp/wifi.log
rmmod $module
echo "insmod $module" >>/tmp/wifi.log
insmod $module
fi
# bring up vifs
for vif in $vifs; do
config_get ifname $vif ifname
config_get disabled $vif disabled
config_get radio $device radio
# here's the tricky part. we need at least 1 vif to trigger
# the creation of all other vifs.
ifconfig $ifname up
echo "ifconfig $ifname up" >> /tmp/wifi.log
if [ "$disabled" == "1" ]; then
echo "$ifname sets to disabled." >> /tmp/wifi.log
ifconfig $ifname down
fi
#Radio On/Off only support iwpriv command but dat file
[ "$radio" == "0" ] && iwpriv $ifname set RadioOn=0
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"
}
set_wifi_up "$vif" "$ifname"
done
chk8021x $device
setsmp.sh
}
detect_ralink_wifi() {
echo "detect_ralink_wifi($1,$2,$3,$4)" >>/tmp/wifi.log
local channel
local device="$1"
local module="$2"
local band
local ifname
cd /sys/module/
[ -d $module ] || return
config_get channel $device channel
[ -z "$channel" ] || return
case "$device" in
mt7620 | mt7602e | mt7603e | mt7628 | mt7615e2)
ifname="ra0"
band="2.4G"
;;
mt7610e | mt7612e | mt7615e5)
ifname="rai0"
band="5G"
;;
* )
echo "device $device not recognized!! " >>/tmp/wifi.log
;;
esac
cat <<EOF
config wifi-device $device
option type $device
option vendor ralink
option band $band
option channel 0
option autoch 2
config wifi-iface
option device $device
option ifname $ifname
option network lan
option mode ap
option ssid OpenWrt-$device
option encryption psk2
option key 12345678
EOF
}