Skip to content

Commit

Permalink
qos-scripts: fix uci callback handling
Browse files Browse the repository at this point in the history
The previous callback code was fragile, dependent on some UCI callback
bugs and side-effects now fixed in master commit 73d8a6a.

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 73d8a6a (i.e. both before and
after), and are consistent with UCI config parsing documentation.

Signed-off-by: Tony Ambardar <[email protected]>
  • Loading branch information
guidosarducci authored and dedeckeh committed Jun 28, 2018
1 parent 7b74b40 commit b701d78
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 29 deletions.
2 changes: 1 addition & 1 deletion package/network/config/qos-scripts/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk

PKG_NAME:=qos-scripts
PKG_VERSION:=1.3.0
PKG_VERSION:=1.3.1
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0

Expand Down
11 changes: 6 additions & 5 deletions package/network/config/qos-scripts/files/usr/bin/qos-stat
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,17 @@ get_ifname() {
[ "$cfgt" = "interface" ] && config_get "$interface" ifname
}

config_cb() {
config_get TYPE "$CONFIG_SECTION" TYPE
qos_set_device() {
config_get TYPE "$1" TYPE
[ "interface" = "$TYPE" ] && {
config_get device "$CONFIG_SECTION" ifname
[ -z "$device" ] && device="$(get_ifname ${CONFIG_SECTION})"
config_set "$CONFIG_SECTION" device "$device"
config_get device "$1" ifname
[ -z "$device" ] && device="$(get_ifname $1)"
config_set "$1" device "$device"
}
}

config_load qos
config_foreach qos_set_device

print_comments() {
echo ''
Expand Down
45 changes: 22 additions & 23 deletions package/network/config/qos-scripts/files/usr/lib/qos/generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -191,52 +191,48 @@ config_cb() {
option_cb() {
return 0
}

# Section start
case "$1" in
interface)
config_set "$2" "classgroup" "Default"
config_set "$2" "upload" "128"
;;
classify|default|reclassify)
option_cb() {
append options "$1"
append "CONFIG_${CONFIG_SECTION}_options" "$1"
}
;;
esac
}

# Section end
config_get TYPE "$CONFIG_SECTION" TYPE
qos_parse_config() {
config_get TYPE "$1" TYPE
case "$TYPE" in
interface)
config_get_bool enabled "$CONFIG_SECTION" enabled 1
[ 1 -eq "$enabled" ] || return 0
config_get classgroup "$CONFIG_SECTION" classgroup
config_set "$CONFIG_SECTION" ifbdev "$C"
C=$(($C+1))
append INTERFACES "$CONFIG_SECTION"
config_set "$classgroup" enabled 1
config_get device "$CONFIG_SECTION" device
[ -z "$device" ] && {
device="$(find_ifname ${CONFIG_SECTION})"
config_set "$CONFIG_SECTION" device "$device"
config_get_bool enabled "$1" enabled 1
[ 1 -eq "$enabled" ] && {
config_get classgroup "$1" classgroup
config_set "$1" ifbdev "$C"
C=$(($C+1))
append INTERFACES "$1"
config_set "$classgroup" enabled 1
config_get device "$1" device
[ -z "$device" ] && {
device="$(find_ifname $1)"
config_set "$1" device "$device"
}
}
;;
classgroup) append CG "$CONFIG_SECTION";;
classgroup) append CG "$1";;
classify|default|reclassify)
case "$TYPE" in
classify) var="ctrules";;
*) var="rules";;
esac
config_get target "$CONFIG_SECTION" target
config_set "$CONFIG_SECTION" options "$options"
append "$var" "$CONFIG_SECTION"
unset options
append "$var" "$1"
;;
esac
}


enum_classes() {
local c="0"
config_get classes "$1" classes
Expand Down Expand Up @@ -500,7 +496,10 @@ INTERFACES=""
[ -e ./qos.conf ] && {
. ./qos.conf
config_cb
} || config_load qos
} || {
config_load qos
config_foreach qos_parse_config
}

C="0"
for iface in $INTERFACES; do
Expand Down

0 comments on commit b701d78

Please sign in to comment.