X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=config%2Fqos%2Fmakeqosscripts.pl;h=aadd959ec068fd0cd548323b0691d8e141013eeb;hp=fa0b6edf045a372d125ee0e03c18588fe146b984;hb=b389d73110b6584ff58ad6db570de046d1ed8fab;hpb=70df830214c97a68fcb7e89ae0d7df58c35590be diff --git a/config/qos/makeqosscripts.pl b/config/qos/makeqosscripts.pl index fa0b6edf04..aadd959ec0 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,10 +504,33 @@ 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 ;; clear|stop) ### RESET EVERYTHING TO A KNOWN STATE - killall qosd + killall qosd >/dev/null 2>&1 (sleep 3 && killall -9 qosd &>/dev/null) & # DELETE QDISCS - tc qdisc del dev $qossettings{'RED_DEV'} root - tc qdisc del dev $qossettings{'IMQ_DEV'} root + 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 - iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j IMQ --todev 0 - rmmod imq + ip link set $qossettings{'IMQ_DEV'} down >/dev/null 2>&1 + 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 - iptables -t mangle --delete POSTROUTING -o $qossettings{'RED_DEV'} -j QOS-TOS - iptables -t mangle --flush QOS-OUT - iptables -t mangle --delete-chain QOS-OUT - iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j QOS-INC - iptables -t mangle --delete PREROUTING -i $qossettings{'RED_DEV'} -j QOS-TOS - iptables -t mangle --flush QOS-INC - iptables -t mangle --delete-chain QOS-INC - iptables -t mangle --flush QOS-TOS - iptables -t mangle --delete-chain QOS-TOS - rmmod sch_htb + 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 >/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 PREROUTING -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)