mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
Revert "qos: Deprecate firewall.qos and handle through qos config"
This reverts commit cf16fa7a6f.
This commit is contained in:
parent
53e13bc58c
commit
a53706b95b
5 changed files with 108 additions and 350 deletions
|
|
@ -1,154 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
|
||||
generate_queue(){
|
||||
section="$1"
|
||||
|
||||
config_get ifname "$section" "ifname"
|
||||
|
||||
if [ "$ifname" != "$ethwan" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# guaranteed number of queues
|
||||
no_of_q="0 1 2 3"
|
||||
|
||||
i=0
|
||||
local total_q=$((${no_of_q##* } + 1))
|
||||
for i in $no_of_q; do
|
||||
order=$((total_q - i))
|
||||
uci add qos queue
|
||||
uci rename qos.@queue[-1]="q_${i}_${ifname}"
|
||||
uci set qos.@queue[-1].enable="1"
|
||||
uci set qos.@queue[-1].ifname="$ifname"
|
||||
uci set qos.@queue[-1].precedence="$order"
|
||||
uci set qos.@queue[-1].scheduling="SP"
|
||||
uci set qos.@queue[-1].rate="0"
|
||||
uci set qos.@queue[-1].burst_size="0"
|
||||
uci set qos.@queue[-1].weight="1"
|
||||
done
|
||||
|
||||
uci commit qos
|
||||
}
|
||||
|
||||
classify_no=0
|
||||
generate_dns_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="udp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="53"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
}
|
||||
|
||||
generate_dhcp_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="udp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="67"
|
||||
uci set qos.@classify[-1].dest_port_range="68"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
}
|
||||
|
||||
generate_igmp_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="IGMP"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="2"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
}
|
||||
|
||||
generate_icmp_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="icmp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].proto="icmp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$2"
|
||||
}
|
||||
|
||||
generate_classify(){
|
||||
|
||||
# assign no. of queue as 4 for airoha target
|
||||
queue_num=4
|
||||
|
||||
q_def_queue="0"
|
||||
q_normal="1"
|
||||
q_medium="2"
|
||||
q_highest="3"
|
||||
|
||||
# Local generated DNS traffic goes to q_highest
|
||||
generate_dns_rule $q_highest
|
||||
# Local generated IGMP traffic goes to q_highest
|
||||
generate_igmp_rule $q_highest
|
||||
# Local generated DHCP traffic goes to q_highest
|
||||
generate_dhcp_rule $q_highest
|
||||
# Local generated ICMP traffic goes to q_highest rotue as q_normal
|
||||
generate_icmp_rule $q_highest $q_normal
|
||||
|
||||
# VLAN priority tag -> Queue priority
|
||||
for i in `seq 0 3`; do
|
||||
# map vlan priority[0-7] to 4 queue
|
||||
# 0,1 to 0 queue : 2,3 to 1 queue
|
||||
# 4,5 to 2 queue : 6,7 to 3 queue
|
||||
uci add qos classify
|
||||
classify_no=$((classify_no + 1))
|
||||
tc=$((i * 2))
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].pcp_check="$tc"
|
||||
uci set qos.@classify[-1].traffic_class="$i"
|
||||
|
||||
classify_no=$((classify_no + 1))
|
||||
tc=$((tc + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].pcp_check="$tc"
|
||||
uci set qos.@classify[-1].traffic_class="$i"
|
||||
done
|
||||
|
||||
uci commit qos
|
||||
}
|
||||
|
||||
if [ -s "/etc/config/qos" ]; then
|
||||
if uci -q get qos.@queue[0] >/dev/null; then
|
||||
# cleaning up for upgrade same version that contain firewall.qos
|
||||
if [ -s "/etc/firewall.qos" ]; then
|
||||
rm -f "/etc/firewall.qos"
|
||||
if [ -s "/etc/config/firewall" ]; then
|
||||
uci delete firewall.qos
|
||||
fi
|
||||
generate_classify
|
||||
fi
|
||||
# return if there is any valid content
|
||||
exit
|
||||
else
|
||||
rm -f /etc/config/qos
|
||||
fi
|
||||
fi
|
||||
touch /etc/config/qos
|
||||
|
||||
# generate qos queue config
|
||||
config_load ports
|
||||
config_foreach generate_queue ethport
|
||||
|
||||
# generate qos classify config
|
||||
generate_classify
|
||||
48
qosmngr/files/airoha/etc/uci-defaults/60-qos_queue_generate
Normal file
48
qosmngr/files/airoha/etc/uci-defaults/60-qos_queue_generate
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
|
||||
generate_queue(){
|
||||
section="$1"
|
||||
|
||||
config_get ifname "$section" "ifname"
|
||||
|
||||
if [ "$ifname" != "$ethwan" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# guaranteed number of queues
|
||||
no_of_q="0 1 2 3"
|
||||
|
||||
i=0
|
||||
local total_q=$((${no_of_q##* } + 1))
|
||||
for i in $no_of_q; do
|
||||
order=$((total_q - i))
|
||||
uci add qos queue
|
||||
uci rename qos.@queue[-1]="q_${i}_${ifname}"
|
||||
uci set qos.@queue[-1].enable="1"
|
||||
uci set qos.@queue[-1].ifname="$ifname"
|
||||
uci set qos.@queue[-1].precedence="$order"
|
||||
uci set qos.@queue[-1].scheduling="SP"
|
||||
uci set qos.@queue[-1].rate="0"
|
||||
uci set qos.@queue[-1].burst_size="0"
|
||||
uci set qos.@queue[-1].weight="1"
|
||||
done
|
||||
|
||||
uci commit qos
|
||||
}
|
||||
|
||||
if [ -s "/etc/config/qos" ]; then
|
||||
if uci -q get qos.@queue[0] >/dev/null; then
|
||||
# return if there is any valid content
|
||||
exit
|
||||
else
|
||||
rm -f /etc/config/qos
|
||||
fi
|
||||
fi
|
||||
touch /etc/config/qos
|
||||
|
||||
config_load ports
|
||||
config_foreach generate_queue ethport
|
||||
|
|
@ -1,195 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
cpu_model="$(cat /proc/socinfo | grep 'SoC Name' | cut -d':' -f2)"
|
||||
|
||||
generate_queue(){
|
||||
section="$1"
|
||||
|
||||
config_get ifname "$section" "ifname"
|
||||
|
||||
local is_lan=0
|
||||
if [ "$ifname" != "$ethwan" ]; then
|
||||
is_lan=1
|
||||
fi
|
||||
|
||||
local no_of_q="0 1 2 3 4 5 6 7"
|
||||
|
||||
if [ $is_lan -eq 1 ]; then
|
||||
case $cpu_model in
|
||||
BCM68*) no_of_q="0 1 2 3" ;;
|
||||
esac
|
||||
|
||||
if grep -qE '[0-9]+ archer$' /proc/devices; then
|
||||
no_of_q="0 1 2 3"
|
||||
fi
|
||||
fi
|
||||
|
||||
i=0
|
||||
local total_q=$((${no_of_q##* } + 1))
|
||||
for i in $no_of_q; do
|
||||
order=$((total_q - i))
|
||||
uci add qos queue
|
||||
uci rename qos.@queue[-1]="q_${i}_${ifname}"
|
||||
uci set qos.@queue[-1].enable="1"
|
||||
uci set qos.@queue[-1].ifname="$ifname"
|
||||
uci set qos.@queue[-1].precedence="$order"
|
||||
uci set qos.@queue[-1].scheduling="SP"
|
||||
uci set qos.@queue[-1].rate="0"
|
||||
uci set qos.@queue[-1].burst_size="0"
|
||||
uci set qos.@queue[-1].weight="1"
|
||||
done
|
||||
|
||||
uci commit qos
|
||||
}
|
||||
|
||||
classify_no=0
|
||||
generate_dns_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="udp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="53"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
}
|
||||
|
||||
generate_dhcp_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="udp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="67"
|
||||
uci set qos.@classify[-1].dest_port_range="68"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
}
|
||||
|
||||
generate_igmp_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="IGMP"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].dest_port="2"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
}
|
||||
|
||||
generate_icmp_rule(){
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].ifname="lo"
|
||||
uci set qos.@classify[-1].proto="icmp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$1"
|
||||
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].proto="icmp"
|
||||
uci set qos.@classify[-1].ethertype="IPv4"
|
||||
uci set qos.@classify[-1].traffic_class="$2"
|
||||
}
|
||||
|
||||
generate_classify(){
|
||||
|
||||
# assign no. of queue based on target model
|
||||
if [ "$cpu_model" == "BCM68" ]; then
|
||||
queue_num=4
|
||||
elif [ grep -qE '[0-9]+ archer$' /proc/devices ]; then
|
||||
queue_num=4
|
||||
else
|
||||
queue_num=8
|
||||
fi
|
||||
|
||||
# assign queue type
|
||||
if [ $queue_num -eq 8 ]; then
|
||||
q_def_queue="0"
|
||||
q_low="1"
|
||||
q_besteffort="2"
|
||||
q_normal="3"
|
||||
q_video="4"
|
||||
q_medium="5"
|
||||
q_high="6"
|
||||
q_highest="7"
|
||||
elif [ $queue_num -eq 4 ]; then
|
||||
q_def_queue="0"
|
||||
q_normal="1"
|
||||
q_medium="2"
|
||||
q_highest="3"
|
||||
fi
|
||||
|
||||
# Local generated DNS traffic goes to q_highest
|
||||
generate_dns_rule $q_highest
|
||||
# Local generated IGMP traffic goes to q_highest
|
||||
generate_igmp_rule $q_highest
|
||||
# Local generated DHCP traffic goes to q_highest
|
||||
generate_dhcp_rule $q_highest
|
||||
# Local generated ICMP traffic goes to q_highest rotue as q_normal
|
||||
generate_icmp_rule $q_highest $q_normal
|
||||
|
||||
# VLAN priority tag -> Queue priority
|
||||
if [ $queue_num -eq 8 ]; then
|
||||
# map vlan priority[0-7] to 8 queue
|
||||
for i in `seq 1 7`; do
|
||||
classify_no=$((classify_no + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].pcp_check="$i"
|
||||
uci set qos.@classify[-1].traffic_class="$i"
|
||||
done
|
||||
elif [ $queue_num -eq 4 ]; then
|
||||
# map vlan priority[0-7] to 4 queue
|
||||
# 0,1 to 0 queue : 2,3 to 1 queue
|
||||
# 4,5 to 2 queue : 6,7 to 3 queue
|
||||
for i in `seq 0 3`; do
|
||||
uci add qos classify
|
||||
classify_no=$((classify_no + 1))
|
||||
tc=$((i * 2))
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].pcp_check="$tc"
|
||||
uci set qos.@classify[-1].traffic_class="$i"
|
||||
|
||||
classify_no=$((classify_no + 1))
|
||||
tc=$((tc + 1))
|
||||
uci add qos classify
|
||||
uci rename qos.@classify[-1]="c${classify_no}"
|
||||
uci set qos.@classify[-1].pcp_check="$tc"
|
||||
uci set qos.@classify[-1].traffic_class="$i"
|
||||
done
|
||||
fi
|
||||
|
||||
uci commit qos
|
||||
}
|
||||
|
||||
if [ -s "/etc/config/qos" ]; then
|
||||
if uci -q get qos.@queue[0] >/dev/null; then
|
||||
# cleaning up for upgrade same version that contain firewall.qos
|
||||
if [ -s "/etc/firewall.qos" ]; then
|
||||
rm -f "/etc/firewall.qos"
|
||||
if [ -s "/etc/config/firewall" ]; then
|
||||
uci delete firewall.qos
|
||||
fi
|
||||
generate_classify
|
||||
fi
|
||||
# return if there is any valid content
|
||||
exit
|
||||
else
|
||||
rm -f /etc/config/qos
|
||||
fi
|
||||
fi
|
||||
touch /etc/config/qos
|
||||
|
||||
# generate qos queue config
|
||||
config_load ports
|
||||
config_foreach generate_queue ethport
|
||||
|
||||
|
||||
# generate qos classify config
|
||||
generate_classify
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
ethwan="$(db -q get hw.board.ethernetWanPort)"
|
||||
cpu_model="$(cat /proc/socinfo | grep 'SoC Name' | cut -d':' -f2)"
|
||||
|
||||
generate_queue(){
|
||||
section="$1"
|
||||
|
||||
config_get ifname "$section" "ifname"
|
||||
|
||||
local is_lan=0
|
||||
if [ "$ifname" != "$ethwan" ]; then
|
||||
is_lan=1
|
||||
fi
|
||||
|
||||
local no_of_q="0 1 2 3 4 5 6 7"
|
||||
|
||||
if [ $is_lan -eq 1 ]; then
|
||||
case $cpu_model in
|
||||
BCM68*) no_of_q="0 1 2 3" ;;
|
||||
esac
|
||||
|
||||
if grep -qE '[0-9]+ archer$' /proc/devices; then
|
||||
no_of_q="0 1 2 3"
|
||||
fi
|
||||
fi
|
||||
|
||||
i=0
|
||||
local total_q=$((${no_of_q##* } + 1))
|
||||
for i in $no_of_q; do
|
||||
order=$((total_q - i))
|
||||
uci add qos queue
|
||||
uci rename qos.@queue[-1]="q_${i}_${ifname}"
|
||||
uci set qos.@queue[-1].enable="1"
|
||||
uci set qos.@queue[-1].ifname="$ifname"
|
||||
uci set qos.@queue[-1].precedence="$order"
|
||||
uci set qos.@queue[-1].scheduling="SP"
|
||||
uci set qos.@queue[-1].rate="0"
|
||||
uci set qos.@queue[-1].burst_size="0"
|
||||
uci set qos.@queue[-1].weight="1"
|
||||
done
|
||||
|
||||
uci commit qos
|
||||
}
|
||||
|
||||
if [ -s "/etc/config/qos" ]; then
|
||||
if uci -q get qos.@queue[0] >/dev/null; then
|
||||
# return if there is any valid content
|
||||
exit
|
||||
else
|
||||
rm -f /etc/config/qos
|
||||
fi
|
||||
fi
|
||||
touch /etc/config/qos
|
||||
|
||||
config_load ports
|
||||
config_foreach generate_queue ethport
|
||||
|
|
@ -1070,7 +1070,7 @@ handle_classify() {
|
|||
local corder_file="/tmp/qos/classify.order"
|
||||
|
||||
while read -r line; do
|
||||
line_cid=$(echo $line | cut -d '_' -f 2)
|
||||
line_cid=${line: 2}
|
||||
|
||||
handle_ebtables_rules $line_cid
|
||||
handle_iptables_rules $line_cid
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue