mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
Implement frontend part for lagg(4).
NOTE: that lagg(4) and bridge(4) need both a status page.
This commit is contained in:
parent
70720671a1
commit
94be2ccf4d
136
usr/local/www/interfaces_lagg.php
Normal file
136
usr/local/www/interfaces_lagg.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
/* $Id$ */
|
||||
/*
|
||||
interfaces_lagg.php
|
||||
|
||||
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("guiconfig.inc");
|
||||
|
||||
if (!is_array($config['laggs']['lagg']))
|
||||
$config['laggs']['lagg'] = array();
|
||||
|
||||
$a_laggs = &$config['laggs']['lagg'] ;
|
||||
|
||||
function lagg_inuse($num) {
|
||||
global $config;
|
||||
|
||||
$iflist = get_configured_interface_list(false, true);
|
||||
foreach ($iflist as $if) {
|
||||
if ($config['interfaces'][$if]['if'] == $a_laggs[$num]['laggif']) {
|
||||
echo "<br/><br/>{$if}";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($_GET['act'] == "del") {
|
||||
/* check if still in use */
|
||||
if (lagg_inuse($_GET['id'])) {
|
||||
$input_errors[] = "This lagg interface cannot be deleted because it is still being used.";
|
||||
} else {
|
||||
mwexec("/sbin/ifconfig " . $a_laggs[$_GET['id']]['laggif'] . " destroy");
|
||||
unset($a_laggs[$_GET['id']]);
|
||||
|
||||
write_config();
|
||||
|
||||
header("Location: interfaces_lagg.php");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$pgtitle = array("Interfaces","LAGG");
|
||||
include("head.inc");
|
||||
|
||||
?>
|
||||
|
||||
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
|
||||
<?php include("fbegin.inc"); ?>
|
||||
<?php if ($input_errors) print_input_errors($input_errors); ?>
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td>
|
||||
<?php
|
||||
$tab_array = array();
|
||||
$tab_array[0] = array("Interface assignments", false, "interfaces_assign.php");
|
||||
$tab_array[1] = array("VLANs", false, "interfaces_vlan.php");
|
||||
$tab_array[2] = array("PPP", false, "interfaces_ppp.php");
|
||||
$tab_array[3] = array("GRE", false, "interfaces_gre.php");
|
||||
$tab_array[4] = array("GIF", false, "interfaces_gif.php");
|
||||
$tab_array[5] = array("Bridges", false, "interfaces_bridge.php");
|
||||
$tab_array[5] = array("LAGG", true, "interfaces_lagg.php");
|
||||
display_top_tabs($tab_array);
|
||||
?>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div id="mainarea">
|
||||
<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td width="20%" class="listhdrr">Interface</td>
|
||||
<td width="20%" class="listhdrr">Members</td>
|
||||
<td width="50%" class="listhdr">Description</td>
|
||||
<td width="10%" class="list"></td>
|
||||
</tr>
|
||||
<?php $i = 0; foreach ($a_laggs as $lagg): ?>
|
||||
<tr>
|
||||
<td class="listlr">
|
||||
<?=htmlspecialchars($lagg['if']);?>
|
||||
</td>
|
||||
<td class="listr">
|
||||
<?=htmlspecialchars($lagg['members']);?>
|
||||
</td>
|
||||
<td class="listbg">
|
||||
<font color="white">
|
||||
<?=htmlspecialchars($lagg['descr']);?>
|
||||
</font>
|
||||
</td>
|
||||
<td valign="middle" nowrap class="list"> <a href="interfaces_lagg_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a>
|
||||
<a href="interfaces_lagg.php?act=del&id=<?=$i;?>" onclick="return confirm('Do you really want to delete this lagg tunnel?')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td>
|
||||
</tr>
|
||||
<?php $i++; endforeach; ?>
|
||||
<tr>
|
||||
<td class="list" colspan="3"> </td>
|
||||
<td class="list"> <a href="interfaces_lagg_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" class="list"><p class="vexpl"><span class="red"><strong>
|
||||
Note:<br>
|
||||
</strong></span>
|
||||
Something meaningful here.
|
||||
</td>
|
||||
<td class="list"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php include("fend.inc"); ?>
|
||||
</body>
|
||||
</html>
|
||||
149
usr/local/www/interfaces_lagg_edit.php
Normal file
149
usr/local/www/interfaces_lagg_edit.php
Normal file
@ -0,0 +1,149 @@
|
||||
<?php
|
||||
/* $Id$ */
|
||||
/*
|
||||
interfaces_lagg_edit.php
|
||||
|
||||
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("guiconfig.inc");
|
||||
|
||||
if (!is_array($config['laggs']['lagg']))
|
||||
$config['laggs']['lagg'] = array();
|
||||
|
||||
$a_laggs = &$config['laggs']['lagg'];
|
||||
|
||||
|
||||
$id = $_GET['id'];
|
||||
if (isset($_POST['id']))
|
||||
$id = $_POST['id'];
|
||||
|
||||
if (isset($id) && $a_laggs[$id]) {
|
||||
$pconfig['laggif'] = $a_laggs[$id]['laggif'];
|
||||
$pconfig['members'] = $a_laggs[$id]['members'];
|
||||
$pconfig['proto'] = $a_laggs[$id]['proto'];
|
||||
$pconfig['descr'] = $a_laggs[$id]['descr'];
|
||||
}
|
||||
|
||||
if ($_POST) {
|
||||
|
||||
unset($input_errors);
|
||||
$pconfig = $_POST;
|
||||
|
||||
/* input validation */
|
||||
$reqdfields = explode(" ", "members proto");
|
||||
$reqdfieldsn = explode(",", "Member interfaces, Lagg protocol");
|
||||
|
||||
do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
|
||||
|
||||
|
||||
if (!$input_errors) {
|
||||
$lagg = array();
|
||||
$lagg['members'] = $_POST['members'];
|
||||
$lagg['descr'] = $_POST['descr'];
|
||||
$lagg['laggif'] = $_POST['laggif'];
|
||||
|
||||
$lagg['laggif'] = interface_lagg_configure($lagg);
|
||||
if ($lagg['laggif'] == "" || !stristr($lagg['laggif'], "lagg"))
|
||||
$input_errors[] = "Error occured creating interface, please retry.";
|
||||
else {
|
||||
if (isset($id) && $a_laggs[$id])
|
||||
$a_laggs[$id] = $lagg;
|
||||
else
|
||||
$a_laggs[] = $lagg;
|
||||
|
||||
write_config();
|
||||
|
||||
header("Location: interfaces_lagg.php");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$pgtitle = array("Firewall","LAGG","Edit");
|
||||
include("head.inc");
|
||||
|
||||
?>
|
||||
|
||||
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
|
||||
<?php include("fbegin.inc"); ?>
|
||||
<?php if ($input_errors) print_input_errors($input_errors); ?>
|
||||
<form action="interfaces_lagg_edit.php" method="post" name="iform" id="iform">
|
||||
<table width="100%" border="0" cellpadding="6" cellspacing="0">
|
||||
<tr>
|
||||
<td width="22%" valign="top" class="vncellreq">Parent interface</td>
|
||||
<td width="78%" class="vtable">
|
||||
<select name="members[]" multiple="true" size="4" class="formselect">
|
||||
<?php
|
||||
$portlist = get_configured_interface_with_descr();
|
||||
foreach ($portlist as $ifn => $ifinfo) {
|
||||
echo "<option value=\"{$ifn}\"";
|
||||
if (stristr($pconfig['members'], $ifn))
|
||||
echo "selected";
|
||||
echo ">{$ifinfo}</option>";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<br/>
|
||||
<span class="vexpl">Choose the members that will be used for the link aggregation.</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" class="vncellreq">Lag proto</td>
|
||||
<td class="vtable">
|
||||
<select name="proto" class="formselect" id="proto">
|
||||
<?php
|
||||
foreach (array("none", "lacp", "failover", "fec", "loadbalance", "roundrobin") as $proto) {
|
||||
echo "<option value=\"{$proto}\"";
|
||||
if ($proto == $pconfig['proto'])
|
||||
echo "selected";
|
||||
echo ">".strtoupper($proto)."</option>";
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<br/>
|
||||
<span class="vexpl">Remote lagg address endpoint. The subnet part is used for the determinig the network that is tunneled.</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="22%" valign="top" class="vncell">Description</td>
|
||||
<td width="78%" class="vtable">
|
||||
<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
|
||||
<br> <span class="vexpl">You may enter a description here
|
||||
for your reference (not parsed).</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="22%" valign="top"> </td>
|
||||
<td width="78%">
|
||||
<input type="hidden" name="laggif" value="<?=$pconfig['laggif']; ?>">
|
||||
<input name="Submit" type="submit" class="formbtn" value="Save"> <input type="button" value="Cancel" onclick="history.back()">
|
||||
<?php if (isset($id) && $a_laggs[$id]): ?>
|
||||
<input name="id" type="hidden" value="<?=$id;?>">
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<?php include("fend.inc"); ?>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user