From 46bc6e545a17e77202aaf01ec0cd8d5a46567525 Mon Sep 17 00:00:00 2001 From: Renato Botelho Date: Tue, 25 Aug 2015 08:08:24 -0300 Subject: Move main pfSense content to src/ --- src/usr/local/www/firewall_shaper_vinterface.php | 475 +++++++++++++++++++++++ 1 file changed, 475 insertions(+) create mode 100644 src/usr/local/www/firewall_shaper_vinterface.php (limited to 'src/usr/local/www/firewall_shaper_vinterface.php') diff --git a/src/usr/local/www/firewall_shaper_vinterface.php b/src/usr/local/www/firewall_shaper_vinterface.php new file mode 100644 index 0000000..ffa3f15 --- /dev/null +++ b/src/usr/local/www/firewall_shaper_vinterface.php @@ -0,0 +1,475 @@ + "") { + mwexec("/usr/bin/killall -9 pfctl"); + exit; +} + +$pgtitle = array(gettext("Firewall"), gettext("Traffic Shaper"), gettext("Limiter")); +$shortcut_section = "trafficshaper-limiters"; + +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->GetQname() || $rule['pdnpipe'] == $queue->GetQname()) { + $input_errors[] = gettext("This pipe/queue is referenced in filter rules, please remove references from there before deleting."); + } + } + } + if (!$input_errors) { + $queue->delete_queue(); + if (write_config()) { + mark_subsystem_dirty('shaper'); + } + header("Location: firewall_shaper_vinterface.php"); + exit; + } + $output_form .= $queue->build_form(); + } else { + $input_errors[] = sprintf(gettext("No queue with name %s was found!"), $qname); + $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']); + } + } + 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 = $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(); + $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(); + $queue->wconfig(); + 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(); + $queue->wconfig(); + if (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) { + if (!empty($dummynet_pipe_list[$qname])) { + $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter"); + } else { + $dnpipe =& new dnpipe_class(); + + $dnpipe->ReadConfig($_POST); + $dnpipe->validate_input($_POST, $input_errors); + if (!$input_errors) { + $number = dnpipe_find_nextnumber(); + $dnpipe->SetNumber($number); + unset($tmppath); + $tmppath[] = $dnpipe->GetQname(); + $dnpipe->SetLink($tmppath); + $dnpipe->wconfig(); + if (write_config()) { + mark_subsystem_dirty('shaper'); + } + $can_enable = true; + $can_add = true; + } + + read_dummynet_config(); + $output_form .= $dnpipe->build_form(); + $newjavascript = $dnpipe->build_javascript(); + } + } else if ($parentqueue) { /* Add a new queue */ + if (!empty($dummynet_pipe_list[$qname])) { + $input_errors[] = gettext("You cannot name a child queue with the same name as a parent limiter"); + } else 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(); + if (write_config()) { + $can_enable = true; + $can_add = false; + mark_subsystem_dirty('shaper'); + } + } + 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(); + if (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 .= "GetQname(); +} +$output_form .= "&action=delete\">"; +$output_form .= ""; +} else { + $output_form .= " value=\"" . gettext("Delete Limiter") ."\" />"; +} +$output_form .= ""; +$output_form .= ""; +$output_form .= ""; +} else { + $output_form .= ""; +} + +$output = ""; +$output .= $output_form; +$closehead = false; +include("head.inc"); +?> + + + + + + + +build_javascript(); +} else { + echo $newjavascript; +} + +include("fbegin.inc"); +?> +
+ + + + + +

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

+ +
+ + + + +
+ +
+
+ + 0): ?> + + + + + + + + + +
+ +

+ + " width="17" height="17" border="0" alt="add" />  + +
+
+
+ +
+
+
+
+ + + + + -- cgit v1.1