[package] fix p54usb firmware md5sum (#4759)
[openwrt.git] / package / qos-scripts / files / usr / lib / qos / generate.sh
index a531e28..6c52027 100755 (executable)
@@ -59,16 +59,9 @@ parse_matching_rule() {
                        *:dsthost)
                                append "$var" "-d $value"
                        ;;
                        *: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
                        *:layer7)
                                add_insmod ipt_layer7
+                               add_insmod xt_layer7
                                append "$var" "-m layer7 --l7proto $value${pkt:+ --l7pkt}"
                        ;;
                        *:ports|*:srcports|*:dstports)
                                append "$var" "-m layer7 --l7proto $value${pkt:+ --l7pkt}"
                        ;;
                        *:ports|*:srcports|*:dstports)
@@ -116,6 +109,22 @@ parse_matching_rule() {
                                add_insmod ipt_connbytes
                                append "$var" "-m connbytes --connbytes $value --connbytes-dir both --connbytes-mode bytes"
                        ;;
                                add_insmod ipt_connbytes
                                append "$var" "-m connbytes --connbytes $value --connbytes-dir both --connbytes-mode bytes"
                        ;;
+                       *:tos)
+                                add_insmod ipt_tos
+                                case "$value" in
+                                        !*) append "$var" "-m tos ! --tos $value";;
+                                        *) append "$var" "-m tos --tos $value"
+                                esac
+                        ;;
+                       *:dscp)
+                                add_insmod ipt_dscp
+                               dscp_option="--dscp"
+                                [ -z "${value%%[EBCA]*}" ] && dscp_option="--dscp-class"
+                               case "$value" in
+                                               !*) append "$var" "-m dscp ! $dscp_option $value";;
+                                               *) append "$var" "-m dscp $dscp_option $value"
+                                esac
+                        ;;
                        *:direction)
                                value="$(echo "$value" | sed -e 's,-,:,g')"
                                if [ "$value" = "out" ]; then
                        *:direction)
                                value="$(echo "$value" | sed -e 's,-,:,g')"
                                if [ "$value" = "out" ]; then
@@ -146,6 +155,19 @@ parse_matching_rule() {
                                        !*) append "$var" "-m mark ! --mark $class";;
                                        *) append "$var" "-m mark --mark $class";;
                                esac
                                        !*) append "$var" "-m mark ! --mark $class";;
                                        *) append "$var" "-m mark --mark $class";;
                                esac
+                       ;;
+                       1:TOS)
+                               add_insmod ipt_TOS
+                               config_get TOS "$rule" 'TOS'
+                               suffix="-j TOS --set-tos "${TOS:-"Normal-Service"}
+                       ;;
+                       1:DSCP)
+                               add_insmod ipt_DSCP
+                               config_get DSCP "$rule" 'DSCP'
+                               [ -z "${DSCP%%[EBCA]*}" ] && set_value="--set-dscp-class $DSCP" \
+                               || set_value="--set-dscp $DSCP"
+                               suffix="-j DSCP $set_value"
+                       ;;
                esac
        done
        append "$var" "$suffix"
                esac
        done
        append "$var" "$suffix"
@@ -327,6 +349,16 @@ add_rules() {
                config_get target "$rule" target
                config_get target "$target" classnr
                config_get options "$rule" options
                config_get target "$rule" target
                config_get target "$target" classnr
                config_get options "$rule" options
+
+               ## If we want to override the TOS field, let's clear the DSCP field first.
+               [ ! -z "$(echo $options | grep 'TOS')" ] && {
+                       s_options=${options%%TOS}
+                       add_insmod ipt_DSCP
+                       parse_matching_rule iptrule "$rule" "$s_options" "$prefix" "-j DSCP --set-dscp 0"
+                       append "$var" "$iptrule" "$N"
+                       unset iptrule
+               }
+
                parse_matching_rule iptrule "$rule" "$options" "$prefix" "-j MARK --set-mark $target"
                append "$var" "$iptrule" "$N"
        done
                parse_matching_rule iptrule "$rule" "$options" "$prefix" "-j MARK --set-mark $target"
                append "$var" "$iptrule" "$N"
        done
This page took 0.037351 seconds and 4 git commands to generate.