developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | . /lib/functions.sh |
| 4 | |
| 5 | config_load mtkhnat |
| 6 | config_get enable global enable 0 |
| 7 | config_get hqos global hqos 0 |
| 8 | config_get txq_num global txq_num 16 |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 9 | config_get sch_num global sch_num 2 |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 10 | config_get scheduling global scheduling "wrr" |
| 11 | config_get sch0_bw global sch0_bw 100000 |
| 12 | config_get sch1_bw global sch1_bw 100000 |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 13 | config_get sch2_bw global sch2_bw 100000 |
| 14 | config_get sch3_bw global sch3_bw 100000 |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 15 | |
developer | 55466de | 2021-12-30 13:59:10 +0800 | [diff] [blame] | 16 | # disable bridge netfilter module to avoid high cpu usage |
| 17 | echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables |
| 18 | echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables |
| 19 | echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables |
| 20 | echo 0 > /proc/sys/net/bridge/bridge-nf-filter-pppoe-tagged |
| 21 | echo 0 > /proc/sys/net/bridge/bridge-nf-filter-vlan-tagged |
| 22 | echo 0 > /proc/sys/net/bridge/bridge-nf-pass-vlan-input-dev |
| 23 | |
developer | ed7404f | 2022-09-22 09:45:43 +0800 | [diff] [blame] | 24 | #if hnat is not exist, switch module to mtk_ppe |
| 25 | module=hnat |
| 26 | [ -d /sys/kernel/debug/${module} ] || { |
| 27 | module=mtk_ppe |
developer | 53d2237 | 2022-10-14 10:33:40 +0800 | [diff] [blame] | 28 | echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables |
| 29 | echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables |
developer | ed7404f | 2022-09-22 09:45:43 +0800 | [diff] [blame] | 30 | } |
| 31 | |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 32 | #if enable=0, disable qdma_sch & qdma_txq |
| 33 | [ "${enable}" -eq 1 ] || { |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 34 | 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 | |
developer | ed7404f | 2022-09-22 09:45:43 +0800 | [diff] [blame] | 40 | echo 0 0 0 0 0 0 4 > /sys/kernel/debug/${module}/qdma_txq0 |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 41 | for i in $(seq 1 $((txq_num - 1))) |
| 42 | do |
developer | ed7404f | 2022-09-22 09:45:43 +0800 | [diff] [blame] | 43 | echo 0 0 0 0 0 0 0 > /sys/kernel/debug/${module}/qdma_txq$i |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 44 | done |
| 45 | |
| 46 | rmmod mtkhnat |
| 47 | exit 0 |
| 48 | } |
| 49 | |
| 50 | insmod mtkhnat |
| 51 | |
| 52 | #if hqos=0, disable qdma_sch & qdma_txq |
| 53 | [ "${hqos}" -eq 1 ] || { |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 54 | 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 |
developer | 55466de | 2021-12-30 13:59:10 +0800 | [diff] [blame] | 59 | |
| 60 | for i in $(seq 0 $((txq_num - 1))) |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 61 | do |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 62 | current_sch=$((${i} / (txq_num / sch_num))) |
| 63 | echo ${current_sch} 0 0 0 0 0 4 > /sys/kernel/debug/${module}/qdma_txq$i |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 64 | done |
| 65 | |
| 66 | exit 0 |
| 67 | } |
| 68 | |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 69 | # enable qdma_sch |
| 70 | for i in $(seq 0 $((sch_num - 1))) |
| 71 | do |
| 72 | eval sch_bw='$sch'$i'_bw' |
| 73 | echo 1 ${scheduling} ${sch_bw} > /sys/kernel/debug/${module}/qdma_sch${i} |
| 74 | done |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 75 | |
developer | 55466de | 2021-12-30 13:59:10 +0800 | [diff] [blame] | 76 | # enable bridge netfilter module to allow skb being marked |
| 77 | echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables |
| 78 | echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables |
| 79 | |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 80 | setup_queue() { |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 81 | local queue_id queue_minebl queue_maxebl |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 82 | local queue_minrate queue_maxrate queue_resv minrate maxrate queue_weight |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 83 | local current_sch |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 84 | |
| 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 |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 97 | |
| 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 | |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 103 | # get current scheduler id |
| 104 | current_sch=$((${queue_id} / (txq_num / sch_num))) |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 105 | |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 106 | # calculate min rate according to schx_bw |
| 107 | minrate=$((sch${current_sch}_bw * $queue_minrate)) |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 108 | minrate=$((minrate / 100)) |
| 109 | |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 110 | # calculate max rate according to schx_bw |
| 111 | maxrate=$((sch${current_sch}_bw * $queue_maxrate)) |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 112 | maxrate=$((maxrate / 100)) |
| 113 | |
developer | 2bad3f4 | 2023-11-03 10:28:37 +0800 | [diff] [blame] | 114 | echo ${current_sch} ${queue_minebl} ${minrate} ${queue_maxebl} ${maxrate} ${queue_weight} \ |
developer | ed7404f | 2022-09-22 09:45:43 +0800 | [diff] [blame] | 115 | ${queue_resv} > /sys/kernel/debug/${module}/qdma_txq${queue_id} |
developer | fd40db2 | 2021-04-29 10:08:25 +0800 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | config_foreach setup_queue queue |