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 = ""; 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! Any recent changes may need to be applied first."); } 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); $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; } } include("head.inc"); $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_apply_box(gettext("The traffic shaper configuration has been changed.") . "
" . gettext("The changes must be applied 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("Limiters"), false, "firewall_shaper_vinterface.php"); $tab_array[] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php"); display_top_tabs($tab_array); ?>
0) { ?> GetQname() . '&action=add'; } else { $url = 'firewall_shaper.php?interface='. $interface . '&action=add'; } $sform->addGlobal(new Form_Button( 'add', 'Add new Queue', $url, 'fa-plus' ))->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, 'fa-trash' ))->addClass('btn-danger'); } print($sform); } ?>