qos-scripts: fix uci callback handling

The previous callback code was fragile, dependent on some UCI callback
bugs and side-effects now fixed in master commit 73d8a6ab.

Update scripts to use callbacks where appropriate and necessary, while
using normal UCI config parsing for all else. This results in smaller,
simpler, more robust code. Use callbacks in generate.sh to only process
'interface' defaults and the varying entries for 'reclassify', 'default'
and 'classify' sections. Also switch qos-stat to use non-callback UCI
handling.

The current changes work independently of 73d8a6ab (i.e. both before and
after), and are consistent with UCI config parsing documentation.

Signed-off-by: Tony Ambardar <itugrok@yahoo.com>
This commit is contained in:
Tony Ambardar 2018-06-08 04:34:00 -07:00 committed by Hans Dedecker
parent 7b74b40fe9
commit b701d78105
3 changed files with 29 additions and 29 deletions

View file

@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=qos-scripts PKG_NAME:=qos-scripts
PKG_VERSION:=1.3.0 PKG_VERSION:=1.3.1
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0 PKG_LICENSE:=GPL-2.0

View file

@ -14,16 +14,17 @@ get_ifname() {
[ "$cfgt" = "interface" ] && config_get "$interface" ifname [ "$cfgt" = "interface" ] && config_get "$interface" ifname
} }
config_cb() { qos_set_device() {
config_get TYPE "$CONFIG_SECTION" TYPE config_get TYPE "$1" TYPE
[ "interface" = "$TYPE" ] && { [ "interface" = "$TYPE" ] && {
config_get device "$CONFIG_SECTION" ifname config_get device "$1" ifname
[ -z "$device" ] && device="$(get_ifname ${CONFIG_SECTION})" [ -z "$device" ] && device="$(get_ifname $1)"
config_set "$CONFIG_SECTION" device "$device" config_set "$1" device "$device"
} }
} }
config_load qos config_load qos
config_foreach qos_set_device
print_comments() { print_comments() {
echo '' echo ''

View file

@ -191,8 +191,6 @@ config_cb() {
option_cb() { option_cb() {
return 0 return 0
} }
# Section start
case "$1" in case "$1" in
interface) interface)
config_set "$2" "classgroup" "Default" config_set "$2" "classgroup" "Default"
@ -200,43 +198,41 @@ config_cb() {
;; ;;
classify|default|reclassify) classify|default|reclassify)
option_cb() { option_cb() {
append options "$1" append "CONFIG_${CONFIG_SECTION}_options" "$1"
} }
;; ;;
esac esac
}
# Section end qos_parse_config() {
config_get TYPE "$CONFIG_SECTION" TYPE config_get TYPE "$1" TYPE
case "$TYPE" in case "$TYPE" in
interface) interface)
config_get_bool enabled "$CONFIG_SECTION" enabled 1 config_get_bool enabled "$1" enabled 1
[ 1 -eq "$enabled" ] || return 0 [ 1 -eq "$enabled" ] && {
config_get classgroup "$CONFIG_SECTION" classgroup config_get classgroup "$1" classgroup
config_set "$CONFIG_SECTION" ifbdev "$C" config_set "$1" ifbdev "$C"
C=$(($C+1)) C=$(($C+1))
append INTERFACES "$CONFIG_SECTION" append INTERFACES "$1"
config_set "$classgroup" enabled 1 config_set "$classgroup" enabled 1
config_get device "$CONFIG_SECTION" device config_get device "$1" device
[ -z "$device" ] && { [ -z "$device" ] && {
device="$(find_ifname ${CONFIG_SECTION})" device="$(find_ifname $1)"
config_set "$CONFIG_SECTION" device "$device" config_set "$1" device "$device"
}
} }
;; ;;
classgroup) append CG "$CONFIG_SECTION";; classgroup) append CG "$1";;
classify|default|reclassify) classify|default|reclassify)
case "$TYPE" in case "$TYPE" in
classify) var="ctrules";; classify) var="ctrules";;
*) var="rules";; *) var="rules";;
esac esac
config_get target "$CONFIG_SECTION" target append "$var" "$1"
config_set "$CONFIG_SECTION" options "$options"
append "$var" "$CONFIG_SECTION"
unset options
;; ;;
esac esac
} }
enum_classes() { enum_classes() {
local c="0" local c="0"
config_get classes "$1" classes config_get classes "$1" classes
@ -500,7 +496,10 @@ INTERFACES=""
[ -e ./qos.conf ] && { [ -e ./qos.conf ] && {
. ./qos.conf . ./qos.conf
config_cb config_cb
} || config_load qos } || {
config_load qos
config_foreach qos_parse_config
}
C="0" C="0"
for iface in $INTERFACES; do for iface in $INTERFACES; do