blob: 1b2fbfdf60a516539f937f7dcf5b5c9a50a36ee6 [file] [log] [blame]
#!/bin/sh
. /lib/functions.sh
config_load mtkhnat
config_get enable global enable 0
config_get hqos global hqos 0
config_get txq_num global txq_num 16
config_get scheduling global scheduling "wrr"
config_get sch0_bw global sch0_bw 100000
config_get sch1_bw global sch1_bw 100000
# disable bridge netfilter module to avoid high cpu usage
echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
echo 0 > /proc/sys/net/bridge/bridge-nf-filter-pppoe-tagged
echo 0 > /proc/sys/net/bridge/bridge-nf-filter-vlan-tagged
echo 0 > /proc/sys/net/bridge/bridge-nf-pass-vlan-input-dev
#if enable=0, disable qdma_sch & qdma_txq
[ "${enable}" -eq 1 ] || {
echo 0 ${scheduling} ${sch0_bw} > /sys/kernel/debug/hnat/qdma_sch0
echo 0 ${scheduling} ${sch1_bw} > /sys/kernel/debug/hnat/qdma_sch1
echo 0 0 0 0 0 0 4 > /sys/kernel/debug/hnat/qdma_txq0
for i in $(seq 1 $((txq_num - 1)))
do
echo 0 0 0 0 0 0 0 > /sys/kernel/debug/hnat/qdma_txq$i
done
rmmod mtkhnat
exit 0
}
insmod mtkhnat
#if hqos=0, disable qdma_sch & qdma_txq
[ "${hqos}" -eq 1 ] || {
echo 0 ${scheduling} ${sch0_bw} > /sys/kernel/debug/hnat/qdma_sch0
echo 0 ${scheduling} ${sch1_bw} > /sys/kernel/debug/hnat/qdma_sch1
for i in $(seq 0 $((txq_num - 1)))
do
if [ "${i}" -le $(((txq_num / 2) - 1)) ]; then
echo 0 0 0 0 0 0 4 > /sys/kernel/debug/hnat/qdma_txq$i
else
echo 1 0 0 0 0 0 4 > /sys/kernel/debug/hnat/qdma_txq$i
fi
done
exit 0
}
# enable qdma_sch0 and qdma_sch1
echo 1 ${scheduling} ${sch0_bw} > /sys/kernel/debug/hnat/qdma_sch0
echo 1 ${scheduling} ${sch1_bw} > /sys/kernel/debug/hnat/qdma_sch1
# enable bridge netfilter module to allow skb being marked
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
setup_queue() {
local queue_id queue_scheduler queue_minebl queue_maxebl
local queue_minrate queue_maxrate queue_resv minrate maxrate queue_weight
config_get queue_id $1 id 0
config_get queue_minrate $1 minrate 0
config_get queue_maxrate $1 maxrate 0
config_get queue_resv $1 resv 4
config_get queue_weight $1 weight 4
# check qid < txq max num or not for loop condition
[ "${queue_id}" -gt $((txq_num - 1)) ] && return 0
# start to set per queue config
queue_minebl=1
queue_maxebl=1
queue_scheduler=0
# if min rate = 0, set min enable = 0
# if max rate = 0, set max enable = 0
[ "${queue_minrate}" -eq 0 ] && queue_minebl=0
[ "${queue_maxrate}" -eq 0 ] && queue_maxebl=0
# calculate min rate according to sch0_bw
minrate=$((sch0_bw * $queue_minrate))
minrate=$((minrate / 100))
# calculate max rate according to sch0_bw
maxrate=$((sch0_bw * $queue_maxrate))
maxrate=$((maxrate / 100))
# set the queue of sch0 group(the lower half of total queues)
[ "${queue_id}" -le $(((txq_num / 2) - 1)) ] && \
echo 0 ${queue_minebl} ${minrate} ${queue_maxebl} ${maxrate} ${queue_weight} \
${queue_resv} > /sys/kernel/debug/hnat/qdma_txq${queue_id}
# calculate min rate according to sch1_bw
minrate=$((sch1_bw * $queue_minrate))
minrate=$((minrate / 100))
# calculate max rate according to sch1_bw
maxrate=$((sch1_bw * $queue_maxrate))
maxrate=$((maxrate / 100))
# set the queue of sch1 group(the upper half of total queues)
[ "${queue_id}" -gt $(((txq_num / 2) - 1)) ] && \
echo 1 ${queue_minebl} ${minrate} ${queue_maxebl} ${maxrate} ${queue_weight} \
${queue_resv} > /sys/kernel/debug/hnat/qdma_txq${queue_id}
}
config_foreach setup_queue queue