$bdescr) { if (substr(get_real_interface($bif), 0, 3) != "gre") { $ifacelist[$bif] = $bdescr; } } if ($_SERVER['REQUEST_METHOD'] === 'GET') { // read form data if (!empty($a_bridges[$_GET['id']])) { $id = $_GET['id']; } // copy fields 1-on-1 $copy_fields = array('descr', 'bridgeif', 'maxaddr', 'timeout', 'maxage','fwdelay', 'hellotime', 'priority', 'proto', 'holdcnt', 'span'); foreach ($copy_fields as $fieldname) { if (isset($a_bridges[$id][$fieldname])) { $pconfig[$fieldname] = $a_bridges[$id][$fieldname]; } else { $pconfig[$fieldname] = null; } } // bool fields $pconfig['enablestp'] = isset($a_bridges[$id]['enablestp']); // simple array fields $array_fields = array('members', 'stp', 'edge', 'autoedge', 'ptp', 'autoptp', 'static', 'private'); foreach ($array_fields as $fieldname) { if (!empty($a_bridges[$id][$fieldname])) { $pconfig[$fieldname] = explode(',', $a_bridges[$id][$fieldname]); } else { $pconfig[$fieldname] = array(); } } // array key/value sets if (!empty($a_bridges[$id]['ifpriority'])) { foreach (explode(",", $a_bridges[$id]['ifpriority']) as $cfg) { list ($key, $value) = explode(":", $cfg); $pconfig['ifpriority_'.$key] = $value; } } if (!empty($a_bridges[$id]['ifpathcost'])) { foreach (explode(",", $a_bridges[$id]['ifpathcost']) as $cfg) { list ($key, $value) = explode(":", $cfg); $pconfig['ifpathcost_'.$key] = $value; } } } elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { // save / validate formdata if (!empty($a_bridges[$_POST['id']])) { $id = $_POST['id']; } $input_errors = array(); $pconfig = $_POST; /* input validation */ $reqdfields = explode(" ", "members"); $reqdfieldsn = array(gettext("Member Interfaces")); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); if (!empty($pconfig['maxage']) && !is_numeric($pconfig['maxage'])) { $input_errors[] = gettext("Maxage needs to be an integer between 6 and 40."); } if (!empty($pconfig['maxaddr']) && !is_numeric($pconfig['maxaddr'])) { $input_errors[] = gettext("Maxaddr needs to be an integer."); } if (!empty($pconfig['timeout']) && !is_numeric($pconfig['timeout'])) { $input_errors[] = gettext("Timeout needs to be an integer."); } if (!empty($pconfig['fwdelay']) && !is_numeric($pconfig['fwdelay'])) { $input_errors[] = gettext("Forward Delay needs to be an integer between 4 and 30."); } if (!empty($pconfig['hellotime']) && !is_numeric($pconfig['hellotime'])) { $input_errors[] = gettext("Hello time for STP needs to be an integer between 1 and 2."); } if (!empty($pconfig['priority']) && !is_numeric($pconfig['priority'])) { $input_errors[] = gettext("Priority for STP needs to be an integer between 0 and 61440."); } if (!empty($pconfig['holdcnt']) && !is_numeric($pconfig['holdcnt'])) { $input_errors[] = gettext("Transmit Hold Count for STP needs to be an integer between 1 and 10."); } foreach ($ifacelist as $ifn => $ifdescr) { if (!empty($pconfig['ifpriority_'.$ifn]) && !is_numeric($pconfig['ifpriority_'.$ifn])) { $input_errors[] = sprintf(gettext("%s interface priority for STP needs to be an integer between 0 and 240."), $ifdescr); } if (!empty($pconfig['ifpathcost_'.$ifn]) && !is_numeric($pconfig['ifpathcost_'.$ifn])) { $input_errors[] = sprintf(gettext("%s interface path cost for STP needs to be an integer between 1 and 200000000."), $ifdescr); } } if (is_array($pconfig['members'])) { foreach($pconfig['members'] as $ifmembers) { if (empty($config['interfaces'][$ifmembers])) { $input_errors[] = gettext("A member interface passed does not exist in configuration"); } if (!empty($config['interfaces'][$ifmembers]['wireless']['mode']) && $config['interfaces'][$ifmembers]['wireless']['mode'] != "hostap") { $input_errors[] = gettext("Bridging a wireless interface is only possible in hostap mode."); } if ($pconfig['span'] != "none" && $pconfig['span'] == $ifmembers) { $input_errors[] = gettext("Span interface cannot be part of the bridge. Remove the span interface from bridge members to continue."); } } } if (count($input_errors) == 0) { $bridge = array(); $bridge['enablestp'] = !empty($pconfig['enablestp']); // 1 on 1 copy $copy_fields = array('descr', 'maxaddr', 'timeout', 'bridgeif', 'maxage','fwdelay', 'hellotime', 'priority', 'proto', 'holdcnt'); foreach ($copy_fields as $fieldname) { if (isset($pconfig[$fieldname]) && $pconfig[$fieldname] != "") { $bridge[$fieldname] = $pconfig[$fieldname]; } else { $bridge[$fieldname] = null; } } if ($pconfig['span'] != "none") { $bridge['span'] = $pconfig['span']; } // simple array fields $array_fields = array('members', 'stp', 'edge', 'autoedge', 'ptp', 'autoptp', 'static', 'private'); foreach ($array_fields as $fieldname) { if(!empty($pconfig[$fieldname])) { $bridge[$fieldname] = implode(',', $pconfig[$fieldname]); } } // array key/value sets $bridge['ifpriority'] = ""; $bridge['ifpathcost'] = ""; foreach ($ifacelist as $ifn => $ifdescr) { if (isset($pconfig['ifpriority_'.$ifn]) && $pconfig['ifpriority_'.$ifn] != "") { if (!empty($bridge['ifpriority'])) { $bridge['ifpriority'] .= ','; } $bridge['ifpriority'] .= $ifn.":".$pconfig['ifpriority_'.$ifn]; } if (isset($pconfig['ifpathcost_'.$ifn]) && $pconfig['ifpathcost_'.$ifn] != "") { if (!empty($bridge['ifpathcost'])) { $bridge['ifpathcost'] .= ','; } $bridge['ifpathcost'] .= $ifn.":".$pconfig['ifpathcost_'.$ifn]; } } interface_bridge_configure($bridge); if ($bridge['bridgeif'] == "" || !stristr($bridge['bridgeif'], "bridge")) { $input_errors[] = gettext("Error occurred creating interface, please retry."); } else { if (isset($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(url_safe('Location: /interfaces_bridge.php')); exit; } } } legacy_html_escape_form_data($pconfig); include("head.inc"); ?>
0) print_input_errors($input_errors); ?>
 
" />
  " /> " onclick="window.location.href='/interfaces_bridge.php'" />