X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/0f805cdf51d623bb63fd2b7038c748ef13aac262..7f398df47f7c891e2e0a7fb0f514672503047248:/package/qos-scripts/files/usr/lib/qos/generate.sh?ds=sidebyside diff --git a/package/qos-scripts/files/usr/lib/qos/generate.sh b/package/qos-scripts/files/usr/lib/qos/generate.sh index 94c01d461..6b5db3d7d 100755 --- a/package/qos-scripts/files/usr/lib/qos/generate.sh +++ b/package/qos-scripts/files/usr/lib/qos/generate.sh @@ -281,14 +281,14 @@ start_interface() { return 1 } config_get upload "$iface" upload - config_get halfduplex "$iface" halfduplex + config_get_bool halfduplex "$iface" halfduplex config_get download "$iface" download config_get classgroup "$iface" classgroup config_get_bool overhead "$iface" overhead 0 download="${download:-${halfduplex:+$upload}}" enum_classes "$classgroup" - for dir in up${halfduplex} ${download:+down}; do + for dir in ${halfduplex:-up} ${download:+down}; do case "$dir" in up) [ "$overhead" = 1 ] && upload=$(($upload * 98 / 100 - (15 * 128 / $upload))) @@ -298,7 +298,7 @@ start_interface() { prefix="cls" ;; down) - add_insmod imq numdevs="$num_imq" + [ "$(ls -d /proc/sys/net/ipv4/conf/imq* 2>&- | wc -l)" -ne "$num_imq" ] && add_insmod imq numdevs="$num_imq" config_get imqdev "$iface" imqdev [ "$overhead" = 1 ] && download=$(($download * 98 / 100 - (80 * 1024 / $download))) dev="imq$imqdev" @@ -315,8 +315,10 @@ start_interface() { cls_var maxrate "$class" limitrate $dir 100 cls_var prio "$class" priority $dir 1 cls_var avgrate "$class" avgrate $dir 0 + cls_var qdisc_esfq "$class" qdisc_esfq $dir "" + [ "$qdisc_esfq" != "" ] && add_insmod sch_esfq config_get classnr "$class" classnr - append cstr "$classnr:$prio:$avgrate:$pktsize:$pktdelay:$maxrate" "$N" + append cstr "$classnr:$prio:$avgrate:$pktsize:$pktdelay:$maxrate:$qdisc_esfq" "$N" done append ${prefix}q "$(tcrules)" "$N" export dev_${dir}="ifconfig $dev up txqueuelen 5 >&- 2>&- @@ -378,7 +380,6 @@ start_cg() { local iptrules local pktrules local sizerules - local download enum_classes "$cg" add_rules iptrules "$ctrules" "iptables -t mangle -A ${cg}_ct" config_get classes "$cg" classes @@ -395,17 +396,19 @@ start_cg() { config_get classgroup "$iface" classgroup config_get device "$iface" device config_get imqdev "$iface" imqdev - config_get dl "$iface" download + config_get upload "$iface" upload + config_get download "$iface" download config_get halfduplex "$iface" halfduplex + download="${download:-${halfduplex:+$upload}}" add_insmod ipt_IMQ append up "iptables -t mangle -A OUTPUT -o $device -j ${cg}" "$N" append up "iptables -t mangle -A FORWARD -o $device -j ${cg}" "$N" - [ -z "$dl" ] || { + [ -z "$download" ] || { + append down "iptables -t mangle -A POSTROUTING -o $device -j ${cg}" "$N" [ -z "$halfduplex" ] || { append down "iptables -t mangle -A POSTROUTING -o $device -j IMQ --todev $imqdev" "$N" } append down "iptables -t mangle -A PREROUTING -i $device -j ${cg}" "$N" - append down "iptables -t mangle -A POSTROUTING -o $device -j ${cg}" "$N" append down "iptables -t mangle -A PREROUTING -i $device -j IMQ --todev $imqdev" "$N" } done