[v2,08/15] QoS: Drop support for subclasses

Message ID 20191021184539.12758-8-michael.tremer@ipfire.org
State New
Headers show
Series
  • Untitled series #896
Related show

Commit Message

Michael Tremer Oct. 21, 2019, 6:45 p.m. UTC
This feature was never properly implemented and the UI was dead

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Signed-off-by: Daniel Weismüller <daniel.weismueller@ipfire.org>
---
 config/qos/makeqosscripts.pl |  94 ---------------------
 doc/language_issues.de       |   4 +
 doc/language_issues.en       |   4 -
 doc/language_issues.es       |   4 +
 doc/language_issues.fr       |   4 +
 doc/language_issues.it       |   4 +
 doc/language_issues.nl       |   4 +
 doc/language_issues.pl       |   4 +
 doc/language_issues.ru       |   4 +
 doc/language_issues.tr       |   4 +
 html/cgi-bin/qos.cgi         | 197 -------------------------------------------
 11 files changed, 32 insertions(+), 295 deletions(-)

Patch

diff --git a/config/qos/makeqosscripts.pl b/config/qos/makeqosscripts.pl
index da298ace3..2b5cce84f 100644
--- a/config/qos/makeqosscripts.pl
+++ b/config/qos/makeqosscripts.pl
@@ -35,26 +35,22 @@  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";
@@ -82,9 +78,6 @@  $qossettings{'IMQ_MODE'} = 'PREROUTING';
 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;
@@ -191,27 +184,6 @@  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)
@@ -223,14 +195,6 @@  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 "\n\t### FILTER TRAFFIC INTO CLASSES\n";
 foreach $classentry (sort @classes)
 {
@@ -241,15 +205,6 @@  foreach $classentry (sort @classes)
 		print "\ttc filter add dev $qossettings{'DEVICE'} parent 1:0 prio 0 protocol ip handle $qossettings{'CLASS'} fw flowid 1:$qossettings{'CLASS'}\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];
-		print "\ttc filter add dev $qossettings{'DEVICE'} parent 1:0 prio 0 protocol ip handle $qossettings{'SCLASS'} fw flowid 1:$qossettings{'SCLASS'}\n";
-	}
-}
 print <<END
 
 	### add l7-filter to PREROUTING chain to see all traffic
@@ -450,27 +405,6 @@  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)
@@ -482,14 +416,6 @@  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 "\n\t### FILTER TRAFFIC INTO CLASSES\n";
 foreach $classentry (sort @classes)
 {
@@ -500,15 +426,6 @@  foreach $classentry (sort @classes)
 		print "\ttc filter add dev $qossettings{'DEVICE'} parent 2:0 prio 0 protocol ip handle $qossettings{'CLASS'} fw flowid 2:$qossettings{'CLASS'}\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];
-		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' )
 {
@@ -659,17 +576,6 @@  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
 
diff --git a/doc/language_issues.de b/doc/language_issues.de
index 412efdc47..61b1c8078 100644
--- a/doc/language_issues.de
+++ b/doc/language_issues.de
@@ -30,6 +30,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -39,6 +40,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: addon
@@ -140,6 +142,7 @@  WARNING: translation string unused: ccd maxclients
 WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -548,6 +551,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
 WARNING: translation string unused: reboot schedule
diff --git a/doc/language_issues.en b/doc/language_issues.en
index 9ca53b50a..3581a688a 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -80,7 +80,6 @@  WARNING: untranslated string: Scan for Files = Scan for files
 WARNING: untranslated string: Scan for Songs = unknown string
 WARNING: untranslated string: Scan from Directory = Scan from directory
 WARNING: untranslated string: Set time on boot = Force setting the system clock on boot
-WARNING: untranslated string: Subclass = Subclass
 WARNING: untranslated string: TOS Rule = TOS-Rule
 WARNING: untranslated string: TOS rule = TOS rule
 WARNING: untranslated string: The class number does not match the specified interface. = The class number does not match the specified interface.
@@ -107,7 +106,6 @@  WARNING: untranslated string: add new alias = Add a new alias
 WARNING: untranslated string: add new lease = Add a new fixed lease
 WARNING: untranslated string: add printer = Add printer
 WARNING: untranslated string: add share = Add share
-WARNING: untranslated string: add subclass = Add subclass
 WARNING: untranslated string: add user = Add user
 WARNING: untranslated string: added from dhcp lease list = Added from DHCP lease list
 WARNING: untranslated string: addons = Addons
@@ -465,7 +463,6 @@  WARNING: untranslated string: check all = Check all
 WARNING: untranslated string: check vpn lr = Check
 WARNING: untranslated string: cipher = Encryption:
 WARNING: untranslated string: city = City
-WARNING: untranslated string: class in use = The class is already in use.
 WARNING: untranslated string: clear playlist = Empty playlist
 WARNING: untranslated string: clenabled = Provide time to local network
 WARNING: untranslated string: click to disable = Enabled (click to disable)
@@ -1517,7 +1514,6 @@  WARNING: untranslated string: proxy reports weekly = Weekly reports
 WARNING: untranslated string: ptr = PTR
 WARNING: untranslated string: pulse = Pulse
 WARNING: untranslated string: pulse dial = Pulse dial:
-WARNING: untranslated string: qos add subclass = Add subclass
 WARNING: untranslated string: qos enter bandwidths = You will need to enter your downstream and upstream bandwidth!
 WARNING: untranslated string: qos graphs = Qos Graphs
 WARNING: untranslated string: qos warning = The rule <strong>must</strong> be saved, otherwise it will be discarded!
diff --git a/doc/language_issues.es b/doc/language_issues.es
index 2af165d6b..a4c5bf1f5 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -9,6 +9,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -18,6 +19,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -129,6 +131,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -475,6 +478,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index f48d65a80..3d657059f 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -31,6 +31,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -40,6 +41,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -159,6 +161,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -577,6 +580,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.it b/doc/language_issues.it
index 59c649954..973a7c12c 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -10,6 +10,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -19,6 +20,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -137,6 +139,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -552,6 +555,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index 836745e5a..2d5e06726 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -10,6 +10,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -19,6 +20,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -136,6 +138,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -547,6 +550,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index 2af165d6b..a4c5bf1f5 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -9,6 +9,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -18,6 +19,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -129,6 +131,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -475,6 +478,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index b904157b1..06e68dfd3 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -10,6 +10,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -19,6 +20,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -130,6 +132,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -478,6 +481,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index cf773d8cb..5bbf9a1b5 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -31,6 +31,7 @@  WARNING: translation string unused: Queuelenght
 WARNING: translation string unused: Remote IP
 WARNING: translation string unused: Remote VPN IP
 WARNING: translation string unused: Resolv
+WARNING: translation string unused: Subclass
 WARNING: translation string unused: TOS Bits
 WARNING: translation string unused: Verbose
 WARNING: translation string unused: access allowed
@@ -40,6 +41,7 @@  WARNING: translation string unused: add cron
 WARNING: translation string unused: add network
 WARNING: translation string unused: add new ovpn
 WARNING: translation string unused: add service
+WARNING: translation string unused: add subclass
 WARNING: translation string unused: add xtaccess
 WARNING: translation string unused: add-route
 WARNING: translation string unused: admin user password has been changed
@@ -159,6 +161,7 @@  WARNING: translation string unused: cfg restart
 WARNING: translation string unused: check for net traffic update
 WARNING: translation string unused: choose config
 WARNING: translation string unused: choose media
+WARNING: translation string unused: class in use
 WARNING: translation string unused: clear cache
 WARNING: translation string unused: compression
 WARNING: translation string unused: connect
@@ -580,6 +583,7 @@  WARNING: translation string unused: proxy no proxy extend
 WARNING: translation string unused: proxy no proxy local
 WARNING: translation string unused: proxy port
 WARNING: translation string unused: psk
+WARNING: translation string unused: qos add subclass
 WARNING: translation string unused: quick control
 WARNING: translation string unused: reboot ask
 WARNING: translation string unused: reboot question
diff --git a/html/cgi-bin/qos.cgi b/html/cgi-bin/qos.cgi
index b7af11204..320eef67d 100644
--- a/html/cgi-bin/qos.cgi
+++ b/html/cgi-bin/qos.cgi
@@ -38,19 +38,16 @@  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 @l7ruleline = ();
 my @portruleline = ();
 my @tosruleline = ();
@@ -58,7 +55,6 @@  my @proto = ();
 my %selected= ();
 my @checked = ();
 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";
@@ -85,7 +81,6 @@  $qossettings{'IMQ_DEV_SEL'} = '';
 $qossettings{'PRIO'} = '';
 $qossettings{'SPD'} = '';
 $qossettings{'CLASS'} = '';
-$qossettings{'SCLASS'} = '';
 $qossettings{'QPORT'} = '';
 $qossettings{'DPORT'} = '';
 $qossettings{'QIP'} = '';
@@ -98,7 +93,6 @@  $qossettings{'MAXBWDTH'} = '';
 $qossettings{'BURST'} = '';
 $qossettings{'CBURST'} = '';
 $qossettings{'DOCLASS'} = '';
-$qossettings{'DOSCLASS'} = '';
 $qossettings{'DOLEVEL7'} = '';
 $qossettings{'DOPORT'} = '';
 $qossettings{'CLASS'} = '';
@@ -194,60 +188,12 @@  elsif ($qossettings{'DOCLASS'} eq $Lang::tr{'delete'})
 		}
 	}
 	close FILE;
-	open( FILE, "< $subclassfile" ) or die "Unable to read $classfile";
-	@tmp = <FILE>;
-	close FILE;
-	open( FILE, "> $subclassfile" ) or die "Unable to write $classfile";
-	foreach $subclassentry (sort @tmp)
-	{
-		@tmpline = split( /\;/, $subclassentry );
-		if ( $tmpline[1] ne $qossettings{'CLASS'} )
-		{
-			print FILE $subclassentry;
-		}
-	}
-	close FILE;
 	$message = "$Lang::tr{'Class'} $qossettings{'CLASS'} $Lang::tr{'Class was deleted'}";
 }
 
 ############################################################################################################################
 ############################################################################################################################
 
-if ($qossettings{'DOSCLASS'} eq $Lang::tr{'save'})
-{
-	&validsubclass();
-	&validminbwdth();
-	if ( $qossettings{'VALID'} eq 'yes' ) {
-		open( FILE, ">> $subclassfile" ) or die "Unable to write $subclassfile";
-		print FILE <<END
-$qossettings{'DEVICE'};$qossettings{'CLASS'};$qossettings{'SCLASS'};$qossettings{'PRIO'};$qossettings{'MINBWDTH'};$qossettings{'MAXBWDTH'};$qossettings{'BURST'};$qossettings{'CBURST'};$qossettings{'TOS'};
-END
-;
-		close FILE;
-	} else {
-		$qossettings{'ACTION'} = $Lang::tr{'qos add subclass'};
-	}
-} elsif ($qossettings{'DOSCLASS'} eq $Lang::tr{'delete'})
-{
-	open( FILE, "< $subclassfile" ) or die "Unable to read $classfile";
-	@tmp = <FILE>;
-	close FILE;
-	open( FILE, "> $subclassfile" ) or die "Unable to write $classfile";
-	foreach $subclassentry (sort @tmp)
-	{
-		@tmpline = split( /\;/, $subclassentry );
-		if ( $tmpline[2] ne $qossettings{'CLASS'} )
-		{
-			print FILE $subclassentry;
-		}
-	}
-	close FILE;
-	$message = "$Lang::tr{'Subclass'} $qossettings{'CLASS'} $Lang::tr{'was deleted'}.";
-}
-
-############################################################################################################################
-############################################################################################################################
-
 if ($qossettings{'DOLEVEL7'} eq $Lang::tr{'save'})
 {
 	if ( $qossettings{'QIP'} ne '' ) {
@@ -612,13 +558,6 @@  elsif ($qossettings{'ACTION'} eq $Lang::tr{'parentclass add'} )
 	&Header::closepage();
 	exit
 }
-elsif ($qossettings{'ACTION'} eq $Lang::tr{'qos add subclass'})
-{
-	&subclass();
-	&Header::closebigbox();
-	&Header::closepage();
-	exit
-}
 elsif ($qossettings{'ACTION'} eq $Lang::tr{'Add Rule'})
 {
 	&Header::openbox('100%', 'center', $Lang::tr{'Add Rule'});
@@ -967,81 +906,6 @@  END
 	&Header::closebox();
 }
 
-sub subclass {
-	&Header::openbox('100%', 'center', $Lang::tr{'Subclass'});
-	print <<END
-		<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-		<table width='66%'>
-END
-;
-	if ( $message ne "" ) {
-		print "<tr><td colspan='3' align='center'>$message";
-	}
-	print <<END
-		<tr><td colspan='3' width='100%'>$Lang::tr{'current class'}: $qossettings{'CLASS'}
-		<tr><td width='100%' colspan='3'>$Lang::tr{'enter data'}
-		<tr><td width='33%' align='right'>$Lang::tr{'Subclass'}:<td width='33%' align='left'><select name='SCLASS'>
-END
-;
-	if ($qossettings{'CLASS'} >= 100 && $qossettings{'CLASS'} < 121) {
-		$qossettings{'DEVICE'} = $qossettings{'RED_DEV'};
-		for ( $c = 1000 ; $c <= 1020 ; $c++ )
-		{
-			if ( $qossettings{'SCLASS'} ne $c )
-			{ print "<option value='$c'>$c</option>\n"; }
-			else { print "<option selected value='$c'>$c</option>\n"; }
-		}
-	} elsif ($qossettings{'CLASS'} >= 200 && $qossettings{'CLASS'} < 221) {
-		$qossettings{'DEVICE'} = $qossettings{'IMQ_DEV'};
-		for ( $c = 2000 ; $c <= 2020 ; $c++ )
-		{
-			if ( $qossettings{'SCLASS'} ne $c )
-			{ print "<option value='$c'>$c</option>\n"; }
-			else { print "<option selected value='$c'>$c</option>\n"; }
-		}
-	}
-	print <<END
-		</select>
-		<td width='33%' align='center'>&nbsp;
-		<tr><td width='33%' align='right'>$Lang::tr{'priority'}:<td width='33%' align='left'><select name='PRIO'>
-END
-;
-		for ( $c = 1 ; $c <= 7 ; $c++ )
-		{
-			if ( $qossettings{'PRIO'} ne $c )
-			{ print "<option value='$c'>$c</option>\n"; }
-			else { print "<option selected value='$c'>$c</option>\n"; }
-		}
-		print <<END
-		<td width='33%' align='center'>&nbsp;
-		<tr><td width='33%' align='right'>$Lang::tr{'guaranteed bandwith'}:
-		    <td width='33%' align='left'><input type='text' name='MINBWDTH' maxlength='8' required='1' value="$qossettings{'MINBWDTH'}" />
-		    <td width='33%' align='center'>&nbsp;
-		<tr><td width='33%' align='right'>$Lang::tr{'max bandwith'}:
-		    <td width='33%' align='left'><input type='text' name='MAXBWDTH' maxlength='8' required='1' value="$qossettings{'MAXBWDTH'}" />
-		    <td width='33%' align='center'>&nbsp;
-		<tr><td width='33%' align='right'>Burst:
-		    <td width='33%' align='left'><input type='text' name='BURST' maxlength='8' value="$qossettings{'BURST'}" />
-		    <td width='33%' align='center'>&nbsp;
-		<tr><td width='33%' align='right'>Ceilburst:
-		    <td width='33%' align='left'><input type='text' name='CBURST' maxlength='8' value="$qossettings{'CBURST'}" />
-		    <td width='33%' align='center'>&nbsp;
-		<tr><td width='33%' align='right'>TOS-Bit:
-		    <td width='33%' align='left'><select name='TOS'>
-				<option value='0'>$Lang::tr{'disabled'} (0)</option>
-				<option value='8'>$Lang::tr{'min delay'} (8)</option>
-				<option value='4'>$Lang::tr{'max throughput'} (4)</option>
-				<option value='2'>$Lang::tr{'max reliability'} (2)</option>
-				<option value='1'>$Lang::tr{'min costs'} (1)</option></select>
-		    <td width='33%' align='center'><input type='hidden' name='CLASS' value="$qossettings{'CLASS'}" />
-							<input type='hidden' name='DEVICE' value="$qossettings{'DEVICE'}" />
-							<input type='submit' name='DOSCLASS' value='$Lang::tr{'save'}' />&nbsp;<input type='reset' value='$Lang::tr{'reset'}' />
-		</table></form>
-END
-;
-	&Header::closebox();
-}
-
 sub level7rule {
 	&Header::openbox('100%', 'center', $Lang::tr{'Level7 Rule'});
 	print <<END
@@ -1164,9 +1028,6 @@  sub showclasses {
 	@classes = <FILE>;
 	close FILE;
 	if (@classes) {
-		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;
@@ -1205,11 +1066,6 @@  sub showclasses {
 					<table border='0'><tr>
 					<td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
 						<input type='hidden' name='CLASS' value='$classline[1]' />
-						<input type='hidden' name='ACTION' value='$Lang::tr{'qos add subclass'}' />
-						<input type='image' alt='$Lang::tr{'add subclass'}' title='$Lang::tr{'add subclass'}' src='/images/addblue.gif' />
-					</form>
-					<td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
-						<input type='hidden' name='CLASS' value='$classline[1]' />
 						<input type='hidden' name='ACTION' value='$Lang::tr{'Add Rule'}' />
 						<input type='image' alt='$Lang::tr{'Add Rule'}' title='$Lang::tr{'Add Rule'}' src='/images/addgreen.gif' />
 					</form>
@@ -1386,41 +1242,6 @@  END
 				}
 END
 ;
-			  	foreach $subclassentry (sort @subclasses)
-	  			{
-	  				@subclassline = split( /\;/, $subclassentry );
-		  			if ( $subclassline[1] eq $classline[1] ) {
-						print <<END
-							<tr><td align='center' bgcolor='#FAFAFA'>$Lang::tr{'Subclass'}:
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[2]
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[3]
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[4]
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[5]
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[6]
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[7]
-							    <td align='center' bgcolor='#FAFAFA'>$subclassline[8]
-							    <td align='right'  bgcolor='#FAFAFA'>
-						<table border='0'><tr>
-						<td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
-							<input type='hidden' name='CLASS' value='$subclassline[2]' />
-							<input type='hidden' name='ACTION' value='$Lang::tr{'Add Rule'}' />
-							<input type='image' alt='$Lang::tr{'Add Rule'}' title='$Lang::tr{'Add Rule'}' src='/images/addgreen.gif' />
-						</form>
-						<td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
-							<input type='hidden' name='CLASS' value='$subclassline[2]' />
-							<input type='hidden' name='DOSCLASS' value='$Lang::tr{'edit'}' />
-							<input type='image' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' src='/images/edit.gif' />
-						</form>
-						<td><form method='post' action='$ENV{'SCRIPT_NAME'}'>
-							<input type='hidden' name='CLASS' value='$subclassline[2]' />
-							<input type='hidden' name='DOSCLASS' value='$Lang::tr{'delete'}' />
-							<input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/delete.gif' />
-						</form>
-						</table>
-END
-;
-					}
-				}
 			print <<END
 			</table>
 END
@@ -1488,21 +1309,3 @@  sub validclass {
 		}
 	}
 }
-
-sub validsubclass {
-	if ( $qossettings{'VALID'} eq 'yes' ) {
-		open( FILE, "< $subclassfile" ) or die "Unable to read $subclassfile";
-		@tmp = <FILE>;
-		close FILE;
-		foreach $subclassentry (sort @tmp)
-	  	{
-	  		@tmpline = split( /\;/, $subclassentry );
-	  		if ( $tmpline[2] eq $qossettings{'SCLASS'} )
-  			{
-				$qossettings{'VALID'} = 'no';
-				$message = "$Lang::tr{'class in use'}";
-				last
-			}
-		}
-	}
-}