blob: 38d3fe26884486ee35acfed83372a806109812b5 [file] [log] [blame]
developerfd40db22021-04-29 10:08:25 +08001#!/bin/sh
2
3. /lib/functions.sh
4
5config_load mtkhnat
6config_get enable global enable 0
7config_get hqos global hqos 0
8config_get txq_num global txq_num 16
developerbcde4cb2023-11-03 10:28:37 +08009config_get sch_num global sch_num 2
developerfd40db22021-04-29 10:08:25 +080010config_get scheduling global scheduling "wrr"
11config_get sch0_bw global sch0_bw 100000
12config_get sch1_bw global sch1_bw 100000
developerbcde4cb2023-11-03 10:28:37 +080013config_get sch2_bw global sch2_bw 100000
14config_get sch3_bw global sch3_bw 100000
developerfd40db22021-04-29 10:08:25 +080015
developer04f0ec82021-12-30 13:59:10 +080016# disable bridge netfilter module to avoid high cpu usage
17echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables
18echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
19echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
20echo 0 > /proc/sys/net/bridge/bridge-nf-filter-pppoe-tagged
21echo 0 > /proc/sys/net/bridge/bridge-nf-filter-vlan-tagged
22echo 0 > /proc/sys/net/bridge/bridge-nf-pass-vlan-input-dev
23
developerf1fcda92022-09-22 09:45:43 +080024#if hnat is not exist, switch module to mtk_ppe
25module=hnat
26[ -d /sys/kernel/debug/${module} ] || {
27 module=mtk_ppe
developer45d02782022-10-14 10:33:40 +080028 echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
29 echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
developerf1fcda92022-09-22 09:45:43 +080030}
31
developerfd40db22021-04-29 10:08:25 +080032#if enable=0, disable qdma_sch & qdma_txq
33[ "${enable}" -eq 1 ] || {
developerbcde4cb2023-11-03 10:28:37 +080034 for i in $(seq 0 $((sch_num - 1)))
35 do
36 eval sch_bw='$sch'$i'_bw'
37 echo 0 ${scheduling} ${sch_bw} > /sys/kernel/debug/${module}/qdma_sch${i}
38 done
39
developerf1fcda92022-09-22 09:45:43 +080040 echo 0 0 0 0 0 0 4 > /sys/kernel/debug/${module}/qdma_txq0
developerfd40db22021-04-29 10:08:25 +080041 for i in $(seq 1 $((txq_num - 1)))
42 do
developerf1fcda92022-09-22 09:45:43 +080043 echo 0 0 0 0 0 0 0 > /sys/kernel/debug/${module}/qdma_txq$i
developerfd40db22021-04-29 10:08:25 +080044 done
45
46 rmmod mtkhnat
47 exit 0
48}
49
50insmod mtkhnat
51
52#if hqos=0, disable qdma_sch & qdma_txq
53[ "${hqos}" -eq 1 ] || {
developerbcde4cb2023-11-03 10:28:37 +080054 for i in $(seq 0 $((sch_num - 1)))
55 do
56 eval sch_bw='$sch'$i'_bw'
57 echo 0 ${scheduling} ${sch_bw} > /sys/kernel/debug/${module}/qdma_sch${i}
58 done
developer04f0ec82021-12-30 13:59:10 +080059
60 for i in $(seq 0 $((txq_num - 1)))
developerfd40db22021-04-29 10:08:25 +080061 do
developerbcde4cb2023-11-03 10:28:37 +080062 current_sch=$((${i} / (txq_num / sch_num)))
63 echo ${current_sch} 0 0 0 0 0 4 > /sys/kernel/debug/${module}/qdma_txq$i
developerfd40db22021-04-29 10:08:25 +080064 done
65
66 exit 0
67}
68
developerbcde4cb2023-11-03 10:28:37 +080069# enable qdma_sch
70for i in $(seq 0 $((sch_num - 1)))
71do
72 eval sch_bw='$sch'$i'_bw'
73 echo 1 ${scheduling} ${sch_bw} > /sys/kernel/debug/${module}/qdma_sch${i}
74done
developerfd40db22021-04-29 10:08:25 +080075
developer04f0ec82021-12-30 13:59:10 +080076# enable bridge netfilter module to allow skb being marked
77echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
78echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
79
developerfd40db22021-04-29 10:08:25 +080080setup_queue() {
developerbcde4cb2023-11-03 10:28:37 +080081 local queue_id queue_minebl queue_maxebl
developerfd40db22021-04-29 10:08:25 +080082 local queue_minrate queue_maxrate queue_resv minrate maxrate queue_weight
developerbcde4cb2023-11-03 10:28:37 +080083 local current_sch
developerfd40db22021-04-29 10:08:25 +080084
85 config_get queue_id $1 id 0
86 config_get queue_minrate $1 minrate 0
87 config_get queue_maxrate $1 maxrate 0
88 config_get queue_resv $1 resv 4
89 config_get queue_weight $1 weight 4
90
91 # check qid < txq max num or not for loop condition
92 [ "${queue_id}" -gt $((txq_num - 1)) ] && return 0
93
94 # start to set per queue config
95 queue_minebl=1
96 queue_maxebl=1
developerfd40db22021-04-29 10:08:25 +080097
98 # if min rate = 0, set min enable = 0
99 # if max rate = 0, set max enable = 0
100 [ "${queue_minrate}" -eq 0 ] && queue_minebl=0
101 [ "${queue_maxrate}" -eq 0 ] && queue_maxebl=0
102
developerbcde4cb2023-11-03 10:28:37 +0800103 # get current scheduler id
104 current_sch=$((${queue_id} / (txq_num / sch_num)))
developerfd40db22021-04-29 10:08:25 +0800105
developerbcde4cb2023-11-03 10:28:37 +0800106 # calculate min rate according to schx_bw
107 minrate=$((sch${current_sch}_bw * $queue_minrate))
developerfd40db22021-04-29 10:08:25 +0800108 minrate=$((minrate / 100))
109
developerbcde4cb2023-11-03 10:28:37 +0800110 # calculate max rate according to schx_bw
111 maxrate=$((sch${current_sch}_bw * $queue_maxrate))
developerfd40db22021-04-29 10:08:25 +0800112 maxrate=$((maxrate / 100))
113
developerbcde4cb2023-11-03 10:28:37 +0800114 echo ${current_sch} ${queue_minebl} ${minrate} ${queue_maxebl} ${maxrate} ${queue_weight} \
developerf1fcda92022-09-22 09:45:43 +0800115 ${queue_resv} > /sys/kernel/debug/${module}/qdma_txq${queue_id}
developerfd40db22021-04-29 10:08:25 +0800116}
117
118config_foreach setup_queue queue