$error

\n" . "Für den DynShaper Manager sind URZ-Nutzerkennzeichen und\n" . "AFS-Passwort erforderlich!\n"; exit; } } #--------------------------------------------------------------------------------------------------- # HTML-Kopf #--------------------------------------------------------------------------------------------------- ?> DynShaper Manager
'Allgemeine Einstellungen', $CARDS[1] => 'Einrichten von Nutzergruppen', $CARDS[2] => 'Ausnahmeregelungen'); // Die Umlaute duerfen nicht als Entities geschrieben werden, // da sonst ein Stringvergleich fehlschlaegt! // Uebernehmen-Buttons $APPLY = 'Übernehmen'; $DELETE = 'Jetzt löschen'; $CANCEL = 'Abbrechen'; $RESTART = 'Neustart'; $RESET = 'Verwerfen'; // Bearbeiten-Buttons $ADD = 'Hinzufügen'; $EDIT = 'Bearbeiten'; $DEL = 'Löschen'; #--------------------------------------------------------------------------------------------------- # Definition von Funktionen # Globale Variablen: # $fault_code - Fehlercode # $fault_string - Fehlermeldung # $output - Auszugebende Meldungen (Fehler bzw. Neustart-Ausgabe) # $colspan - Wie viel Zellen ueberspannt werden sollen #--------------------------------------------------------------------------------------------------- // Prueft, ob ein Fehler vorlag und gibt eine entsprechende Meldung aus function errorCheck () { global $fault_code, $fault_string, $output, $colspan; if ($colspan && $colspan > 1) $span=" colspan=\"$colspan\""; else $span=""; if ($fault_code || $fault_string) { if (!$fault_string) $fault_string = "Fehlercode $fault_code"; $output .= "
\n" . "Fehler: $fault_string
\n"; } } // Laden der Werte fuer angegebene Registerkarte und Target (=0: alle) function load ($card, $target=0) { switch ($card) { case 0: $values = array('conf_card' => 0, 'conf_devint' => 'eth1', 'conf_bwint' => '100MBit', 'conf_devext' => 'eth0', 'conf_bwext' => '100MBit', 'conf_mlimit' => '1200GByte', 'conf_adjust' => 'on', 'conf_final' => '2', 'conf_mail' => '5', 'conf_noshape' => '20MBit', 'conf_dspath' => '/usr/bin/sudo /etc/init.d/dynshaper-htb', 'conf_tcpath' => '/usr/sbin/tc', 'conf_mppath' => '/sbin/modprobe', 'conf_cfpath' => './dynshaper.conf', 'conf_log' => '/var/log/dynshaper.log'); break; case 1: $classes[1] = array('conf_card' => 1, 'conf_target' => 1, 'conf_rate' => '10MBit', 'conf_in' => '', 'conf_out' => '', 'conf_limit' => '100MByte', 'conf_days' => '2', 'conf_atonce' => '', 'conf_users' => "chu"); $classes[2] = array('conf_card' => 1, 'conf_target' => 2, 'conf_rate' => '5MBit', 'conf_in' => 'on', 'conf_out' => '', 'conf_limit' => '200MByte', 'conf_days' => '4', 'conf_atonce' => '', 'conf_users' => "hja"); $classes[3] = array('conf_card' => 1, 'conf_target' => 3, 'conf_rate' => '3MBit', 'conf_in' => 'on', 'conf_out' => '', 'conf_limit' => '300MByte', 'conf_days' => '5', 'conf_atonce' => '', 'conf_users' => "svsi\neller"); $classes[4] = array('conf_card' => 1, 'conf_target' => 4, 'conf_rate' => '500KBit', 'conf_in' => 'on', 'conf_out' => '', 'conf_limit' => '400MByte', 'conf_days' => '6', 'conf_atonce' => '', 'conf_users' => "bseb\nsta"); $classes[5] = array('conf_card' => 1, 'conf_target' => 5, 'conf_rate' => '100KBit', 'conf_in' => 'on', 'conf_out' => 'on', 'conf_limit' => '500MByte', 'conf_days' => '10', 'conf_atonce' => 'on', 'conf_users' => "fsch"); if ($target) $values = $classes[$target]; else $values = $classes; break; case 2: $excepts[1] = array('conf_card' => 2, 'conf_target' => 1, 'conf_rate' => '80KBit', 'conf_prio' => '5', 'conf_in' => 'match ip protocol 1 0xff', 'conf_out' => 'match ip protocol 1 0xff', 'conf_bound' => 'on'); if ($target) $values = $excepts[$target]; else $values = $excepts; break; } errorCheck(); return $values; } // Speichern der uebergebenen Werte function store ($card, $values) { global $fault_string; $success = true; if (!$success && !$fault_string) $fault_string = 'Unbekannter Fehler beim Speichern'; errorCheck(); return $success; } // Neustart des DynShapers // (Escapecode-Auswertung noch sehr rudimentaer) function restart () { global $output; $restart = "Starting Dynamic Shaper v0.51 HTB... mod eth0 e1 g12345 eth1 e1 g12345 \033[71G[\033[32m OK \033[m]"; $restart = preg_replace("/\033\[[0-9]+m/", "", $restart); $restart = preg_replace("/\033\[m/", "", $restart); $restart = preg_replace("/\033\[[0-9]*[A-Za-z]/", "", $restart); errorCheck(); $output .= "
\n" . "
$restart
\n"; } #--------------------------------------------------------------------------------------------------- # Festlegung der Registerkarten sowie des Edit-Modes und -Targets #--------------------------------------------------------------------------------------------------- // Wenn ein ': ' vorkommt, handelt es sich um einen Bearbeiten-Button, // der danach die zu bearbeitende Gruppe bzw. Ausnahme enthaelt. if ($conf_action) { $conf_card = $conf_oldcard; $pos = strpos($conf_action, ': '); if ($pos > 0) { $edit_mode = substr($conf_action, 0, $pos); $edit_target = substr($conf_action, $pos + 2); } else { $edit_mode = $conf_action; $edit_target = 0; } } elseif (!$conf_card) $conf_card = $CARDS[0]; #--------------------------------------------------------------------------------------------------- # Abspeichern der Werte der alten Registerkarte ueber XML-RPC und evtl. Neustart #--------------------------------------------------------------------------------------------------- switch ($conf_oldcard) { case $CARDS[0]: // immer abspeichern store(0, $HTTP_POST_VARS); break; case $CARDS[1]: if ($conf_target || $conf_rate) { // nur nach Editierung // wenn kein Abbruch, bei DELETE loeschen, sonst speichern if ($edit_mode != $CANCEL) { if ($edit_mode == $DELETE) $HTTP_POST_VARS['conf_rate'] = 0; store(1, $HTTP_POST_VARS); } } break; case $CARDS[2]: if ($conf_target || $conf_rate) { // nur nach Editierung // wenn kein Abbruch, bei DELETE loeschen, sonst speichern if ($edit_mode != $CANCEL) { if ($edit_mode == $DELETE) $HTTP_POST_VARS['conf_rate'] = 0; store(2, $HTTP_POST_VARS); } } break; } // Neustart DynShaper, darf erst nach dem Abspeichern erfolgen! if ($edit_mode == $RESTART) restart(); #--------------------------------------------------------------------------------------------------- # Buttonleiste und Tabellenueberschrift # Formularfelder: # conf_card - Registerkarte #--------------------------------------------------------------------------------------------------- $buttons = ""; reset($CARDS); while (list(, $value) = each($CARDS)) $buttons .= "\n"; print "\n" . "\n$output" . "\n
DynShaper Manager - $DESCR[$conf_card]
$buttons
" . "\n"; #--------------------------------------------------------------------------------------------------- # Auswahl der aktuellen Registerkarte und einlesen der Werte ueber XML-RPC #--------------------------------------------------------------------------------------------------- switch ($conf_card) { #----------------------------------------------------------------------------------------------- # Registerkarte 1: Definierte Nutzergruppen # Formularfelder: # conf_target - Legt Gruppe fest # conf_rate - Datenrate der Gruppe # conf_in - Gibt an, ob Inbound-Begrenzung # conf_out - Gibt an, ob Outbound-Begrenzung # conf_limit - Limit der Gruppe (in MByte) # conf_days - Anzahl der Tage, die man in der Gruppe bleibt # conf_atonce - Gibt an, ob eine Begrenzung sofort erfolgen soll # conf_users - Nutzer in der Gruppe # conf_action - Gruppe hinzufuegen, bearbeiten, loeschen #----------------------------------------------------------------------------------------------- case $CARDS[1]: if ($edit_mode == $ADD || $edit_mode == $EDIT || $edit_mode == $DEL) { $colspan = 4; if ($edit_target) { $form = load(1, $edit_target); print "\n" . "\n"; } print "\n"; print "\n"; print "\n"; $inbound = ''; $outbound =''; if ($form['conf_in']) $inbound = ' checked="yes"'; if ($form['conf_out']) $outbound = ' checked="yes"'; print "\n"; print "\n"; print "\n"; $atonce = ''; if ($form['conf_atonce']) $atonce = ' checked="yes"'; print "\n"; } else { $colspan = 8; print "\n"; print "" . "\n"; $targets = load(1); if ($targets) while (list(, $value) = each($targets)) { print "" . "\n"; } print "\n"; } break; #----------------------------------------------------------------------------------------------- # Registerkarte 2: Ausnahmeregelungen # Formularfelder: # conf_target - Legt Ausnahme fest # conf_rate - Datenrate der Ausnahme # conf_prio - Prioritaet der Ausnahme # conf_in - Gibt an, ob Inbound-Begrenzung # conf_out - Gibt an, ob Outbound-Begrenzung # conf_bound - Gibt an, ob bounded # conf_action - Ausnahme hinzufuegen, bearbeiten, loeschen #----------------------------------------------------------------------------------------------- case $CARDS[2]: if ($edit_mode == $ADD || $edit_mode == $EDIT || $edit_mode == $DEL) { $colspan = 2; if ($edit_target) { $form = load(2, $edit_target); print "\n" . "\n"; } print "\n"; print "\n"; $bounded = ''; if ($form['conf_bound']) $bounded = ' checked="yes"'; print "\n"; print "\n"; print "\n"; print "\n"; } else { $colspan = 6; print "\n"; print "" . "\n"; $targets = load(2); if ($targets) while (list(, $value) = each($targets)) { print "\n"; } print "\n"; } break; #----------------------------------------------------------------------------------------------- # Registerkarte 0: Allgemeine Einstellungen # Formularfelder: # conf_devint - Internes Device # conf_bwint - Bandbreite des internen Devices # conf_devext - Externes Device # conf_bwext - Bandbreite des externen Devices # conf_mlimit - Erlaubtes maximales Monatslimit # conf_adjust - Automatische Regelung? # conf_final - Zu welcher Stunde der vergangene Tag abgeschlossen wird # conf_mail - Ab welcher Gruppe eine Mail geschickt werden soll # conf_noshape - Ab welcher Bandbreite eine Gruppe vom Shaping ausgenommen wird # conf_dspath - Pfad zum DynShaper # conf_tcpath - Pfad zum TC # conf_mppath - Pfad zu ModProbe # conf_cfpath - Pfad zur Konfigurationsdatei # conf_log - Pfad zum Logfile #----------------------------------------------------------------------------------------------- case $CARDS[0]: $colspan = 4; $form = load(0); print "\n"; print "\n" . "\n" . "\n" . "\n"; print "\n" . "\n" . "\n" . "\n"; print "\n"; print "\n"; print "\n" . "\n"; $adjust = ''; if ($form['conf_adjust']) $adjust = ' checked="yes"'; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n" . "\n"; print "\n" . "\n"; print "\n" . "\n"; print "\n" . "\n"; print "\n" . "\n"; break; } #--------------------------------------------------------------------------------------------------- # Ende der Tabelle # Formularfelder: # conf_oldcard - Die aktuelle Registerkarte, die beim naechsten Aufruf als alter Wert vorliegt # conf_action - Auszufuehrende Aktion: # APPLY - Uebernehmen (in Hauptkarten Restart des Shapers) # CANCEL - Abbrechen (in Hauptkarten kein Restart des Shapers) # DELETE - Gruppe/Ausnahme endgueltig loeschen # RESTART - DynShaper neu starten # (RESET - Reset des Formulars, keine Aktion) #--------------------------------------------------------------------------------------------------- $editing = ($edit_mode == $ADD || $edit_mode == $EDIT || $edit_mode == $DEL); $changing = ($conf_card == $CARDS[0] || $editing); if ($colspan && $colspan > 1) $span=" colspan=\"$colspan\""; else $span=""; print "
Gruppe:$edit_target

\n" . "Hier können die Parameter der Gruppe geändert werden. \"Rate\" legt die\n" . "Bandbreite fest, die möglichst kleiner als die Bandbreite der Netzinterfaces\n" . "sein sollte. Als Einheiten sind \"KBit\" und \"MBit\" zulässig. \"Inbound/Outbound\n" . "Transfers\" legen die Richtungen fest, in die der Traffic begrenzt werden soll, mit\n" . "\"Trafficmenge\" und \"Tage\" kann man einstellen, ab wann und wie lange man in diese Gruppe\n" . "eingeordnet wird. \"Sofortige Begrenzung\" ist für Extremfälle sinnvoll, z.B. für\n" . "die schlechteste Gruppe. Die \"Nutzer\" in der Gruppe können auch bearbeitet werden.\n" . "
Rate:" . "/sNutzer:\n" . "\n" . "
Richtungen:\n" . " Inbound Transfers
\n" . " Outbound Transfers\n" . "
Ab Trafficmenge:" . "/Tag
Anzahl Tage:" . "
 \n" . " Sofortige Begrenzung
\n" . "Hier können die Parameter der Gruppen (Rate, Richtung, IP-Adressen usw.)\n" . "festgelegt werden. Durch \"Hinzufügen\" kann eine Gruppe hinzugefügt\n" . "und durch \"Bearbeiten\" und \"Löschen\" verändert bzw. entfernt\n" . "werden. Die Gruppen werden dabei immer nach ihrer Rate absteigend sortiert.\n" . "
GruppeRateRichtungAb MengeTageSofortNutzerÄndern
".$value['conf_target']."" . $value['conf_rate']."/s"; if ($value['conf_in']) print "in"; if ($value['conf_in'] && $value['conf_out']) print "/"; if ($value['conf_out']) print "out"; if (!$value['conf_in'] && !$value['conf_out']) print "-"; print "".$value['conf_limit'] . "/Tag".$value['conf_days'] . ""; if ($value['conf_atonce']) print "X"; else print "-"; preg_match_all("/\w+/", $value['conf_users'], $out, PREG_SET_ORDER); print "".count($out)."" . "
 " . "
Ausnahme:$edit_target

\n" . "Hier können die Parameter der Ausnahmeregelung geändert werden. \"Rate\" legt\n" . "die Bandbreite fest, die \"Priorität\" liegt zwischen 1 (höchste) und 8\n" . "(niedrigste), mit \"Bounded\" kann eingestellt werden, ob diese Bandbreite hart\n" . "begrenzt werden soll. Als Einheiten sind \"KBit\" und \"MBit\" zulässig.\n" . "
\n" . "Format der Match-Anweisungen:

\n" . "match ip dst 134.109.96.165/32 match ip dport 22
\n" . "match ip src 134.109.116.159/32 match ip sport 80

\n" . "bedeutet, dass Pakete für 134.109.96.165:22 und Pakete von 134.109.116.159:80\n" . "dieser Ausnahmeregel zugeordnet werden. Es muss mindestens eine Zeile zutreffen,\n" . "in einer Zeile müssen alle Angaben erfüllt werden.\n" . "
Rate:\n" . "/s\n" . " Bounded\n" . "
Priorität:\n" . "
Match:
(inbound)
\n" . "
Match:
(outbound)
\n" . "
\n" . "Hier können Ausnahmeregelungen, z.B. Sonderbehandlungen von bestimmten Protokollen,\n" . "Nutzern oder Paketen, die zu bestimmten Adressen geschickt werden, definiert werden.\n" . "
AusnahmeRateBoundedPrior.RichtungÄndern
".$value['conf_target']."" . $value['conf_rate']."/s"; if ($value['conf_bound']) print "X"; else print "-"; print "".$value['conf_prio'].""; if ($value['conf_in']) print "in"; if ($value['conf_in'] && $value['conf_out']) print "/"; if ($value['conf_out']) print "out"; if (!$value['conf_in'] && !$value['conf_out']) print "-"; print "" . "
 " . "
\n" . "Bitte hier die Netzdevices und deren Bandbreite angeben, an denen zum einen das interne\n" . "Netz angeschlossen ist (intern) und zum anderen die Verbindung zum Internet besteht\n" . "(extern).\n" . "
Internes Device:Bandbreite:/s
Externes Device:Bandbreite:/s

\n" . "Hier kann u.a. die Monatsobergrenze angegeben werden, die nicht überschritten\n" . "werden sollte, und ob dahingehend eine automatische Regelung der Bandbreiten\n" . "für die einzelnen Nutzergruppen erfolgen soll.\n" . "
Monats-Obergrenze:/Monat
 \n" . " " . "Automatische Regelung der Bandbreite
Tagesabschluss:\n" . "Der Tag wird um Uhr abgeschlossen
Benachrichtigung:\n" . "Schicken einer E-Mail ab Einordnung in Gruppe\n" . "
Shaping:\n" . "Nur bis Bandbreite\n" . "/s (default: immer begrenzen)

\n" . "Hier Pfade zu benötigten Programmen und anderen Files angeben. Der Pfad zur\n" . "Konfigurationsdatei muss mit der Angabe im Shaping-Skript übereinstimmen.\n" . "
Pfad zum DynShaper:
Pfad zum TC:
Pfad zu ModProbe:
Konfigurationsdatei:
Logfile:

\n" . "\n"; if ($changing) { if ($edit_mode == $DEL) print "\n"; else print "\n"; } if ($editing) print "\n"; if ($changing) print "\n"; if (!$editing) print "\n"; print "
\n
\n"; ?>