summaryrefslogtreecommitdiff
path: root/package/base-files/files/lib/wifi/ralink_common.sh
diff options
context:
space:
mode:
Diffstat (limited to 'package/base-files/files/lib/wifi/ralink_common.sh')
-rwxr-xr-xpackage/base-files/files/lib/wifi/ralink_common.sh271
1 files changed, 271 insertions, 0 deletions
diff --git a/package/base-files/files/lib/wifi/ralink_common.sh b/package/base-files/files/lib/wifi/ralink_common.sh
new file mode 100755
index 0000000..8182629
--- /dev/null
+++ b/package/base-files/files/lib/wifi/ralink_common.sh
@@ -0,0 +1,271 @@
+# 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
+}
+
+
+