summaryrefslogtreecommitdiffstats
path: root/src/usr/local/www/interfaces_groups_edit.php
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2015-08-26 15:12:02 -0300
committerRenato Botelho <renato@netgate.com>2015-08-26 15:12:02 -0300
commit03b19a93f4d8d870507ee96121cee4acd748dd2a (patch)
tree71a34e9e7e73d13de21cb4ad831799fb10c30df4 /src/usr/local/www/interfaces_groups_edit.php
parent7f410a121522c5d0e2660256ae50c1fde1df3645 (diff)
parent30ce58ac1ea27b758d5112cb5a3b190c9760f010 (diff)
downloadpfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.zip
pfsense-03b19a93f4d8d870507ee96121cee4acd748dd2a.tar.gz
Merge branch 'master' into bootstrap
Diffstat (limited to 'src/usr/local/www/interfaces_groups_edit.php')
-rw-r--r--src/usr/local/www/interfaces_groups_edit.php257
1 files changed, 257 insertions, 0 deletions
diff --git a/src/usr/local/www/interfaces_groups_edit.php b/src/usr/local/www/interfaces_groups_edit.php
new file mode 100644
index 0000000..8e7b6da
--- /dev/null
+++ b/src/usr/local/www/interfaces_groups_edit.php
@@ -0,0 +1,257 @@
+<?php
+/*
+ interfaces_groups_edit.php
+
+ Copyright (C) 2013-2015 Electric Sheep Fencing, LP
+ Copyright (C) 2009 Ermal Luçi
+ Copyright (C) 2004 Scott Ullrich
+ 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.
+*/
+/*
+ pfSense_BUILDER_BINARIES: /sbin/ifconfig
+ pfSense_MODULE: interfaces
+*/
+
+##|+PRIV
+##|*IDENT=page-interfaces-groups-edit
+##|*NAME=Interfaces: Groups: Edit page
+##|*DESCR=Allow access to the 'Interfaces: Groups: Edit' page.
+##|*MATCH=interfaces_groups_edit.php*
+##|-PRIV
+
+
+require("guiconfig.inc");
+require_once("functions.inc");
+
+$pgtitle = array(gettext("Interfaces"), gettext("Groups"), gettext("Edit"));
+$shortcut_section = "interfaces";
+
+if (!is_array($config['ifgroups']['ifgroupentry'])) {
+ $config['ifgroups']['ifgroupentry'] = array();
+}
+
+$a_ifgroups = &$config['ifgroups']['ifgroupentry'];
+
+if (is_numericint($_GET['id'])) {
+ $id = $_GET['id'];
+}
+if (isset($_POST['id']) && is_numericint($_POST['id'])) {
+ $id = $_POST['id'];
+}
+
+if (isset($id) && $a_ifgroups[$id]) {
+ $pconfig['ifname'] = $a_ifgroups[$id]['ifname'];
+ $pconfig['members'] = $a_ifgroups[$id]['members'];
+ $pconfig['descr'] = html_entity_decode($a_ifgroups[$id]['descr']);
+}
+
+$interface_list = get_configured_interface_with_descr();
+$interface_list_disabled = get_configured_interface_with_descr(false, true);
+
+if ($_POST) {
+ unset($input_errors);
+ $pconfig = $_POST;
+
+ if (!isset($id)) {
+ foreach ($a_ifgroups as $groupentry) {
+ if ($groupentry['ifname'] == $_POST['ifname']) {
+ $input_errors[] = gettext("Group name already exists!");
+ }
+ }
+ }
+ if (preg_match("/([^a-zA-Z])+/", $_POST['ifname'], $match)) {
+ $input_errors[] = gettext("Only letters A-Z are allowed as the group name.");
+ }
+
+ foreach ($iflist as $gif => $gdescr) {
+ if ($gdescr == $_POST['ifname'] || $gif == $_POST['ifname']) {
+ $input_errors[] = "The specified group name is already used by an interface. Please choose another name.";
+ }
+ }
+ $members = "";
+ $isfirst = 0;
+ /* item is a normal ifgroupentry type */
+ for ($x = 0; $x < 9999; $x++) {
+ if ($_POST["members{$x}"] <> "") {
+ if ($isfirst > 0) {
+ $members .= " ";
+ }
+ $members .= $_POST["members{$x}"];
+ $isfirst++;
+ }
+ }
+
+ $members = isset($_POST['members']) ? join(' ', $_POST['members']) : "";
+
+ if (!$input_errors) {
+ $ifgroupentry = array();
+ $ifgroupentry['members'] = $members;
+ $ifgroupentry['descr'] = $_POST['descr'];
+
+ // Edit group name
+ if (isset($id) && $a_ifgroups[$id] && $_POST['ifname'] != $a_ifgroups[$id]['ifname']) {
+ if (!empty($config['filter']) && is_array($config['filter']['rule'])) {
+ foreach ($config['filter']['rule'] as $ridx => $rule) {
+ if (isset($rule['floating'])) {
+ $rule_ifs = explode(",", $rule['interface']);
+ $rule_changed = false;
+ foreach ($rule_ifs as $rule_if_id => $rule_if) {
+ if ($rule_if == $a_ifgroups[$id]['ifname']) {
+ $rule_ifs[$rule_if_id] = $_POST['ifname'];
+ $rule_changed = true;
+ }
+ }
+ if ($rule_changed) {
+ $config['filter']['rule'][$ridx]['interface'] = implode(",", $rule_ifs);
+ }
+ } else {
+ if ($rule['interface'] == $a_ifgroups[$id]['ifname']) {
+ $config['filter']['rule'][$ridx]['interface'] = $_POST['ifname'];
+ }
+ }
+ }
+ }
+ if (!empty($config['nat']) && is_array($config['nat']['rule'])) {
+ foreach ($config['nat']['rule'] as $ridx => $rule) {
+ if ($rule['interface'] == $a_ifgroups[$id]['ifname']) {
+ $config['nat']['rule'][$ridx]['interface'] = $_POST['ifname'];
+ }
+ }
+ }
+ $omembers = explode(" ", $a_ifgroups[$id]['members']);
+ if (count($omembers) > 0) {
+ foreach ($omembers as $ifs) {
+ $realif = get_real_interface($ifs);
+ if ($realif) {
+ mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']);
+ }
+ }
+ }
+ $ifgroupentry['ifname'] = $_POST['ifname'];
+ $a_ifgroups[$id] = $ifgroupentry;
+
+ // Edit old group
+ } else if (isset($id) && $a_ifgroups[$id]) {
+ $omembers = explode(" ", $a_ifgroups[$id]['members']);
+ $nmembers = explode(" ", $members);
+ $delmembers = array_diff($omembers, $nmembers);
+ if (count($delmembers) > 0) {
+ foreach ($delmembers as $ifs) {
+ $realif = get_real_interface($ifs);
+ if ($realif) {
+ mwexec("/sbin/ifconfig {$realif} -group " . $a_ifgroups[$id]['ifname']);
+ }
+ }
+ }
+ $ifgroupentry['ifname'] = $_POST['ifname'];
+ $a_ifgroups[$id] = $ifgroupentry;
+
+ // Create new group
+ } else {
+ $ifgroupentry['ifname'] = $_POST['ifname'];
+ $a_ifgroups[] = $ifgroupentry;
+ }
+
+ write_config();
+ interface_group_setup($ifgroupentry);
+
+ header("Location: interfaces_groups.php");
+ exit;
+ } else {
+ $pconfig['descr'] = $_POST['descr'];
+ $pconfig['members'] = $members;
+ }
+}
+
+include("head.inc");
+
+if ($input_errors) {
+ print_input_errors($input_errors);
+}
+
+?>
+<div id="inputerrors"></div>
+<?php
+$tab_array = array();
+$tab_array[0] = array(gettext("Interface assignments"), false, "interfaces_assign.php");
+$tab_array[1] = array(gettext("Interface Groups"), true, "interfaces_groups.php");
+$tab_array[2] = array(gettext("Wireless"), false, "interfaces_wireless.php");
+$tab_array[3] = array(gettext("VLANs"), false, "interfaces_vlan.php");
+$tab_array[4] = array(gettext("QinQs"), false, "interfaces_qinq.php");
+$tab_array[5] = array(gettext("PPPs"), false, "interfaces_ppps.php");
+$tab_array[7] = array(gettext("GRE"), false, "interfaces_gre.php");
+$tab_array[8] = array(gettext("GIF"), false, "interfaces_gif.php");
+$tab_array[9] = array(gettext("Bridges"), false, "interfaces_bridge.php");
+$tab_array[10] = array(gettext("LAGG"), false, "interfaces_lagg.php");
+display_top_tabs($tab_array);
+
+require('classes/Form.class.php');
+$form = new Form;
+$section = new Form_Section('Interface Group Edit');
+
+$section->addInput(new Form_Input(
+ 'ifname',
+ 'Group Name',
+ 'text',
+ $pconfig['ifname'],
+ ['placeholder' => 'Group Name']
+))->setWidth(6)->setHelp('No numbers or spaces are allowed. '.
+ 'Only characters in a-zA-Z');
+
+$section->addInput(new Form_Input(
+ 'descr',
+ 'Group Description',
+ 'text',
+ $pconfig['descr'],
+ ['placeholder' => 'Group Description']
+))->setWidth(6)->setHelp('You may enter a group decsription '.
+ 'here for your reference (not parsed)');
+
+$section->addInput(new Form_Select(
+ 'members[]',
+ 'Group Members',
+ explode(' ', $pconfig['members']),
+ $interface_list,
+ true
+))->setWidth(6)->setHelp('NOTE: Rules for WAN type '.
+ 'interfaces in groups do not contain the reply-to mechanism upon which '.
+ 'Multi-WAN typically relies. '.
+ '<a href="https://doc.pfsense.org/index.php/ifgroups">More Information</a>');
+
+if (isset($id) && $a_ifgroups[$id]) {
+ $form->addGlobal(new Form_Input(
+ 'id',
+ 'id',
+ 'hidden',
+ $id
+ ));
+}
+
+$form->add($section);
+print $form;
+
+unset($interface_list);
+unset($interface_list_disabled);
+include("fend.inc");
+?>
OpenPOWER on IntegriCloud