Ticket #10021: qos-no_imq-errors_fix.patch

File qos-no_imq-errors_fix.patch, 3.0 KB (added by Nenad Opsenica <nenad@…>, 6 years ago)

QoS without imq, errors fixed

  • package/qos-scripts/files/usr/lib/qos/generate.sh

    commit d3ac07c82c5cbbc96b76b6012bf73a6454445ba7
    Author: Nenad Opsenica <nenad@vtkom.com>
    Date:   Wed Jan 12 19:26:51 2011 +0100
    
        qos-scripts: fixed various errors, now it is possible to use QoS on multiple interfaces without imq
    
    diff --git a/package/qos-scripts/files/usr/lib/qos/generate.sh b/package/qos-scripts/files/usr/lib/qos/generate.sh
    index 6b5db3d..fa866f7 100755
    a b parse_matching_rule() { 
    134134                                        *) append "$var" "-m dscp $dscp_option $value" 
    135135                                esac 
    136136                        ;; 
     137                        *:device) 
     138                                device="$value" 
     139                        ;; 
     140                        *:ifname) 
     141                                device=$(find_ifname ${value}) 
     142                        ;; 
    137143                        *:direction) 
    138144                                value="$(echo "$value" | sed -e 's,-,:,g')" 
    139145                                if [ "$value" = "out" ]; then 
    start_interfaces() { 
    351357} 
    352358 
    353359add_rules() { 
    354         local var="$1" 
    355         local rules="$2" 
    356         local prefix="$3" 
     360        local classes="$1" 
     361        local var="$2" 
     362        local rules="$3" 
     363        local prefix="$4" 
    357364         
    358365        for rule in $rules; do 
    359366                unset iptrule 
    360367                config_get target "$rule" target 
    361                 config_get target "$target" classnr 
     368                config_get classnr "$target" classnr 
    362369                config_get options "$rule" options 
     370                found=0 
     371                for class in $classes; do 
     372                        [ "$class" = "$target" ] && { 
     373                                found=1 
     374                                break 
     375                        } 
     376                done 
     377                [ "$found" = "0" ] && continue 
    363378 
    364379                ## If we want to override the TOS field, let's clear the DSCP field first. 
    365380                [ ! -z "$(echo $options | grep 'TOS')" ] && { 
    add_rules() { 
    370385                        unset iptrule 
    371386                } 
    372387 
    373                 parse_matching_rule iptrule "$rule" "$options" "$prefix" "-j MARK --set-mark $target" 
     388                parse_matching_rule iptrule "$rule" "$options" "$prefix" "-j MARK --set-mark $classnr" 
    374389                append "$var" "$iptrule" "$N" 
    375390        done 
    376391} 
    start_cg() { 
    380395        local iptrules 
    381396        local pktrules 
    382397        local sizerules 
     398        local up 
     399        local down 
    383400        enum_classes "$cg" 
    384         add_rules iptrules "$ctrules" "iptables -t mangle -A ${cg}_ct" 
    385401        config_get classes "$cg" classes 
     402        add_rules "$classes" iptrules "$ctrules" "iptables -t mangle -A ${cg}_ct" 
    386403        for class in $classes; do 
    387404                config_get mark "$class" classnr 
    388405                config_get maxsize "$class" maxsize 
    start_cg() { 
    391408                        append pktrules "iptables -t mangle -A ${cg} -m mark --mark $mark -m length --length $maxsize: -j MARK --set-mark 0" "$N" 
    392409                } 
    393410        done 
    394         add_rules pktrules "$rules" "iptables -t mangle -A ${cg}" 
     411        add_rules "$cg" pktrules "$rules" "iptables -t mangle -A ${cg}" 
    395412        for iface in $INTERFACES; do 
     413                if_device=$(find_ifname ${iface}) 
    396414                config_get classgroup "$iface" classgroup 
    397415                config_get device "$iface" device 
    398416                config_get imqdev "$iface" imqdev 
    start_cg() { 
    400418                config_get download "$iface" download 
    401419                config_get halfduplex "$iface" halfduplex 
    402420                download="${download:-${halfduplex:+$upload}}" 
     421                [ "$cg" != "$classgroup" ] && continue 
    403422                add_insmod ipt_IMQ 
    404423                append up "iptables -t mangle -A OUTPUT -o $device -j ${cg}" "$N" 
    405424                append up "iptables -t mangle -A FORWARD -o $device -j ${cg}" "$N"