# 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 <