"") { /* XXX: Huh, why are we killing php? */ mwexec("/usr/bin/killall -9 pfctl php"); exit; } $pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper"), gettext("Limiter")); $statusurl = "status_queues.php"; read_dummynet_config(); /* * The whole logic in these code maybe can be specified. * If you find a better way contact me :). */ if ($_GET) { if ($_GET['queue']) $qname = htmlspecialchars(trim($_GET['queue'])); if ($_GET['pipe']) $pipe = htmlspecialchars(trim($_GET['pipe'])); if ($_GET['action']) $action = htmlspecialchars($_GET['action']); } if ($_POST) { if ($_POST['name']) $qname = htmlspecialchars(trim($_POST['name'])); else if ($_POST['newname']) $qname = htmlspecialchars(trim($_POST['newname'])); if ($_POST['pipe']) $pipe = htmlspecialchars(trim($_POST['pipe'])); else $pipe = htmlspecialchars(trim($qname)); if ($_POST['parentqueue']) $parentqueue = htmlspecialchars(trim($_POST['parentqueue'])); } if ($pipe) { $dnpipe = $dummynet_pipe_list[$pipe]; if ($dnpipe) { $queue =& $dnpipe->find_queue($pipe, $qname); } else $addnewpipe = true; } $dontshow = false; $newqueue = false; $output_form = ""; if ($_GET) { switch ($action) { case "delete": if ($queue) { if (is_array($config['filter']['rule'])) { foreach ($config['filter']['rule'] as $rule) { if ($rule['dnpipe'] == $queue->GetNumber() || $rule['pdnpipe'] == $queue->GetNumber()) $input_errors[] = gettext("This pipe/queue is referenced in filter rules, please remove references from there before deleteing."); } } if (!$input_errors) { $queue->delete_queue(); write_config(); mark_subsystem_dirty('shaper'); header("Location: firewall_shaper_vinterface.php"); exit; } $output_form .= $queue->build_form(); } else { $input_errors[] = gettext("No queue with name {$qname} was found!"); $output_form .= "

" . $dn_default_shaper_msg."

"; $dontshow = true; } break; case "resetall": foreach ($dummynet_pipe_list as $dn) $dn->delete_queue(); unset($dummynet_pipe_list); $dummynet_pipe_list = array(); unset($config['dnshaper']['queue']); unset($queue); unset($pipe); $can_add = false; $can_enable = false; $dontshow = true; foreach ($config['filter']['rule'] as $key => $rule) { if (isset($rule['dnpipe'])) unset($config['filter']['rule'][$key]['dnpipe']); if (isset($rule['pdnpipe'])) unset($config['filter']['rule'][$key]['pdnpipe']); } write_config(); $retval = 0; $retval = filter_configure(); $savemsg = get_std_save_message($retval); if (stristr($retval, "error") <> true) $savemsg = get_std_save_message($retval); else $savemsg = $retval; $output_form = $dn_default_shaper_message; break; case "add": if ($dnpipe) { $q = new dnqueue_class(); $q->SetPipe($pipe); $output_form .= ""; } else if ($addnewpipe) { $q = new dnpipe_class(); $q->SetQname($pipe); } else $input_errors[] = gettext("Could not create new queue/discipline!"); if ($q) { $output_form .= $q->build_form(); unset($q); $newqueue = true; } break; case "show": if ($queue) $output_form .= $queue->build_form(); else $input_errors[] = gettext("Queue not found!"); break; case "enable": if ($queue) { $queue->SetEnabled("on"); $output_form .= $queue->build_form(); write_config(); mark_subsystem_dirty('shaper'); } else $input_errors[] = gettext("Queue not found!"); break; case "disable": if ($queue) { $queue->SetEnabled(""); $output_form .= $queue->build_form(); write_config(); mark_subsystem_dirty('shaper'); } else $input_errors[] = gettext("Queue not found!"); break; default: $output_form .= "

" . $dn_default_shaper_msg."

"; $dontshow = true; break; } } else if ($_POST) { unset($input_errors); if ($addnewpipe) { $dnpipe =& new dnpipe_class(); $dnpipe->ReadConfig($_POST); $dnpipe->validate_input($_POST, &$input_errors); if (!$input_errors) { unset($tmppath); $tmppath[] = $dnpipe->GetQname(); $dnpipe->SetLink(&$tmppath); $dnpipe->wconfig(); write_config(); mark_subsystem_dirty('shaper'); $can_enable = true; $can_add = true; } read_dummynet_config(); $output_form .= $dnpipe->build_form(); } else if ($parentqueue) { /* Add a new queue */ if ($dnpipe) { $tmppath =& $dnpipe->GetLink(); array_push($tmppath, $qname); $tmp =& $dnpipe->add_queue($pipe, $_POST, $tmppath, &$input_errors); if (!$input_errors) { array_pop($tmppath); $tmp->wconfig(); write_config(); $can_enable = true; $can_add = false; mark_subsystem_dirty('shaper'); $can_enable = true; } read_dummynet_config(); $output_form .= $tmp->build_form(); } else $input_errors[] = gettext("Could not add new queue."); } else if ($_POST['apply']) { write_config(); $retval = 0; $retval = filter_configure(); $savemsg = get_std_save_message($retval); if (stristr($retval, "error") <> true) $savemsg = get_std_save_message($retval); else $savemsg = $retval; /* XXX: TODO Make dummynet pretty graphs */ // enable_rrd_graphing(); clear_subsystem_dirty('shaper'); if ($queue) { $output_form .= $queue->build_form(); $dontshow = false; } else { $output_form .= $dn_default_shaper_message; $dontshow = true; } } else if ($queue) { $queue->validate_input($_POST, &$input_errors); if (!$input_errors) { $queue->update_dn_data($_POST); $queue->wconfig(); write_config(); mark_subsystem_dirty('shaper'); $dontshow = false; } read_dummynet_config(); $output_form .= $queue->build_form(); } else { $output_form .= "

" . $dn_default_shaper_msg."

"; $dontshow = true; } } else { $output_form .= "

" . $dn_default_shaper_msg."

"; $dontshow = true; } if ($queue) { if ($queue->GetEnabled()) $can_enable = true; else $can_enable = false; if ($queue->CanHaveChildren()) { $can_add = true; } else $can_add = false; } $tree = ""; if (!$dontshow || $newqueue) { $output_form .= ""; $output_form .= gettext("Queue Actions"); $output_form .= ""; $output_form .= ""; if ($can_add || $addnewaltq) { $output_form .= "GetQname(); } $output_form .= "&action=add\">"; $output_form .= ""; $output_form .= ""; } $output_form .= ""; $output_form .= ""; else $output_form .= " value=\"" . gettext("Delete virtual interface") ."\">"; $output_form .= ""; $output_form .= ""; $output_form .= ""; } else $output_form .= ""; $output = "
"; $output .= $output_form; include("head.inc"); ?>

".gettext("You must apply the changes in order for them to take effect."));?>