]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/qos.cgi
extrahd.cgi: Add support for LVM and MDADM devices
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / qos.cgi
index db759147374c4d9c1a5f0b320cc31d9ff41f7110..f3bbd1bf4ca4a3a69bd8638c22231855103142d1 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2011  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2022  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # 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        #
@@ -68,7 +68,6 @@ $qossettings{'DEF_OUT_SPD'} = '';
 $qossettings{'DEF_INC_SPD'} = '';
 $qossettings{'DEFCLASS_INC'} = '';
 $qossettings{'DEFCLASS_OUT'} = '';
-$qossettings{'ACK'} = '';
 $qossettings{'RED_DEV'} = 'ppp0';
 $qossettings{'IMQ_DEV'} = 'imq0';
 $qossettings{'VALID'} = 'yes';
@@ -99,7 +98,25 @@ $qossettings{'CLASS'} = '';
 $qossettings{'CLASSPRFX'} = '';
 $qossettings{'DEV'} = '';
 $qossettings{'TOS'} = '';
+$qossettings{'CAKE_PROFILE'} = 'conservative';
 
+my %CAKE_PROFILES = (
+       "ethernet" => $Lang::tr{'cake profile ethernet 38'},
+       "ethernet ether-vlan" => $Lang::tr{'cake profile ethernet vlan 42'},
+       "raw" => $Lang::tr{'cake profile raw 0'},
+       "conservative" => $Lang::tr{'cake profile conservative 48'},
+       "docsis" => $Lang::tr{'cake profile docsis 18'},
+       "bridged-ptm" => $Lang::tr{'cake profile bridged-ptm 19'},
+       "pppoe-ptm" => $Lang::tr{'cake profile pppoe-ptm 27'},
+       "pppoe-llcsnap" => $Lang::tr{'cake profile pppoe-llcsnap 40'},
+       "pppoe-vcmux" => $Lang::tr{'cake profile pppoe-vcmux 32'},
+       "pppoa-llc" => $Lang::tr{'cake profile pppoa-llc 14'},
+       "pppoa-vcmux" => $Lang::tr{'cake profile pppoa-vcmux 10'},
+       "bridged-llcsnap" => $Lang::tr{'cake profile bridged-llcsnap 32'},
+       "bridged-vcmux" => $Lang::tr{'cake profile bridged-vcmux 24'},
+       "ipoa-llcsnap" => $Lang::tr{'cake profile ipoa-llcsnap 16'},
+       "ipoa-vcmux" => $Lang::tr{'cake profile ipoa-vcmux 8'},
+);
 
 &General::readhash("${General::swroot}/qos/settings", \%qossettings);
 &Header::getcgihash(\%qossettings);
@@ -111,19 +128,16 @@ my %mainsettings = ();
 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
 &General::readhash("/srv/web/ipfire/html/themes/ipfire/include/colors.txt", \%color);
 
-my @querry = split(/\?/,$ENV{'QUERY_STRING'});
-$querry[0] = '' unless defined $querry[0];
-$querry[1] = 'hour' unless defined $querry[1];
+$selected{'CAKE_PROFILE'} = ();
+foreach my $key (keys %CAKE_PROFILES) {
+       $selected{'CAKE_PROFILE'}{$key} = '';
+}
+$selected{'CAKE_PROFILE'}{$qossettings{'CAKE_PROFILE'}} = 'selected';
 
-if ( $querry[0] ne ""){
-       print "Content-type: image/png\n\n";
-       binmode(STDOUT);
-       &Graphs::updateqosgraph($querry[0],$querry[1]);
-}else{
-       &Header::showhttpheaders();
+&Header::showhttpheaders();
 
-       &Header::openpage('QoS', 1, '');
-       &Header::openbigbox('100%', 'left', '', $errormessage);
+&Header::openpage('QoS', 1, '');
+&Header::openbigbox('100%', 'left', '', $errormessage);
 
 ############################################################################################################################
 ############################################################################################################################
@@ -232,7 +246,7 @@ END
        open( FILE, "< $level7file" ) or die "Unable to read $level7file";
        @l7rules = <FILE>;
        close FILE;
-  system("rm $level7file");
+       &General::system("rm", "$level7file");
        foreach $l7ruleentry (sort @l7rules)
        {
                @l7ruleline = split( /\;/, $l7ruleentry );
@@ -244,13 +258,13 @@ END
                close FILE;
         }
          }
-       open( FILE, "< $level7file" ) or system("touch $level7file");close FILE;
+       open( FILE, "< $level7file" ) or &General::system("touch", "$level7file");close FILE;
        } elsif ($qossettings{'DOLEVEL7'} eq $Lang::tr{'edit'})
 {
        open( FILE, "< $level7file" ) or die "Unable to read $level7file";
        @l7rules = <FILE>;
        close FILE;
-       system("rm $level7file");
+       &General::system("rm", "$level7file");
        foreach $l7ruleentry (sort @l7rules)
        {
                @l7ruleline = split( /\;/, $l7ruleentry );
@@ -263,7 +277,7 @@ END
       }
     }
   &level7rule;
-  open( FILE, "< $level7file" ) or system("touch $level7file");close FILE;
+  open( FILE, "< $level7file" ) or &General::system("touch", "$level7file");close FILE;
  }
 
 ############################################################################################################################
@@ -323,7 +337,7 @@ END
        open( FILE, "< $portfile" ) or die "Unable to read $portfile";
        @portrules = <FILE>;
        close FILE;
-       system("rm $portfile");
+       &General::system("rm", "$portfile");
        foreach $portruleentry (sort @portrules)
        {
                @portruleline = split( /\;/, $portruleentry );
@@ -336,7 +350,7 @@ END
       }
     }
    &portrule;
-  open( FILE, "< $portfile" ) or system("touch $portfile");close FILE;
+  open( FILE, "< $portfile" ) or &General::system("touch", "$portfile");close FILE;
  }
 
 ############################################################################################################################
@@ -360,7 +374,7 @@ END
 ;
        close FILE;
 }
-elsif ($qossettings{'DOTOS'} eq 'Loeschen')
+elsif ($qossettings{'DOTOS'} eq $Lang::tr{'delete'})
 {
        open( FILE, "< $tosfile" ) or die "Unable to read $tosfile";
        @tosrules = <FILE>;
@@ -408,25 +422,25 @@ if ($qossettings{'ACTION'} eq $Lang::tr{'start'})
 {
        $qossettings{'ENABLED'} = 'on';
        &General::writehash("${General::swroot}/qos/settings", \%qossettings);
-       system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
-       system("/usr/local/bin/qosctrl start >/dev/null 2>&1");
-       system("logger -t ipfire 'QoS started'");
+       &General::system("/usr/local/bin/qosctrl", "generate");
+       &General::system("/usr/local/bin/qosctrl", "start");
+       &General::system("logger", "-t", "ipfire", "QoS started");
 }
 elsif ($qossettings{'ACTION'} eq $Lang::tr{'stop'})
 {
        $qossettings{'ENABLED'} = 'off';
        &General::writehash("${General::swroot}/qos/settings", \%qossettings);
-       system("/usr/local/bin/qosctrl stop >/dev/null 2>&1");
-       system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
-       system("logger -t ipfire 'QoS stopped'");
+       &General::system("/usr/local/bin/qosctrl", "stop");
+       &General::system("/usr/local/bin/qosctrl", "generate");
+       &General::system("logger", "-t", "ipfire", "QoS stopped");
 }
 elsif ($qossettings{'ACTION'} eq $Lang::tr{'restart'})
 {
        if ($qossettings{'ENABLED'} eq 'on'){
-               system("/usr/local/bin/qosctrl stop >/dev/null 2>&1");
-               system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
-               system("/usr/local/bin/qosctrl start >/dev/null 2>&1");
-               system("logger -t ipfire 'QoS restarted'");
+               &General::system("/usr/local/bin/qosctrl", "stop");
+               &General::system("/usr/local/bin/qosctrl", "generate");
+               &General::system("/usr/local/bin/qosctrl", "start");
+               &General::system("logger", "-t", "ipfire", "QoS restarted");
        }
 }
 elsif ($qossettings{'ACTION'} eq $Lang::tr{'save'})
@@ -527,12 +541,11 @@ END
                }
                $qossettings{'DEFCLASS_INC'} = "210";
                $qossettings{'DEFCLASS_OUT'} = "110";
-               $qossettings{'ACK'} ="101";
                $qossettings{'ENABLED'} = 'on';
                &General::writehash("${General::swroot}/qos/settings", \%qossettings);
-               system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
-               system("/usr/local/bin/qosctrl start >/dev/null 2>&1");
-               system("logger -t ipfire 'QoS started'");
+               &General::system("/usr/local/bin/qosctrl", "generate");
+               &General::system("/usr/local/bin/qosctrl", "start");
+               &General::system("logger", "-t", "ipfire", "QoS started");
        } else {
                $message = $Lang::tr{'qos enter bandwidths'};
        }
@@ -543,7 +556,7 @@ elsif ($qossettings{'ACTION'} eq $Lang::tr{'status'} )
        if ($qossettings{'ENABLED'} eq 'on'){
                my $output = "";
                my @output = &General::system_output("/usr/local/bin/qosctrl", "status");
-               $output = &Header::cleanhtml(@output[0],"y");
+               $output = &Header::cleanhtml(join("", @output), "y");
                print "<pre>$output</pre>\n";
        } else { print "$Lang::tr{'QoS not enabled'}"; }
        &Header::closebox();
@@ -669,7 +682,7 @@ END
 END
 ;
        }
-       if (($qossettings{'DEFCLASS_OUT'} ne '') && ($qossettings{'DEFCLASS_INC'} ne '')&& ($qossettings{'ACK'} ne '')) {
+       if (($qossettings{'DEFCLASS_OUT'} ne '') && ($qossettings{'DEFCLASS_INC'} ne '')) {
                print <<END
                <form method='post' action='$ENV{'SCRIPT_NAME'}'>
                <table width='66%'>
@@ -677,7 +690,6 @@ END
                <tr><td width='50%' align='right'>$Lang::tr{'downlink std class'}:      <td width='30%' align='left'>$qossettings{'DEFCLASS_INC'}
                    <td width='20%' rowspan='3' align='center' valign='middle'><input type='submit' name='ACTIONDEF' value='$Lang::tr{'modify'}' />
                <tr><td width='50%' align='right'>$Lang::tr{'uplink std class'}:        <td width='30%' align='left'>$qossettings{'DEFCLASS_OUT'}
-               <tr><td width='50%' align='right'>ACKs:                         <td width='30%' align='left'>$qossettings{'ACK'}
                <tr><td colspan='3' width='100%'><hr />
                <tr><td colspan='3' width='100%' align='center'>
                </table>
@@ -701,19 +713,19 @@ if ( ($qossettings{'OUT_SPD'} eq '') || ($qossettings{'INC_SPD'} eq '') ) {
        exit
 }
 
-if ( ($qossettings{'DEFCLASS_INC'} eq '') || ($qossettings{'DEFCLASS_OUT'} eq '') || ($qossettings{'ACK'} eq '') ) {
+if ( ($qossettings{'DEFCLASS_INC'} eq '') || ($qossettings{'DEFCLASS_OUT'} eq '') ) {
        &changedefclasses();
        &Header::closebigbox();
        &Header::closepage();
        exit
 }
 
-       &Header::openbox('100%', 'center', "$qossettings{'RED_DEV'} $Lang::tr{'graph'}, $Lang::tr{'uplink'}");
-       &Graphs::makegraphbox("qos.cgi",$qossettings{'RED_DEV'},"hour");
-       &Header::closebox();
-       &Header::openbox('100%', 'center', "$qossettings{'IMQ_DEV'} $Lang::tr{'graph'}, $Lang::tr{'downlink'}");
-       &Graphs::makegraphbox("qos.cgi",$qossettings{'IMQ_DEV'},"hour");
-       &Header::closebox();
+&Header::openbox('100%', 'center', "$qossettings{'RED_DEV'} $Lang::tr{'graph'}, $Lang::tr{'uplink'}");
+&Graphs::makegraphbox("qos.cgi",$qossettings{'RED_DEV'},"hour");
+&Header::closebox();
+&Header::openbox('100%', 'center', "$qossettings{'IMQ_DEV'} $Lang::tr{'graph'}, $Lang::tr{'downlink'}");
+&Graphs::makegraphbox("qos.cgi",$qossettings{'IMQ_DEV'},"hour");
+&Header::closebox();
 
 &showclasses($qossettings{'RED_DEV'});
 &showclasses($qossettings{'IMQ_DEV'});
@@ -721,8 +733,6 @@ if ( ($qossettings{'DEFCLASS_INC'} eq '') || ($qossettings{'DEFCLASS_OUT'} eq ''
 &Header::closebigbox();
 &Header::closepage();
 
-}
-
 ############################################################################################################################
 ############################################################################################################################
 
@@ -753,21 +763,6 @@ END
                        else { print "<option selected value='$c'>$c</option>\n"; }
                }
                print <<END
-               </select><td width='33%' align='center'>&nbsp;
-               </table>
-               <hr />
-               <table width='66%'>
-               <tr><td width='100%' colspan='3'>$Lang::tr{'enter ack class'}
-               <tr><td width='33%' align='right'>ACKs:<td width='33%' align='left'><select name='ACK'>
-END
-;
-               for ( $c = 100 ; $c <= 120 ; $c++ )
-               {
-                       if ( $qossettings{'ACK'} 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'><input type='submit' name='ACTION' value="$Lang::tr{'save'}" />
                </table>
                </form>
@@ -777,27 +772,70 @@ END
 }
 
 sub changebandwidth {
-       &Header::openbox('100%', 'center', $Lang::tr{'bandwithsettings'});
+       &Header::openbox('100%', 'center', $Lang::tr{'bandwidthsettings'});
+
        if ($qossettings{'ENABLED'} eq 'on') {
-               print "$Lang::tr{'bandwitherror'}";
-               print "<a href='/cgi-bin/qos.cgi'>$Lang::tr{'back'}</a>";
+               print "$Lang::tr{'bandwidtherror'}";
+               print "<table width='100%'><tr><td align='center'><a href='/cgi-bin/qos.cgi'><img src='/images/back.png' alt='$Lang::tr{'back'}' title='$Lang::tr{'back'}' /></a></td></tr></table>";
        } else {
-               print <<END
-               <form method='post' action='$ENV{'SCRIPT_NAME'}'>
-               <input type='hidden' name='DEF_OUT_SPD' value='' /><input type='hidden' name='DEF_INC_SPD' value='' />
-               <table width='66%'>
-               <tr><td width='100%' colspan='3'>$Lang::tr{'down and up speed'}</td></tr>
-               <tr><td width='50%' align='right'>$Lang::tr{'downlink speed'}:</td>
-                               <td width='30%' align='left'><input type='text' name='INC_SPD' maxlength='8' value="$qossettings{'INC_SPD'}" /></td>
-                               <td width='20%' align='center' rowspan='2'><input type='submit' name='ACTION' value="$Lang::tr{'template'}" /><br /><input type='submit' name='ACTION' value="$Lang::tr{'save'}" /><br /><input type='reset' name='ACTION' value="$Lang::tr{'reset'}" /></td></tr>
-               <tr><td width='50%' align='right'>$Lang::tr{'uplink speed'}:</td>
-                               <td width='30%' align='left'><input type='text' name='OUT_SPD' maxlength='8' value="$qossettings{'OUT_SPD'}" /></td></tr>
-               </table>
-               </form>
-               <font color='red'>$Lang::tr{'template warning'}</font>
+               print <<END;
+                       <form method='post' action='$ENV{'SCRIPT_NAME'}'>
+                               <input type='hidden' name='DEF_OUT_SPD' value='' /><input type='hidden' name='DEF_INC_SPD' value='' />
+                               <table width='66%'>
+                                       <tr>
+                                               <td width='100%' colspan='2'>$Lang::tr{'down and up speed'}</td>
+                                       </tr>
+                                       <tr>
+                                               <td width='50%' align='right'>$Lang::tr{'downlink speed'}:</td>
+                                               <td width='50%' align='left'>
+                                                       <input type='text' name='INC_SPD' maxlength='8' value="$qossettings{'INC_SPD'}" />
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td width='50%' align='right'>$Lang::tr{'uplink speed'}:</td>
+                                               <td width='50%' align='left'>
+                                                       <input type='text' name='OUT_SPD' maxlength='8' value="$qossettings{'OUT_SPD'}" />
+                                               </td>
+                                       </tr>
+
+                                       <tr>
+                                               <td colspan="2">&nbsp;</td>
+                                       </tr>
+
+                                       <tr>
+                                               <td width='50%' align='right'>$Lang::tr{'link-layer encapsulation'}:</td>
+                                               <td width='50%' align='left'>
+                                                       <select name="CAKE_PROFILE">
+END
+
+               foreach my $key (sort { $CAKE_PROFILES{$a} cmp $CAKE_PROFILES{$b} } keys %CAKE_PROFILES) {
+                       print <<END;
+                                                               <option value="$key" $selected{'CAKE_PROFILE'}{$key}>$CAKE_PROFILES{$key}</option>
+END
+               }
+
+               print <<END;
+                                                       </select>
+                                               </td>
+                                       </tr>
+
+                                       <tr>
+                                               <td colspan="2">&nbsp;</td>
+                                       </tr>
+
+                                       <tr>
+                                               <td width='100%' align='center' colspan="2">
+                                                       <input type='submit' name='ACTION' value="$Lang::tr{'template'}" />
+                                                       <input type='submit' name='ACTION' value="$Lang::tr{'save'}" />
+                                                       <input type='reset' name='ACTION' value="$Lang::tr{'reset'}" />
+                                               </td>
+                                       </tr>
+                               </table>
+                       </form>
+                       <font color='red'>$Lang::tr{'template warning'}</font>
 END
-;
        }
+
        &Header::closebox();
 }
 
@@ -871,10 +909,10 @@ END
                print <<END
                </select>
                <td width='33%' align='center'>&nbsp;
-               <tr><td width='33%' align='right'>$Lang::tr{'guaranteed bandwith'}:
+               <tr><td width='33%' align='right'>$Lang::tr{'guaranteed bandwidth'}:
                    <td width='33%' align='left'><input type='text' size='20' 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'}&nbsp;<img src='/blob.gif' alt='*' />:
+               <tr><td width='33%' align='right'>$Lang::tr{'max bandwidth'}&nbsp;<img src='/blob.gif' alt='*' />:
                    <td width='33%' align='left'><input type='text' size='20' name='MAXBWDTH' maxlength='8' required='1' value="$qossettings{'MAXBWDTH'}" />
                    <td width='33%' align='center'>&nbsp;
                <tr><td width='33%' align='right'>Burst:
@@ -1036,8 +1074,8 @@ sub showclasses {
                                <tr><td bgcolor='$color{'color20'}' width='10%' align='center'><b>$Lang::tr{'interface'}</b>
                                    <td bgcolor='$color{'color20'}' width='10%' align='center'><b>$Lang::tr{'Class'}</b>
                                    <td bgcolor='$color{'color20'}' width='10%' align='center'>$Lang::tr{'priority'}
-                                   <td bgcolor='$color{'color20'}' width='10%' align='center'>$Lang::tr{'guaranteed bandwith'}
-                                   <td bgcolor='$color{'color20'}' width='10%' align='center'>$Lang::tr{'max bandwith'}
+                                   <td bgcolor='$color{'color20'}' width='10%' align='center'>$Lang::tr{'guaranteed bandwidth'}
+                                   <td bgcolor='$color{'color20'}' width='10%' align='center'>$Lang::tr{'max bandwidth'}
                                    <td bgcolor='$color{'color20'}' width='10%' align='center'>Burst
                                    <td bgcolor='$color{'color20'}' width='10%' align='center'>Ceil Burst
                                    <td bgcolor='$color{'color20'}' width='10%' align='center'>TOS
@@ -1248,7 +1286,7 @@ sub validminbwdth {
                }
                unless ( ( $qossettings{'MINBWDTH'} >= 1 ) && ( $qossettings{'MINBWDTH'} <= $qossettings{'SPD'} ) ) {
                        $qossettings{'VALID'} = 'no';
-                       $message = "$Lang::tr{'false min bandwith'}";
+                       $message = "$Lang::tr{'false min bandwidth'}";
                }
                $qossettings{'SPD'} = '';
        }
@@ -1263,7 +1301,7 @@ sub validmaxbwdth {
                }
                unless ( ( $qossettings{'MAXBDWTH'} >= 0 ) && ($qossettings{'MAXBDWTH'} >= $qossettings{'MINBDWTH'}) &&( $qossettings{'MAXBDWTH'} <= $qossettings{'SPD'} ) ) {
                        $qossettings{'VALID'} = 'no';
-                       $message = "$Lang::tr{'false max bandwith'}";
+                       $message = "$Lang::tr{'false max bandwidth'}";
                }
                $qossettings{'SPD'} = '';
        }