3 # Copyright (C) 2018 rosysong@rosinson.com
6 .
/lib
/functions
/network.sh
9 P1
=""; P2
=""; P3
=""; P4
=""; P5
=""; P6
="";
10 P7
=""; P8
=""; P9
=""; P10
=""; P11
="";
12 qosdef_validate_priority
() {
13 uci_load_validate nft-qos default
"$1" "$2" \
14 'priority_enable:bool:0' \
15 'priority_netdev:maxlength(8)'
18 _qosdef_handle_protox
() { # <priority> <rule>
34 qosdef_handle_protox
() { # <section>
37 config_get proto
$1 'protocol'
38 config_get prio
$1 'priority'
39 config_get srv
$1 'service'
45 _qosdef_handle_protox
$prio \
46 "\t\t$proto dport { $srv } accept\n"
49 qosdef_append_rule_protox
() { # <section>
50 config_foreach qosdef_handle_protox
$1
52 "${P1}${P2}${P3}${P4}${P5}${P6}${P7}${P8}${P9}${P10}${P11}"
55 qosdef_append_chain_priority
() { # <name> <section> <device>
56 local name
=$1 device
=$3
58 qosdef_appendx
"\tchain $name {\n"
59 qosdef_append_chain_ingress filter
$device 0 accept
60 qosdef_append_rule_protox
$2
61 qosdef_appendx
"\t}\n"
64 qosdef_remove_priority
() {
65 qosdef_remove_table netdev nft-qos-priority
68 # init traffic priority
69 qosdef_init_priority
() {
73 logger
-t nft-qos-priority
"validation failed"
77 [ $priority_enable -eq 0 ] && return 1
79 case "$priority_netdev" in
80 lan
) [ "$(uci_get network.lan.type)" != "bridge" ] && {
81 network_get_device ifname
"$priority_netdev" || \
82 ifname
="$(uci_get network.lan.ifname)"
85 wan
*) network_get_device ifname
"$priority_netdev" || \
86 ifname
="$(uci_get network.$priority_netdev.ifname)"
90 qosdef_appendx
"table netdev nft-qos-priority {\n"
91 qosdef_append_chain_priority filter priority
$ifname