mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
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 commit73d8a6ab
. 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 of73d8a6ab
(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:
parent
7b74b40fe9
commit
b701d78105
@ -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
|
||||
|
||||
|
@ -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 ''
|
||||
|
@ -191,8 +191,6 @@ config_cb() {
|
||||
option_cb() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# Section start
|
||||
case "$1" in
|
||||
interface)
|
||||
config_set "$2" "classgroup" "Default"
|
||||
@ -200,43 +198,41 @@ config_cb() {
|
||||
;;
|
||||
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
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user