X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=config%2Fqos%2Fmakeqosscripts.pl;h=824a9937fa3da68a9a71608a6e4e6cdb414641b6;hp=e4ce34f8aa27160d665b5a75474da56d26bb8883;hb=be7878d5c92600e7d316a86b18a77819734b62a0;hpb=d21be44c0c63d02a9cf4efff92a1646f76d27540 diff --git a/config/qos/makeqosscripts.pl b/config/qos/makeqosscripts.pl index e4ce34f8aa..824a9937fa 100644 --- a/config/qos/makeqosscripts.pl +++ b/config/qos/makeqosscripts.pl @@ -2,7 +2,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# Copyright (C) 2007-2013 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -58,6 +58,7 @@ my $subclassfile = "/var/ipfire/qos/subclasses"; my $level7file = "/var/ipfire/qos/level7config"; my $portfile = "/var/ipfire/qos/portconfig"; my $tosfile = "/var/ipfire/qos/tosconfig"; +my $fqcodel_options = "limit 800 quantum 500"; &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); @@ -70,11 +71,11 @@ $qossettings{'DEF_INC_SPD'} = ''; $qossettings{'DEFCLASS_INC'} = ''; $qossettings{'DEFCLASS_OUT'} = ''; $qossettings{'ACK'} = ''; -$qossettings{'MTU'} = '1492'; $qossettings{'RED_DEV'} = `cat /var/ipfire/red/iface`; $qossettings{'IMQ_DEV'} = 'imq0'; $qossettings{'TOS'} = ''; $qossettings{'VALID'} = 'yes'; +$qossettings{'IMQ_MODE'} = 'PREROUTING'; &General::readhash("${General::swroot}/qos/settings", \%qossettings); @@ -110,6 +111,11 @@ print </dev/null 2>&1 tc qdisc add dev $qossettings{'RED_DEV'} root handle 1: htb default $qossettings{'DEFCLASS_OUT'} ### MAIN RATE LIMIT @@ -217,7 +220,7 @@ foreach $classentry (sort @classes) if ($qossettings{'RED_DEV'} eq $classline[0]) { $qossettings{'DEVICE'} = $classline[0]; $qossettings{'CLASS'} = $classline[1]; - print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: sfq perturb $qossettings{'SFQ_PERTUB'}\n"; + print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: fq_codel $fqcodel_options\n"; } } foreach $subclassentry (sort @subclasses) { @@ -225,7 +228,7 @@ foreach $subclassentry (sort @subclasses) { if ($qossettings{'RED_DEV'} eq $subclassline[0]) { $qossettings{'DEVICE'} = $subclassline[0]; $qossettings{'SCLASS'} = $subclassline[2]; - print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'SCLASS'} handle $qossettings{'SCLASS'}: sfq perturb $qossettings{'SFQ_PERTUB'}\n"; + print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'SCLASS'} handle $qossettings{'SCLASS'}: fq_codel $fqcodel_options\n"; } } print "\n\t### FILTER TRAFFIC INTO CLASSES\n"; @@ -249,43 +252,49 @@ foreach $subclassentry (sort @subclasses) { } print </dev/null 2>&1 tc qdisc add dev $qossettings{'IMQ_DEV'} root handle 2: htb default $qossettings{'DEFCLASS_INC'} ### MAIN RATE LIMIT @@ -468,7 +474,7 @@ foreach $classentry (sort @classes) if ($qossettings{'IMQ_DEV'} eq $classline[0]) { $qossettings{'DEVICE'} = $classline[0]; $qossettings{'CLASS'} = $classline[1]; - print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: sfq perturb $qossettings{'SFQ_PERTUB'}\n"; + print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: fq_codel $fqcodel_options\n"; } } foreach $subclassentry (sort @subclasses) { @@ -476,7 +482,7 @@ foreach $subclassentry (sort @subclasses) { if ($qossettings{'IMQ_DEV'} eq $subclassline[0]) { $qossettings{'DEVICE'} = $subclassline[0]; $qossettings{'SCLASS'} = $subclassline[2]; - print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'SCLASS'} handle $qossettings{'SCLASS'}: sfq perturb $qossettings{'SFQ_PERTUB'}\n"; + print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'SCLASS'} handle $qossettings{'SCLASS'}: fq_codel $fqcodel_options\n"; } } print "\n\t### FILTER TRAFFIC INTO CLASSES\n"; @@ -498,21 +504,42 @@ foreach $subclassentry (sort @subclasses) { print "\ttc filter add dev $qossettings{'DEVICE'} parent 2:0 prio 0 protocol ip handle $qossettings{'SCLASS'} fw flowid 2:$qossettings{'SCLASS'}\n"; } } + +if ( $qossettings{'IMQ_MODE'} eq 'POSTROUTING' ) +{ print </dev/null 2>&1) & ( sleep 10 && /usr/local/bin/qosd $qossettings{'IMQ_DEV'} >/dev/null 2>&1) & + for i in \$(ls \$RRDLOG/class_*.rrd); do + rrdtool update \$i \$(date +%s): + done + echo "Quality of Service was successfully started!" exit 0 ;; @@ -656,30 +687,46 @@ print </dev/null) & # DELETE QDISCS tc qdisc del dev $qossettings{'RED_DEV'} root >/dev/null 2>&1 + tc qdisc add root dev $qossettings{'RED_DEV'} fq_codel >/dev/null 2>&1 tc qdisc del dev $qossettings{'IMQ_DEV'} root >/dev/null 2>&1 + tc qdisc add root dev $qossettings{'IMQ_DEV'} fq_codel >/dev/null 2>&1 # STOP IMQ-DEVICE ip link set $qossettings{'IMQ_DEV'} down >/dev/null 2>&1 - iptables -t mangle --delete FORWATD -i $qossettings{'RED_DEV'} -j IMQ --todev 0 - iptables -t mangle --delete INPUT -i $qossettings{'RED_DEV'} -j IMQ --todev 0 + iptables -t mangle --delete POSTROUTING -i $qossettings{'RED_DEV'} -p ah -j RETURN >/dev/null 2>&1 + iptables -t mangle --delete POSTROUTING -i $qossettings{'RED_DEV'} -p esp -j RETURN >/dev/null 2>&1 + iptables -t mangle --delete POSTROUTING -i $qossettings{'RED_DEV'} -p ip -j RETURN >/dev/null 2>&1 + iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -p ah -j RETURN >/dev/null 2>&1 + iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -p esp -j RETURN >/dev/null 2>&1 + iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -p ip -j RETURN >/dev/null 2>&1 + iptables -t mangle --delete POSTROUTING -m mark ! --mark 0 ! -o $qossettings{'RED_DEV'} -j IMQ --todev 0 >/dev/null 2>&1 + iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j IMQ --todev 0 >/dev/null 2>&1 # rmmod imq # this crash on 2.6.25.xx # REMOVE & FLUSH CHAINS iptables -t mangle --delete POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-OUT >/dev/null 2>&1 iptables -t mangle --delete POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-TOS >/dev/null 2>&1 iptables -t mangle --flush QOS-OUT >/dev/null 2>&1 iptables -t mangle --delete-chain QOS-OUT >/dev/null 2>&1 - iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-INC - iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-TOS - iptables -t mangle --delete INPUT -i $qossettings{'RED_DEV'} -j QOS-INC - iptables -t mangle --delete INPUT -i $qossettings{'RED_DEV'} -j QOS-TOS + iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-INC >/dev/null 2>&1 + iptables -t mangle --delete FORWARD -i $qossettings{'RED_DEV'} -j QOS-TOS >/dev/null 2>&1 + iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j QOS-INC >/dev/null 2>&1 + iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j QOS-TOS >/dev/null 2>&1 iptables -t mangle --flush QOS-INC >/dev/null 2>&1 iptables -t mangle --delete-chain QOS-INC >/dev/null 2>&1 iptables -t mangle --flush QOS-TOS >/dev/null 2>&1 iptables -t mangle --delete-chain QOS-TOS >/dev/null 2>&1 + # remove l7-filter + iptables -t mangle --delete POSTROUTING -m layer7 --l7proto unset + rmmod sch_htb >/dev/null 2>&1 + + for i in \$(ls \$RRDLOG/class_*.rrd); do + rrdtool update \$i \$(date +%s): + done + echo "Quality of Service was successfully cleared!" ;; gen|generate) - echo -n "Generateing the QoS-Scripts..." + echo -n "Generating the QoS-Scripts..." /usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > /var/ipfire/qos/bin/qos.sh echo ".Done!" exit 0