"") {
/* XXX: Huh, why are we killing php? */
mwexec("killall -9 pfctl php");
exit;
}
$pgtitle = array(gettext("Firewall"),gettext("Traffic Shaper"));
$shortcut_section = "trafficshaper";
$shaperIFlist = get_configured_interface_with_descr();
read_altq_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['interface']) {
$interface = htmlspecialchars(trim($_GET['interface']));
}
if ($_GET['action']) {
$action = htmlspecialchars($_GET['action']);
}
}
if ($_POST) {
if ($_POST['name']) {
$qname = htmlspecialchars(trim($_POST['name']));
}
if ($_POST['interface']) {
$interface = htmlspecialchars(trim($_POST['interface']));
}
if ($_POST['parentqueue']) {
$parentqueue = htmlspecialchars(trim($_POST['parentqueue']));
}
}
if ($interface) {
$altq = $altq_list_queues[$interface];
if ($altq) {
$queue =& $altq->find_queue($interface, $qname);
} else {
$addnewaltq = true;
}
}
$dontshow = false;
$newqueue = false;
$output_form = "";
if ($_GET) {
switch ($action) {
case "delete":
if ($queue) {
$queue->delete_queue();
if (write_config()) {
mark_subsystem_dirty('shaper');
}
}
header("Location: firewall_shaper.php");
exit;
break;
case "resetall":
foreach ($altq_list_queues as $altq) {
$altq->delete_all();
}
unset($altq_list_queues);
$altq_list_queues = array();
$tree = "
";
$tree .= get_interface_list_to_show();
$tree .= "
";
unset($config['shaper']['queue']);
unset($queue);
unset($altq);
$can_add = false;
$can_enable = false;
$dontshow = true;
foreach ($config['filter']['rule'] as $key => $rule) {
if (isset($rule['wizard']) && $rule['wizard'] == "yes") {
unset($config['filter']['rule'][$key]);
}
}
if (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;
}
} else {
$savemsg = gettext("Unable to write config.xml (Access Denied?)");
}
$output_form = $default_shaper_message;
break;
case "add":
/* XXX: Find better way because we shouldn't know about this */
if ($altq) {
switch ($altq->GetScheduler()) {
case "PRIQ":
$q = new priq_queue();
break;
case "FAIRQ":
$q = new fairq_queue();
break;
case "HFSC":
$q = new hfsc_queue();
break;
case "CBQ":
$q = new cbq_queue();
break;
default:
/* XXX: Happens when sched==NONE?! */
$q = new altq_root_queue();
break;
}
} else if ($addnewaltq) {
$q = new altq_root_queue();
} else {
$input_errors[] = gettext("Could not create new queue/discipline!");
}
if ($q) {
$q->SetInterface($interface);
$output_form .= $q->build_form();
$output_form .= "";
$newjavascript = $q->build_javascript();
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();
if (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();
if (write_config()) {
mark_subsystem_dirty('shaper');
}
} else {
$input_errors[] = gettext("Queue not found!");
}
break;
default:
$output_form .= $default_shaper_msg;
$dontshow = true;
break;
}
} else if ($_POST) {
unset($input_errors);
if ($addnewaltq) {
$altq =& new altq_root_queue();
$altq->SetInterface($interface);
switch ($altq->GetBwscale()) {
case "Mb":
$factor = 1000 * 1000;
brak;
case "Kb":
$factor = 1000;
break;
case "b":
$factor = 1;
break;
case "Gb":
$factor = 1000 * 1000 * 1000;
break;
case "%": /* We don't use it for root_XXX queues. */
default: /* XXX assume Kb by default. */
$factor = 1000;
break;
}
$altq->SetAvailableBandwidth($altq->GetBandwidth() * $factor);
$altq->ReadConfig($_POST);
$altq->validate_input($_POST, $input_errors);
if (!$input_errors) {
unset($tmppath);
$tmppath[] = $altq->GetInterface();
$altq->SetLink($tmppath);
$altq->wconfig();
if (write_config()) {
mark_subsystem_dirty('shaper');
}
$can_enable = true;
$can_add = true;
}
read_altq_config();
$output_form .= $altq->build_form();
} else if ($parentqueue) { /* Add a new queue */
$qtmp =& $altq->find_queue($interface, $parentqueue);
if ($qtmp) {
$tmppath =& $qtmp->GetLink();
array_push($tmppath, $qname);
$tmp =& $qtmp->add_queue($interface, $_POST, $tmppath, $input_errors);
if (!$input_errors) {
array_pop($tmppath);
$tmp->wconfig();
$can_enable = true;
if ($tmp->CanHaveChildren() && $can_enable) {
if ($tmp->GetDefault() <> "") {
$can_add = false;
} else {
$can_add = true;
}
} else {
$can_add = false;
}
if (write_config()) {
mark_subsystem_dirty('shaper');
}
$can_enable = true;
if ($altq->GetScheduler() != "PRIQ") { /* XXX */
if ($tmp->GetDefault() <> "") {
$can_add = false;
} else {
$can_add = true;
}
}
}
read_altq_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;
}
/* reset rrd queues */
system("rm -f /var/db/rrd/*queuedrops.rrd");
system("rm -f /var/db/rrd/*queues.rrd");
enable_rrd_graphing();
clear_subsystem_dirty('shaper');
if ($queue) {
$output_form .= $queue->build_form();
$dontshow = false;
} else {
$output_form .= $default_shaper_message;
$dontshow = true;
}
} else if ($queue) {
$queue->validate_input($_POST, $input_errors);
if (!$input_errors) {
$queue->update_altq_queue_data($_POST);
$queue->wconfig();
if (write_config()) {
mark_subsystem_dirty('shaper');
}
$dontshow = false;
}
read_altq_config();
$output_form .= $queue->build_form();
} else {
$output_form .= $default_shaper_msg;
$dontshow = true;
}
mwexec("killall qstats");
} else {
$output_form .= $default_shaper_msg;
$dontshow = true;
}
if ($queue) {
if ($queue->GetEnabled()) {
$can_enable = true;
} else {
$can_enable = false;
}
if ($queue->CanHaveChildren() && $can_enable) {
if ($altq->GetQname() <> $queue->GetQname() && $queue->GetDefault() <> "") {
$can_add = false;
} else {
$can_add = true;
}
} else {
$can_add = false;
}
}
$tree = "";
if (is_array($altq_list_queues)) {
foreach ($altq_list_queues as $tmpaltq) {
$tree .= $tmpaltq->build_tree();
}
$tree .= get_interface_list_to_show();
}
$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 .= "GetQname();
}
$output_form .= "&action=delete\">";
$output_form .= "";
} else {
$output_form .= " value=\"" . gettext("Disable shaper on interface") . "\" />";
}
$output_form .= "";
$output_form .= "
|
";
$output_form .= "";
} else {
$output_form .= "";
}
$output = "";
$output .= $output_form;
//$pgtitle = "Firewall: Shaper: By Interface View";
$closehead = false;
include("head.inc");
?>
build_javascript();
}
echo $newjavascript;
include("fbegin.inc");
?>