$bdescr) { if (substr(get_real_interface($bif), 0, 3) == "gre") unset($ifacelist[$bif]); } $id = $_GET['id']; if (isset($_POST['id'])) $id = $_POST['id']; if (isset($id) && $a_bridges[$id]) { $pconfig['enablestp'] = isset($a_bridges[$id]['enablestp']); $pconfig['descr'] = $a_bridges[$id]['descr']; $pconfig['bridgeif'] = $a_bridges[$id]['bridgeif']; $pconfig['members'] = $a_bridges[$id]['members']; $pconfig['maxaddr'] = $a_bridges[$id]['maxaddr']; $pconfig['timeout'] = $a_bridges[$id]['timeout']; if ($a_bridges[$id]['static']) $pconfig['static'] = $a_bridges[$id]['static']; if ($a_bridges[$id]['private']) $pconfig['private'] = $a_bridges[$id]['private']; if (isset($a_bridges[$id]['stp'])) $pconfig['stp'] = $a_bridges[$id]['stp']; $pconfig['maxage'] = $a_bridges[$id]['maxage']; $pconfig['fwdelay'] = $a_bridges[$id]['fwdelay']; $pconfig['hellotime'] = $a_bridges[$id]['hellotime']; $pconfig['priority'] = $a_bridges[$id]['priority']; $pconfig['proto'] = $a_bridges[$id]['proto']; $pconfig['holdcount'] = $a_bridges[$id]['holdcount']; $pconfig['ifpriority'] = explode(",", $a_bridges[$id]['ifpriority']); $ifpriority = array(); foreach ($pconfig['ifpriority'] as $cfg) { $embcfg = explode(":", $cfg); foreach ($embcfg as $key => $value) $ifpriority[$key] = $value; } $pconfig['ifpriority'] = $ifpriority; $pconfig['ifpathcost'] = explode(",", $a_bridges[$id]['ifpathcost']); $ifpathcost = array(); foreach ($pconfig['ifpathcost'] as $cfg) { $embcfg = explode(":", $cfg); foreach ($embcfg as $key => $value) $ifpathcost[$key] = $value; } $pconfig['ifpathcost'] = $ifpathcost; $pconfig['span'] = $a_bridges[$id]['span']; if (isset($a_bridges[$id]['edge'])) $pconfig['edge'] = $a_bridges[$id]['edge']; if (isset($a_bridges[$id]['autoedge'])) $pconfig['autoedge'] = $a_bridges[$id]['autoedge']; if (isset($a_bridges[$id]['ptp'])) $pconfig['ptp'] = $a_bridges[$id]['ptp']; if (isset($a_bridges[$id]['autoptp'])) $pconfig['autoptp'] = $a_bridges[$id]['autoptp']; } if ($_POST) { unset($input_errors); $pconfig = $_POST; /* input validation */ $reqdfields = explode(" ", "members"); $reqdfieldsn = array(gettext("Member Interfaces")); do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); if ($_POST['maxage'] && !is_numeric($_POST['maxage'])) $input_errors[] = gettext("Maxage needs to be an integer between 6 and 40."); if ($_POST['maxaddr'] && !is_numeric($_POST['maxaddr'])) $input_errors[] = gettext("Maxaddr needs to be an integer."); if ($_POST['timeout'] && !is_numeric($_POST['timeout'])) $input_errors[] = gettext("Timeout needs to be an integer."); if ($_POST['fwdelay'] && !is_numeric($_POST['fwdelay'])) $input_errors[] = gettext("Forward Delay needs to be an integer between 4 and 30."); if ($_POST['hellotime'] && !is_numeric($_POST['hellotime'])) $input_errors[] = gettext("Hello time for STP needs to be an integer between 1 and 2."); if ($_POST['priority'] && !is_numeric($_POST['priority'])) $input_errors[] = gettext("Priority for STP needs to be an integer between 0 and 61440."); if ($_POST['holdcnt'] && !is_numeric($_POST['holdcnt'])) $input_errors[] = gettext("Transmit Hold Count for STP needs to be an integer between 1 and 10."); foreach ($ifacelist as $ifn => $ifdescr) { if ($_POST[$ifn] <> "" && !is_numeric($_POST[$ifn])) $input_errors[] = "{$ifdescr} " . gettext("interface priority for STP needs to be an integer between 0 and 240."); } $i = 0; foreach ($ifacelist as $ifn => $ifdescr) { if ($_POST["{$ifn}{$i}"] <> "" && !is_numeric($_POST["{$ifn}{$i}"])) $input_errors[] = "{$ifdescr} " . gettext("interface path cost for STP needs to be an integer between 1 and 200000000."); $i++; } if (!is_array($_POST['members']) || count($_POST['members']) < 2) $input_errors[] = gettext("You must select at least 2 member interfaces for a bridge."); if (is_array($_POST['members'])) { foreach($_POST['members'] as $ifmembers) { if (is_array($config['interfaces'][$ifmembers]['wireless']) && $config['interfaces'][$ifmembers]['wireless']['mode'] != "hostap") $input_errors[] = gettext("Bridging a wireless interface is only possible in hostap mode."); if ($_POST['span'] != "none" && $_POST['span'] == $ifmembers) $input_errors[] = gettext("Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue."); } } if (!$input_errors) { $bridge = array(); $bridge['members'] = implode(',', $_POST['members']); $bridge['enablestp'] = $_POST['enablestp'] ? true : false; $bridge['descr'] = $_POST['descr']; $bridge['maxaddr'] = $_POST['maxaddr']; $bridge['timeout'] = $_POST['timeout']; if ($_POST['static']) $bridge['static'] = implode(',', $_POST['static']); if ($_POST['private']) $bridge['private'] = implode(',', $_POST['private']); if (isset($_POST['stp'])) $bridge['stp'] = implode(',', $_POST['stp']); $bridge['maxage'] = $_POST['maxage']; $bridge['fwdelay'] = $_POST['fwdelay']; $bridge['hellotime'] = $_POST['hellotime']; $bridge['priority'] = $_POST['priority']; $bridge['proto'] = $_POST['proto']; $bridge['holdcount'] = $_POST['holdcount']; $i = 0; $ifpriority = ""; $ifpathcost = ""; foreach ($ifacelist as $ifn => $ifdescr) { if ($_POST[$ifn] <> "") { if ($i > 0) $ifpriority .= ","; $ifpriority .= $ifn.":".$_POST[$ifn]; } if ($_POST["{$ifn}{$i}"] <> "") { if ($i > 0) $ifpathcost .= ","; $ifpathcost .= $ifn.":".$_POST[$ifn]; } $i++; } $bridge['ifpriority'] = $ifpriority; $bridge['ifpathcost'] = $ifpathcost; if ($_POST['span'] != "none") $bridge['span'] = $_POST['span']; else unset($bridge['span']); if (isset($_POST['edge'])) $bridge['edge'] = implode(',', $_POST['edge']); if (isset($_POST['autoedge'])) $bridge['autoedge'] = implode(',', $_POST['autoedge']); if (isset($_POST['ptp'])) $bridge['ptp'] = implode(',', $_POST['ptp']); if (isset($_POST['autoptp'])) $bridge['autoptp'] = implode(',', $_POST['autoptp']); $bridge['bridgeif'] = $_POST['bridgeif']; $bridge['bridgeif'] = interface_bridge_configure($bridge); if ($bridge['bridgeif'] == "" || !stristr($bridge['bridgeif'], "bridge")) $input_errors[] = gettext("Error occured creating interface, please retry."); else { if (isset($id) && $a_bridges[$id]) $a_bridges[$id] = $bridge; else $a_bridges[] = $bridge; write_config(); $confif = convert_real_interface_to_friendly_interface_name($bridge['bridgeif']); if ($confif <> "") interface_configure($confif); header("Location: interfaces_bridge.php"); exit; } } } $pgtitle = array(gettext("Firewall"),gettext("Bridge"),gettext("Edit")); include("head.inc"); ?>