mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
150 lines
3.2 KiB
Bash
150 lines
3.2 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
. /usr/share/libubox/jshn.sh
|
|
|
|
MODEDIR=$(uci -q get netmode.setup.dir)
|
|
|
|
[ -n "$MODEDIR" ] || MODEDIR="/etc/netmodes"
|
|
|
|
run_netmode_scripts() {
|
|
local mode=$1
|
|
local when=$2
|
|
local script
|
|
local path
|
|
|
|
path=$(readlink -f /etc/netmodes/$mode/)
|
|
[ "${path:0:14}" == "/etc/netmodes/" ] || exit
|
|
|
|
if [ -d /etc/netmodes/$mode/scripts/$when ]; then
|
|
logger -s -p user.info -t "netmode" "Executing $when netmode scripts" >/dev/console
|
|
for script in $(ls /etc/netmodes/$mode/scripts/$when/); do
|
|
sh /etc/netmodes/$mode/scripts/$when/$script
|
|
done
|
|
fi
|
|
}
|
|
|
|
switch_netmode() {
|
|
[ -f /etc/config/netmode -a -d $MODEDIR ] || return
|
|
|
|
config_load netmode
|
|
|
|
local enabled
|
|
config_get_bool enabled setup enabled '0'
|
|
[ $enabled -eq 0 ] && return
|
|
|
|
local mode
|
|
config_get mode setup mode
|
|
|
|
[ -d "/etc/netmodes/$mode" ] || return
|
|
|
|
logger -s -p user.info -t "netmode" "Switching to $mode Mode" >/dev/console
|
|
|
|
run_netmode_scripts $mode "pre"
|
|
|
|
local reboot=$(uci -q get netmode.$mode.reboot)
|
|
|
|
if [ "$reboot" == "1" ]; then
|
|
#run_netmode_scripts $mode "post"
|
|
reboot &
|
|
exit
|
|
fi
|
|
|
|
#run_netmode_scripts $mode "post"
|
|
}
|
|
|
|
populate_netmodes() {
|
|
[ -f /etc/config/netmode -a -d $MODEDIR ] || return
|
|
|
|
config_load netmode
|
|
|
|
local enabled
|
|
config_get_bool enabled setup enabled '0'
|
|
[ $enabled -eq 0 ] && return
|
|
|
|
delete_netmode() {
|
|
uci delete netmode.$1
|
|
}
|
|
|
|
config_foreach delete_netmode netmode
|
|
uci commit netmode
|
|
|
|
local hardware=$(db -q get hw.board.model_name)
|
|
local keys lang desc exp exclude support
|
|
for mode in $(ls $MODEDIR); do
|
|
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
|
|
elif json_select supported_boards; then
|
|
support=0
|
|
_i=1
|
|
while json_get_var board $_i; do
|
|
case "$hardware" in
|
|
$board)
|
|
support=1
|
|
break
|
|
;;
|
|
esac
|
|
_i=$((_i+1))
|
|
done
|
|
json_select ..
|
|
[ $support -eq 1 ] || {
|
|
uci -q delete netmode.$mode
|
|
continue
|
|
}
|
|
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
|
|
|
|
uci commit netmode
|
|
}
|