Commit 780ceed4 authored by Franco Fichtner's avatar Franco Fichtner

queues: remove firewall_shaper_wizards.php

parent a7852604
......@@ -73,7 +73,6 @@
<TrafficShaper url="/ui/trafficshaper/" VisibleName="Traffic Shaper"/>
<Queues VisibleName="Queues" url="/firewall_shaper.php">
<ByQueue VisibleName="By Queue" url="/firewall_shaper_queues.php"/>
<Wizards url="/firewall_shaper_wizards.php"/>
</Queues>
<VirtualIPs VisibleName="Virtual IPs" url="/firewall_virtual_ip.php"/>
</Firewall>
......
......@@ -456,13 +456,6 @@
"firewall_shaper_queues.php*"
]
},
"page-firewall-trafficshaper-wizard": {
"name": "WebCfg - Firewall: Traffic Shaper: Wizard page",
"descr": "Allow access to the 'Firewall: Traffic Shaper: Wizard' page.",
"match": [
"firewall_shaper_wizards.php*"
]
},
"page-firewall-virtualipaddress-edit": {
"name": "WebCfg - Firewall: Virtual IP Address: Edit page",
"descr": "Allow access to the 'Firewall: Virtual IP Address: Edit' page.",
......
......@@ -408,7 +408,6 @@ include("fbegin.inc");
$tab_array = array();
$tab_array[0] = array(gettext("By Interface"), true, "firewall_shaper.php");
$tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
$tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
display_top_tabs($tab_array);
?>
......
......@@ -190,7 +190,6 @@ include("head.inc");
$tab_array = array();
$tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
$tab_array[1] = array(gettext("By Queue"), true, "firewall_shaper_queues.php");
$tab_array[4] = array(gettext("Wizards"), false, "firewall_shaper_wizards.php");
display_top_tabs($tab_array);
?>
......
<?php
/*
Copyright (C) 2014-2015 Deciso B.V.
Copyright (C) 2004, 2005 Scott Ullrich
Copyright (C) 2008 Ermal Luçi
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
require_once("guiconfig.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
require_once("util.inc");
if($_GET['reset'] <> "") {
killbyname('pfctl');
exit;
}
if ($_POST['apply']) {
write_config();
$retval = 0;
/* Setup pf rules since the user may have changed the optimization value */
$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 */
mwexec('/bin/rm /var/db/rrd/*queuedrops.rrd');
mwexec('/bin/rm /var/db/rrd/*queues.rrd');
enable_rrd_graphing();
clear_subsystem_dirty('shaper');
}
$pgtitle = array(gettext("Firewall"),gettext("Queues"),gettext("Wizards"));
$shortcut_section = "trafficshaper";
$wizards = array(
gettext("Multiple Lan/Wan") => "traffic_shaper_wizard_multi_all.xml",
gettext("Dedicated Links") => "traffic_shaper_wizard_dedicated.xml",
);
$closehead = false;
include("head.inc");
?>
<body>
<link rel="stylesheet" type="text/css" media="all" href="./tree/tree.css" />
<?php include("fbegin.inc"); ?>
<section class="page-content-main">
<div class="container-fluid">
<div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?>
<?php if ($savemsg) print_info_box($savemsg); ?>
<?php if (is_subsystem_dirty('shaper')): ?><p>
<?php print_info_box_np(gettext("The traffic shaper configuration has been changed.")."<br />".gettext("You must apply the changes in order for them to take effect."));?><br /></p>
<?php endif; ?>
<section class="col-xs-12">
<?php
$tab_array = array();
$tab_array[0] = array(gettext("By Interface"), false, "firewall_shaper.php");
$tab_array[1] = array(gettext("By Queue"), false, "firewall_shaper_queues.php");
$tab_array[4] = array(gettext("Wizards"), true, "firewall_shaper_wizards.php");
display_top_tabs($tab_array);
?>
<div class="tab-content content-box col-xs-12">
<form action="firewall_shaper_wizards.php" method="post" name="iform" id="iform">
<div class="table-responsive">
<table class="table table-striped table-sort">
<thead>
<tr>
<td class="listhdrr" width="25%"><?=gettext("Wizard function");?></td>
<td class="listhdrr" width="75%"><?=gettext("Wizard Link");?></td>
</tr>
</thead>
<tbody>
<?php
foreach ($wizards as $key => $wizard):
?>
<tr class="tabcont">
<td class="listlr" width="25%">
<?php
echo $key;
?>
</td>
<td class="listr" width="75%">
<?php
echo "<a href=\"wizard.php?xml=" . $wizard ."\" >" .$wizard . "</a>";
?>
</td>
</tr>
<?php
endforeach;
?></tbody>
</table>
</div>
</form>
</div>
</section>
</div>
</div>
</section>
<?php include("foot.inc"); ?>
<?php
/*
Copyright (C) 2014 Deciso B.V.
Copyright (C) 2006 Bill Marquette - bill.marquette@gmail.com.
Copyright (C) 2006 Scott Ullrich - sullrich@pfsense.com.
Copyright (C) 2008-2010 Ermal Luçi
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
function step1_stepbeforeformdisplay() {
global $stepid, $savemsg, $pkg;
$fields =& $pkg['step'][0]['fields']['field'];
$wans = 0;
$lans = 0;
$iflisttmp = get_configured_interface_with_descr();
foreach ($iflisttmp as $if => $ifdesc) {
if (!is_altq_capable(get_real_interface($if)))
continue;
if (interface_has_gateway($if) || interface_has_gatewayv6($if))
$wans++;
else
$lans++;
}
foreach ($fields as &$field)
if ($field['name'] == 'numberofconnections')
$field['value'] = ($wans < $lans ? $wans : $lans);
}
function step1_submitphpaction() {
global $stepid, $savemsg;
if (!isset($_POST['numberofconnections'])) {
$savemsg=gettext("You need to specify the number of connections.");
$stepid--;
return;
}
if (intval($_POST['numberofconnections']) < 1) {
$savemsg=gettext("The number of connections should be greater than 1.");
$stepid--;
return;
}
}
function step2_stepbeforeformdisplay() {
global $config, $pkg;
global $stepid, $savemsg;
$wans = 0;
$lans = 0;
$iflist = array();
$iflisttmp = get_configured_interface_with_descr();
foreach ($iflisttmp as $if => $ifdesc) {
if (!is_altq_capable(get_real_interface($if)))
continue;
if (interface_has_gateway($if) || interface_has_gatewayv6($if))
$wans++;
else
$lans++;
$iflist[$if] = $ifdesc;
}
$numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
if ($numberofconnections > ($wans < $lans ? $wans : $lans)) {
$savemsg=gettext("You have less interfaces than number of connections!");
$stepid--;
return;
}
$cfgname = "traffic_shaper_wizard_dedicated.xml";
$fields =& $pkg['step'][1]['fields']['field'];
/*
unset($config['ezshaper']['step2']);
$config['ezshaper']['step2'] = array();
write_config();
*/
$fields = array();
for ($i = 0; $i < $numberofconnections; $i++) {
$field = array();
$linknum = $i+1;
$ifsel = ($i * 2);
$field['name'] = "Connection #{$linknum} parameters";
$field['type'] = "listtopic";
$fields[] = $field;
$field = array();
$field['displayname'] = "Local interface";
$field['name'] = "local{$i}interface";
$field['type'] = "select";
$field['options']['option'] = array();
$ifcnt = 0;
foreach ($iflist as $ifname => $ifdescr) {
// Skip wan interfaces here
if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname))
continue;
if ($ifcnt == ($ifsel + 1))
$field['value'] = $ifname;
$opts = array();
$opts['displayname'] = $ifdescr;
$opts['name'] = $ifname;
$opts['value'] = $ifname;
$field['options']['option'][] = $opts;
$ifcnt++;
}
$field['combinefieldsbegin'] = "true";
$field['bindstofield'] = "ezshaper->step2->local{$i}interface";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "local{$i}downloadscheduler";
$field['type'] = "select";
$field['typehint'] = "Queueing discipline to apply on the download of this connection.";
$field['options']['option'] = array();
$opts = array();
$opts['name'] = "HFSC";
$opts['value'] = "HFSC";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "CBQ";
$opts['value'] = "CBQ";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "PRIQ";
$opts['value'] = "PRIQ";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler";
$fields[] = $field;
$field = array();
$field['displayname'] = "WAN Interface";
$field['name'] = "conn{$i}interface";
$field['type'] = "select";
$field['options']['option'] = array();
$ifcnt = 0;
foreach ($iflist as $ifname => $ifdescr) {
// Skip lan interfaces here
if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname))
continue;
if ($ifcnt == $ifsel)
$field['value'] = $ifname;
$opts = array();
$opts['displayname'] = $ifdescr;
$opts['name'] = $ifname;
$opts['value'] = $ifname;
$field['options']['option'][] = $opts;
$ifcnt++;
}
$field['bindstofield'] = "ezshaper->step2->conn{$i}interface";
$field['combinefieldsbegin'] = "true";
$fields[] = $field;
$field = array();
$field['name'] = "conn{$i}uploadscheduler";
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['type'] = "select";
$field['typehint'] = "Queueing discipline to apply on the upload of this connection.";
$field['options']['option'] = array();
$opts = array();
$opts['name'] = "HFSC";
$opts['value'] = "HFSC";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "CBQ";
$opts['value'] = "CBQ";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "PRIQ";
$opts['value'] = "PRIQ";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler";
$fields[] = $field;
$field = array();
$field['displayname'] = "Upload";
$field['name'] = "conn{$i}upload";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step2->conn{$i}upload";
$field['combinefieldsbegin'] = "true";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}uploadspeed";
$field['typehint'] = "Upload bandwidth on this connection.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed";
$fields[] = $field;
$field = array();
$field['displayname'] = "Download";
$field['name'] = "conn{$i}download";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step2->conn{$i}download";
$field['combinefieldsbegin'] = "true";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}downloadspeed";
$field['typehint'] = "Download bandwidth on this connection.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed";
$fields[] = $field;
}
$field = array();
$field['name'] = "Next";
$field['type'] = "submit";
$fields[] = $field;
}
function step2_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
$sumdownloads = 0;
/* Input Validation */
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
for ($j = $i + 1; $j <= $steps; $j++) {
if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
$stepid--;
return;
}
if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") {
if (!is_numeric($_POST["conn{$i}upload"])) {
$savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
if (!is_numeric($_POST["conn{$i}download"])) {
$savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
$upbw = $_POST["conn{$i}upload"];
$downbw = $_POST["conn{$i}download"];
if ($upbw < 1 || $downbw < 1) {
$savemsg = gettext("You cannot specify bandwidth smaller than 1!");
$stepid--;
return;
}
if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") {
$savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler.");
$stepid--;
return;
}
}
if ($_POST["local{$i}interface"] == $_POST["conn{$j}interface"] || $_POST["local{$i}interface"] == $_POST["local{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for local and outside.");
$stepid--;
return;
}
}
}
/* This is necessary since the wizard expects pecnefined fields. */
unset($config['ezshaper']['step2']);
$config['ezshaper']['step2'] = array();
for ($i = 0; $i < $steps; $i++) {
$config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"];
$config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"];
$config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"];
$config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"];
$config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
$config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"];
$config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"];
$config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"];
}
}
function step3_stepbeforeformdisplay() {
global $config, $pkg;
global $stepid, $savemsg;
$cfgname = "traffic_shaper_wizard_dedicated.xml";
$numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
$fields =& $pkg['step'][1]['fields']['field'];
$voipfields =& $pkg['step'][2]['fields']['field'];
$voipfields = array();
$enablefields = array();
$field = array();
$field['name'] = "Enable";
$field['type'] = "checkbox";
$field['typehint'] = "Prioritize Voice over IP traffic.";
$field['bindstofield'] = "ezshaper->step3->enable";
$field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic.";
$voipfields[] = $field;
$field = array();
$field['name'] = "Next";
$field['type'] = "submit";
$voipfields[] = $field;
$field = array();
$field['name'] = "VOIP specific settings";
$field['type'] = "listtopic";
$voipfields[] = $field;
$field = array();
$field['name'] = "Provider";
$enablefields[] = "Provider";
$field['type'] = "select";
$field['description'] = "Choose Generic if your provider isn't listed.";
$field['options']['option'] = array();
$opts = array();
$opts['name'] = "Generic (lowdelay)";
$opts['value'] = "Generic";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "VoicePulse";
$opts['value'] = "VoicePulse";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "Asterisk/Vonage";
$opts['value'] = "Asterisk";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "PanasonicTDA";
$opts['value'] = "Panasonic";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step3->provider";
$voipfields[] = $field;
$field = array();
$field['displayname'] = "Upstream SIP Server";
$field['name'] = "upstream_sip_server";
$enablefields[] = "upstream_sip_server";
$field['type'] = "inputalias";
$field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location.";
$field['message'] = "IP Address field is non-blank and doesn't look like an IP address.";
$field['bindstofield'] = "ezshaper->step3->address";
$voipfields[] = $field;
for ($i = 0; $i < $numberofconnections; $i++) {
$connum = $i + 1;
$field = array();
$field['name'] = "Connection #{$connum} parameters";
$field['type'] = "listtopic";
$voipfields[] = $field;
$field = array();
$field['displayname'] = "Upload";
$field['name'] = "conn{$i}upload";
$enablefields[] = "conn{$i}upload";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step3->conn{$i}upload";
$field['combinefieldsbegin'] = "true";
$voipfields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}uploadspeed";
$enablefields[] = "conn{$i}uploadspeed";
$field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed";
$voipfields[] = $field;
$field = array();
$field['displayname'] = "Download";
$field['name'] = "local{$i}download";
$enablefields[] = "local{$i}download";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step3->local{$i}download";
$field['combinefieldsbegin'] = "true";
$voipfields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "local{$i}downloadspeed";
$enablefields[] = "local{$i}downloadspeed";
$field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed";
$voipfields[] = $field;
}
$field = array();
$field['name'] = "Next";
$field['type'] = "submit";
$voipfields[] = $field;
$voipfields[0]['enablefields'] = implode(",", $enablefields);
}
function step3_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
if (!$_POST['enable'])
return;
if($_POST['address']) {
if(!is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
$savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
$stepid--;
return;
}
}
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] != "PRIQ") {
if (!is_numeric($_POST["conn{$i}upload"])) {
$savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
if ($_POST["conn{$i}uploadspeed"] == "%") {
if (intval($_POST["conn{$i}upload"]) > 80) {
$savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
} else {
$factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
$ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
$factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
$input_bw = $factor * floatval($_POST["conn{$i}upload"]);
if ((0.8 * $ifbw) < $input_bw) {
$savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
}
}
if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] != "PRIQ") {
if (!is_numeric($_POST["local{$i}download"])) {
$savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
if ($_POST["local{$i}downloadspeed"] == "%") {
if (intval($_POST["local{$i}download"]) > 80) {
$savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
} else {
$factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
$ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}download"]);
$factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
$input_bw = $factor * floatval($_POST["local{$i}download"]);
if ((0.8 * $ifbw) < $input_bw) {
$savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
}
}
}
for ($i = 0; $i < $steps; $i++) {
$config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"];
$config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"];
$config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"];
$config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
}
}
function step4_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
if(!$_POST['bandwidth']) {
$savemsg="You need to specify a value for bandwidth!";
$stepid--;
return;
}
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="The posted value is not a valid bandwidth.";
$stepid--;
return;
}
if ($_POST['bandwidthspeed'] <> "%") {
$savemsg = gettext("Only percentage bandwidth specification is allowed.");
$stepid--;
return;
}
$bw = $_POST['bandwidth'];
if($bw > 15 || $bw < 2) {
$savemsg="Values should be between 2% and 15%!";
$stepid--;
return;
}
if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
$savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
$stepid--;
}
}
}
function step5_stepsubmitphpaction() {
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
if ($_POST['p2pcatchall']) {
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="Posted value is not a valid bandwidth.";
$stepid--;
return;
}
if ($_POST['bandwidthspeed'] <> "%") {
$savemsg = gettext("Only percentage bandwidth specification is allowed.");
$stepid--;
return;
}
$bw = $_POST['bandwidth'];
if($bw > 15 || $bw < 2) {
$savemsg="Values should be between 2% and 15%!";
$stepid--;
return;
}
}
}
}
function step8_stepsubmitphpaction() {
global $g, $config;
/* save the new configuration */
apply_all_choosen_items();
/* reset rrd queues */
system("rm -f /var/db/rrd/*queuedrops.rrd");
system("rm -f /var/db/rrd/*queues.rrd");
enable_rrd_graphing();
/* apply the new configuration to the system */
filter_configure();
/* And we're no longer dirty! */
clear_subsystem_dirty('shaper');
update_filter_reload_status("Initializing");
header("Location: status_filter_reload.php");
exit;
}
function apply_all_choosen_items() {
global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist;
require_once("wizardapp.inc");
/*
* Wipe previous config.
* Doing it here makes sense since we can wipe the previous config only after
* the user decides to do so, finishing the wizard.
*/
if(isset($config['shaper']['queue']))
unset($config['shaper']['queue']);
/* XXX: This is ecnundant, because this should be handled by converter at startup. */
if(isset($config['shaper']['rule']))
unset($config['shaper']['rule']);
foreach ($config['filter']['rule'] as $key => $rule)
if ($rule['wizard'] == "yes")
unset($config['filter']['rule'][$key]);
/* restart the cached config */
unset($altq_list_queues);
$altq_list_queues = array();
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
$interfacelist = array();
for ($i = 0; $i < $steps; $i++) {
$tmppath = array();
$altq =& new altq_root_queue();
$altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]);
$interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"];
$altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]);
$altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"]));
$altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
$altq->SetEnabled("on");
$altq_list_queues[$altq->GetQname()] =& $altq;
array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]);
$altq->SetLink($tmppath);
$altq->wconfig();
$sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"];
$voipbw =0;
$voipbwunit = "Kb";
$voip = false;
$penalty = false;
$penaltybw = 0;
$penaltybwunit = "Kb";
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
$p2pcatchbwunit = "%";
$games = false;
$otherpriority = false;
$remainbw = 0;
$factor = 0;
$upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
$upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
if ($config['ezshaper']['step3']['enable']) {
$voip = true;
$voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
$voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
if ($voipbwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($voipbwunit);
$remainbw += $voipbw * $factor;
}
if ($config['ezshaper']['step4']['enable']) {
$penalty = true;
$penaltybw = $config['ezshaper']['step4']['bandwidth'];
$penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
if ($penaltybwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($penaltybwunit);
$remainbw += $penaltybw * $factor;
} else {
$penalty = false;
$penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
$p2pcatchall = true;
$p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
$p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
if ($p2pcatchbwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
$remainbw += $p2pcatchbw * $factor;
} else {
$p2pcatchall = false;
$p2pcatchbw = 0;
}
} else {
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
}
if ($config['ezshaper']['step6']['enable']) {
$games = true;
} else {
$games = false;
}
if ($config['ezshaper']['step7']['enable']) {
$otherpriority = true;
} else {
$otherpriority = false;
}
$remainbw = round($remainbw / $upbw * 100, 2);
if (intval($remainbw) > 0 && intval($remainbw) > 30) {
$savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
exit;
} else {
$remainbw = 100 - $remainbw;
}
if ($sched != "PRIQ") {
if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qInternet";
//$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
$tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
}
else if ($sched == "HFSC") {
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] =
floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
$tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
$tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
}
array_push($tmppath, "qInternet");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
//array_pop($tmppath);
//echo "qInternet <br />";
//var_dump($input_errors);
$qtmp->wconfig();
$altq =& $qtmp;
}
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qACK";
$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2;
$tmpcf['bandwidthtype'] = "%";
}
else if ($sched == "HFSC") {
$lkbw = 0.20 * $remainbw;
$tmpcf['linkshare3'] = "{$lkbw}%";
$tmpcf['linkshare'] = "on";
$tmpcf['bandwidth'] = $lkbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qACK");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qACK <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
if ($p2pcatchall)
$tmpcf['name'] = "qOthersDefault";
else
$tmpcf['name'] = "qDefault";
$tmpcf['priority'] = 3;
$tmpcf['enabled'] = "on";
if (!$p2pcatchall)
$tmpcf['default'] = "on";
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, $tmpcf['name']);
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qDefault <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($p2p) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qP2P";
$tmpcf['priority'] = 1;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($p2pcatchall) {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
}
$tmpcf['default'] = "on";
} else {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpbw = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$tmpbw}%";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$tmpbw}%";
$tmpcf['bandwidth'] = $tmpbw;
$tmpcf['bandwidthtype'] = "%";
}
}
array_push($tmppath, "qP2P");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qP2P <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($voip) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qVoIP";
$tmpcf['priority'] = 7;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($voipbw > 0) {
$tmpcf['bandwidth'] = $voipbw;
$tmpcf['bandwidthtype'] = $voipbwunit;
} else {
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
} else if ($sched == "HFSC") {
if ($voipbw > 0) {
$tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
} else {
$voipbw = $remainbw * 0.20; /* 20% bandwidth */
$tmpcf['realtime3'] = "{$voipbw}%";
}
$tmpcf['realtime'] = "on";
$tmpcf['bandwidth'] = 32;
$tmpcf['bandwidthtype'] = "Kb";
}
array_push($tmppath, "qVoIP");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qVoIP <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($games) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qGames";
$tmpcf['priority'] = 5;
$tmpcf['enabled'] = "on";
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$gamesbw = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$gamesbw}%";
$tmpcf['bandwidth'] = "{$gamesbw}";
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qGames");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qGames <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($otherpriority) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersHigh";
$tmpcf['priority'] = 4;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$otherbw = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['linkshare3'] = "{$otherbw}%";
$tmpcf['bandwidth'] = $otherbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qOthersHigh");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qHigh <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersLow";
$tmpcf['priority'] = 2;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($penalty) {
$tmpcf['bandwidthtype'] = $penaltybwunit;
$tmpcf['bandwidth'] = $penaltybw;
} else {
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
} else if ($sched == "HFSC") {
if ($penalty) {
$tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
$tmpcf['bandwidth'] = $penaltybw;
$tmpcf['bandwidthtype'] = $penaltybwunit;
} else {
$lsbw = $remainbw * 0.05;
$tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
$tmpcf['bandwidth'] = $lsbw;
$tmpcf['bandwidthtype'] = "%";
}
$tmpcf['linkshare'] = "on";
}
array_push($tmppath, "qOthersLow");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qLow <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
array_pop($tmppath);
$downfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
$downbw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $downfactor;
$tmppath = array();
$altq =& new altq_root_queue();
$altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
$altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
//$altq->SetBandwidth($config['ezshaper']['step2']["conn{$i}download"]);
//$altq->SetBwscale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
$altq->SetEnabled("on");
$altq_list_queues[$altq->GetQname()] =& $altq;
array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
$altq->SetLink($tmppath);
//var_dump($input_errors);
$altq->wconfig();
$sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
$voipbw =0;
$voipbwunit = "%";
$voip = false;
$penalty = false;
$penaltybw = 0;
$penaltybwunit = "%";
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
$games = false;
$otherpriority = false;
$remainbw = 0;
if ($config['ezshaper']['step3']['enable']) {
$voip = true;
$voipbw = $config['ezshaper']['step3']["local{$i}download"];
$voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
if ($sched != HFSC) {
if ($penaltybwunit == "%")
$factor = $downbw/100;
else
$factor = wizard_get_bandwidthtype_scale($voipbwunit);
$remainbw += floatval($voipbw) * $factor;
} else
$remainbw += 32000; /* 32Kbit/s reserved for HFSC linksharing */
}
if ($config['ezshaper']['step4']['enable']) {
$penalty = true;
$penaltybw = $config['ezshaper']['step4']['bandwidth'];
$penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
if ($penaltybwunit == "%")
$factor = $downbw/100;
else
$factor = wizard_get_bandwidthtype_scale($penaltybwunit);
$remainbw += floatval($penaltybw) * $factor;
} else {
$penalty = false;
$penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
$p2pcatchall = true;
$p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
$p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
if ($p2pcatchbwunit == "%")
$factor = $downbw/100;
else
$factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
$remainbw += floatval($p2pcatchbw) * $factor;
} else {
$p2pcatchall = false;
$p2pcatchbw = 0;
}
} else {
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
}
if ($config['ezshaper']['step6']['enable']) {
$games = true;
} else {
$games = false;
}
if ($config['ezshaper']['step7']['enable']) {
$otherpriority = true;
} else {
$otherpriority = false;
}
$remainbw = round($remainbw / $downbw * 100, 2);
if (intval($remainbw) > 0 && intval($remainbw) > 40) {
$savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
header("Location: wizard.php?xml=traffic_shaper_wizard_dedicated.xml&stepid=2&message={$savemsg}");
exit;
} else {
$remainbw = 100 - $remainbw;
}
if (!$p2pcatchall) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qLink";
$tmpcf['priority'] = 2;
$tmpcf['enabled'] = "on";
$tmpcf['default'] = "on";
$tmpcf['qlimit'] = 500;
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = 20; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['bandwidth'] = 20; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, $tmpcf['name']);
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qDefault <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($sched != "PRIQ") {
if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qInternet";
//$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
$tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
}
else if ($sched == "HFSC") {
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = floatval($config['ezshaper']['step2']["conn{$i}download"]) . $config['ezshaper']['step2']["conn{$i}downloadspeed"];
$tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}download"]);
$tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}downloadspeed"];
}
array_push($tmppath, "qInternet");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
//array_pop($tmppath);
//echo "qInternet <br />";
//var_dump($input_errors);
$qtmp->wconfig();
$altq =& $qtmp;
}
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qACK";
$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2;
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$lkbw = 0.20 * $remainbw;
$tmpcf['linkshare3'] = "{$lkbw}%";
$tmpcf['linkshare'] = "on";
$tmpcf['bandwidth'] = $lkbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qACK");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qACK $remainbw <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($p2p) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qP2P";
$tmpcf['priority'] = 1;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($p2pcatchall) {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
}
$tmpcf['default'] = "on";
$tmpcf['qlimit'] = 500;
} else {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpbw = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$tmpbw}%";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$tmpbw}%";
$tmpcf['bandwidth'] = $tmpbw;
$tmpcf['bandwidthtype'] = "%";
}
}
array_push($tmppath, "qP2P");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qP2P <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($voip) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qVoIP";
$tmpcf['priority'] = 7;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($voipbw > 0) {
$tmpcf['bandwidth'] = $voipbw;
$tmpcf['bandwidthtype'] = $voipbwunit;
} else {
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
} else if ($sched == "HFSC") {
if ($voipbw > 0) {
$tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
} else {
$voipbw = $remainbw * 0.20; /* 20% bandwidth */
$tmpcf['realtime3'] = "{$voipbw}%";
}
$tmpcf['realtime'] = "on";
$tmpcf['bandwidth'] = 32;
$tmpcf['bandwidthtype'] = "Kb";
}
array_push($tmppath, "qVoIP");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qVoIP <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($games) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qGames";
$tmpcf['priority'] = 5;
$tmpcf['enabled'] = "on";
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$gamesbw = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$gamesbw}%";
$tmpcf['bandwidth'] = "{$gamesbw}";
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qGames");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qGames <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($otherpriority) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersHigh";
$tmpcf['priority'] = 4;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$otherbw = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['linkshare3'] = "{$otherbw}%";
$tmpcf['bandwidth'] = $otherbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qOthersHigh");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qHigh <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersLow";
$tmpcf['priority'] = 3;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($penalty) {
$tmpcf['bandwidth'] = $penaltybw;
$tmpcf['bandwidthtype'] = $penaltybwunit;
} else {
$tmpcf['bandwidthtype'] = "%";
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
}
} else if ($sched == "HFSC") {
if ($penalty) {
$tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
$tmpcf['bandwidth'] = $penaltybw;
$tmpcf['bandwidthtype'] = $penaltybwunit;
} else {
$lsbw = $remainbw * 0.05;
$tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
$tmpcf['bandwidth'] = $lsbw;
$tmpcf['bandwidthtype'] = "%";
}
$tmpcf['linkshare'] = "on";
}
array_push($tmppath, "qOthersLow");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qLow <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
array_pop($tmppath);
}
if (!is_array($config['filter']['rule']))
$config['filter']['rule'] = array();
$interfacelist = implode(",", $interfacelist);
/* Rules */
if ($penalty) {
if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['descr'] = gettext("Penalty Box");
$rule['defaultqueue'] = "qOthersLow";
$rule['source']['address'] = $config['ezshaper']['step4']['address'];
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
/* If user specifies an IP, we don't bother with providers */
if ($voip) {
if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) {
/* create VOIP rules */
$rule = array();
$rule['type'] = "match";
//$rule['interface'] = $interfacelist;
$rule['descr'] = gettext("Connections From Upstream SIP Server");
$rule['protocol'] = "udp";
$rule['defaultqueue'] = "qVoIP";
$rule['source']['address'] = $config['ezshaper']['step3']['address'];
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
$rule = array();
$rule['type'] = "match";
//$rule['interface'] = $interfacelist;
$rule['descr'] = gettext("Connections To Upstream SIP Server");
$rule['protocol'] = "udp";
$rule['defaultqueue'] = "qVoIP";
$rule['source']['any'] = TRUE;
$rule['destination']['address'] = $config['ezshaper']['step3']['address'];
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
} elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) {
/* create VOIP rules */
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['descr'] = "DiffServ/Lowdelay/Upload";
$rule['protocol'] = "udp";
$rule['source']['any'] = TRUE;
$rule['defaultqueue'] = "qVoIP";
$rule['destination']['any'] = TRUE;
$rule['iptos'] = "lowdelay";
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
} else {
/* loop through voiplist[] */
foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['defaultqueue'] = 'qVoIP';
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['descr'] = "m_voip {$voip[0]} outbound";
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['destination']['port'] = $voip[2]."-".$voip[3];
if($voip[1] != '')
$rule['protocol'] = $voip[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
/* loop through p2plist[] */
if ($p2p) {
foreach($config['ezshaper']['step5'] as $key => $val) {
if (!is_array($p2plist[$key]))
continue;
foreach ($p2plist[$key] as $p2pclient) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['defaultqueue'] = 'qP2P';
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['descr'] = "m_P2P {$p2pclient[0]} outbound";
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3];
if($p2pclient[1] != '')
$rule['protocol'] = $p2pclient[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
/* loop through gamesplist[] */
if ($games) {
foreach($config['ezshaper']['step6'] as $key => $val) {
if (!is_array($gamesplist[$key]))
continue;
foreach ($gamesplist[$key] as $Gameclient) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['defaultqueue'] = 'qGames';
if ($Gameclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['descr'] = "m_Game {$Gameclient[0]} outbound";
$rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3];
if($Gameclient[1] != '')
$rule['protocol'] = $Gameclient[1];
$config['filter']['rule'][] = $rule;
}
}
}
/* loop through othersplist[] */
if ($otherpriority) {
foreach($config['ezshaper']['step7'] as $key => $val) {
if (!is_array($othersplist[$key]))
continue;
foreach ($othersplist[$key] as $otherclient) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
switch ($val) {
case "H":
$rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */
if ($otherclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
$loop = 0;
break;
case "L":
$rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */
if ($otherclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
$loop = 0;
break;
case "D":
if ($p2pcatchall) {
$loop = 0;
$rule['defaultqueue'] = 'qOthersDefault';
if ($otherclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
} else
$loop = 1; /* It automitaclly goes to default queue */
break;
default:
$loop = 1;
}
if (!$loop) {
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['descr'] = "m_Other {$otherclient[0]} outbound";
if($otherclient[2] or $otherclient[3]) {
$rule['destination']['port'] = $otherclient[2]."-".$otherclient[3];
}
if($otherclient[1] != '')
$rule['protocol'] = $otherclient[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
}
write_config();
}
function wizard_get_bandwidthtype_scale($type = "b") {
switch ($type) {
case "Gb":
$factor = 1024 * 1024 * 1024;
break;
case "Mb":
$factor = 1024 * 1024;
break;
case "Kb":
$factor = 1024;
break;
case "b":
default:
$factor = 1;
break;
}
return intval($factor);
}
?>
<?xml version="1.0"?>
<opnsensewizard>
<copyright><![CDATA[
/*
Copyright (C) 2014 Deciso B.V.
Copyright (C) 2005 Bill Marquette - bill.marquette@gmail.com.
Copyright (C) 2008-2010 Ermal Luci
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/]]></copyright>
<totalsteps>8</totalsteps>
<step>
<id>1</id>
<title>OPNsense Traffic Shaper Wizard</title>
<disableheader>true</disableheader>
<description>This wizard will guide you through setting up the OPNsense traffic shaper.
Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard.
</description>
<fields>
<field>
<type>listtopic</type>
<name>Traffic shaper Wizard</name>
</field>
<field>
<displayname>Enter number of WAN type connections</displayname>
<name>numberofconnections</name>
<type>input</type>
<validate>^[0-9]+$</validate>
<description>Number of connections you have</description>
<bindstofield>ezshaper->step1->numberofconnections</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepbeforeformdisplay>step1_stepbeforeformdisplay();</stepbeforeformdisplay>
<stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
<step>
<id>2</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Shaper configuration</description>
<javascriptafterformdisplay/>
<stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
<stepsubmitphpaction>step2_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
<fields>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
</step>
<step>
<id>3</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Voice over IP</description>
<fields>
<field>
<name>Enable</name>
<type>checkbox</type>
<typehint>Prioritize Voice over IP traffic</typehint>
<description>This will raise the priority of VOIP traffic above all other traffic.</description>
<bindstofield>ezshaper-&gt;step3-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>VOIP specific settings</name>
<type>listtopic</type>
</field>
<field>
<name>Provider</name>
<type>select</type>
<description>Choose Generic if your provider isn't listed.</description>
<bindstofield>ezshaper-&gt;step3-&gt;provider</bindstofield>
<options>
<option>
<name>Generic (lowdelay)</name>
<value>Generic</value>
</option>
<option>
<name>VoicePulse</name>
<value>VoicePulse</value>
</option>
<option>
<name>Asterisk/Vonage</name>
<value>Asterisk</value>
</option>
<option>
<name>PanasonicTDA</name>
<value>Panasonic</value>
</option>
</options>
</field>
<field>
<name>Upstream SIP Server</name>
<type>inputalias</type>
<description>(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the &lt;strong&gt;remote&lt;/strong&gt; PBX or SIP Trunk to prioritize. &lt;br /&gt;NOTE: You can also use a Firewall Alias in this location.</description>
<bindstofield>ezshaper-&gt;step3-&gt;address</bindstofield>
<message>IP Address field is non-blank and doesn't look like an IP address.</message>
</field>
<field>
<name>Bandwidth</name>
<type>input</type>
<validate>^[0-9]*$</validate>
<typehint>Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic.</typehint>
<bindstofield>ezshaper-&gt;step3-&gt;bandwidth</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepbeforeformdisplay>step3_stepbeforeformdisplay();</stepbeforeformdisplay>
<stepsubmitphpaction>step3_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
<step>
<id>4</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Penalty Box</description>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<fields>
<field>
<donotdisable>true</donotdisable>
<name>Enable</name>
<type>checkbox</type>
<typehint>Penalize IP or Alias</typehint>
<description>This will lower the priority of traffic from this IP or alias.</description>
<enablefields>Address,Bandwidth,BandwidthSpeed</enablefields>
<bindstofield>ezshaper-&gt;step4-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>PenaltyBox specific settings</name>
<type>listtopic</type>
</field>
<field>
<name>Address</name>
<type>inputalias</type>
<description>This allows you to just provide the IP address of the computer(s) or Penalize. NOTE: You can also use a Firewall Alias in this location.</description>
<bindstofield>ezshaper-&gt;step4-&gt;address</bindstofield>
<message>IP Address field is non-blank and doesn't look like an IP address.</message>
</field>
<field>
<name>Bandwidth</name>
<type>input</type>
<validate>^[0-9]*$</validate>
<message>Speed must be numerical.</message>
<bindstofield>ezshaper-&gt;step4-&gt;bandwidth</bindstofield>
<combinefieldsbegin>true</combinefieldsbegin>
</field>
<field>
<combinefieldsend>true</combinefieldsend>
<dontdisplayname>true</dontdisplayname>
<dontcombinecells>true</dontcombinecells>
<donotdisable>true</donotdisable>
<name>BandwidthSpeed</name>
<description>The limit you want to apply.</description>
<type>select</type>
<options>
<option>
<name>%</name>
<value>%</value>
</option>
<option>
<name>bit/s</name>
<value>b</value>
</option>
<option>
<name>Kilobit/s</name>
<value>Kb</value>
</option>
<option>
<name>Megabit/s</name>
<value>Mb</value>
</option>
<option>
<name>Gigabit/s</name>
<value>Gb</value>
</option>
</options>
<bindstofield>ezshaper->step4->bandwidthunit</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepsubmitphpaction>step4_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
<step>
<id>5</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Peer to Peer networking</description>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<fields>
<field>
<donotdisable>true</donotdisable>
<name>Enable</name>
<type>checkbox</type>
<typehint>Lower priority of Peer-to-Peer traffic</typehint>
<description>This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic.</description>
<enablefields>p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX</enablefields>
<bindstofield>ezshaper-&gt;step5-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>p2p Catch all</name>
<type>listtopic</type>
</field>
<field>
<name>p2pCatchAll</name>
<type>checkbox</type>
<typehint>When enabled, all uncategorized traffic is fed to the p2p queue.</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;p2pcatchall</bindstofield>
</field>
<field>
<name>Bandwidth</name>
<type>input</type>
<validate>^[0-9]*$</validate>
<message>Speed must be numerical.</message>
<bindstofield>ezshaper-&gt;step5-&gt;bandwidth</bindstofield>
<combinefieldsbegin>true</combinefieldsbegin>
</field>
<field>
<combinefieldsend>true</combinefieldsend>
<dontdisplayname>true</dontdisplayname>
<dontcombinecells>true</dontcombinecells>
<donotdisable>true</donotdisable>
<name>BandwidthSpeed</name>
<description>The limit you want to apply.</description>
<type>select</type>
<options>
<option>
<name>%</name>
<value>%</value>
</option>
<option>
<name>bit/s</name>
<value>b</value>
</option>
<option>
<name>Kilobit/s</name>
<value>Kb</value>
</option>
<option>
<name>Megabit/s</name>
<value>Mb</value>
</option>
<option>
<name>Gigabit/s</name>
<value>Gb</value>
</option>
</options>
<bindstofield>ezshaper->step5->bandwidthunit</bindstofield>
</field>
<field>
<name>Enable/Disable specific P2P protocols</name>
<type>listtopic</type>
</field>
<field>
<name>Aimster</name>
<type>checkbox</type>
<typehint>Aimster and other P2P using the Aimster protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;aimster</bindstofield>
</field>
<field>
<name>BitTorrent</name>
<type>checkbox</type>
<typehint>Bittorrent and other P2P using the Torrent protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;bittorrent</bindstofield>
</field>
<field>
<name>BuddyShare</name>
<type>checkbox</type>
<typehint>BuddyShare and other P2P using the BuddyShare protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;buddyshare</bindstofield>
</field>
<field>
<name>CuteMX</name>
<type>checkbox</type>
<typehint>CuteMX and other P2P using the CuteMX protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;cutemx</bindstofield>
</field>
<field>
<name>DCplusplus</name>
<type>checkbox</type>
<typehint>DC++ and other P2P using the DC++ protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;dcplusplus</bindstofield>
</field>
<field>
<name>DCC</name>
<type>checkbox</type>
<typehint>irc DCC file transfers</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;dcc</bindstofield>
</field>
<field>
<name>DirectConnect</name>
<type>checkbox</type>
<typehint>DirectConnect and other P2P using the DirectConnect protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;directconnect</bindstofield>
</field>
<field>
<name>DirectFileExpress</name>
<type>checkbox</type>
<typehint>DirectFileExpress and other P2P using the DirectFileExpress protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;directfileexpress</bindstofield>
</field>
<field>
<name>eDonkey2000</name>
<type>checkbox</type>
<typehint>eDonkey and other P2P using the eDonkey protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;edonkey2000</bindstofield>
</field>
<field>
<name>FastTrack</name>
<type>checkbox</type>
<typehint>FastTrack and other P2P using the FastTrack protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;fasttrack</bindstofield>
</field>
<field>
<name>Gnutella</name>
<type>checkbox</type>
<typehint>Gnutella and other P2P using the Gnutella protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;gnutella</bindstofield>
</field>
<field>
<name>grouper</name>
<type>checkbox</type>
<typehint>grouper and other P2P using the grouper protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;grouper</bindstofield>
</field>
<field>
<name>hotComm</name>
<type>checkbox</type>
<typehint>hotComm and other P2P using the hotComm protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;hotcomm</bindstofield>
</field>
<field>
<name>HotlineConnect</name>
<type>checkbox</type>
<typehint>HotlineConnect and other P2P using the HotlineConnect protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;hotlineconnect</bindstofield>
</field>
<field>
<name>iMesh</name>
<type>checkbox</type>
<typehint>iMesh and other P2P using the iMesh protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;imesh</bindstofield>
</field>
<field>
<name>Napster</name>
<type>checkbox</type>
<typehint>Napster and other P2P using the Napster protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;napster</bindstofield>
</field>
<field>
<name>OpenNap</name>
<type>checkbox</type>
<typehint>OpenNap and other P2P using the OpenNap protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;opennap</bindstofield>
</field>
<field>
<name>Scour</name>
<type>checkbox</type>
<typehint>Scour and other P2P using the Scour protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;scour</bindstofield>
</field>
<field>
<name>Shareaza</name>
<type>checkbox</type>
<typehint>Shareaza and other P2P using the Shareaza protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;shareaza</bindstofield>
</field>
<field>
<name>SongSpy</name>
<type>checkbox</type>
<typehint>SongSpy and other P2P using the SongSpy protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;songspy</bindstofield>
</field>
<field>
<name>WinMX</name>
<type>checkbox</type>
<typehint>WinMX and other P2P using the WinMX protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;winmx</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepsubmitphpaction>step5_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
<step>
<id>6</id>
<title>OPNsense Traffic Shaper Wizard</title>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<description>Network Games</description>
<fields>
<field>
<name>Enable</name>
<type>checkbox</type>
<typehint>Prioritize network gaming traffic</typehint>
<description>This will raise the priority of gaming traffic to higher than most traffic.</description>
<enablefields>BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft</enablefields>
<donotdisable>true</donotdisable>
<bindstofield>ezshaper-&gt;step6-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>Enable/Disable specific game consoles and services</name>
<type>listtopic</type>
</field>
<field>
<name>BattleNET</name>
<type>checkbox</type>
<typehint>Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlenet</bindstofield>
</field>
<field>
<name>EAOrigin</name>
<type>checkbox</type>
<typehint>EA Origin Client - Some PC games by EA use this.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;eaorigin</bindstofield>
</field>
<field>
<name>GameForWindowsLive</name>
<type>checkbox</type>
<typehint>Games for Windows Live</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;gamesforwindowslive</bindstofield>
</field>
<field>
<name>PlayStationConsoles</name>
<type>checkbox</type>
<typehint>PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;playstationconsoles</bindstofield>
</field>
<field>
<name>Steam</name>
<type>checkbox</type>
<typehint>Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam)</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;steam</bindstofield>
</field>
<field>
<name>WiiConsoles</name>
<type>checkbox</type>
<typehint>Wii Consoles - Wii, Wii U, DS and 3DS</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;wiiconsoles</bindstofield>
</field>
<field>
<name>XboxConsoles</name>
<type>checkbox</type>
<typehint>Xbox Consoles - Xbox 360 and Xbox One</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;xboxconsoles</bindstofield>
</field>
<field>
<name>Enable/Disable specific games</name>
<type>listtopic</type>
</field>
<field>
<name>ARMA2</name>
<type>checkbox</type>
<typehint>ARMA 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;arma2</bindstofield>
</field>
<field>
<name>ARMA3</name>
<type>checkbox</type>
<typehint>ARMA 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;arma3</bindstofield>
</field>
<field>
<name>Battlefield2</name>
<type>checkbox</type>
<typehint>Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlefield2</bindstofield>
</field>
<field>
<name>Battlefield3</name>
<type>checkbox</type>
<typehint>Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlefield3</bindstofield>
</field>
<field>
<name>BattlefieldBC2</name>
<type>checkbox</type>
<typehint>Battlefield: Bad Company 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlefieldbc2</bindstofield>
</field>
<field>
<name>Borderlands</name>
<type>checkbox</type>
<typehint>Borderlands</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;borderlands</bindstofield>
</field>
<field>
<name>CallOfDuty</name>
<type>checkbox</type>
<typehint>Call Of Duty (United Offensive)</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;callofduty</bindstofield>
</field>
<field>
<name>Counterstrike</name>
<type>checkbox</type>
<typehint>Counterstrike. The ultimate 1st person shooter.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;counterstrike</bindstofield>
</field>
<field>
<name>Crysis2</name>
<type>checkbox</type>
<typehint>Crysis 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;crysis2</bindstofield>
</field>
<field>
<name>Crysis3</name>
<type>checkbox</type>
<typehint>Crysis 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;crysis3</bindstofield>
</field>
<field>
<name>DeadSpace2</name>
<type>checkbox</type>
<typehint>Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;deadspace2</bindstofield>
</field>
<field>
<name>DeadSpace3</name>
<type>checkbox</type>
<typehint>Dead Space 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;deadspace3</bindstofield>
</field>
<field>
<name>DeltaForce</name>
<type>checkbox</type>
<typehint>Delta Force</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;deltaforce</bindstofield>
</field>
<field>
<name>Dirt3</name>
<type>checkbox</type>
<typehint>Dirt 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;dirt3</bindstofield>
</field>
<field>
<name>DOOM3</name>
<type>checkbox</type>
<typehint>DOOM3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;doom3</bindstofield>
</field>
<field>
<name>DragonAge2</name>
<type>checkbox</type>
<typehint>Dragon Age 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;dragonage2</bindstofield>
</field>
<field>
<name>EmpireEarth</name>
<type>checkbox</type>
<typehint>Empire Earth</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;empireearth</bindstofield>
</field>
<field>
<name>EveOnline</name>
<type>checkbox</type>
<typehint>EVE Online</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;eveonline</bindstofield>
</field>
<field>
<name>Everquest</name>
<type>checkbox</type>
<typehint>Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;everquest</bindstofield>
</field>
<field>
<name>Everquest2</name>
<type>checkbox</type>
<typehint>Everquest II</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;everquest2</bindstofield>
</field>
<field>
<name>FarCry</name>
<type>checkbox</type>
<typehint>Far Cry</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;farcry</bindstofield>
</field>
<field>
<name>FarCry2</name>
<type>checkbox</type>
<typehint>Far Cry 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;farcry2</bindstofield>
</field>
<field>
<name>FarCry3</name>
<type>checkbox</type>
<typehint>Far Cry 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;farcry3</bindstofield>
</field>
<field>
<name>GunZOnline</name>
<type>checkbox</type>
<typehint>GunZ Online</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;gunzonline</bindstofield>
</field>
<field>
<name>HalfLife</name>
<type>checkbox</type>
<typehint>Half-Life</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;halflife</bindstofield>
</field>
<field>
<name>LeagueofLegends</name>
<type>checkbox</type>
<typehint>League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;leagueoflegends</bindstofield>
</field>
<field>
<name>Lineage2</name>
<type>checkbox</type>
<typehint>Lineage II</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;lineage2</bindstofield>
</field>
<field>
<name>MassEffect3</name>
<type>checkbox</type>
<typehint>Mass Effect 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;masseffect3</bindstofield>
</field>
<field>
<name>MechwarriorOnline</name>
<type>checkbox</type>
<typehint>MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;mechwarrioronline</bindstofield>
</field>
<field>
<name>Minecraft</name>
<type>checkbox</type>
<typehint>Minecraft</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;minecraft</bindstofield>
</field>
<field>
<name>PlanetSide</name>
<type>checkbox</type>
<typehint>PlanetSide</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;planetside</bindstofield>
</field>
<field>
<name>PlanetSide2</name>
<type>checkbox</type>
<typehint>PlanetSide 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;planetside2</bindstofield>
</field>
<field>
<name>OperationFlashpointDR</name>
<type>checkbox</type>
<typehint>Operation Flashpoint: Dragon Rising</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;operationflashpoint-dr</bindstofield>
</field>
<field>
<name>QuakeIII</name>
<type>checkbox</type>
<typehint>Quake III</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;quakeiii</bindstofield>
</field>
<field>
<name>QuakeIV</name>
<type>checkbox</type>
<typehint>Quake IV</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;quakeiv</bindstofield>
</field>
<field>
<name>StarWarsTOR</name>
<type>checkbox</type>
<typehint>StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;starwarstor</bindstofield>
</field>
<field>
<name>TigerWoods2004PS2</name>
<type>checkbox</type>
<typehint>Tiger Woods 2004 for PS2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;tigerwoods2004ps2</bindstofield>
</field>
<field>
<name>TribesAscend</name>
<type>checkbox</type>
<typehint>Tribes Ascend</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;tribesascend</bindstofield>
</field>
<field>
<name>UnrealTournament</name>
<type>checkbox</type>
<typehint>Unreal Tournament Series</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;unrealtournament</bindstofield>
</field>
<field>
<name>WolfensteinEnemyTerritory</name>
<type>checkbox</type>
<typehint>Wolfenstein Enemy Territory</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;wolfet</bindstofield>
</field>
<field>
<name>WorldOfWarcraft</name>
<type>checkbox</type>
<typehint>World of Warcraft</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;wow</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
<step>
<id>7</id>
<title>OPNsense Traffic Shaper Wizard</title>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<description>Raise or lower other Applications</description>
<fields>
<field>
<name>Enable</name>
<type>checkbox</type>
<typehint>Other networking protocols</typehint>
<description>This will help raise or lower the priority of other protocols higher than most traffic.</description>
<enablefields>AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion</enablefields>
<donotdisable>true</donotdisable>
<bindstofield>ezshaper-&gt;step7-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>Remote Service / Terminal emulation</name>
<type>listtopic</type>
</field>
<field>
<name>AppleRemoteDesktop</name>
<bindstofield>ezshaper-&gt;step7-&gt;appleremotedesktop</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Apple Remote Desktop</typehint>
</field>
<field>
<name>MSRDP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;msrdp</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Microsoft Remote Desktop Protocol</typehint>
</field>
<field>
<name>PCAnywhere</name>
<bindstofield>ezshaper-&gt;step7-&gt;pcanywhere</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Symantec PC Anywhere</typehint>
</field>
<field>
<name>VNC</name>
<bindstofield>ezshaper-&gt;step7-&gt;vnc</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Virtual Network Computing</typehint>
</field>
<field>
<name>Messengers</name>
<type>listtopic</type>
</field>
<field>
<name>AIM</name>
<bindstofield>ezshaper-&gt;step7-&gt;aolinstantmessenger</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>AOL Instant Messenger</typehint>
</field>
<field>
<name>Facetime</name>
<bindstofield>ezshaper-&gt;step7-&gt;facetime</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Facetime</typehint>
</field>
<field>
<name>ICQ</name>
<bindstofield>ezshaper-&gt;step7-&gt;icq</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>ICQ</typehint>
</field>
<field>
<name>IRC</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;irc</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Internet Relay Chat</typehint>
</field>
<field>
<name>Jabber</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;jabber</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Jabber instant messanger</typehint>
</field>
<field>
<name>GoogleHangouts</name>
<bindstofield>ezshaper-&gt;step7-&gt;googlehangouts</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Google Hangouts</typehint>
</field>
<field>
<name>MSN</name>
<bindstofield>ezshaper-&gt;step7-&gt;msnmessenger</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>MSN Messenger</typehint>
</field>
<field>
<name>Teamspeak</name>
<bindstofield>ezshaper-&gt;step7-&gt;teamspeak</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>TeamSpeak</typehint>
</field>
<field>
<name>Teamspeak3</name>
<bindstofield>ezshaper-&gt;step7-&gt;teamspeak3</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>TeamSpeak 3</typehint>
</field>
<field>
<name>Ventrilo</name>
<bindstofield>ezshaper-&gt;step7-&gt;ventrilo</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Ventrilo</typehint>
</field>
<field>
<name>VPN</name>
<type>listtopic</type>
</field>
<field>
<name>PPTP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;pptp</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Microsoft Point to Point tunneling protocol</typehint>
</field>
<field>
<name>IPSEC</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;ipsec</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>IPSEC VPN traffic</typehint>
</field>
<field>
<name>Multimedia/Streaming</name>
<type>listtopic</type>
</field>
<field>
<name>iTunesRadio</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;itunesradio</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
</field>
<field>
<name>StreamingMP3</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;streamingmp3</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Streaming Media</typehint>
</field>
<field>
<name>RTSP</name>
<bindstofield>ezshaper-&gt;step7-&gt;rtsp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>RealTime streaming protocol</typehint>
</field>
<field>
<name>Web</name>
<type>listtopic</type>
</field>
<field>
<name>HTTP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;http</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>HTTP and HTTPS aka Web Traffic</typehint>
</field>
<field>
<name>Mail</name>
<type>listtopic</type>
</field>
<field>
<name>SMTP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;smtp</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Mail Protocol</typehint>
</field>
<field>
<name>POP3</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;pop3</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>POP3 Protocol</typehint>
</field>
<field>
<name>IMAP</name>
<bindstofield>ezshaper-&gt;step7-&gt;imap</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>IMAP Protocol</typehint>
</field>
<field>
<name>LotusNotes</name>
<bindstofield>ezshaper-&gt;step7-&gt;lotusnotes</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Lotus Notes</typehint>
</field>
<field>
<name>Game Downloader</name>
<type>listtopic</type>
</field>
<field>
<name>BattleNetDownloader</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;battlenetdownloader</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Battle.NET Downloader</typehint>
</field>
<field>
<name>SteamDownloader</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;steamdownloader</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Steam Downloader</typehint>
</field>
<field>
<name>Miscellaneous</name>
<type>listtopic</type>
</field>
<field>
<name>APNS</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;apns</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Apple Push Notification Service</typehint>
</field>
<field>
<name>AppleMobileSync</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;applemobilesync</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Apple Mobile Sync</typehint>
</field>
<field>
<name>CrashPlan</name>
<bindstofield>ezshaper-&gt;step7-&gt;crashplan</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>CrashPlan</typehint>
</field>
<field>
<name>CVSUP</name>
<bindstofield>ezshaper-&gt;step7-&gt;cvsup</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>CVSUP</typehint>
</field>
<field>
<name>DNS</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;dns</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Domain Name Services</typehint>
</field>
<field>
<name>Git</name>
<bindstofield>ezshaper-&gt;step7-&gt;git</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Git Server</typehint>
</field>
<field>
<name>HBCI</name>
<bindstofield>ezshaper-&gt;step7-&gt;hbci</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>HBCI</typehint>
</field>
<field>
<name>ICMP</name>
<bindstofield>ezshaper-&gt;step7-&gt;icmp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>ICMP Protocol</typehint>
</field>
<field>
<name>SMB</name>
<bindstofield>ezshaper-&gt;step7-&gt;smb</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Microsoft SMB Protocol and friends</typehint>
</field>
<field>
<name>SNMP</name>
<bindstofield>ezshaper-&gt;step7-&gt;snmp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Simple Network Management Protocol</typehint>
</field>
<field>
<name>MySQLServer</name>
<bindstofield>ezshaper-&gt;step7-&gt;mysqlserver</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>MySQL Server</typehint>
</field>
<field>
<name>NNTP</name>
<bindstofield>ezshaper-&gt;step7-&gt;nntp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Internet News</typehint>
</field>
<field>
<name>Slingbox</name>
<bindstofield>ezshaper-&gt;step7-&gt;slingbox</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Slingbox</typehint>
</field>
<field>
<name>Subversion</name>
<bindstofield>ezshaper-&gt;step7-&gt;subversion</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Subversion Server</typehint>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
<step>
<id>8</id>
<title>OPNsense Traffic Shaper Wizard</title>
<field>
<name>Reload profile notice</name>
<type>listtopic</type>
</field>
<description> After pressing Finish the system will load the new profile.&lt;br/&gt; Please note that this may take a moment.&lt;br/&gt; Also note that the traffic shaper is stateful meaning that only new connections will be shaped.&lt;br/&gt; If this is an issue please reset the state table after loading the profile.&lt;br/&gt;</description>
<fields>
<field>
<name>Finish</name>
<type>submit</type>
</field>
</fields>
<stepsubmitphpaction>step8_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_dedicated.inc</includefile>
</step>
</opnsensewizard>
<?php
/*
Copyritgh (C) 2014 Deciso B.V.
Copyright (C) 2006 Bill Marquette - bill.marquette@gmail.com.
Copyright (C) 2006 Scott Ullrich - sullrich@pfsense.com.
Copyright (C) 2008-2010 Ermal Luçi
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
function step1_stepbeforeformdisplay() {
global $stepid, $savemsg, $pkg;
$fields =& $pkg['step'][0]['fields']['field'];
$lans = 0;
$wans = 0;
$iflisttmp = get_configured_interface_with_descr();
foreach ($iflisttmp as $if => $ifdesc) {
if (!is_altq_capable(get_real_interface($if)))
continue;
if (interface_has_gateway($if) || interface_has_gatewayv6($if))
$wans++;
else
$lans++;
}
foreach ($fields as &$field) {
if ($field['name'] == 'numberofconnections')
$field['value'] = $wans;
else if ($field['name'] == 'numberoflocalinterfaces')
$field['value'] = $lans;
}
}
function step1_submitphpaction() {
global $stepid, $savemsg;
if (!isset($_POST['numberofconnections'])) {
$savemsg=gettext("You need to specify the number of connections.");
$stepid--;
return;
}
if (intval($_POST['numberofconnections']) < 1) {
$savemsg=gettext("The number of connections should be greater than 1.");
$stepid--;
return;
}
if (!isset($_POST['numberoflocalinterfaces'])) {
$savemsg=gettext("You need to specify the number of LAN type interfaces.");
$stepid--;
return;
}
if (intval($_POST['numberoflocalinterfaces']) < 1) {
$savemsg=gettext("The number of LAN type interfaces should be greater than 1.");
$stepid--;
return;
}
}
function step2_stepbeforeformdisplay() {
global $config, $pkg;
global $stepid, $savemsg;
$wans = 0;
$lans = 0;
$iflist = array();
$iflisttmp = get_configured_interface_with_descr();
foreach ($iflisttmp as $if => $ifdesc) {
if (!is_altq_capable(get_real_interface($if)))
continue;
if (interface_has_gateway($if) || interface_has_gatewayv6($if))
$wans++;
else
$lans++;
$iflist[$if] = $ifdesc;
}
$numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
if ($numberofconnections > $wans) {
$savemsg=gettext("You have less interfaces than number of connections!");
$stepid--;
return;
}
$numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
if ($numberoflocalinterfaces > $lans) {
$savemsg=gettext("You have less interfaces than number of connections!");
$stepid--;
return;
}
$cfgname = "traffic_shaper_wizard_multi_all.xml";
$fields =& $pkg['step'][1]['fields']['field'];
/*
unset($config['ezshaper']['step2']);
$config['ezshaper']['step2'] = array();
write_config();
*/
$fields = array();
for ($i = 0; $i < $numberoflocalinterfaces; $i++) {
$field = array();
$interface_friendly = $i+1;
$field['name'] = "Setup connection speed and scheduler information for interface LAN #{$interface_friendly}";
$field['type'] = "listtopic";
$fields[] = $field;
$field = array();
$field['displayname'] = "Interface & Scheduler";
$field['name'] = "local{$i}interface";
$field['type'] = "select";
$field['options']['option'] = array();
foreach ($iflist as $ifname => $ifdescr) {
// Skip wan interfaces here
if (interface_has_gateway($ifname) || interface_has_gatewayv6($ifname))
continue;
$opts = array();
$opts['displayname'] = $ifdescr;
$opts['name'] = $ifname;
$opts['value'] = $ifname;
$field['options']['option'][] = $opts;
}
$field['combinefieldsbegin'] = "true";
$field['bindstofield'] = "ezshaper->step2->local{$i}interface";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "local{$i}downloadscheduler";
$field['type'] = "select";
$field['typehint'] = "Queueing discipline to apply on this local interface.";
$field['options']['option'] = array();
$opts = array();
$opts['name'] = "HFSC";
$opts['value'] = "HFSC";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "CBQ";
$opts['value'] = "CBQ";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "PRIQ";
$opts['value'] = "PRIQ";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->local{$i}downloadscheduler";
$fields[] = $field;
}
for ($i = 0; $i < $numberofconnections; $i++) {
$field = array();
$interface_friendly = $i+1;
$field['name'] = "Setup connection speed and scheduler information for interface WAN#{$interface_friendly}";
$field['type'] = "listtopic";
$fields[] = $field;
$field = array();
$field['displayname'] = "Interface & Scheduler";
$field['name'] = "conn{$i}interface";
$field['type'] = "select";
$interface_real = $i+1;
$field['options']['option'] = array();
foreach ($iflist as $ifname => $ifdescr) {
// Skip lan interfaces here
if (!interface_has_gateway($ifname) && !interface_has_gatewayv6($ifname))
continue;
$opts = array();
$opts['displayname'] = $ifdescr;
$opts['name'] = $ifname;
$opts['value'] = $ifname;
$field['options']['option'][] = $opts;
}
$field['bindstofield'] = "ezshaper->step2->conn{$i}interface";
$field['combinefieldsbegin'] = "true";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}uploadscheduler";
$field['type'] = "select";
$field['typehint'] = "Queueing discipline to apply on the upload of this connection.";
$field['options']['option'] = array();
$opts = array();
$opts['name'] = "HFSC";
$opts['value'] = "HFSC";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "CBQ";
$opts['value'] = "CBQ";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "PRIQ";
$opts['value'] = "PRIQ";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->conn{$i}uploadscheduler";
$fields[] = $field;
$field = array();
$field['displayname'] = "Upload";
$field['name'] = "conn{$i}upload";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step2->conn{$i}upload";
$field['combinefieldsbegin'] = "true";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}uploadspeed";
$field['typehint'] = "Upload bandwidth on this connection.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->conn{$i}uploadspeed";
$fields[] = $field;
$field = array();
$field['displayname'] = "Download";
$field['name'] = "conn{$i}download";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step2->conn{$i}download";
$field['combinefieldsbegin'] = "true";
$fields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}downloadspeed";
$field['typehint'] = "Download bandwidth on this connection.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed";
$fields[] = $field;
}
$field = array();
$field['name'] = "Next";
$field['type'] = "submit";
$fields[] = $field;
}
function step2_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
$sumdownloads = 0;
/* Input Validation */
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
$localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
for ($i = 0; $i < $steps; $i++) {
for ($j = $i + 1; $j <= $steps; $j++) {
if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for connections {$i} and {$j}.");
$stepid--;
return;
}
if (trim($_POST["conn{$i}uploadscheduler"]) != "PRIQ") {
if (!is_numeric($_POST["conn{$i}upload"])) {
$savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
if (!is_numeric($_POST["conn{$i}download"])) {
$savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
$upbw = $_POST["conn{$i}upload"];
$downbw = $_POST["conn{$i}download"];
if ($upbw < 1 || $downbw < 1) {
$savemsg = gettext("You cannot specify 0 bandwidth!");
$stepid--;
return;
}
if (intval($upbw) < 128 && $_POST["conn{$i}uploadspeed"] == "Kb" && trim($_POST["conn{$i}uploadscheduler"]) == "CBQ") {
$savemsg=gettext("Uploads smaller than 128Kbit/s is not supported for connection {$i} on CBQ scheduler.");
$stepid--;
return;
}
}
}
for ($j = 0; $j < $localint; $j++) {
if ($_POST["conn{$i}interface"] == $_POST["local{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface for local and outside.");
$stepid--;
return;
}
}
}
for ($i = 0; $i < $localint; $i++) {
for ($j = $i + 1; $j < $localint; $j++) {
if ($_POST["local{$i}interface"] == $_POST["local{$j}interface"]) {
$savemsg=gettext("You cannot select the same interface twice on local interfaces.");
$stepid--;
return;
}
}
}
/* This is necessary since the wizard expects pecnefined fields. */
unset($config['ezshaper']['step2']);
$config['ezshaper']['step2'] = array();
for ($i = 0; $i < $localint; $i++) {
$config['ezshaper']['step2']["local{$i}downloadscheduler"] = $_POST["local{$i}downloadscheduler"];
$config['ezshaper']['step2']["local{$i}interface"] = $_POST["local{$i}interface"];
}
for ($i = 0; $i < $steps; $i++) {
$config['ezshaper']['step2']["conn{$i}uploadscheduler"] = $_POST["conn{$i}uploadscheduler"];
$config['ezshaper']['step2']["conn{$i}upload"] = $_POST["conn{$i}upload"];
$config['ezshaper']['step2']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
$config['ezshaper']['step2']["conn{$i}download"] = $_POST["conn{$i}download"];
$config['ezshaper']['step2']["conn{$i}downloadspeed"] = $_POST["conn{$i}downloadspeed"];
$config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"];
}
}
function step3_stepbeforeformdisplay() {
global $config, $pkg;
global $stepid, $savemsg;
$cfgname = "traffic_shaper_wizard_multi_all.xml";
$numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']);
$numberoflocalinterfaces = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
$fields =& $pkg['step'][1]['fields']['field'];
$voipfields =& $pkg['step'][2]['fields']['field'];
$voipfields = array();
$enablefields = array();
$field = array();
$field['name'] = "enable";
$field['type'] = "checkbox";
$field['typehint'] = "Prioritize Voice over IP traffic.";
$field['bindstofield'] = "ezshaper->step3->enable";
$field['descritpion'] = "This will raise the priority of VOIP traffic above all other traffic.";
$voipfields[] = $field;
$field = array();
$field['name'] = "Next";
$field['type'] = "submit";
$voipfields[] = $field;
$field = array();
$field['name'] = "VOIP specific settings";
$field['type'] = "listtopic";
$voipfields[] = $field;
$field['name'] = "Provider";
$enablefields[] = "Provider";
$field['type'] = "select";
$field['description'] = "Choose Generic if your provider isn't listed.";
$field['options']['option'] = array();
$opts = array();
$opts['name'] = "Generic (lowdelay)";
$opts['value'] = "Generic";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "VoicePulse";
$opts['value'] = "VoicePulse";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "Asterisk/Vonage";
$opts['value'] = "Asterisk";
$field['options']['option'][] = $opts;
$opts = array();
$opts['name'] = "PanasonicTDA";
$opts['value'] = "Panasonic";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step3->provider";
$voipfields[] = $field;
$field = array();
$field['displayname'] = "Upstream SIP Server";
$field['name'] = "upstream_sip_server";
$enablefields[] = "upstream_sip_server";
$field['type'] = "inputalias";
$field['description'] = "(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the <strong>remote</strong> PBX or SIP Trunk to prioritize. <br />NOTE: You can also use a Firewall Alias in this location.";
$field['message'] = "IP Address field is non-blank and doesn't look like an IP address.";
$field['bindstofield'] = "ezshaper->step3->address";
$voipfields[] = $field;
for ($i = 0; $i < $numberofconnections; $i++) {
$field = array();
$interface_friendly = $i+1;
$field['name'] = "Connection WAN #{$interface_friendly}";
$field['type'] = "listtopic";
$voipfields[] = $field;
$field = array();
$field['displayname'] = "Upload";
$field['name'] = "conn{$i}upload";
$enablefields[] = "conn{$i}upload";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step3->conn{$i}upload";
$field['combinefieldsbegin'] = "true";
$voipfields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "conn{$i}uploadspeed";
$enablefields[] = "conn{$i}uploadspeed";
$field['typehint'] = "Upload bandwidth guarantee for VOIP phone(s) on connection {$i}.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step3->conn{$i}uploadspeed";
$voipfields[] = $field;
}
for ($i = 0; $i < $numberoflocalinterfaces; $i++) {
$field = array();
$interface_friendly = $i+1;
$field['name'] = "Connection LAN #{$interface_friendly}";
$field['type'] = "listtopic";
$voipfields[] = $field;
$field = array();
$field['displayname'] = "Download";
$field['name'] = "local{$i}download";
$enablefields[] = "local{$i}download";
$field['type'] = "input";
$field['bindstofield'] = "ezshaper->step3->local{$i}download";
$field['combinefieldsbegin'] = "true";
$voipfields[] = $field;
$field = array();
$field['combinefieldsend'] = "true";
$field['dontdisplayname'] = "true";
$field['dontcombinecells'] = "true";
$field['name'] = "local{$i}downloadspeed";
$enablefields[] = "local{$i}downloadspeed";
$field['typehint'] = "Download bandwidth guarantee for VOIP phone(s) on connections.";
$field['type'] = "select";
$field['options']['option'] = array();
$opts = array();
$opts['value'] = "Kb";
$opts['name'] = "Kbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Mb";
$opts['name'] = "Mbit/s";
$field['options']['option'][] = $opts;
$opts = array();
$opts['value'] = "Gb";
$opts['name'] = "Gbit/s";
$field['options']['option'][] = $opts;
$field['bindstofield'] = "ezshaper->step3->local{$i}downloadspeed";
$voipfields[] = $field;
}
$field = array();
$field['name'] = "Next";
$field['type'] = "submit";
$voipfields[] = $field;
$voipfields[0]['enablefields'] = implode(",", $enablefields);
}
function step3_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
if (!$_POST['enable'])
return;
if($_POST['address']) {
if(!is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
$savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
$stepid--;
return;
}
}
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
for ($i = 0; $i < $steps; $i++) {
if ($config['ezshaper']['step2']["conn{$i}uploadscheduler"] == "PRIQ")
continue;
if (!is_numeric($_POST["conn{$i}upload"])) {
$savemsg = gettext("Upload bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
if ($_POST["conn{$i}uploadspeed"] == "%") {
if (intval($_POST["conn{$i}upload"]) > 80) {
$savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
} else {
$factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
$ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]);
$factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]);
$input_bw = $factor * floatval($_POST["conn{$i}upload"]);
if ((0.8 * $ifbw) < $input_bw) {
$savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
}
}
$localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
for ($i = 0; $i < $localint; $i++) {
if ($config['ezshaper']['step2']["local{$i}downloadscheduler"] == "PRIQ")
continue;
if (!is_numeric($_POST["local{$i}download"])) {
$savemsg = gettext("Download bandwidth of connection {$i} is not valid.");
$stepid--;
return;
}
if ($_POST["local{$i}downloadspeed"] == "%") {
if (intval($_POST["local{$i}download"]) > 80) {
$savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$i} higher than 80% of the connection.");
$stepid--;
return;
}
} else {
for ($j = 0; $j < $steps; $j++) {
$factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$j}downloadspeed"]);
$ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$j}download"]);
$factor = wizard_get_bandwidthtype_scale($_POST["local{$i}downloadspeed"]);
$input_bw = $factor * floatval($_POST["local{$i}download"]);
if ((0.8 * $ifbw) < $input_bw) {
$savemsg=gettext("You cannot set the VoIP download bandwidth on connection {$j} higher than 80% of the connection.");
$stepid--;
return;
}
}
}
}
for ($i = 0; $i < $localint; $i++) {
$config['ezshaper']['step3']["local{$i}download"] = $_POST["local{$i}download"];
$config['ezshaper']['step3']["local{$i}downloadspeed"] = $_POST["local{$i}downloadspeed"];
}
for ($i = 0; $i < $steps; $i++) {
$config['ezshaper']['step3']["conn{$i}upload"] = $_POST["conn{$i}upload"];
$config['ezshaper']['step3']["conn{$i}uploadspeed"] = $_POST["conn{$i}uploadspeed"];
}
}
function step4_stepsubmitphpaction() {
global $config;
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
if(!$_POST['bandwidth']) {
$savemsg="You need to specify a value for bandwidth!";
$stepid--;
return;
}
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="The posted value is not a valid bandwidth.";
$stepid--;
return;
}
if ($_POST['bandwidthspeed'] <> "%") {
$savemsg = gettext("Only percentage bandwidth specification is allowed.");
$stepid--;
return;
}
$bw = $_POST['bandwidth'];
if($bw > 15 || $bw < 2) {
$savemsg="Values should be between 2% and 15%!";
$stepid--;
return;
}
if($_POST['address'] <> "" && !is_ipaddroralias($_POST['address'])) {
/* item is not an ip or alias. error out */
$savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue.");
$stepid--;
}
}
}
function step5_stepsubmitphpaction() {
global $stepid, $savemsg;
if ( $_POST['enable'] ) {
if ($_POST['p2pcatchall']) {
if(!is_numeric($_POST['bandwidth'])) {
$savemsg="Posted value is not a valid bandwidth.";
$stepid--;
}
if ($_POST['bandwidthspeed'] <> "%") {
$savemsg = gettext("Only percentage bandwidth specification is allowed.");
$stepid--;
return;
}
$bw = $_POST['bandwidth'];
if($bw > 15 || $bw < 2) {
$savemsg="Values should be between 2% and 15%!";
$stepid--;
return;
}
}
}
}
function step8_stepsubmitphpaction() {
global $g, $config;
/* save the new configuration */
apply_all_choosen_items();
/* reset rrd queues */
system("rm -f /var/db/rrd/*queuedrops.rrd");
system("rm -f /var/db/rrd/*queues.rrd");
enable_rrd_graphing();
/* apply the new configuration to the system */
filter_configure();
/* And we're no longer dirty! */
clear_subsystem_dirty('shaper');
update_filter_reload_status("Initializing");
header("Location: status_filter_reload.php");
exit;
}
function apply_all_choosen_items() {
global $config, $g, $altq_list_queues, $gamesplist, $voiplist, $othersplist, $p2plist;
require_once("wizardapp.inc");
/*
* Wipe previous config.
* Doing it here makes sense since we can wipe the previous config only after
* the user decides to do so, finishing the wizard.
*/
if(isset($config['shaper']['queue']))
unset($config['shaper']['queue']);
/* XXX: This is ecnundant, because this should be handled by converter at startup. */
if(isset($config['shaper']['rule']))
unset($config['shaper']['rule']);
foreach ($config['filter']['rule'] as $key => $rule)
if ($rule['wizard'] == "yes")
unset($config['filter']['rule'][$key]);
/* restart the cached config */
unset($altq_list_queues);
$altq_list_queues = array();
$steps = intval($config['ezshaper']['step1']['numberofconnections']);
$interfacelist = array();
for ($i = 0; $i < $steps; $i++) {
$tmppath = array();
$altq =& new altq_root_queue();
$altq->SetInterface($config['ezshaper']['step2']["conn{$i}interface"]);
$interfacelist[] = $config['ezshaper']['step2']["conn{$i}interface"];
$altq->SetScheduler($config['ezshaper']['step2']["conn{$i}uploadscheduler"]);
$altq->SetBandwidth(floatval($config['ezshaper']['step2']["conn{$i}upload"]));
$altq->SetBwscale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
$altq->SetEnabled("on");
$altq_list_queues[$altq->GetQname()] =& $altq;
array_push($tmppath, $config['ezshaper']['step2']["conn{$i}interface"]);
$altq->SetLink($tmppath);
$altq->wconfig();
$sched = $config['ezshaper']['step2']["conn{$i}uploadscheduler"];
$voipbw =0;
$voipbwunit = "Kb";
$voip = false;
$penalty = false;
$penaltybw = 0;
$penaltybwunit = "Kb";
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
$p2pcatchbwunit = "%";
$games = false;
$otherpriority = false;
$remainbw = 0;
$factor = 0;
$upfactor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]);
$upbw = floatval($config['ezshaper']['step2']["conn{$i}upload"]) * $upfactor;
if ($config['ezshaper']['step3']['enable']) {
$voip = true;
$voipbw = $config['ezshaper']['step3']["conn{$i}upload"];
$voipbwunit = $config['ezshaper']['step3']["conn{$i}uploadspeed"];
if ($voipbwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($voipbwunit);
$remainbw += $voipbw * $factor;
}
if ($config['ezshaper']['step4']['enable']) {
$penalty = true;
$penaltybw = $config['ezshaper']['step4']['bandwidth'];
$penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
if ($penaltybwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($penaltybwunit);
$remainbw += $penaltybw * $factor;
} else {
$penalty = false;
$penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
$p2pcatchall = true;
$p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
$p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
if ($p2pcatchbwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
$remainbw += $p2pcatchbw * $factor;
} else {
$p2pcatchall = false;
$p2pcatchbw = 0;
}
} else {
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
}
if ($config['ezshaper']['step6']['enable']) {
$games = true;
} else {
$games = false;
}
if ($config['ezshaper']['step7']['enable']) {
$otherpriority = true;
} else {
$otherpriority = false;
}
$remainbw = round($remainbw / $upbw * 100, 2);
if (intval($remainbw) > 0 && intval($remainbw) > 30) {
$savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
exit;
} else {
$remainbw = 100 - $remainbw;
}
if ($sched != "PRIQ") {
if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qInternet";
//$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
$tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
}
else if ($sched == "HFSC") {
$tmpcf['linkshare3'] =
floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
$tmpcf['upperlimit3'] =
floatval($config['ezshaper']['step2']["conn{$i}upload"]) . $config['ezshaper']['step2']["conn{$i}uploadspeed"];
$tmpcf['upperlimit'] = "on";
$tmpcf['linkshare'] = "on";
$tmpcf['bandwidth'] = floatval($config['ezshaper']['step2']["conn{$i}upload"]);
$tmpcf['bandwidthtype'] = $config['ezshaper']['step2']["conn{$i}uploadspeed"];
}
array_push($tmppath, "qInternet");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
//array_pop($tmppath);
//echo "qInternet <br />";
//var_dump($input_errors);
$qtmp->wconfig();
$altq =& $qtmp;
}
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qACK";
$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2;
$tmpcf['bandwidthtype'] = "%";
}
else if ($sched == "HFSC") {
$lkbw = 0.20 * $remainbw;
$tmpcf['linkshare3'] = "{$lkbw}%";
$tmpcf['linkshare'] = "on";
$tmpcf['bandwidth'] = $lkbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qACK");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qACK <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
if ($p2pcatchall)
$tmpcf['name'] = "qOthersDefault";
else
$tmpcf['name'] = "qDefault";
$tmpcf['priority'] = 3;
$tmpcf['enabled'] = "on";
if (!$p2pcatchall)
$tmpcf['default'] = "on";
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, $tmpcf['name']);
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qDefault <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($p2p) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qP2P";
$tmpcf['priority'] = 1;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($p2pcatchall) {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
}
$tmpcf['default'] = "on";
} else {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpbw = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$tmpbw}%";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$tmpbw}%";
$tmpcf['bandwidth'] = $tmpbw;
$tmpcf['bandwidthtype'] = "%";
}
}
array_push($tmppath, "qP2P");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qP2P <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($voip) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qVoIP";
$tmpcf['priority'] = 7;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($voipbw > 0) {
$tmpcf['bandwidth'] = $voipbw;
$tmpcf['bandwidthtype'] = $voipbwunit;
} else {
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
} else if ($sched == "HFSC") {
if ($voipbw > 0) {
$tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
} else {
$voipbw = $remainbw * 0.20; /* 20% bandwidth */
$tmpcf['realtime3'] = "{$voipbw}%";
}
$tmpcf['realtime'] = "on";
$tmpcf['bandwidth'] = 32;
$tmpcf['bandwidthtype'] = "Kb";
}
array_push($tmppath, "qVoIP");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qVoIP <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($games) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qGames";
$tmpcf['priority'] = 5;
$tmpcf['enabled'] = "on";
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$gamesbw = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$gamesbw}%";
$tmpcf['bandwidth'] = "{$gamesbw}";
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qGames");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qGames <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($otherpriority) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersHigh";
$tmpcf['priority'] = 4;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$otherbw = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['linkshare3'] = "{$otherbw}%";
$tmpcf['bandwidth'] = $otherbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qOthersHigh");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qHigh <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersLow";
$tmpcf['priority'] = 2;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($penalty) {
$tmpcf['bandwidthtype'] = $penaltybwunit;
$tmpcf['bandwidth'] = $penaltybw;
} else {
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
} else if ($sched == "HFSC") {
if ($penalty) {
$tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
$tmpcf['bandwidth'] = $penaltybw;
$tmpcf['bandwidthtype'] = $penaltybwunit;
} else {
$lsbw = $remainbw * 0.05;
$tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
$tmpcf['bandwidth'] = $lsbw;
$tmpcf['bandwidthtype'] = "%";
}
$tmpcf['linkshare'] = "on";
}
array_push($tmppath, "qOthersLow");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qLow <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
array_pop($tmppath);
}
/* LAN bandwidth ----------------------------------------------------------------------------------------- */
$localint = intval($config['ezshaper']['step1']['numberoflocalinterfaces']);
$lanbw = 0;
for ($i = 0; $i < $steps; $i++) {
$down = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}downloadspeed"]);
$input_bw = floatval($config['ezshaper']['step2']["conn{$i}download"]) * $down;
$lanbw += $input_bw;
}
for ($i = 0; $i < $localint; $i++) {
$tmppath = array();
$altq =& new altq_root_queue();
$altq->SetInterface($config['ezshaper']['step2']["local{$i}interface"]);
$altq->SetScheduler($config['ezshaper']['step2']["local{$i}downloadscheduler"]);
//$altq->SetBandwidth($lanbw/1000);
//$altq->SetBwscale("Kb");
$altq->SetEnabled("on");
$altq_list_queues[$altq->GetQname()] =& $altq;
array_push($tmppath, $config['ezshaper']['step2']["local{$i}interface"]);
$altq->SetLink($tmppath);
//var_dump($input_errors);
$altq->wconfig();
$sched = $config['ezshaper']['step2']["local{$i}downloadscheduler"];
$voipbw =0;
$voipbwunit = "%";
$voip = false;
$penalty = false;
$penaltybw = 0;
$penaltybwunit = "%";
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
$games = false;
$otherpriority = false;
$remainbw = 0;
if ($config['ezshaper']['step3']['enable']) {
$voip = true;
$voipbw = $config['ezshaper']['step3']["local{$i}download"];
$voipbwunit = $config['ezshaper']['step3']["local{$i}downloadspeed"];
if ($sched != HFSC) {
if ($penaltybwunit == "%")
$factor = $lanbw/100;
else
$factor = wizard_get_bandwidthtype_scale($voipbwunit);
$remainbw += floatval($voipbw) * $factor;
} else
$remainbw += 32000; /* 32Kbit/s reserved for HFSC linksharing */
}
if ($config['ezshaper']['step4']['enable']) {
$penalty = true;
$penaltybw = $config['ezshaper']['step4']['bandwidth'];
$penaltybwunit = $config['ezshaper']['step4']['bandwidthunit'];
if ($penaltybwunit == "%")
$factor = $lanbw/100;
else
$factor = wizard_get_bandwidthtype_scale($penaltybwunit);
$remainbw += floatval($penaltybw) * $factor;
} else {
$penalty = false;
$penaltybw = 0;
}
if ($config['ezshaper']['step5']['enable']) {
$p2p = true;
if ($config['ezshaper']['step5']['p2pcatchall']) {
$p2pcatchall = true;
$p2pcatchbw = $config['ezshaper']['step5']['bandwidth'];
$p2pcatchbwunit = $config['ezshaper']['step5']['bandwidthunit'];
if ($p2pcatchbwunit == "%")
$factor = $upbw/100;
else
$factor = wizard_get_bandwidthtype_scale($p2pcatchbwunit);
$remainbw += floatval($p2pcatchbw) * $factor;
} else {
$p2pcatchall = false;
$p2pcatchbw = 0;
}
} else {
$p2p = false;
$p2pcatchall = false;
$p2pcatchbw = 0;
}
if ($config['ezshaper']['step6']['enable']) {
$games = true;
} else {
$games = false;
}
if ($config['ezshaper']['step7']['enable']) {
$otherpriority = true;
} else {
$otherpriority = false;
}
$remainbw = round($remainbw / $lanbw * 100, 2);
if (intval($remainbw) > 0 && intval($remainbw) > 40) {
$savemsg=gettext("Custom Bandwidths are greater than 30%. Please lower them for the wizard to continue.");
header("Location: wizard.php?xml=traffic_shaper_wizard_multi_all.xml&stepid=2&message={$savemsg}");
exit;
} else {
$remainbw = 100 - $remainbw;
}
if (!$p2pcatchall) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qLink";
$tmpcf['priority'] = 2;
$tmpcf['enabled'] = "on";
$tmpcf['default'] = "on";
$tmpcf['qlimit'] = 500;
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = 20; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['bandwidth'] = 20; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, $tmpcf['name']);
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qDefault <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($sched != "PRIQ") {
if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qInternet";
//$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['bandwidth'] = $lanbw/1000;
$tmpcf['bandwidthtype'] = "Kb";
}
else if ($sched == "HFSC") {
$tmpcf['linkshare3'] = $lanbw/1000 . "Kb";
$tmpcf['upperlimit3'] = $lanbw/1000 . "Kb";
$tmpcf['upperlimit'] = "on";
$tmpcf['linkshare'] = "on";
$tmpcf['bandwidth'] = $lanbw/1000;
$tmpcf['bandwidthtype'] = "Kb";
}
array_push($tmppath, "qInternet");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
//array_pop($tmppath);
//echo "qInternet <br />";
//var_dump($input_errors);
$qtmp->wconfig();
$altq =& $qtmp;
}
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qACK";
$tmpcf['priority'] = 6;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
If ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2;
$tmpcf['bandwidthtype'] = "%";
}
else if ($sched == "HFSC") {
$lkbw = 0.20 * $remainbw;
$tmpcf['linkshare3'] = "{$lkbw}%";
$tmpcf['linkshare'] = "on";
$tmpcf['bandwidth'] = $lkbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qACK");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qACK <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($p2p) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qP2P";
$tmpcf['priority'] = 1;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($p2pcatchall) {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$p2pcatchbw}{$p2pcatchbwunit}";
$tmpcf['bandwidth'] = $p2pcatchbw;
$tmpcf['bandwidthtype'] = $p2pcatchbwunit;
}
$tmpcf['default'] = "on";
$tmpcf['qlimit'] = 500;
} else {
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpbw = $remainbw * 0.05; /* 5% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$tmpbw}%";
$tmpcf['upperlimit'] = "on";
$tmpcf['upperlimit3'] = "{$tmpbw}%";
$tmpcf['bandwidth'] = $tmpbw;
$tmpcf['bandwidthtype'] = "%";
}
}
array_push($tmppath, "qP2P");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qP2P <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($voip) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qVoIP";
$tmpcf['priority'] = 7;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($voipbw > 0) {
$tmpcf['bandwidth'] = $voipbw;
$tmpcf['bandwidthtype'] = $voipbwunit;
} else {
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
}
} else if ($sched == "HFSC") {
if ($voipbw > 0) {
$tmpcf['realtime3'] = "{$voipbw}{$voipbwunit}";
} else {
$voipbw = $remainbw * 0.20; /* 20% bandwidth */
$tmpcf['realtime3'] = "{$voipbw}%";
}
$tmpcf['realtime'] = "on";
$tmpcf['bandwidth'] = 32;
$tmpcf['bandwidthtype'] = "Kb";
}
array_push($tmppath, "qVoIP");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qVoIP <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($games) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qGames";
$tmpcf['priority'] = 5;
$tmpcf['enabled'] = "on";
$tmpcf['ecn'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$gamesbw = $remainbw * 0.2; /* 20% bandwidth */
$tmpcf['linkshare'] = "on";
$tmpcf['linkshare3'] = "{$gamesbw}%";
$tmpcf['bandwidth'] = "{$gamesbw}";
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qGames");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qGames <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
if ($otherpriority) {
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersHigh";
$tmpcf['priority'] = 4;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
$tmpcf['bandwidth'] = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['bandwidthtype'] = "%";
} else if ($sched == "HFSC") {
$tmpcf['linkshare'] = "on";
$otherbw = $remainbw * 0.1; /* 10% bandwidth */
$tmpcf['linkshare3'] = "{$otherbw}%";
$tmpcf['bandwidth'] = $otherbw;
$tmpcf['bandwidthtype'] = "%";
}
array_push($tmppath, "qOthersHigh");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qHigh <br />";
//var_dump($input_errors);
$qtmp->wconfig();
if ($sched == "PRIQ")
$q =& new priq_queue();
else if ($sched == "CBQ")
$q =& new cbq_queue();
else if ($sched == "HFSC")
$q =& new hfsc_queue();
$tmpcf = array();
$tmpcf['name'] = "qOthersLow";
$tmpcf['priority'] = 3;
$tmpcf['ecn'] = "on";
$tmpcf['enabled'] = "on";
if ($sched == "CBQ") {
$tmpcf['borrow'] = "on";
if ($penalty) {
$tmpcf['bandwidth'] = $penaltybw;
$tmpcf['bandwidthtype'] = $penaltybwunit;
} else {
$tmpcf['bandwidthtype'] = "%";
$tmpcf['bandwidth'] = $remainbw * 0.05; /* 5% bandwidth */
}
} else if ($sched == "HFSC") {
if ($penalty) {
$tmpcf['linkshare3'] = "{$penaltybw}{$penaltybwunit}";
$tmpcf['bandwidth'] = $penaltybw;
$tmpcf['bandwidthtype'] = $penaltybwunit;
} else {
$lsbw = $remainbw * 0.05;
$tmpcf['linkshare3'] = "{$lsbw}%"; /* 5% bandwidth */
$tmpcf['bandwidth'] = $lsbw;
$tmpcf['bandwidthtype'] = "%";
}
$tmpcf['linkshare'] = "on";
}
array_push($tmppath, "qOthersLow");
$qtmp =& $altq->add_queue($q, $tmpcf, $tmppath, $input_errors);
array_pop($tmppath);
//echo "qLow <br />";
//var_dump($input_errors);
$qtmp->wconfig();
}
array_pop($tmppath);
}
/* End LAN bandwidth ------------------------------------------------------------------------------------- */
if (!is_array($config['filter']['rule']))
$config['filter']['rule'] = array();
$interfacelist = implode(",", $interfacelist);
/* Rules */
if ($penalty) {
if( is_ipaddr($config['ezshaper']['step4']['address']) || is_alias($config['ezshaper']['step4']['address'])) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['descr'] = gettext("Penalty Box");
$rule['defaultqueue'] = "qOthersLow";
$rule['source']['address'] = $config['ezshaper']['step4']['address'];
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
/* If user specifies an IP, we don't bother with providers */
if ($voip) {
if( is_ipaddr($config['ezshaper']['step3']['address']) || is_alias($config['ezshaper']['step3']['address'])) {
/* create VOIP rules */
$rule = array();
$rule['type'] = "match";
//$rule['interface'] = $interfacelist;
$rule['descr'] = gettext("Connections From Upstream SIP Server");
$rule['protocol'] = "udp";
$rule['defaultqueue'] = "qVoIP";
$rule['source']['address'] = $config['ezshaper']['step3']['address'];
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
$rule = array();
$rule['type'] = "match";
//$rule['interface'] = $interfacelist;
$rule['descr'] = gettext("Connections To Upstream SIP Server");
$rule['protocol'] = "udp";
$rule['defaultqueue'] = "qVoIP";
$rule['source']['any'] = TRUE;
$rule['destination']['address'] = $config['ezshaper']['step3']['address'];
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
} elseif( $config['ezshaper']['step3']['provider'] == "Generic" ) {
/* create VOIP rules */
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['descr'] = "DiffServ/Lowdelay/Upload";
$rule['protocol'] = "udp";
$rule['source']['any'] = TRUE;
$rule['defaultqueue'] = "qVoIP";
$rule['destination']['any'] = TRUE;
$rule['iptos'] = "lowdelay";
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
} else {
/* loop through voiplist[] */
foreach ($voiplist[$config['ezshaper']['step3']['provider']] as $voip) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['defaultqueue'] = 'qVoIP';
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['descr'] = "m_voip {$voip[0]} outbound";
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['destination']['port'] = $voip[2]."-".$voip[3];
if($voip[1] != '')
$rule['protocol'] = $voip[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
/* loop through p2plist[] */
if ($p2p) {
foreach($config['ezshaper']['step5'] as $key => $val) {
if (!is_array($p2plist[$key]))
continue;
foreach ($p2plist[$key] as $p2pclient) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['defaultqueue'] = 'qP2P';
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['descr'] = "m_P2P {$p2pclient[0]} outbound";
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['destination']['port'] = $p2pclient[2]."-".$p2pclient[3];
if($p2pclient[1] != '')
$rule['protocol'] = $p2pclient[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
/* loop through gamesplist[] */
if ($games) {
foreach($config['ezshaper']['step6'] as $key => $val) {
if (!is_array($gamesplist[$key]))
continue;
foreach ($gamesplist[$key] as $Gameclient) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
$rule['defaultqueue'] = 'qGames';
if ($Gameclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['descr'] = "m_Game {$Gameclient[0]} outbound";
$rule['destination']['port'] = $Gameclient[2]."-".$Gameclient[3];
if($Gameclient[1] != '')
$rule['protocol'] = $Gameclient[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
/* loop through othersplist[] */
if ($otherpriority) {
foreach($config['ezshaper']['step7'] as $key => $val) {
if (!is_array($othersplist[$key]))
continue;
foreach ($othersplist[$key] as $otherclient) {
$rule = array();
$rule['type'] = "match";
$rule['interface'] = $interfacelist;
switch ($val) {
case "H":
$rule['defaultqueue'] = 'qOthersHigh'; /* posted value H or L */
if ($otherclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
$loop = 0;
break;
case "L":
$rule['defaultqueue'] = 'qOthersLow'; /* posted value H or L */
if ($otherclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
$loop = 0;
break;
case "D":
if ($p2pcatchall) {
$loop = 0;
$rule['defaultqueue'] = 'qOthersDefault';
if ($otherclient[1] == "tcp")
$rule['ackqueue'] = 'qACK';
} else
$loop = 1; /* It automitaclly goes to default queue */
break;
default:
$loop = 1;
}
if (!$loop) {
$rule['source']['any'] = TRUE;
$rule['destination']['any'] = TRUE;
$rule['floating'] = "yes";
$rule['wizard'] = "yes";
$rule['enabled'] = "on";
$rule['descr'] = "m_Other {$otherclient[0]} outbound";
if($otherclient[2] or $otherclient[3]) {
$rule['destination']['port'] = $otherclient[2]."-".$otherclient[3];
}
if($otherclient[1] != '')
$rule['protocol'] = $otherclient[1];
$rule['created'] = make_config_revision_entry(null, gettext("Traffic Shaper Wizard"));
$config['filter']['rule'][] = $rule;
}
}
}
}
write_config();
}
function wizard_get_bandwidthtype_scale($type = "b") {
switch ($type) {
case "Gb":
$factor = 1024 * 1024 * 1024;
break;
case "Mb":
$factor = 1024 * 1024;
break;
case "Kb":
$factor = 1024;
break;
case "b":
default:
$factor = 1;
break;
}
return intval($factor);
}
?>
<?xml version="1.0"?>
<opnsensewizard>
<copyright><![CDATA[
/*
Copyright (C) Deciso B.V.
Copyright (C) 2005 Bill Marquette - bill.marquette@gmail.com.
Copyright (C) 2008-2010 Ermal Luci
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/]]></copyright>
<totalsteps>8</totalsteps>
<step>
<id>1</id>
<title>OPNsense Traffic Shaper Wizard</title>
<disableheader>true</disableheader>
<description>This wizard will guide you through setting up the OPNsense traffic shaper.
Please be aware that Custom Bandwidths should not exceed 30% of the interface/link bandwidth. Keep this in mind during the wizard.
</description>
<fields>
<field>
<type>listtopic</type>
<name>Traffic shaper Wizard</name>
</field>
<field>
<displayname>Enter number of WAN type connections</displayname>
<name>numberofconnections</name>
<type>input</type>
<validate>^[0-9]+$</validate>
<description>Number of connections you have</description>
<bindstofield>ezshaper->step1->numberofconnections</bindstofield>
</field>
<field>
<displayname>Enter number of LAN type interfaces</displayname>
<name>numberoflocalinterfaces</name>
<type>input</type>
<validate>^[0-9]+$</validate>
<description>Number of local interfaces you have</description>
<bindstofield>ezshaper->step1->numberoflocalinterfaces</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepbeforeformdisplay>step1_stepbeforeformdisplay();</stepbeforeformdisplay>
<stepsubmitphpaction>step1_submitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
<step>
<id>2</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Shaper configuration</description>
<javascriptafterformdisplay/>
<stepbeforeformdisplay>step2_stepbeforeformdisplay();</stepbeforeformdisplay>
<stepsubmitphpaction>step2_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
<fields>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
</step>
<step>
<id>3</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Voice over IP</description>
<fields>
<field>
<name>Enable</name>
<type>checkbox</type>
<typehint>Prioritize Voice over IP traffic</typehint>
<description>This will raise the priority of VOIP traffic above all other traffic.</description>
<bindstofield>ezshaper-&gt;step3-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>VOIP specific settings</name>
<type>listtopic</type>
</field>
<field>
<name>Provider</name>
<type>select</type>
<description>Choose Generic if your provider isn't listed.</description>
<bindstofield>ezshaper-&gt;step3-&gt;provider</bindstofield>
<options>
<option>
<name>Generic (lowdelay)</name>
<value>Generic</value>
</option>
<option>
<name>VoicePulse</name>
<value>VoicePulse</value>
</option>
<option>
<name>Asterisk/Vonage</name>
<value>Asterisk</value>
</option>
<option>
<name>PanasonicTDA</name>
<value>Panasonic</value>
</option>
</options>
</field>
<field>
<name>Upstream SIP Server</name>
<type>inputalias</type>
<description>(Optional) If this is chosen, the provider field will be overridden. This allows you to provide the IP address of the &lt;strong&gt;remote&lt;/strong&gt; PBX or SIP Trunk to prioritize. &lt;br /&gt;NOTE: You can also use a Firewall Alias in this location.</description>
<bindstofield>ezshaper-&gt;step3-&gt;address</bindstofield>
<message>IP Address field is non-blank and doesn't look like an IP address.</message>
</field>
<field>
<name>Bandwidth</name>
<type>input</type>
<validate>^[0-9]*$</validate>
<typehint>Total bandwidth in percentage(%)(should be between 5 and 40) guarantee for VOIP traffic.</typehint>
<bindstofield>ezshaper-&gt;step3-&gt;bandwidth</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepbeforeformdisplay>step3_stepbeforeformdisplay();</stepbeforeformdisplay>
<stepsubmitphpaction>step3_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
<step>
<id>4</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Penalty Box</description>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<fields>
<field>
<donotdisable>true</donotdisable>
<name>Enable</name>
<type>checkbox</type>
<typehint>Penalize IP or Alias</typehint>
<description>This will lower the priority of traffic from this IP or alias.</description>
<enablefields>Address,Bandwidth,BandwidthSpeed</enablefields>
<bindstofield>ezshaper-&gt;step4-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>PenaltyBox specific settings</name>
<type>listtopic</type>
</field>
<field>
<name>Address</name>
<type>inputalias</type>
<description>This allows you to just provide the IP address of the computer(s) or Penalize. NOTE: You can also use a Firewall Alias in this location.</description>
<bindstofield>ezshaper-&gt;step4-&gt;address</bindstofield>
<message>IP Address field is non-blank and doesn't look like an IP address.</message>
</field>
<field>
<name>Bandwidth</name>
<type>input</type>
<validate>^[0-9]*$</validate>
<message>Speed must be numerical.</message>
<bindstofield>ezshaper-&gt;step4-&gt;bandwidth</bindstofield>
<combinefieldsbegin>true</combinefieldsbegin>
</field>
<field>
<combinefieldsend>true</combinefieldsend>
<dontdisplayname>true</dontdisplayname>
<dontcombinecells>true</dontcombinecells>
<donotdisable>true</donotdisable>
<name>BandwidthSpeed</name>
<description>The limit you want to apply.</description>
<type>select</type>
<options>
<option>
<name>%</name>
<value>%</value>
</option>
<option>
<name>bit/s</name>
<value>b</value>
</option>
<option>
<name>Kilobit/s</name>
<value>Kb</value>
</option>
<option>
<name>Megabit/s</name>
<value>Mb</value>
</option>
<option>
<name>Gigabit/s</name>
<value>Gb</value>
</option>
</options>
<bindstofield>ezshaper->step4->bandwidthunit</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepsubmitphpaction>step4_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
<step>
<id>5</id>
<title>OPNsense Traffic Shaper Wizard</title>
<description>Peer to Peer networking</description>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<fields>
<field>
<donotdisable>true</donotdisable>
<name>Enable</name>
<type>checkbox</type>
<typehint>Lower priority of Peer-to-Peer traffic</typehint>
<description>This will lower the priority of P2P traffic below all other traffic. Please check the items that you would like to prioritize lower than normal traffic.</description>
<enablefields>p2pCatchAll,Bandwidth,BandwidthSpeed,Aimster,BitTorrent,BuddyShare,CuteMX,DCplusplus,dcc,DirectConnect,DirectFileExpress,EDonkey2000,FastTrack,Gnutella,grouper,hotComm,HotlineConnect,iMesh,Napster,OpenNap,Scour,Shareaza,SongSpy,WinMX</enablefields>
<bindstofield>ezshaper-&gt;step5-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>p2p Catch all</name>
<type>listtopic</type>
</field>
<field>
<name>p2pCatchAll</name>
<type>checkbox</type>
<typehint>When enabled, all uncategorized traffic is fed to the p2p queue.</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;p2pcatchall</bindstofield>
</field>
<field>
<name>Bandwidth</name>
<type>input</type>
<validate>^[0-9]*$</validate>
<message>Speed must be numerical.</message>
<bindstofield>ezshaper-&gt;step5-&gt;bandwidth</bindstofield>
<combinefieldsbegin>true</combinefieldsbegin>
</field>
<field>
<combinefieldsend>true</combinefieldsend>
<dontdisplayname>true</dontdisplayname>
<dontcombinecells>true</dontcombinecells>
<donotdisable>true</donotdisable>
<name>BandwidthSpeed</name>
<description>The limit you want to apply.</description>
<type>select</type>
<options>
<option>
<name>%</name>
<value>%</value>
</option>
<option>
<name>bit/s</name>
<value>b</value>
</option>
<option>
<name>Kilobit/s</name>
<value>Kb</value>
</option>
<option>
<name>Megabit/s</name>
<value>Mb</value>
</option>
<option>
<name>Gigabit/s</name>
<value>Gb</value>
</option>
</options>
<bindstofield>ezshaper->step5->bandwidthunit</bindstofield>
</field>
<field>
<name>Enable/Disable specific P2P protocols</name>
<type>listtopic</type>
</field>
<field>
<name>Aimster</name>
<type>checkbox</type>
<typehint>Aimster and other P2P using the Aimster protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;aimster</bindstofield>
</field>
<field>
<name>BitTorrent</name>
<type>checkbox</type>
<typehint>Bittorrent and other P2P using the Torrent protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;bittorrent</bindstofield>
</field>
<field>
<name>BuddyShare</name>
<type>checkbox</type>
<typehint>BuddyShare and other P2P using the BuddyShare protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;buddyshare</bindstofield>
</field>
<field>
<name>CuteMX</name>
<type>checkbox</type>
<typehint>CuteMX and other P2P using the CuteMX protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;cutemx</bindstofield>
</field>
<field>
<name>DCplusplus</name>
<type>checkbox</type>
<typehint>DC++ and other P2P using the DC++ protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;dcplusplus</bindstofield>
</field>
<field>
<name>DCC</name>
<type>checkbox</type>
<typehint>irc DCC file transfers</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;dcc</bindstofield>
</field>
<field>
<name>DirectConnect</name>
<type>checkbox</type>
<typehint>DirectConnect and other P2P using the DirectConnect protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;directconnect</bindstofield>
</field>
<field>
<name>DirectFileExpress</name>
<type>checkbox</type>
<typehint>DirectFileExpress and other P2P using the DirectFileExpress protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;directfileexpress</bindstofield>
</field>
<field>
<name>eDonkey2000</name>
<type>checkbox</type>
<typehint>eDonkey and other P2P using the eDonkey protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;edonkey2000</bindstofield>
</field>
<field>
<name>FastTrack</name>
<type>checkbox</type>
<typehint>FastTrack and other P2P using the FastTrack protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;fasttrack</bindstofield>
</field>
<field>
<name>Gnutella</name>
<type>checkbox</type>
<typehint>Gnutella and other P2P using the Gnutella protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;gnutella</bindstofield>
</field>
<field>
<name>grouper</name>
<type>checkbox</type>
<typehint>grouper and other P2P using the grouper protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;grouper</bindstofield>
</field>
<field>
<name>hotComm</name>
<type>checkbox</type>
<typehint>hotComm and other P2P using the hotComm protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;hotcomm</bindstofield>
</field>
<field>
<name>HotlineConnect</name>
<type>checkbox</type>
<typehint>HotlineConnect and other P2P using the HotlineConnect protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;hotlineconnect</bindstofield>
</field>
<field>
<name>iMesh</name>
<type>checkbox</type>
<typehint>iMesh and other P2P using the iMesh protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;imesh</bindstofield>
</field>
<field>
<name>Napster</name>
<type>checkbox</type>
<typehint>Napster and other P2P using the Napster protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;napster</bindstofield>
</field>
<field>
<name>OpenNap</name>
<type>checkbox</type>
<typehint>OpenNap and other P2P using the OpenNap protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;opennap</bindstofield>
</field>
<field>
<name>Scour</name>
<type>checkbox</type>
<typehint>Scour and other P2P using the Scour protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;scour</bindstofield>
</field>
<field>
<name>Shareaza</name>
<type>checkbox</type>
<typehint>Shareaza and other P2P using the Shareaza protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;shareaza</bindstofield>
</field>
<field>
<name>SongSpy</name>
<type>checkbox</type>
<typehint>SongSpy and other P2P using the SongSpy protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;songspy</bindstofield>
</field>
<field>
<name>WinMX</name>
<type>checkbox</type>
<typehint>WinMX and other P2P using the WinMX protocol and ports</typehint>
<bindstofield>ezshaper-&gt;step5-&gt;winmx</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<stepsubmitphpaction>step5_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
<step>
<id>6</id>
<title>OPNsense Traffic Shaper Wizard</title>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<description>Network Games</description>
<fields>
<field>
<name>Enable</name>
<type>checkbox</type>
<typehint>Prioritize network gaming traffic</typehint>
<description>This will raise the priority of gaming traffic to higher than most traffic.</description>
<enablefields>BattleNET,EAOrigin,GameForWindowsLive,PlayStationConsoles,Steam,WiiConsoles,XboxConsoles,ARMA2,ARMA3,Battlefield2,Battlefield3,BattlefieldBC2,Borderlands,CallOfDuty,Counterstrike,Crysis2,Crysis3,DeltaForce,DeadSpace2,DeadSpace3,Dirt3,DOOM3,DragonAge2,EmpireEarth,EveOnline,Everquest,Everquest2,FarCry,FarCry2,FarCry3,GunZOnline,HalfLife,LeagueofLegends,Lineage2,MassEffect3,MechwarriorOnline,Minecraft,OperationFlashpointDR,PlanetSide,PlanetSide2,QuakeIII,QuakeIV,StarWarsTOR,TigerWoods2004PS2,TribesAscend,UnrealTournament,WolfensteinEnemyTerritory,WorldOfWarcraft</enablefields>
<donotdisable>true</donotdisable>
<bindstofield>ezshaper-&gt;step6-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>Enable/Disable specific game consoles and services</name>
<type>listtopic</type>
</field>
<field>
<name>BattleNET</name>
<type>checkbox</type>
<typehint>Battle.net - Virtually every game from Blizzard publishing should match this. This includes the following game series: Starcraft, Diablo, Warcraft. Guild Wars also uses this port.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlenet</bindstofield>
</field>
<field>
<name>EAOrigin</name>
<type>checkbox</type>
<typehint>EA Origin Client - Some PC games by EA use this.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;eaorigin</bindstofield>
</field>
<field>
<name>GameForWindowsLive</name>
<type>checkbox</type>
<typehint>Games for Windows Live</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;gamesforwindowslive</bindstofield>
</field>
<field>
<name>PlayStationConsoles</name>
<type>checkbox</type>
<typehint>PlayStation Consoles - This should cover all ports required for the Playstation 4, Playstation, PS Vita</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;playstationconsoles</bindstofield>
</field>
<field>
<name>Steam</name>
<type>checkbox</type>
<typehint>Steam Game Client (Includes: America's Army 3, Counter-Strike: Source, Counter-Strike: Global Offensive, Half-Life 2, COD: Black Ops Series, Borderlands 2, Natural Selection 2, Left 4 Dead Series, Portal 2 and many other games on the Steam)</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;steam</bindstofield>
</field>
<field>
<name>WiiConsoles</name>
<type>checkbox</type>
<typehint>Wii Consoles - Wii, Wii U, DS and 3DS</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;wiiconsoles</bindstofield>
</field>
<field>
<name>XboxConsoles</name>
<type>checkbox</type>
<typehint>Xbox Consoles - Xbox 360 and Xbox One</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;xboxconsoles</bindstofield>
</field>
<field>
<name>Enable/Disable specific games</name>
<type>listtopic</type>
</field>
<field>
<name>ARMA2</name>
<type>checkbox</type>
<typehint>ARMA 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;arma2</bindstofield>
</field>
<field>
<name>ARMA3</name>
<type>checkbox</type>
<typehint>ARMA 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;arma3</bindstofield>
</field>
<field>
<name>Battlefield2</name>
<type>checkbox</type>
<typehint>Battlefield 2 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlefield2</bindstofield>
</field>
<field>
<name>Battlefield3</name>
<type>checkbox</type>
<typehint>Battlefield 3 and 4 - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlefield3</bindstofield>
</field>
<field>
<name>BattlefieldBC2</name>
<type>checkbox</type>
<typehint>Battlefield: Bad Company 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;battlefieldbc2</bindstofield>
</field>
<field>
<name>Borderlands</name>
<type>checkbox</type>
<typehint>Borderlands</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;borderlands</bindstofield>
</field>
<field>
<name>CallOfDuty</name>
<type>checkbox</type>
<typehint>Call Of Duty (United Offensive)</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;callofduty</bindstofield>
</field>
<field>
<name>Counterstrike</name>
<type>checkbox</type>
<typehint>Counterstrike. The ultimate 1st person shooter.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;counterstrike</bindstofield>
</field>
<field>
<name>Crysis2</name>
<type>checkbox</type>
<typehint>Crysis 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;crysis2</bindstofield>
</field>
<field>
<name>Crysis3</name>
<type>checkbox</type>
<typehint>Crysis 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;crysis3</bindstofield>
</field>
<field>
<name>DeadSpace2</name>
<type>checkbox</type>
<typehint>Dead Space2 - this game uses a HUGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;deadspace2</bindstofield>
</field>
<field>
<name>DeadSpace3</name>
<type>checkbox</type>
<typehint>Dead Space 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;deadspace3</bindstofield>
</field>
<field>
<name>DeltaForce</name>
<type>checkbox</type>
<typehint>Delta Force</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;deltaforce</bindstofield>
</field>
<field>
<name>Dirt3</name>
<type>checkbox</type>
<typehint>Dirt 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;dirt3</bindstofield>
</field>
<field>
<name>DOOM3</name>
<type>checkbox</type>
<typehint>DOOM3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;doom3</bindstofield>
</field>
<field>
<name>DragonAge2</name>
<type>checkbox</type>
<typehint>Dragon Age 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;dragonage2</bindstofield>
</field>
<field>
<name>EmpireEarth</name>
<type>checkbox</type>
<typehint>Empire Earth</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;empireearth</bindstofield>
</field>
<field>
<name>EveOnline</name>
<type>checkbox</type>
<typehint>EVE Online</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;eveonline</bindstofield>
</field>
<field>
<name>Everquest</name>
<type>checkbox</type>
<typehint>Everquest - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;everquest</bindstofield>
</field>
<field>
<name>Everquest2</name>
<type>checkbox</type>
<typehint>Everquest II</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;everquest2</bindstofield>
</field>
<field>
<name>FarCry</name>
<type>checkbox</type>
<typehint>Far Cry</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;farcry</bindstofield>
</field>
<field>
<name>FarCry2</name>
<type>checkbox</type>
<typehint>Far Cry 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;farcry2</bindstofield>
</field>
<field>
<name>FarCry3</name>
<type>checkbox</type>
<typehint>Far Cry 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;farcry3</bindstofield>
</field>
<field>
<name>GunZOnline</name>
<type>checkbox</type>
<typehint>GunZ Online</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;gunzonline</bindstofield>
</field>
<field>
<name>HalfLife</name>
<type>checkbox</type>
<typehint>Half-Life</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;halflife</bindstofield>
</field>
<field>
<name>LeagueofLegends</name>
<type>checkbox</type>
<typehint>League of Legends - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;leagueoflegends</bindstofield>
</field>
<field>
<name>Lineage2</name>
<type>checkbox</type>
<typehint>Lineage II</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;lineage2</bindstofield>
</field>
<field>
<name>MassEffect3</name>
<type>checkbox</type>
<typehint>Mass Effect 3</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;masseffect3</bindstofield>
</field>
<field>
<name>MechwarriorOnline</name>
<type>checkbox</type>
<typehint>MechWarrior: Online - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;mechwarrioronline</bindstofield>
</field>
<field>
<name>Minecraft</name>
<type>checkbox</type>
<typehint>Minecraft</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;minecraft</bindstofield>
</field>
<field>
<name>PlanetSide</name>
<type>checkbox</type>
<typehint>PlanetSide</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;planetside</bindstofield>
</field>
<field>
<name>PlanetSide2</name>
<type>checkbox</type>
<typehint>PlanetSide 2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;planetside2</bindstofield>
</field>
<field>
<name>OperationFlashpointDR</name>
<type>checkbox</type>
<typehint>Operation Flashpoint: Dragon Rising</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;operationflashpoint-dr</bindstofield>
</field>
<field>
<name>QuakeIII</name>
<type>checkbox</type>
<typehint>Quake III</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;quakeiii</bindstofield>
</field>
<field>
<name>QuakeIV</name>
<type>checkbox</type>
<typehint>Quake IV</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;quakeiv</bindstofield>
</field>
<field>
<name>StarWarsTOR</name>
<type>checkbox</type>
<typehint>StarWars: The Old Republic - this game uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;starwarstor</bindstofield>
</field>
<field>
<name>TigerWoods2004PS2</name>
<type>checkbox</type>
<typehint>Tiger Woods 2004 for PS2</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;tigerwoods2004ps2</bindstofield>
</field>
<field>
<name>TribesAscend</name>
<type>checkbox</type>
<typehint>Tribes Ascend</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;tribesascend</bindstofield>
</field>
<field>
<name>UnrealTournament</name>
<type>checkbox</type>
<typehint>Unreal Tournament Series</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;unrealtournament</bindstofield>
</field>
<field>
<name>WolfensteinEnemyTerritory</name>
<type>checkbox</type>
<typehint>Wolfenstein Enemy Territory</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;wolfet</bindstofield>
</field>
<field>
<name>WorldOfWarcraft</name>
<type>checkbox</type>
<typehint>World of Warcraft</typehint>
<bindstofield>ezshaper-&gt;step6-&gt;wow</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
<step>
<id>7</id>
<title>OPNsense Traffic Shaper Wizard</title>
<disableallfieldsbydefault>true</disableallfieldsbydefault>
<description>Raise or lower other Applications</description>
<fields>
<field>
<name>Enable</name>
<type>checkbox</type>
<typehint>Other networking protocols</typehint>
<description>This will help raise or lower the priority of other protocols higher than most traffic.</description>
<enablefields>AppleRemoteDesktop,MSRDP,PCAnywhere,VNC,AIM,Facetime,GoogleHangouts,ICQ,IRC,Jabber,MSN,TeamSpeak,TeamSpeak3,Ventrilo,PPTP,IPSEC,iTunesRadio,StreamingMP3,RTSP,HTTP,IMAP,LotusNotes,POP3,SMTP,BattleNETDownloader,SteamDownloader,APNS,AppleMobileSync,CrashPlan,CVSUP,DNS,GIT,HBCI,ICMP,MySqlServer,NNTP,Slingbox,SMB,SNMP,Subversion</enablefields>
<donotdisable>true</donotdisable>
<bindstofield>ezshaper-&gt;step7-&gt;enable</bindstofield>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
<field>
<name>Remote Service / Terminal emulation</name>
<type>listtopic</type>
</field>
<field>
<name>AppleRemoteDesktop</name>
<bindstofield>ezshaper-&gt;step7-&gt;appleremotedesktop</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Apple Remote Desktop</typehint>
</field>
<field>
<name>MSRDP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;msrdp</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Microsoft Remote Desktop Protocol</typehint>
</field>
<field>
<name>PCAnywhere</name>
<bindstofield>ezshaper-&gt;step7-&gt;pcanywhere</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Symantec PC Anywhere</typehint>
</field>
<field>
<name>VNC</name>
<bindstofield>ezshaper-&gt;step7-&gt;vnc</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Virtual Network Computing</typehint>
</field>
<field>
<name>Messengers</name>
<type>listtopic</type>
</field>
<field>
<name>AIM</name>
<bindstofield>ezshaper-&gt;step7-&gt;aolinstantmessenger</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>AOL Instant Messenger</typehint>
</field>
<field>
<name>Facetime</name>
<bindstofield>ezshaper-&gt;step7-&gt;facetime</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Facetime</typehint>
</field>
<field>
<name>ICQ</name>
<bindstofield>ezshaper-&gt;step7-&gt;icq</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>ICQ</typehint>
</field>
<field>
<name>IRC</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;irc</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Internet Relay Chat</typehint>
</field>
<field>
<name>Jabber</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;jabber</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Jabber instant messanger</typehint>
</field>
<field>
<name>GoogleHangouts</name>
<bindstofield>ezshaper-&gt;step7-&gt;googlehangouts</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Google Hangouts</typehint>
</field>
<field>
<name>MSN</name>
<bindstofield>ezshaper-&gt;step7-&gt;msnmessenger</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>MSN Messenger</typehint>
</field>
<field>
<name>Teamspeak</name>
<bindstofield>ezshaper-&gt;step7-&gt;teamspeak</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>TeamSpeak</typehint>
</field>
<field>
<name>Teamspeak3</name>
<bindstofield>ezshaper-&gt;step7-&gt;teamspeak3</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>TeamSpeak 3</typehint>
</field>
<field>
<name>Ventrilo</name>
<bindstofield>ezshaper-&gt;step7-&gt;ventrilo</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Ventrilo</typehint>
</field>
<field>
<name>VPN</name>
<type>listtopic</type>
</field>
<field>
<name>PPTP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;pptp</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Microsoft Point to Point tunneling protocol</typehint>
</field>
<field>
<name>IPSEC</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;ipsec</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>IPSEC VPN traffic</typehint>
</field>
<field>
<name>Multimedia/Streaming</name>
<type>listtopic</type>
</field>
<field>
<name>iTunesRadio</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;itunesradio</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>iTunes Radio - this rule uses a LARGE port range, be aware that you may need to manually rearrange the resulting rules to correctly prioritize other traffic.</typehint>
</field>
<field>
<name>StreamingMP3</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;streamingmp3</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Streaming Media</typehint>
</field>
<field>
<name>RTSP</name>
<bindstofield>ezshaper-&gt;step7-&gt;rtsp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>RealTime streaming protocol</typehint>
</field>
<field>
<name>Web</name>
<type>listtopic</type>
</field>
<field>
<name>HTTP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;http</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>HTTP and HTTPS aka Web Traffic</typehint>
</field>
<field>
<name>Mail</name>
<type>listtopic</type>
</field>
<field>
<name>SMTP</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;smtp</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Mail Protocol</typehint>
</field>
<field>
<name>POP3</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;pop3</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>POP3 Protocol</typehint>
</field>
<field>
<name>IMAP</name>
<bindstofield>ezshaper-&gt;step7-&gt;imap</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>IMAP Protocol</typehint>
</field>
<field>
<name>LotusNotes</name>
<bindstofield>ezshaper-&gt;step7-&gt;lotusnotes</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Lotus Notes</typehint>
</field>
<field>
<name>Game Downloader</name>
<type>listtopic</type>
</field>
<field>
<name>BattleNetDownloader</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;battlenetdownloader</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Battle.NET Downloader</typehint>
</field>
<field>
<name>SteamDownloader</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;steamdownloader</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Steam Downloader</typehint>
</field>
<field>
<name>Miscellaneous</name>
<type>listtopic</type>
</field>
<field>
<name>APNS</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;apns</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Apple Push Notification Service</typehint>
</field>
<field>
<name>AppleMobileSync</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;applemobilesync</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Apple Mobile Sync</typehint>
</field>
<field>
<name>CrashPlan</name>
<bindstofield>ezshaper-&gt;step7-&gt;crashplan</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>CrashPlan</typehint>
</field>
<field>
<name>CVSUP</name>
<bindstofield>ezshaper-&gt;step7-&gt;cvsup</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>CVSUP</typehint>
</field>
<field>
<name>DNS</name>
<type>select</type>
<bindstofield>ezshaper-&gt;step7-&gt;dns</bindstofield>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Domain Name Services</typehint>
</field>
<field>
<name>Git</name>
<bindstofield>ezshaper-&gt;step7-&gt;git</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Git Server</typehint>
</field>
<field>
<name>HBCI</name>
<bindstofield>ezshaper-&gt;step7-&gt;hbci</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>HBCI</typehint>
</field>
<field>
<name>ICMP</name>
<bindstofield>ezshaper-&gt;step7-&gt;icmp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>ICMP Protocol</typehint>
</field>
<field>
<name>SMB</name>
<bindstofield>ezshaper-&gt;step7-&gt;smb</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Microsoft SMB Protocol and friends</typehint>
</field>
<field>
<name>SNMP</name>
<bindstofield>ezshaper-&gt;step7-&gt;snmp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Simple Network Management Protocol</typehint>
</field>
<field>
<name>MySQLServer</name>
<bindstofield>ezshaper-&gt;step7-&gt;mysqlserver</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>MySQL Server</typehint>
</field>
<field>
<name>NNTP</name>
<bindstofield>ezshaper-&gt;step7-&gt;nntp</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Internet News</typehint>
</field>
<field>
<name>Slingbox</name>
<bindstofield>ezshaper-&gt;step7-&gt;slingbox</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Slingbox</typehint>
</field>
<field>
<name>Subversion</name>
<bindstofield>ezshaper-&gt;step7-&gt;subversion</bindstofield>
<type>select</type>
<options>
<option>
<name>Default priority</name>
<value>D</value>
</option>
<option>
<name>Higher priority</name>
<value>H</value>
</option>
<option>
<name>Lower priority</name>
<value>L</value>
</option>
</options>
<typehint>Subversion Server</typehint>
</field>
<field>
<name>Next</name>
<type>submit</type>
</field>
</fields>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
<step>
<id>8</id>
<title>OPNsense Traffic Shaper Wizard</title>
<field>
<name>Reload profile notice</name>
<type>listtopic</type>
</field>
<description> After pressing Finish the system will load the new profile.&lt;br/&gt; Please note that this may take a moment.&lt;br/&gt; Also note that the traffic shaper is stateful meaning that only new connections will be shaped.&lt;br/&gt; If this is an issue please reset the state table after loading the profile.&lt;br/&gt;</description>
<fields>
<field>
<name>Finish</name>
<type>submit</type>
</field>
</fields>
<stepsubmitphpaction>step8_stepsubmitphpaction();</stepsubmitphpaction>
<includefile>/usr/local/www/wizards/traffic_shaper_wizard_multi_all.inc</includefile>
</step>
</opnsensewizard>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment