378 lines
7.2 KiB
Bash
Executable File
378 lines
7.2 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
START=99
|
|
|
|
EXTRA_COMMANDS=" init_ipt "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS on off shutdown die restart "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS qos_flag status "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS on_limit off_limit set_limit reset_limit apply show_limit limit_flag "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS change_band show_band "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS set_type show_cfg "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS on_guest show_guest on_xq show_xq "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS set_seq get_seq "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS nprio reserve "
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS supress_on supress_off supress_update "
|
|
|
|
#FIX-QOS only
|
|
EXTRA_COMMANDS=" $EXTRA_COMMANDS device_in device_out "
|
|
|
|
|
|
EXTRA_HELP="
|
|
--stat:
|
|
on/off/shutdown/die/restart
|
|
qos_flag/status
|
|
--limit:
|
|
on_limit/set_limit min/max/all [MAC] MAX-UP MAX-DOWN MIN-UP MIN-DOWN
|
|
off_limit/reset_limit [MAC]
|
|
show_limit
|
|
apply
|
|
limit_flag [MAC] on/off
|
|
show_limit_flag [MAC]
|
|
--band:
|
|
change_band UP-RATE DOWN-RATE
|
|
show_band
|
|
--type:
|
|
set_type [auto/min/max/service]
|
|
show_cfg
|
|
--guest & xq:
|
|
on_guest UP DOWN
|
|
show_guest
|
|
on_xq UP DOWN
|
|
show_xq
|
|
--seq:
|
|
get_seq
|
|
set_seq [auto/game/web/video]
|
|
--supress:
|
|
supress_update/supress_on/supress_off
|
|
--others:
|
|
nprio add/del IP HIGH_PRIO_WITHOUT_LIMIT/HIGH_PRIO_WITH_BANDLIMIT
|
|
reserve add/del IP video
|
|
"
|
|
|
|
#only support 3 types, CTF/STD/FIX
|
|
QOS_VER="FIX" #here, value would be replace by sed
|
|
|
|
if [ "$QOS_VER" == "CTF" ]; then
|
|
EXECMD="/usr/bin/lua /usr/sbin/miqosd ctf"
|
|
EXECMD_C="/usr/sbin/miqosc"
|
|
export PROCLINE=$EXECMD
|
|
export PROCFLAG=$PROCLINE
|
|
elif [ "$QOS_VER" == "STD" ]; then
|
|
EXECMD="/usr/bin/lua /usr/sbin/miqosd std"
|
|
EXECMD_C="/usr/sbin/miqosc"
|
|
export PROCLINE=$EXECMD
|
|
export PROCFLAG=$PROCLINE
|
|
elif [ "$QOS_VER" == "HWQOS" ]; then
|
|
EXECMD="/usr/bin/lua /usr/sbin/miqosd hwqos"
|
|
EXECMD_C="/usr/sbin/miqosc"
|
|
export PROCLINE=$EXECMD
|
|
export PROCFLAG=$PROCLINE
|
|
else
|
|
EXECMD_C="/usr/sbin/miqosc"
|
|
fi
|
|
|
|
#not supported command check
|
|
ignore(){
|
|
null_types=$1
|
|
[ -z "$null_types" ] && return 0;
|
|
|
|
for t in $null_types;
|
|
do
|
|
[ "$t" == "$QOS_VER" ] && echo "not supported for $QOS_VER." && exit 0;
|
|
done
|
|
}
|
|
|
|
#-------------------------------
|
|
init_ipt(){
|
|
/usr/sbin/miqosd_init.sh
|
|
return $?
|
|
}
|
|
|
|
#-------------------------------
|
|
#0,ok; non-0, Nok
|
|
start() {
|
|
if [ "$QOS_VER" == "FIX" ]; then
|
|
#check NETMODE 1stly
|
|
local mode
|
|
mode=`uci -q get xiaoqiang.common.NETMODE`
|
|
if [ "$mode" == "wifiapmode" -o "$mode" == "lanapmode" ]; then
|
|
echo "In AP mode, disable QoS. exit!"
|
|
$EXECMD_C off
|
|
return 0
|
|
fi
|
|
|
|
local enabled
|
|
enabled=`uci -q get miqos.settings.enabled`
|
|
if [ "$enabled" = "1" ]; then
|
|
$EXECMD_C on
|
|
else
|
|
$EXECMD_C off
|
|
fi
|
|
return 0
|
|
else
|
|
#check NETMODE 1stly
|
|
local mode
|
|
mode=`uci get xiaoqiang.common.NETMODE 2>/dev/null`
|
|
if [ "$mode" == "wifiapmode" -o "$mode" == "lanapmode" ]; then
|
|
echo "In AP mode, disable QoS. exit!"
|
|
return 0
|
|
fi
|
|
/usr/sbin/supervisord start
|
|
|
|
qos_flag
|
|
if [ $? -ne "0" ]; then
|
|
echo "miqos is not enabled, only keep top layer1 queue."
|
|
running
|
|
if [ $? -eq "0" ]; then
|
|
$EXECMD_C off
|
|
fi
|
|
return 0
|
|
fi
|
|
|
|
# enable QoS Service
|
|
$EXECMD_C on
|
|
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
stop() {
|
|
shutdown
|
|
}
|
|
|
|
shutdown(){
|
|
$EXECMD_C shutdown
|
|
}
|
|
|
|
restart(){
|
|
stop &>/dev/null
|
|
start &>/dev/null
|
|
return 0
|
|
}
|
|
|
|
on(){
|
|
uci set miqos.settings.enabled=1
|
|
uci commit miqos
|
|
if [ -f "/etc/init.d/qca-nss-ecm" ]; then
|
|
/etc/init.d/qca-nss-ecm restart 1 &>/dev/null
|
|
fi
|
|
|
|
if [ "$QOS_VER" == "STD" ]; then
|
|
uci set hwnat.switch.miqos=1
|
|
uci commit hwnat
|
|
|
|
/etc/init.d/hwnat stop &>/dev/null
|
|
fi
|
|
|
|
start
|
|
}
|
|
|
|
off(){
|
|
#set -x
|
|
uci set miqos.settings.enabled=0
|
|
uci commit miqos
|
|
if [ -f "/etc/init.d/qca-nss-ecm" ]; then
|
|
/etc/init.d/qca-nss-ecm restart 0 &>/dev/null
|
|
fi
|
|
|
|
if [ "$QOS_VER" == "FIX" ]; then
|
|
stop #clean directly
|
|
elif [ "$QOS_VER" == "STD" ]; then
|
|
uci set hwnat.switch.miqos=0
|
|
uci commit hwnat
|
|
|
|
running
|
|
if [ $? == 1 ]; then
|
|
start # if not running, invoke start, and then off it
|
|
fi
|
|
|
|
$EXECMD_C off #close htb rules
|
|
|
|
#try to start hwnat whatever enough memory or not
|
|
/etc/init.d/hwnat start &>/dev/null
|
|
else
|
|
running
|
|
if [ $? == 1 ]; then
|
|
start # if not running, invoke start, and then off it
|
|
fi
|
|
$EXECMD_C off #close htb rules
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
die(){
|
|
#
|
|
$EXECMD_C die &
|
|
/usr/sbin/supervisord stop
|
|
return 0
|
|
}
|
|
|
|
#-------------------------------
|
|
#return: 0,enabled; 1 disabled
|
|
qos_flag(){
|
|
#config_load "miqos"
|
|
local st
|
|
st=`uci get miqos.settings.enabled 2>/dev/null`
|
|
if [ $st -eq "0" ]; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# status: 0, actived, 1, inactived
|
|
status(){
|
|
qos_flag
|
|
if [ $? == 1 ]; then
|
|
return 1
|
|
fi
|
|
|
|
if [ "$QOS_VER" == "FIX" ]; then
|
|
return 0;
|
|
else
|
|
/usr/sbin/supervisord status
|
|
if [ $? == 1 ]; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
running(){
|
|
ignore "FIX"
|
|
/usr/sbin/supervisord status
|
|
if [ $? == 1 ]; then
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
#-------------------------------
|
|
on_limit(){
|
|
$EXECMD_C on_limit $@
|
|
}
|
|
|
|
off_limit(){
|
|
$EXECMD_C off_limit $@
|
|
}
|
|
|
|
set_limit(){
|
|
$EXECMD_C set_limit $@
|
|
}
|
|
|
|
reset_limit(){
|
|
$EXECMD_C reset_limit $@
|
|
}
|
|
|
|
apply(){
|
|
$EXECMD_C apply $@
|
|
}
|
|
|
|
show_limit(){
|
|
$EXECMD_C show_limit $@
|
|
}
|
|
|
|
limit_flag(){
|
|
$EXECMD_C limit_flag $@
|
|
}
|
|
|
|
|
|
#-------------------------------
|
|
change_band(){
|
|
$EXECMD_C change_band $@
|
|
}
|
|
|
|
show_band(){
|
|
$EXECMD_C show_band $@
|
|
}
|
|
|
|
#-------------------------------
|
|
|
|
set_type(){
|
|
ignore "FIX"
|
|
$EXECMD_C set_type $@
|
|
}
|
|
|
|
show_cfg(){
|
|
$EXECMD_C show_cfg $@
|
|
}
|
|
|
|
#-------------------------------
|
|
|
|
on_guest(){
|
|
$EXECMD_C on_guest $@
|
|
}
|
|
|
|
|
|
show_guest(){
|
|
$EXECMD_C show_guest $@
|
|
}
|
|
|
|
on_xq(){
|
|
$EXECMD_C on_xq $@
|
|
}
|
|
|
|
|
|
show_xq(){
|
|
$EXECMD_C show_xq $@
|
|
}
|
|
|
|
#-------------------------------
|
|
|
|
nprio(){
|
|
ignore "FIX"
|
|
$EXECMD_C nprio $@
|
|
}
|
|
|
|
reserve(){
|
|
ignore "FIX"
|
|
$EXECMD_C reserve $@
|
|
}
|
|
|
|
#-------------------------------
|
|
get_seq(){
|
|
$EXECMD_C get_seq $@
|
|
}
|
|
|
|
set_seq(){
|
|
$EXECMD_C set_seq $@
|
|
}
|
|
|
|
#-------------------------------
|
|
|
|
supress_on(){
|
|
ignore "FIX"
|
|
$EXECMD_C supress_host on
|
|
}
|
|
|
|
supress_off(){
|
|
ignore "FIX"
|
|
$EXECMD_C supress_host off
|
|
}
|
|
|
|
supress_update(){
|
|
ignore "FIX"
|
|
local app_name="2" # xunyou
|
|
[ -f /proc/flowmark_app ] && {
|
|
ret=`cat /proc/flowmark_app | awk -v app_name=$app_name -F, '{ if($5!="" && $2==app_name){print($5) } }'`
|
|
if [ "$ret" != "" ]; then
|
|
echo [$ret]
|
|
$EXECMD_C supress_host on
|
|
else
|
|
$EXECMD_C supress_host off
|
|
fi
|
|
}
|
|
}
|
|
|
|
#-------------------------------
|
|
|
|
device_in(){
|
|
ignore "CTF STD"
|
|
$EXECMD_C device_in $@
|
|
}
|
|
|
|
device_out(){
|
|
ignore "CTF STD"
|
|
$EXECMD_C device_out $@
|
|
}
|