find_queue($interface, $qname);
} else {
$addnewaltq = true;
}
}
$dontshow = false;
$newqueue = false;
$dfltmsg = false;
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();
if (stristr($retval, "error") <> true) {
$savemsg = get_std_save_message($retval);
$class = 'success';
} else {
$savemsg = $retval;
$class = 'warning';
}
} else {
$savemsg = gettext("Unable to write config.xml (Access Denied?)");
$class = 'warning';
}
$dfltmsg = true;
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! Did you remember to apply any recent changes?");
}
if ($q) {
$q->SetInterface($interface);
$sform = $q->build_form();
$sform->addGlobal(new Form_Input(
'parentqueue',
null,
'hidden',
$qname
));
$newjavascript = $q->build_javascript();
unset($q);
$newqueue = true;
}
break;
case "show":
if ($queue) {
$sform = $queue->build_form();
} else {
$input_errors[] = gettext("Queue not found!");
}
break;
case "enable":
if ($queue) {
$queue->SetEnabled("on");
$sform = $queue->build_form();
if (write_config()) {
mark_subsystem_dirty('shaper');
}
} else {
$input_errors[] = gettext("Queue not found!");
}
break;
case "disable":
if ($queue) {
$queue->SetEnabled("");
$sform = $queue->build_form();
if (write_config()) {
mark_subsystem_dirty('shaper');
}
} else {
$input_errors[] = gettext("Queue not found!");
}
break;
default:
$dfltmsg = true;
$dontshow = true;
break;
}
}
if ($_POST) {
unset($input_errors);
if ($addnewaltq) {
$altq =& new altq_root_queue();
$altq->SetInterface($interface);
switch ($altq->GetBwscale()) {
case "Mb":
$factor = 1000 * 1000;
break;
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();
$sform = $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();
$sform = $tmp->build_form();
} else {
$input_errors[] = gettext("Could not add new queue.");
}
} else if ($_POST['apply']) {
write_config();
$retval = 0;
$retval = filter_configure();
if (stristr($retval, "error") <> true) {
$savemsg = get_std_save_message($retval);
$class = 'success';
} else {
$savemsg = $retval;
$class = 'warning';
}
/* 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) {
$sform = $queue->build_form();
$dontshow = false;
} else {
$sform = $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();
$sform = $queue->build_form();
} else {
$dfltmsg = true;
$dontshow = true;
}
mwexec("killall qstats");
}
if (!$_POST && !$_GET) {
$dfltmsg = true;
$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;
}
}
//$pgtitle = "Firewall: Shaper: By Interface View";
include("head.inc");
$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 ($queue) {
print($queue->build_javascript());
}
print($newjavascript);
if ($input_errors) {
print_input_errors($input_errors);
}
if ($savemsg) {
print_info_box($savemsg, $class);
}
if (is_subsystem_dirty('shaper')) {
print_info_box_np(gettext("The traffic shaper configuration has been changed. You must apply the changes in order for them to take effect."));
}
$tab_array = array();
$tab_array[] = array(gettext("By Interface"), true, "firewall_shaper.php");
$tab_array[] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
$tab_array[] = array(gettext("Limiter"), false, "firewall_shaper_vinterface.php");
$tab_array[] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
display_top_tabs($tab_array);
?>
0) {
?>
=gettext('Remove Shaper')?>
|
GetQname() . '&action=add';
} else {
$url = 'firewall_shaper.php?interface='. $interface . '&action=add';
}
$sform->addGlobal(new Form_Button(
'add',
'Add new Queue',
$url
))->removeClass('btn-default')->addClass('btn-success');
}
if ($queue) {
$url = 'firewall_shaper.php?interface='. $interface . '&queue=' . $queue->GetQname() . '&action=delete';
} else {
$url = 'firewall_shaper.php?interface='. $interface . '&action=delete';
}
$sform->addGlobal(new Form_Button(
'delete',
$queue ? 'Delete this queue':'Disable shaper on interface',
$url
))->removeClass('btn-default')->addClass('btn-danger');
}
print($sform);
}
?>
|
=print_info_box($default_shaper_msg, 'info', false)?>