]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - config/qos/makeqosscripts.pl
Revert "QoS: Drop support for subclasses"
[ipfire-2.x.git] / config / qos / makeqosscripts.pl
index e5d038e2e089668ca677137da255114814bc6143..0c07a60f135fc2a609706b55685e5aefe1eef46f 100644 (file)
@@ -35,22 +35,26 @@ my $errormessage = "";
 my $c = "";
 my $direntry = "";
 my $classentry = "";
+my $subclassentry = "";
 my $l7ruleentry = "";
 my $portruleentry = "";
 my $tosruleentry = "";
 my @tmp = ();
 my @classes = ();
+my @subclasses = ();
 my @l7rules = ();
 my @portrules = ();
 my @tosrules = ();
 my @tmpline = ();
 my @classline = ();
+my @subclassline = ();
 my @tosruleline = ();
 my @l7ruleline = ();
 my @portruleline = ();
 my @proto = ();
 my %selected= () ;
 my $classfile = "/var/ipfire/qos/classes";
+my $subclassfile = "/var/ipfire/qos/subclasses";
 my $level7file = "/var/ipfire/qos/level7config";
 my $portfile = "/var/ipfire/qos/portconfig";
 my $tosfile = "/var/ipfire/qos/tosconfig";
@@ -77,6 +81,9 @@ $qossettings{'VALID'} = 'yes';
 open( FILE, "< $classfile" ) or die "Unable to read $classfile";
 @classes = <FILE>;
 close FILE;
+open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
+@subclasses = <FILE>;
+close FILE;
 open( FILE, "< $level7file" ) or die "Unable to read $level7file";
 @l7rules = <FILE>;
 close FILE;
@@ -176,6 +183,27 @@ foreach $classentry (sort @classes)
                print "\n";
        }
 }
+foreach $subclassentry (sort @subclasses) {
+       @subclassline = split( /\;/, $subclassentry );
+       if ($qossettings{'RED_DEV'} eq $subclassline[0]) {
+               $qossettings{'DEVICE'} = $subclassline[0];
+               $qossettings{'CLASS'} = $subclassline[1];
+               $qossettings{'SCLASS'} = $subclassline[2];
+               $qossettings{'SPRIO'} = $subclassline[3];
+               $qossettings{'SRATE'} = $subclassline[4];
+               $qossettings{'SCEIL'} = $subclassline[5];
+               $qossettings{'SBURST'} = $subclassline[6];
+               $qossettings{'SCBURST'} = $subclassline[7];
+               print "\ttc class add dev $qossettings{'DEVICE'} parent 1:$qossettings{'CLASS'} classid 1:$qossettings{'SCLASS'} htb rate $qossettings{'SRATE'}kbit ceil $qossettings{'SCEIL'}kbit prio $qossettings{'SPRIO'} ";
+               if ($qossettings{'SBURST'} > 0) {
+                       print "burst $qossettings{'SBURST'}k ";
+               }
+               if (($qossettings{'SCBURST'} ne '') && ($qossettings{'SCBURST'} ne 0)) {
+                       print "cburst $qossettings{'CBURST'}k";
+               }
+               print "\n";
+       }
+}
 
 print "\n\t### ATTACH QDISC TO LEAF CLASSES\n";
 foreach $classentry (sort @classes)
@@ -187,6 +215,14 @@ foreach $classentry (sort @classes)
                print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 1:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: fq_codel $fqcodel_options\n";
        }
 }
+foreach $subclassentry (sort @subclasses) {
+       @subclassline = split( /\;/, $subclassentry );
+       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'}: fq_codel $fqcodel_options\n";
+       }
+}
 print <<END
 
        ### ADD QOS-OUT CHAIN TO THE MANGLE TABLE IN IPTABLES
@@ -385,6 +421,27 @@ foreach $classentry (sort @classes)
                print "\n";
        }
 }
+foreach $subclassentry (sort @subclasses) {
+       @subclassline = split( /\;/, $subclassentry );
+       if ($qossettings{'IMQ_DEV'} eq $subclassline[0]) {
+               $qossettings{'DEVICE'} = $subclassline[0];
+               $qossettings{'CLASS'} = $subclassline[1];
+               $qossettings{'SCLASS'} = $subclassline[2];
+               $qossettings{'SPRIO'} = $subclassline[3];
+               $qossettings{'SRATE'} = $subclassline[4];
+               $qossettings{'SCEIL'} = $subclassline[5];
+               $qossettings{'SBURST'} = $subclassline[6];
+               $qossettings{'SCBURST'} = $subclassline[7];
+               print "\ttc class add dev $qossettings{'DEVICE'} parent 2:$qossettings{'CLASS'} classid 2:$qossettings{'SCLASS'} htb rate $qossettings{'SRATE'}kbit ceil $qossettings{'SCEIL'}kbit prio $qossettings{'SPRIO'} ";
+               if ($qossettings{'SBURST'} > 0) {
+                       print "burst $qossettings{'SBURST'}k ";
+               }
+               if (($qossettings{'SCBURST'} ne '') && ($qossettings{'SCBURST'} ne 0)) {
+                       print "cburst $qossettings{'CBURST'}k";
+               }
+               print "\n";
+       }
+}
 
 print "\n\t### ATTACH QDISC TO LEAF CLASSES\n";
 foreach $classentry (sort @classes)
@@ -396,6 +453,15 @@ foreach $classentry (sort @classes)
                print "\ttc qdisc add dev $qossettings{'DEVICE'} parent 2:$qossettings{'CLASS'} handle $qossettings{'CLASS'}: fq_codel $fqcodel_options\n";
        }
 }
+foreach $subclassentry (sort @subclasses) {
+       @subclassline = split( /\;/, $subclassentry );
+       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'}: fq_codel $fqcodel_options\n";
+       }
+}
+
 print <<END
 
        ### ADD QOS-INC CHAIN TO THE MANGLE TABLE IN IPTABLES
@@ -522,6 +588,17 @@ END
                        print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'CLASS'} -j RETURN\n";
                }
        }
+       foreach $subclassentry (sort @subclasses)
+       {
+               @subclassline = split( /\;/, $subclassentry );
+               $qossettings{'SUBCLASS'} = $subclassline[1];
+               $qossettings{'TOS'} = $subclassline[8];
+               $qossettings{'TOS'} = abs $qossettings{'TOS'} * 2;
+               if ($qossettings{'TOS'} ne "0") {
+                       print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'SUBCLASS'} -j TOS --set-tos $qossettings{'TOS'}\n";
+                       print "\tiptables -t mangle -A QOS-TOS -m mark --mark $qossettings{'SUBCLASS'} -j RETURN\n";
+               }
+       }
 
 print <<END