nft-qos: Update init script
authorJeffery To <jeffery.to@gmail.com>
Tue, 12 Feb 2019 08:31:59 +0000 (16:31 +0800)
committerJeffery To <jeffery.to@gmail.com>
Tue, 12 Feb 2019 08:31:59 +0000 (16:31 +0800)
This replaces the use of uci_validate_section() with
uci_load_validate(), which removes the need to declare local variables
for every config option.

This also adds a validate section to service_triggers(), and fixes some
variable name typos in qosdef_init_static().

Signed-off-by: Jeffery To <jeffery.to@gmail.com>
net/nft-qos/Makefile
net/nft-qos/files/lib/dynamic.sh
net/nft-qos/files/lib/priority.sh
net/nft-qos/files/lib/static.sh
net/nft-qos/files/nft-qos-dynamic.hotplug
net/nft-qos/files/nft-qos.init

index 61361c15462a807b77d8f1027d6a70670ef7d410..b0d548af0bd2d1feefda43ec46f8bdc4e57add41 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nft-qos
 PKG_VERSION:=1.0.4
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 PKG_LICENSE:=GPL-2.0
 
 PKG_MAINTAINER:=Rosy Song <rosysong@rosinson.com>
index a3032086f51b1f7cf84ea926b0fd9352d7d72fdd..207daca3f67408bb82f8c0d0f68b8e74b1c89ad6 100644 (file)
@@ -5,6 +5,14 @@
 
 . /lib/nft-qos/core.sh
 
+qosdef_validate_dynamic() {
+       uci_load_validate nft-qos default "$1" "$2" \
+               'limit_enable:bool:0' \
+               'limit_type:maxlength(8)' \
+               'dynamic_bw_up:uinteger:100' \
+               'dynamic_bw_down:uinteger:100'
+}
+
 # return average rate for dhcp leases
 qosdef_dynamic_rate() { # <bandwidth>
        local c=0 c6=0
@@ -55,16 +63,9 @@ qosdef_flush_dynamic() {
 
 # init dynamic qos
 qosdef_init_dynamic() {
-       local dynamic_bw_up dynamic_bw_down limit_enable limit_type
        local hook_ul="prerouting" hook_dl="postrouting"
 
-       uci_validate_section nft-qos default default \
-               'limit_enable:bool:0' \
-               'limit_type:maxlength(8)' \
-               'dynamic_bw_up:uinteger:100' \
-               'dynamic_bw_down:uinteger:100'
-
-       [ $? -ne 0 ] && {
+       [ "$2" = 0 ] || {
                logger -t nft-qos-dynamic "validation failed"
                return 1
        }
index 59288b85cf335033e1570578118901b64448e581..02dc2c6aecbf28ca72d0afd562b0d015238c2dca 100644 (file)
@@ -9,6 +9,12 @@
 P1=""; P2=""; P3=""; P4=""; P5=""; P6="";
 P7=""; P8=""; P9=""; P10=""; P11="";
 
+qosdef_validate_priority() {
+       uci_load_validate nft-qos default "$1" "$2" \
+               'priority_enable:bool:0' \
+               'priority_netdev:maxlength(8)'
+}
+
 _qosdef_handle_protox() { # <priority> <rule>
        case "$1" in
                -400) P1="$P1""$2";;
@@ -61,13 +67,9 @@ qosdef_remove_priority() {
 
 # init traffic priority
 qosdef_init_priority() {
-       local priority_enable priority_netdev ifname="br-lan"
-
-       uci_validate_section nft-qos default default \
-               'priority_enable:bool:0' \
-               'priority_netdev:maxlength(8)'
+       local ifname="br-lan"
 
-       [ $? -ne 0 ] && {
+       [ "$2" = 0 ] || {
                logger -t nft-qos-priority "validation failed"
                return 1
        }
index 95d3162b1d5fdd96adcf1e3c892e1e0ddcb2f58a..051c0ba3d6e6e20cd60ac8ca8b547d0e4046c5b6 100644 (file)
@@ -5,6 +5,16 @@
 
 . /lib/nft-qos/core.sh
 
+qosdef_validate_static() {
+       uci_load_validate nft-qos default "$1" "$2" \
+               'limit_enable:bool:0' \
+               'limit_type:maxlength(8)' \
+               'static_unit_dl:string:kbytes' \
+               'static_unit_ul:string:kbytes' \
+               'static_rate_dl:uinteger:50' \
+               'static_rate_ul:uinteger:50'
+}
+
 # append rule for static qos
 qosdef_append_rule_sta() { # <section> <operator> <default-unit> <default-rate>
        local ipaddr unit rate
@@ -42,18 +52,9 @@ qosdef_flush_static() {
 
 # static limit rate init
 qosdef_init_static() {
-       local unit_dl unit_ul rate_dl rate_ul
-       local limit_enable limit_type hook_ul="prerouting" hook_dl="postrouting"
-
-       uci_validate_section nft-qos default default \
-               'limit_enable:bool:0' \
-               'limit_type:maxlength(8)' \
-               'static_unit_dl:string:kbytes' \
-               'static_unit_ul:string:kbytes' \
-               'static_rate_dl:uinteger:50' \
-               'static_rate_ul:uinteger:50'
+       local hook_ul="prerouting" hook_dl="postrouting"
 
-       [ $? -ne 0 ] && {
+       [ "$2" = 0 ] || {
                logger -t nft-qos-static "validation failed"
                return 1
        }
@@ -67,7 +68,7 @@ qosdef_init_static() {
        }
 
        qosdef_appendx "table $NFT_QOS_INET_FAMILY nft-qos-static {\n"
-       qosdef_append_chain_sta $hook_ul upload upload $unit_ul $rate_ul
-       qosdef_append_chain_sta $hook_dl download download $unit_dl $rate_dl
+       qosdef_append_chain_sta $hook_ul upload upload $static_unit_ul $static_rate_ul
+       qosdef_append_chain_sta $hook_dl download download $static_unit_dl $static_rate_dl
        qosdef_appendx "}\n"
 }
index 598fc39e7efe40d02104e31f51092f19b99455be..b81fa94a892882b9dd1d956ecefa54a085ff1296 100644 (file)
@@ -11,13 +11,7 @@ export initscript="nft-qos-dynamic"
 
 NFT_QOS_DYNAMIC_ON=
 
-qosdef_validate_section_dynamic() {
-       local limit_enable limit_type
-
-       uci_validate_section nft-qos default default \
-               'limit_enable:bool:0' \
-               'limit_type:maxlength(8)'
-
+qosdef_check_if_dynamic() {
        [ $limit_enable -eq 1 -a \
          "$limit_type" = "dynamic" ] && \
            NFT_QOS_DYNAMIC_ON="y"
@@ -28,14 +22,14 @@ logger -t nft-qos-dynamic "ACTION=$ACTION, MACADDR=$MACADDR, IPADDR=$IPADDR, HOS
 
 case "$ACTION" in
        add | update | remove)
-               qosdef_validate_section_dynamic
+               qosdef_validate_dynamic default qosdef_check_if_dynamic
                [ -z "$NFT_QOS_DYNAMIC_ON" ] && return
 
                qosdef_init_env
                qosdef_flush_dynamic
 
                qosdef_init_header
-               qosdef_init_dynamic
+               qosdef_validate_dynamic default qosdef_init_dynamic
                qosdef_init_done
                qosdef_start
                ;;
index e48418c754f3359055c49de4aac2fe13f9826958..7a56ec7c69149ab632ed715a401cfda47c5773c1 100755 (executable)
@@ -14,6 +14,12 @@ USE_PROCD=1
 
 service_triggers() {
        procd_add_reload_trigger nft-qos
+
+       procd_open_validate
+       qosdef_validate_dynamic
+       qosdef_validate_static
+       qosdef_validate_priority
+       procd_close_validate
 }
 
 start_service() {
@@ -26,9 +32,9 @@ start_service() {
 
        qosdef_init_header
        qosdef_init_monitor
-       qosdef_init_dynamic
-       qosdef_init_static
-       qosdef_init_priority
+       qosdef_validate_dynamic default qosdef_init_dynamic
+       qosdef_validate_static default qosdef_init_static
+       qosdef_validate_priority default qosdef_init_priority
        qosdef_init_done
        qosdef_start
 }