diff --git a/inteno-netmodes/files/etc/hotplug.d/iface/01-netmode-handler b/inteno-netmodes/files/etc/hotplug.d/iface/01-netmode-handler index eaa817997..8edb043ce 100755 --- a/inteno-netmodes/files/etc/hotplug.d/iface/01-netmode-handler +++ b/inteno-netmodes/files/etc/hotplug.d/iface/01-netmode-handler @@ -3,66 +3,15 @@ [ "$INTERFACE" != "wan" ] && exit . /lib/functions.sh -. /lib/functions/network.sh +include /lib/network + +network_get_ipaddr ipaddr $INTERFACE +[ -z "$ipaddr" ] && exit -network_get_ipaddr ip $INTERFACE repeaterready="$(uci -q get netmode.setup.repeaterready)" +curmode="$(uci -q get netmode.setup.curmode)" -[ -z "$ip" ] && exit - -toggle_firewall() { - local section=$1 - local disable=$2 - config_get name "$1" name - if [ "$name" == "wan" ]; then - uci -q set firewall.settings.disabled=$disable - if [ "$disable" == "1" ]; then - uci -q set firewall.$section.input="ACCEPT" - else - uci -q set firewall.$section.input="REJECT" - fi - uci -q commit firewall - fi -} - -disable_firewall() { - config_load firewall - config_foreach toggle_firewall zone $1 - /etc/init.d/firewall reload -} - -is_inteno_macaddr() -{ - macaddr=$1 - - echo $macaddr | grep -i -e "^00:22:07" \ - -e "^02:22:07" \ - -e "^44:D4:37" \ - -e "^00:0C:07" \ - -e "^02:0C:07" \ - -e "^06:0C:07" \ - -e "^00:0C:43" \ - -e "^02:0C:43" \ - -e "^06:0C:43" \ - && return - false -} - -get_wifi_wet_interface() { - handle_interface() { - config_get mode "$1" mode - if [ "$mode" == "sta" -o "$mode" == "wet" ] ; then - config_get ifname "$1" ifname - echo "$ifname" - fi - } - config_load wireless - config_foreach handle_interface wifi-iface -} - -switch_mode() { - [ "$repeaterready" == "1" ] || return - +if [ "$(get_ip_type $ipaddr)" == "private" ]; then # flush the ip on br-lan; br-lan will anyhow be deleted. # this is needed if the ip received on the wan is also from the same net ip addr flush dev br-lan @@ -72,85 +21,17 @@ switch_mode() { # firewall is disabled the proper way iptables -F - ubus call leds set '{"state" : "allflash"}' + disable_firewall 1 +else + disable_firewall 0 +fi - if pidof wificontrol >/dev/null; then - local ret=0 - # let netmode-conf up to 20 seconds before switching mode - for tm in 2 4 6 8; do - if [ -f /tmp/wificontrol.txt ]; then - ret=1 - break - fi - sleep $tm - done - - # let netmode-conf take over - [ $ret -eq 1 ] && return - fi - - # go head with switching mode - touch -f /tmp/switching_mode - echo "Switching to 'extender' mode" > /dev/console - uci -q set netmode.setup.curmode='repeater' - uci set netmode.setup.repeaterready=0 - uci commit netmode - /etc/init.d/netmode reload 0 - echo "Restarting network services" > /dev/console - [ -f /etc/init.d/layer2 ] && /etc/init.d/layer2 reload - ubus call network reload - wifi reload nodat - ubus call router.network reload - - MTK=0 - [ "$(db -q get hw.board.hardware)" == "EX400" ] && MTK=1 - - WANDEV="$(db -q get hw.board.ethernetWanPort).1" - [ $MTK -eq 1 ] && WANDEV="eth0.2" - - link=$(cat /sys/class/net/${WANDEV:0:4}/operstate) - [ $MTK -eq 1 ] && link=$(swconfig dev switch0 port 0 get link | awk '{print$2}' | cut -d':' -f2) - - wetif="$(get_wifi_wet_interface)" - - if [ "$link" == "up" ]; then - ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":true}" - ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":false}" - else - ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":false}" - ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":true}" - ubus call led.internet set '{"state" : "notice"}' - fi - - ubus call leds set '{"state" : "normal"}' - rm -f /tmp/switching_mode -} - -test_ip() { - if [ -n "$(echo $ip | grep -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)')" ]; then - # private IP - switch_mode - disable_firewall 1 - else - # public IP - disable_firewall 0 - [ "$1" -eq "1" ] && { - uci set netmode.setup.repeaterready=0 - uci commit netmode - local pid="$(ps | grep wificontro[l] | awk '/repeater/ {print $1}')" - [ "$pid" != "" ] && kill -9 $pid - #pid="$(pidof netmode-client-detect)" - #[ "$pid" == "" ] && /sbin/netmode-client-detect & - - # set default JUCI page to overview - uci -q set juci.juci.homepage="overview" - uci commit juci - } - fi -} - -case "$(uci -q get netmode.setup.curmode)" in - repeater*) test_ip ;; - *) [ "$repeaterready" == "1" ] && test_ip 1;; +case "$curmode" in + repeater*) + ;; + *) + [ "$repeaterready" == "1" ] || return + [ "$(get_ip_type $ipaddr)" == "private" ] && switch_netmode repeater || switch_netmode router + ;; esac diff --git a/inteno-netmodes/files/etc/hotplug.d/net/80-repeater b/inteno-netmodes/files/etc/hotplug.d/net/80-repeater index 9600a1d58..7b115bd90 100644 --- a/inteno-netmodes/files/etc/hotplug.d/net/80-repeater +++ b/inteno-netmodes/files/etc/hotplug.d/net/80-repeater @@ -5,19 +5,12 @@ include /lib/network ps | grep hotplug | grep button && exit -MTK=0 -[ "$(db -q get hw.board.hardware)" == "EX400" ] && MTK=1 - -WANDEV="$(db -q get hw.board.ethernetWanPort).1" -[ $MTK -eq 1 ] && WANDEV="eth0.2" - -[ "$INTERFACE" != "$WANDEV" ] && exit +[ -z "$INTERFACE" ] && exit defroute=$(ip route | grep default | awk '{print$3}') case "$(uci get netmode.setup.curmode)" in repeater*) - echo "Preparing to switch mode" ;; *) ping -c 1 -w 5 $defroute >/dev/null 2>&1 || killall -USR1 udhcpc @@ -25,45 +18,7 @@ case "$(uci get netmode.setup.curmode)" in ;; esac -get_wifi_wet_interface() { - handle_interface() { - config_get mode "$1" mode - if [ "$mode" == "sta" -o "$mode" == "wet" ] ; then - config_get ifname "$1" ifname - echo "$ifname" - fi - } - config_load wireless - config_foreach handle_interface wifi-iface -} - -get_wifi_iface_cfgstr() { - get_cfgno() { - config_get ifname "$1" ifname - [ "$ifname" == "$2" ] && echo "wireless.$1" - } - config_load wireless - config_foreach get_cfgno wifi-iface $1 -} - -link=$(cat /sys/class/net/${WANDEV:0:4}/operstate) -[ $MTK -eq 1 ] && link=$(swconfig dev switch0 port 0 get link | awk '{print$2}' | cut -d':' -f2) - case "$ACTION" in - add|register) - [ "$link" == "down" ] && return - echo "Autoswitch to Extender mode" > /dev/console - wetif="$(get_wifi_wet_interface)" - ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":true}" - ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":false}" - ;; - remove|unregister) - [ "$link" == "up" ] && return - echo "Autoswitch to Repeater mode" > /dev/console - wetif="$(get_wifi_wet_interface)" - ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":false}" - ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":true}" - ubus call led.internet set '{"state" : "notice"}' - ;; + add|register|remove|unregister) correct_uplink $INTERFACE;; esac diff --git a/inteno-netmodes/files/etc/init.d/netmode b/inteno-netmodes/files/etc/init.d/netmode index f90f26be8..5884018ab 100755 --- a/inteno-netmodes/files/etc/init.d/netmode +++ b/inteno-netmodes/files/etc/init.d/netmode @@ -5,279 +5,8 @@ USE_PROCD=1 NETMODED="/sbin/netmoded" -TMPDIR=/var/netmodes -OLD_MODE_FILE=/var/netmodes/old_mode - -. /usr/share/libubox/jshn.sh - -modedir=$(uci -q get netmode.setup.dir) -[ -n "$modedir" ] || modedir="/etc/netmodes" - -get_device() { - local PORT_NAMES=$(db get hw.board.ethernetPortNames) - local PORT_ORDER=$(db get hw.board.ethernetPortOrder) - local cnt=1 - local idx=0 - - local pnum=$(echo $PORT_NAMES | wc -w) - - if [ $pnum -le 2 ]; then - PORT_NAMES=$(echo $PORT_NAMES | sed 's/LAN/LAN1/g') - fi - - # get index of interface name - for i in $PORT_NAMES; do - if [ "$i" == "$1" ]; then - idx=$cnt - fi - cnt=$((cnt+1)) - done - - # get port name from index - cnt=1 - for i in $PORT_ORDER; do - if [ "$cnt" == "$idx" ]; then - echo $i - fi - cnt=$((cnt+1)) - done -} - -populate_netmodes() { - [ -f /etc/config/netmode -a -d $modedir ] || return - local curmode - - config_load netmode - - config_get curmode setup curmode - - mkdir -p $TMPDIR - - if [ "$curmode" == "routed" ]; then - local hw="$(db -q get hw.board.hardware)" - if [ "$hw" == "EX400" ]; then - curmode="routed_mtk" - else - curmode="routed_brcm" - fi - fi - - echo $curmode > $OLD_MODE_FILE - - delete_netmode() { - uci delete netmode.$1 - } - - config_foreach delete_netmode netmode - uci commit netmode - - wan=$(get_device WAN) - lan1=$(get_device LAN1) - lan2=$(get_device LAN2) - lan3=$(get_device LAN3) - lan4=$(get_device LAN4) - lan5=$(get_device LAN5) - - for file in $(find $modedir -type f); do - conf="$(echo $file | cut -d'/' -f5)" - if [ "$conf" == "layer2_interface_ethernet" ]; then - grep -q "\$WAN" $file && sed -i "s/\$WAN/$wan/g" $file - fi - if [ "$conf" == "network" ]; then - grep -q "\$WAN" $file && sed -i "s/\$WAN/$wan/g" $file - grep -q "\$LAN1" $file && sed -i "s/\$LAN1/$lan1/g" $file - grep -q "\$LAN2" $file && sed -i "s/\$LAN2/$lan2/g" $file - grep -q "\$LAN3" $file && sed -i "s/\$LAN3/$lan3/g" $file - grep -q "\$LAN4" $file && sed -i "s/\$LAN4/$lan4/g" $file - - ifname="$(uci -q get $file.wan.ifname | sed 's/[ \t]*$//')" - uci -q set $file.wan.ifname="$ifname" - uci -q commit $file - fi - done - - local hardware=$(db get hw.board.hardware) - local keys lang desc exp exclude - for mode in $(ls $modedir); do - - case "$mode" in - repeater*) - wlctl -i wl1 ap >/dev/null 2>&1 || ifconfig rai0 2>/dev/null | grep -q rai0 || continue - ;; - esac - - lang="" - desc="" - exp="" - uci -q set netmode.$mode=netmode - json_load "$(cat $modedir/$mode/DETAILS)" - - if json_select excluded_boards; then - exclude=0 - _i=1 - while json_get_var board $_i; do - case "$hardware" in - $board) - uci -q delete netmode.$mode - exclude=1 - break - ;; - esac - _i=$((_i+1)) - done - json_select .. - [ $exclude -eq 1 ] && continue - fi - - if json_select acl; then - _i=1 - while json_get_var user $_i; do - uci add_list netmode.$mode._access_r="$user" - _i=$((_i+1)) - done - json_select .. - fi - - json_select description - json_get_keys keys - for k in $keys; do - json_get_keys lang $k - lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//') - json_select $k - json_get_var desc $lang - uci -q set netmode.$mode."desc_$lang"="$desc" - [ "$lang" == "en" ] && uci -q set netmode.$mode."desc"="$desc" - json_select .. - done - json_select .. - - json_select explanation - json_get_keys keys - for k in $keys; do - json_get_keys lang $k - lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//') - json_select $k - json_get_var exp $lang - uci -q set netmode.$mode."exp_$lang"="$exp" - [ "$lang" == "en" ] && uci -q set netmode.$mode."exp"="$exp" - json_select .. - done - json_select .. - - json_get_var cred credentials - uci -q set netmode.$mode.askcred="$cred" - json_get_var ulb uplink_band - uci -q set netmode.$mode.uplink_band="$ulb" - json_get_var reboot reboot - uci -q set netmode.$mode.reboot="$reboot" - done - - config_get curmode setup curmode - [ -d /etc/netmodes/$curmode ] || { - [ "$(db -q get hw.board.hardware)" == "EX400" ] && uci -q set netmode.setup.curmode="routed_mtk" || uci -q set netmode.setup.curmode="routed_brcm" - } - - uci commit netmode -} - -switch_netmode() { - [ -f /etc/config/netmode -a -d $modedir ] || return - - local netreload="$1" - local curmode conf repeaterready old_mode - - config_load netmode - - config_get curmode setup curmode - - config_get repeaterready setup repeaterready "0" - if [ "$repeaterready" == "1" ] ; then - uci -q set netmode.setup.repeaterready="0" - uci commit netmode - fi - - if [ "$curmode" == "repeater" ]; then - local hw="$(db -q get hw.board.hardware)" - if [ "$hw" == "EX400" ]; then - curmode="repeater_mtk_5g_up_dual_down" - else - curmode="repeater_brcm_2g_up_dual_down" - fi - uci set netmode.setup.curmode="$curmode" - uci commit netmode - fi - if [ "$curmode" == "routed" ]; then - local hw="$(db -q get hw.board.hardware)" - if [ "$hw" == "EX400" ]; then - curmode="routed_mtk" - else - curmode="routed_brcm" - fi - uci set netmode.setup.curmode="$curmode" - uci commit netmode - fi - - old_mode=`cat $OLD_MODE_FILE 2>/dev/null` - - # if curmode has not changed do not copy configs - if [ "$curmode" == "$old_mode" ]; then - /etc/init.d/environment reload - return - fi - - echo $curmode >$OLD_MODE_FILE - - [ -d "/etc/netmodes/$curmode" ] || return - cp /etc/netmodes/$curmode/* /etc/config/ - rm -f /etc/config/DETAILS - sync - local reboot=$(uci -q get netmode.$curmode.reboot) - local askcred=$(uci -q get netmode.$curmode.askcred) - if [ "$reboot" == "0" ]; then - /etc/init.d/environment reload - case "$curmode" in - routed*) - [ -f /etc/init.d/layer2 ] && /etc/init.d/layer2 reload - ubus call uci commit '{"config":"network"}' - ;; - repeater*) - if [ -f /etc/init.d/omcproxy ]; then - /etc/init.d/omcproxy stop - fi - if [ "$netreload" != "0" ]; then - [ -f /etc/init.d/layer2 ] && /etc/init.d/layer2 reload - ubus call uci commit '{"config":"network"}' - fi - ;; - esac - else - reboot & - fi -} - -start_repeater_tools() { - local curmode repeaterready - - killall -9 wificontrol >/dev/null 2>&1 - killall -9 netmode-discover >/dev/null 2>&1 - - config_load netmode - config_get_bool repeaterready setup repeaterready 0 - - [ $repeaterready -eq 1 ] && { - /sbin/wificontrol --repeater & - return - } - - config_get curmode setup curmode - - case "$curmode" in - repeater*) - /sbin/netmode-discover & - /sbin/wificontrol --repeater & - ;; - esac -} +. /lib/functions.sh +include /lib/network start_netmoded() { procd_open_instance @@ -293,24 +22,20 @@ start_netmoded() { start_service() { populate_netmodes + start_netmoded - start_repeater_tools + start_netmode_tools } reload_service() { - switch_netmode "$1" - - # set default JUCI page to overview - uci -q set juci.juci.homepage="overview" - uci commit juci + switch_netmode start_netmoded - start_repeater_tools + start_netmode_tools } stop_service() { - killall -9 netmode-discover >/dev/null 2>&1 - killall -9 wificontrol >/dev/null 2>&1 + stop_netmode_tools } service_triggers() diff --git a/inteno-netmodes/files/lib/network/netmode.sh b/inteno-netmodes/files/lib/network/netmode.sh new file mode 100644 index 000000000..edea03b50 --- /dev/null +++ b/inteno-netmodes/files/lib/network/netmode.sh @@ -0,0 +1,382 @@ +#!/bin/sh + +. /lib/functions.sh +. /lib/functions/network.sh +. /usr/share/libubox/jshn.sh + +TMPDIR=/var/netmodes +OLD_MODE_FILE=/var/netmodes/old_mode +MODEDIR=$(uci -q get netmode.setup.dir) +[ -n "$MODEDIR" ] || MODEDIR="/etc/netmodes" + +network_get_ipaddr ip $INTERFACE +repeaterready="$(uci -q get netmode.setup.repeaterready)" + +toggle_firewall() { + local section=$1 + local disable=$2 + config_get name "$1" name + if [ "$name" == "wan" ]; then + uci -q set firewall.settings.disabled=$disable + if [ "$disable" == "1" ]; then + uci -q set firewall.$section.input="ACCEPT" + else + uci -q set firewall.$section.input="REJECT" + fi + uci -q commit firewall + fi +} + +disable_firewall() { + config_load firewall + config_foreach toggle_firewall zone $1 + /etc/init.d/firewall reload +} + +is_inteno_macaddr() +{ + macaddr=$1 + + echo $macaddr | grep -i -e "^00:22:07" \ + -e "^02:22:07" \ + -e "^44:D4:37" \ + -e "^00:0C:07" \ + -e "^02:0C:07" \ + -e "^06:0C:07" \ + -e "^00:0C:43" \ + -e "^02:0C:43" \ + -e "^06:0C:43" \ + && return + false +} + +get_wifi_wet_interface() { + handle_interface() { + config_get mode "$1" mode + if [ "$mode" == "sta" -o "$mode" == "wet" ] ; then + config_get ifname "$1" ifname + echo "$ifname" + fi + } + config_load wireless + config_foreach handle_interface wifi-iface +} + +get_wifi_iface_cfgstr() { + get_cfgno() { + config_get ifname "$1" ifname + [ "$ifname" == "$2" ] && echo "wireless.$1" + } + config_load wireless + config_foreach get_cfgno wifi-iface $1 +} + +correct_uplink() { + local IFACE="$1" + local MTK=0 + local WANDEV="$(db -q get hw.board.ethernetWanPort).1" + local link wetif + + [ "$(db -q get hw.board.hardware)" == "EX400" ] && MTK=1 + [ $MTK -eq 1 ] && WANDEV="eth0.2" + + [ -n "$IFACE" -a "$IFACE" != "$WANDEV" ] && return + + link=$(cat /sys/class/net/${WANDEV:0:4}/operstate) + [ $MTK -eq 1 ] && link=$(swconfig dev switch0 port 0 get link | awk '{print$2}' | cut -d':' -f2) + + wetif="$(get_wifi_wet_interface)" + + if [ "$link" == "up" ]; then + ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":true}" + ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":false}" + else + ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":false}" + ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":true}" + ubus call led.internet set '{"state" : "notice"}' + fi +} + +switch_netmode() { + local newmode="$1" + + [ -f /etc/config/netmode -a -d $MODEDIR ] || return + + [ -n "$newmode" ] && uci -q set netmode.setup.curmode="$newmode" + + local curmode conf repeaterready old_mode + + # NETMODE CONFIG # + config_load netmode + config_get curmode setup curmode + uci -q set netmode.setup.repeaterready="0" + uci -q set netmode.setup.curmode='repeater' + if [ "$curmode" == "repeater" ]; then + local hw="$(db -q get hw.board.hardware)" + if [ "$hw" == "EX400" ]; then + curmode="repeater_mtk_5g_up_dual_down" + else + curmode="repeater_brcm_2g_up_dual_down" + fi + uci set netmode.setup.curmode="$curmode" + fi + if [ "$curmode" == "routed" ]; then + local hw="$(db -q get hw.board.hardware)" + if [ "$hw" == "EX400" ]; then + curmode="routed_mtk" + else + curmode="routed_brcm" + fi + uci set netmode.setup.curmode="$curmode" + fi + uci commit netmode + # NETMODE CONFIG # + + old_mode="$(cat $OLD_MODE_FILE 2>/dev/null)" + + # if curmode has not changed do not copy configs + if [ "$curmode" == "$old_mode" ]; then + /etc/init.d/environment reload + return + fi + + echo $curmode >$OLD_MODE_FILE + + [ -d "/etc/netmodes/$curmode" ] || return + cp /etc/netmodes/$curmode/* /etc/config/ + rm -f /etc/config/DETAILS + sync + + local reboot=$(uci -q get netmode.$curmode.reboot) + + if [ "$reboot" == "1" ]; then + reboot & + exit + fi + + /etc/init.d/environment reload + case "$curmode" in + routed*) + [ -f /etc/init.d/layer2 ] && /etc/init.d/layer2 reload + ubus call uci commit '{"config":"network"}' + ;; + repeater*) + touch /tmp/switching_mode + echo "Switching to $curmode mode" > /dev/console + ubus call leds set '{"state" : "allflash"}' + [ -f /etc/init.d/omcproxy ] && /etc/init.d/omcproxy stop + [ -f /etc/init.d/layer2 ] && /etc/init.d/layer2 reload + ubus call network reload + wifi reload nodat + ubus call router.network reload + correct_uplink + ubus call leds set '{"state" : "normal"}' + rm -f /tmp/switching_mode + ;; + esac + + # set default JUCI page to overview + uci -q set juci.juci.homepage="overview" + uci commit juci +} + +get_ip_type() { + [ -n "$(echo $1 | grep -E '^(192\.168|10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.)')" ] && echo "private" || echo "public" +} + +get_device() { + local PORT_NAMES=$(db get hw.board.ethernetPortNames) + local PORT_ORDER=$(db get hw.board.ethernetPortOrder) + local cnt=1 + local idx=0 + + local pnum=$(echo $PORT_NAMES | wc -w) + + if [ $pnum -le 2 ]; then + PORT_NAMES=$(echo $PORT_NAMES | sed 's/LAN/LAN1/g') + fi + + # get index of interface name + for i in $PORT_NAMES; do + if [ "$i" == "$1" ]; then + idx=$cnt + fi + cnt=$((cnt+1)) + done + + # get port name from index + cnt=1 + for i in $PORT_ORDER; do + if [ "$cnt" == "$idx" ]; then + echo $i + fi + cnt=$((cnt+1)) + done +} + +populate_netmodes() { + [ -f /etc/config/netmode -a -d $MODEDIR ] || return + local curmode + + config_load netmode + + config_get curmode setup curmode + + mkdir -p $TMPDIR + + if [ "$curmode" == "routed" ]; then + local hw="$(db -q get hw.board.hardware)" + if [ "$hw" == "EX400" ]; then + curmode="routed_mtk" + else + curmode="routed_brcm" + fi + fi + + echo $curmode > $OLD_MODE_FILE + + delete_netmode() { + uci delete netmode.$1 + } + + config_foreach delete_netmode netmode + uci commit netmode + + wan=$(get_device WAN) + lan1=$(get_device LAN1) + lan2=$(get_device LAN2) + lan3=$(get_device LAN3) + lan4=$(get_device LAN4) + lan5=$(get_device LAN5) + + for file in $(find $MODEDIR -type f); do + conf="$(echo $file | cut -d'/' -f5)" + if [ "$conf" == "layer2_interface_ethernet" ]; then + grep -q "\$WAN" $file && sed -i "s/\$WAN/$wan/g" $file + fi + if [ "$conf" == "network" ]; then + grep -q "\$WAN" $file && sed -i "s/\$WAN/$wan/g" $file + grep -q "\$LAN1" $file && sed -i "s/\$LAN1/$lan1/g" $file + grep -q "\$LAN2" $file && sed -i "s/\$LAN2/$lan2/g" $file + grep -q "\$LAN3" $file && sed -i "s/\$LAN3/$lan3/g" $file + grep -q "\$LAN4" $file && sed -i "s/\$LAN4/$lan4/g" $file + + ifname="$(uci -q get $file.wan.ifname | sed 's/[ \t]*$//')" + uci -q set $file.wan.ifname="$ifname" + uci -q commit $file + fi + done + + local hardware=$(db get hw.board.hardware) + local keys lang desc exp exclude + for mode in $(ls $MODEDIR); do + + case "$mode" in + repeater*) + wlctl -i wl1 ap >/dev/null 2>&1 || ifconfig rai0 2>/dev/null | grep -q rai0 || continue + ;; + esac + + lang="" + desc="" + exp="" + uci -q set netmode.$mode=netmode + json_load "$(cat $MODEDIR/$mode/DETAILS)" + + if json_select excluded_boards; then + exclude=0 + _i=1 + while json_get_var board $_i; do + case "$hardware" in + $board) + uci -q delete netmode.$mode + exclude=1 + break + ;; + esac + _i=$((_i+1)) + done + json_select .. + [ $exclude -eq 1 ] && continue + fi + + if json_select acl; then + _i=1 + while json_get_var user $_i; do + uci add_list netmode.$mode._access_r="$user" + _i=$((_i+1)) + done + json_select .. + fi + + json_select description + json_get_keys keys + for k in $keys; do + json_get_keys lang $k + lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//') + json_select $k + json_get_var desc $lang + uci -q set netmode.$mode."desc_$lang"="$desc" + [ "$lang" == "en" ] && uci -q set netmode.$mode."desc"="$desc" + json_select .. + done + json_select .. + + json_select explanation + json_get_keys keys + for k in $keys; do + json_get_keys lang $k + lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//') + json_select $k + json_get_var exp $lang + uci -q set netmode.$mode."exp_$lang"="$exp" + [ "$lang" == "en" ] && uci -q set netmode.$mode."exp"="$exp" + json_select .. + done + json_select .. + + json_get_var cred credentials + uci -q set netmode.$mode.askcred="$cred" + json_get_var ulb uplink_band + uci -q set netmode.$mode.uplink_band="$ulb" + json_get_var reboot reboot + uci -q set netmode.$mode.reboot="$reboot" + done + + config_get curmode setup curmode + [ -d /etc/netmodes/$curmode ] || { + [ "$(db -q get hw.board.hardware)" == "EX400" ] && uci -q set netmode.setup.curmode="routed_mtk" || uci -q set netmode.setup.curmode="routed_brcm" + } + + uci commit netmode +} + +start_netmode_tools() { + local curmode repeaterready + + killall -9 wificontrol >/dev/null 2>&1 + killall -9 netmode-discover >/dev/null 2>&1 + + config_load netmode + config_get_bool repeaterready setup repeaterready 0 + + [ $repeaterready -eq 1 ] && { + /sbin/wificontrol --repeater & + return + } + + config_get curmode setup curmode + + case "$curmode" in + repeater*) + /sbin/netmode-discover & + /sbin/wificontrol --repeater & + ;; + esac +} + +stop_netmode_tools() { + killall -9 netmode-discover >/dev/null 2>&1 + killall -9 wificontrol >/dev/null 2>&1 +} + diff --git a/inteno-netmodes/files/sbin/netmode-conf b/inteno-netmodes/files/sbin/netmode-conf index 3f52d7f72..8914a182f 100755 --- a/inteno-netmodes/files/sbin/netmode-conf +++ b/inteno-netmodes/files/sbin/netmode-conf @@ -2,6 +2,7 @@ . /usr/share/libubox/jshn.sh . /lib/functions.sh +include /lib/network state="exit" TMPPATH="/tmp/netmode_config_backup" @@ -255,42 +256,6 @@ done uci commit wireless -correct_uplink(){ - - get_wifi_wet_interface() { - handle_interface() { - config_get mode "$1" mode - if [ "$mode" == "sta" -o "$mode" == "wet" ] ; then - config_get ifname "$1" ifname - echo "$ifname" - fi - } - config_load wireless - config_foreach handle_interface wifi-iface - } - - MTK=0 - [ "$(db -q get hw.board.hardware)" == "EX400" ] && MTK=1 - - WANDEV="$(db -q get hw.board.ethernetWanPort).1" - [ $MTK -eq 1 ] && WANDEV="eth0.2" - - link=$(cat /sys/class/net/${WANDEV:0:4}/operstate) - [ $MTK -eq 1 ] && link=$(swconfig dev switch0 port 0 get link | awk '{print$2}' | cut -d':' -f2) - - wetif="$(get_wifi_wet_interface)" - - if [ "$link" == "up" ]; then - ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":true}" - ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":false}" - else - ubus call network.device set_state "{\"name\":\"$wetif\", \"defer\":false}" - ubus call network.device set_state "{\"name\":\"$WANDEV\", \"defer\":true}" - ubus call led.internet set '{"state" : "notice"}' - fi - ubus call leds set '{"state":"normal"}' -} - if [ "$from_gui" == "true" ]; then # check for connectivity wifi reload @@ -329,4 +294,5 @@ else fi [ -f /etc/init.d/layer2 ] && /etc/init.d/layer2 reload correct_uplink + ubus call leds set '{"state":"normal"}' fi