[PATCH] [qos-scripts] Reload IMQ only when needed
[openwrt.git] / package / qos-scripts / files / usr / lib / qos / generate.sh
index 161af82..9fc146b 100755 (executable)
@@ -1,12 +1,21 @@
 #!/bin/sh
 [ -e /etc/functions.sh ] && . /etc/functions.sh || . ./functions.sh
-[ -x /sbin/modprobe ] && insmod="modprobe" || insmod="insmod"
+[ -x /sbin/modprobe ] && {
+       insmod="modprobe"
+       rmmod="$insmod -r"
+} || {
+       insmod="insmod"
+       rmmod="rmmod"
+}
 
 add_insmod() {
        eval "export isset=\${insmod_$1}"
        case "$isset" in
                1) ;;
-               *) append INSMOD "$insmod $* >&- 2>&-" "$N"; export insmod_$1=1;;
+               *) {
+                       [ "$2" ] && append INSMOD "$rmmod $1 >&- 2>&-" "$N"
+                       append INSMOD "$insmod $* >&- 2>&-" "$N"; export insmod_$1=1
+               };;
        esac
 }
 
@@ -59,14 +68,6 @@ parse_matching_rule() {
                        *:dsthost)
                                append "$var" "-d $value"
                        ;;
-                       *:ipp2p)
-                               add_insmod ipt_ipp2p
-                               append "$var" "-m ipp2p"
-                               case "$value" in
-                                       all) append "$var" "--edk --dc --kazaa --gnu --bit";;
-                                       *) append "$var" "--$value";;
-                               esac
-                       ;;
                        *:layer7)
                                add_insmod ipt_layer7
                                add_insmod xt_layer7
@@ -280,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)))
@@ -297,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"
@@ -400,11 +401,11 @@ start_cg() {
                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" ] || {
+                       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
This page took 0.027608 seconds and 4 git commands to generate.