diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index 1e95b0b07e..e5515bfc40 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -279,6 +279,27 @@ function interface_qinq2_configure(&$qinq, $fd, $macaddr) { return $vlanif; } +function interfaces_create_wireless_clones() { + global $config; + + if($g['booting']) + echo "Creating other wireless clone interfaces..."; + if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as $clone) { + if(empty($clone['cloneif'])) + continue; + if(does_interface_exist($clone['cloneif'])) + continue; + /* XXX: Maybe we should report any errors?! */ + if(interface_wireless_clone($clone['cloneif'], $clone)) + if($g['booting']) + echo " " . $clone['cloneif']; + } + } + if($g['booting']) + echo " done.\n"; +} + function interfaces_bridge_configure() { global $config; @@ -695,6 +716,9 @@ function interfaces_configure() { } } + /* create the unconfigured wireless clones */ + interfaces_create_wireless_clones(); + /* set up GRE virtual interfaces */ interfaces_gre_configure(); @@ -1342,7 +1366,11 @@ function interface_wireless_clone($realif, $wlcfg) { * If it has not been cloned then go ahead and clone it. */ $needs_clone = false; - switch($wlcfg['wireless']['mode']) { + if(is_array($wlcfg['wireless'])) + $wlcfg_mode = $wlcfg['wireless']['mode']; + else + $wlcfg_mode = $wlcfg['mode']; + switch($wlcfg_mode) { case "hostap": $mode = "wlanmode hostap"; break; @@ -1353,19 +1381,20 @@ function interface_wireless_clone($realif, $wlcfg) { $mode = ""; break; } + $baseif = interface_get_wireless_base($wlcfg['if']); if(does_interface_exist($realif)) { exec("/sbin/ifconfig {$realif}", $output, $ret); $ifconfig_str = implode($output); - if(($wlcfg['wireless']['mode'] == "hostap") && (! preg_match("/hostap/si", $ifconfig_str))) { - log_error("Interface {$wlcfg['if']}_wlan{$interface_num} changed to hostap mode"); + if(($wlcfg_mode == "hostap") && (! preg_match("/hostap/si", $ifconfig_str))) { + log_error("Interface {$realif} changed to hostap mode"); $needs_clone = true; } - if(($wlcfg['wireless']['mode'] == "adhoc") && (! preg_match("/adhoc/si", $ifconfig_str))) { - log_error("Interface {$wlcfg['if']}_wlan{$interface_num} changed to adhoc mode"); + if(($wlcfg_mode == "adhoc") && (! preg_match("/adhoc/si", $ifconfig_str))) { + log_error("Interface {$realif} changed to adhoc mode"); $needs_clone = true; } - if(($wlcfg['wireless']['mode'] == "bss") && (preg_match("/hostap|adhoc/si", $ifconfig_str))) { - log_error("Interface {$wlcfg['if']}_wlan{$interface_num} changed to infrastructure mode"); + if(($wlcfg_mode == "bss") && (preg_match("/hostap|adhoc/si", $ifconfig_str))) { + log_error("Interface {$realif} changed to infrastructure mode"); $needs_clone = true; } } else { @@ -1380,15 +1409,45 @@ function interface_wireless_clone($realif, $wlcfg) { log_error("Cloning new wireless interface {$realif}"); // Create the new wlan interface. FreeBSD returns the new interface name. // example: wlan2 - exec("/sbin/ifconfig wlan create wlandev {$wlcfg['if']} {$mode} 2>&1", $out, $ret); + exec("/sbin/ifconfig wlan create wlandev {$baseif} {$mode} bssid 2>&1", $out, $ret); if($ret <> 0) { - log_error("Failed to clone interface {$wlcfg['if']} with error code {$ret}, output {$out[0]}"); + log_error("Failed to clone interface {$baseif} with error code {$ret}, output {$out[0]}"); + return false; } $newif = trim($out[0]); // Rename the interface to {$parentnic}_wlan{$number}#: EX: ath0_wlan0 mwexec("/sbin/ifconfig {$newif} name {$realif} 2>&1", false); // FIXME: not sure what ngctl is for. Doesn't work. - // mwexec("/usr/sbin/ngctl name {$newif}: {$wlcfg['if']}_wlan{$interface_num}", false); + // mwexec("/usr/sbin/ngctl name {$newif}: {$realif}", false); + } + return true; +} + +function interface_sync_wireless_clones(&$ifcfg, $sync_changes = false) { + global $config, $g; + + $shared_settings = array('standard', 'turbo', 'protmode', 'channel', 'txpower'); + + if(!is_array($ifcfg['wireless'])) + return; + + $baseif = interface_get_wireless_base($ifcfg['if']); + + $iflist = get_configured_interface_list(false, true); + foreach ($iflist as $if) { + if ($baseif == interface_get_wireless_base($config['interfaces'][$if]['if']) && $ifcfg['if'] != $config['interfaces'][$if]['if']) { + if (isset($config['interfaces'][$if]['wireless']['standard']) || $sync_changes) { + foreach ($shared_settings as $setting) { + if ($sync_changes) { + $config['interfaces'][$if]['wireless'][$setting] = $ifcfg['wireless'][$setting]; + } else { + $ifcfg['wireless'][$setting] = $config['interfaces'][$if]['wireless'][$setting]; + } + } + if (!$sync_changes) + break; + } + } } } @@ -1408,6 +1467,9 @@ function interface_wireless_configure($if, &$wl, &$wlcfg) { // Clone wireless nic if needed. interface_wireless_clone($if, $wl); + // Reject inadvertent changes to shared settings in case the interface hasn't been configured. + interface_sync_wireless_clones($wl, false); + $fd_set = fopen("{$g['tmp_path']}/{$if}_setup.sh","w"); fwrite($fd_set, "#!/bin/sh\n"); fwrite($fd_set, "# {$g['product_name']} wireless configuration script.\n\n"); @@ -2340,6 +2402,22 @@ function interface_translate_type_to_real($interface) { return $interface; } +function interface_get_wireless_base($wlif) { + if(!stristr($wlif, "_wlan")) { + return $wlif; + } else { + return substr($wlif, 0, stripos($wlif, "_wlan")); + } +} + +function interface_get_wireless_clone($wlif) { + if(!stristr($wlif, "_wlan")) { + return $wlif . "_wlan0"; + } else { + return $wlif; + } +} + function get_real_interface($interface = "wan") { global $config; @@ -2399,11 +2477,7 @@ function get_real_interface($interface = "wan") { // interface name format: $parentnic_wlanparentnic# // example: ath0_wlan0 if(is_interface_wireless($cfg['if'])) { - if ($interface == "wan") - $interface_num = 0; - else - $interface_num = substr($interface, 3); - $wanif = $cfg['if'] . "_wlan" . $interface_num; + $wanif = interface_get_wireless_clone($cfg['if']); break; } diff --git a/etc/inc/util.inc b/etc/inc/util.inc index 559a3bc1ea..d31e1a9c42 100644 --- a/etc/inc/util.inc +++ b/etc/inc/util.inc @@ -499,6 +499,7 @@ function get_interface_list($mode = "active", $keyby = "physical", $vfaces = "") 'lo', 'ng', '_vlan', + '_wlan', 'pflog', 'plip', 'pfsync', @@ -958,7 +959,7 @@ function is_interface_mismatch() { $do_assign = false; $i = 0; foreach ($config['interfaces'] as $ifname => $ifcfg) { - if (preg_match("/^enc|^tun|^ppp|^pptp|^pppoe|^ovpn|^gif|^gre|^lagg|^bridge|vlan/i", $ifcfg['if'])) { + if (preg_match("/^enc|^tun|^ppp|^pptp|^pppoe|^ovpn|^gif|^gre|^lagg|^bridge|vlan|_wlan/i", $ifcfg['if'])) { $i++; } else if (does_interface_exist($ifcfg['if']) == false) { diff --git a/etc/inc/xmlparse.inc b/etc/inc/xmlparse.inc index 9471994706..c9720c05f4 100644 --- a/etc/inc/xmlparse.inc +++ b/etc/inc/xmlparse.inc @@ -36,10 +36,10 @@ function listtags() { * I know it's a pain, but it's a pain to find stuff too if it's not */ $ret = explode(" ", - "alias aliasurl allowedip authserver bridged ca cacert cert config container ". - "columnitem depends_on_package disk dnsserver dnsupdate domainoverrides ". - "dyndns earlyshellcmd element encryption-algorithm-option field ". - "fieldname hash-algorithm-option gateway_item gateway_group gif gre ". + "alias aliasurl allowedip authserver bridged ca cacert cert clone config ". + "container columnitem depends_on_package disk dnsserver dnsupdate ". + "domainoverrides dyndns earlyshellcmd element encryption-algorithm-option ". + "field fieldname hash-algorithm-option gateway_item gateway_group gif gre ". "group hosts member ifgroupentry igmpentry interface_array item key lagg " . "lbaction lbpool l7rules lbprotocol ". "member menu tab mobilekey monitor_type mount ntpserver onetoone ". diff --git a/etc/inc/xmlreader.inc b/etc/inc/xmlreader.inc index 7627c4b130..dd6eb9a60b 100644 --- a/etc/inc/xmlreader.inc +++ b/etc/inc/xmlreader.inc @@ -40,10 +40,10 @@ function listtags() { * I know it's a pain, but it's a pain to find stuff too if it's not */ $ret = explode(" ", - "alias aliasurl allowedip authserver bridged ca cacert cert config container ". - "columnitem depends_on_package disk dnsserver dnsupdate domainoverrides ". - "dyndns earlyshellcmd element encryption-algorithm-option field ". - "fieldname hash-algorithm-option gateway_item gateway_group gif gre ". + "alias aliasurl allowedip authserver bridged ca cacert cert clone config ". + "container columnitem depends_on_package disk dnsserver dnsupdate ". + "domainoverrides dyndns earlyshellcmd element encryption-algorithm-option ". + "field fieldname hash-algorithm-option gateway_item gateway_group gif gre ". "group hosts member ifgroupentry igmpentry interface_array item key lagg " . "lbaction lbpool l7rules lbprotocol ". "member menu tab mobilekey monitor_type mount ntpserver onetoone ". diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php index a2a07ed3dd..578bcde84a 100755 --- a/usr/local/www/interfaces.php +++ b/usr/local/www/interfaces.php @@ -215,6 +215,7 @@ if (isset($wancfg['wireless'])) { /* Get wireless modes */ $wlanif = get_real_interface($if); interface_wireless_clone($wlanif, $wancfg); + $wlanbaseif = interface_get_wireless_base($wancfg['if']); $wl_modes = get_wireless_modes($if); $pconfig['standard'] = $wancfg['wireless']['standard']; $pconfig['mode'] = $wancfg['wireless']['mode']; @@ -295,6 +296,9 @@ if ($_POST['apply']) { if ($_POST && $_POST['enable'] == "no") { unset($wancfg['enable']); interface_bring_down($if); + if (isset($wancfg['wireless'])) { + interface_sync_wireless_clones($wancfg, false); + } write_config("Interface {$_POST['descr']}({$if}) is now disabled."); mark_subsystem_dirty('interfaces'); header("Location: interfaces.php?if={$if}"); @@ -773,6 +777,7 @@ function handle_wireless_post() { $wancfg['wireless']['wep']['key'][] = $newkey; } } + interface_sync_wireless_clones($wancfg, true); } $pgtitle = array("Interfaces", $pconfig['descr']); @@ -1232,7 +1237,10 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" - Wireless configuration + Common wireless configuration + + + These settings apply to all wireless networks on . Standard @@ -1249,16 +1257,6 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" - - Mode - - - - 802.11g OFDM Protection Mode @@ -1271,6 +1269,61 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" For IEEE 802.11g, use the specified technique for protecting OFDM frames in a mixed 11b/11g network.
+ + + Transmit power + +
+ Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value. Not all adaptors support changing the transmit power setting. + + + + Channel + + +
+ Note: Not all channels may be supported by your card + + + + + + + Wireless configuration + + + Mode + + + SSID @@ -1311,45 +1364,6 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe"
(this might create problems for some clients). - - Transmit power - -
- Note: Typically only a few discreet power settings are available and the driver will use the setting closest to the specified value. Not all adaptors support changing the transmit power setting. - - - - Channel - - -
- Note: Not all channels may be supported by your card - - Distance setting diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php index 04b9979466..6dc2ff366c 100755 --- a/usr/local/www/interfaces_assign.php +++ b/usr/local/www/interfaces_assign.php @@ -58,6 +58,14 @@ require("rrd.inc"); /* get list without VLAN interfaces */ $portlist = get_interface_list(); +/* add wireless clone interfaces */ +if (is_array($config['wireless']['clone']) && count($config['wireless']['clone'])) { + foreach ($config['wireless']['clone'] as $clone) { + $portlist[$clone['cloneif']] = $clone; + $portlist[$clone['cloneif']]['iswlclone'] = true; + } +} + /* add VLAN interfaces */ if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) { foreach ($config['vlans']['vlan'] as $vlan) { @@ -312,8 +320,10 @@ if ($_GET['act'] == "add") { } if (!$portused) { $config['interfaces'][$newifname]['if'] = $portname; - if (preg_match($g['wireless_regex'], $portname)) + if (preg_match($g['wireless_regex'], $portname)) { $config['interfaces'][$newifname]['wireless'] = array(); + interface_sync_wireless_clones($config['interfaces'][$newifname], false); + } break; } } @@ -356,13 +366,14 @@ if(file_exists("/var/run/interface_mismatch_reboot_needed")) $tab_array = array(); $tab_array[0] = array("Interface assignments", true, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> @@ -392,6 +403,11 @@ if(file_exists("/var/run/interface_mismatch_reboot_needed")) if ($portinfo['descr']) $descr .= " (" . $portinfo['descr'] . ")"; echo htmlspecialchars($descr); + } elseif ($portinfo['iswlclone']) { + $descr = $portinfo['cloneif']; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); } elseif ($portinfo['isppp']) { $descr = "PPP {$portinfo['port']}"; if ($portinfo['descr']) diff --git a/usr/local/www/interfaces_bridge.php b/usr/local/www/interfaces_bridge.php index cde0873f1e..9e009ba5b3 100644 --- a/usr/local/www/interfaces_bridge.php +++ b/usr/local/www/interfaces_bridge.php @@ -88,13 +88,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", true, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", true, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_gif.php b/usr/local/www/interfaces_gif.php index 17a86965e1..cd214e7b91 100644 --- a/usr/local/www/interfaces_gif.php +++ b/usr/local/www/interfaces_gif.php @@ -87,13 +87,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", true, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", true, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_gre.php b/usr/local/www/interfaces_gre.php index e8cdcd192c..5ad7026e21 100644 --- a/usr/local/www/interfaces_gre.php +++ b/usr/local/www/interfaces_gre.php @@ -87,13 +87,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", true, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", true, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_groups.php b/usr/local/www/interfaces_groups.php index 9557ace5f5..65564ddcd9 100755 --- a/usr/local/www/interfaces_groups.php +++ b/usr/local/www/interfaces_groups.php @@ -73,13 +73,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", true, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_lagg.php b/usr/local/www/interfaces_lagg.php index 220cb2036e..0beac77dd1 100644 --- a/usr/local/www/interfaces_lagg.php +++ b/usr/local/www/interfaces_lagg.php @@ -93,13 +93,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", true, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", true, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_ppp.php b/usr/local/www/interfaces_ppp.php index ac0ed9615d..3eb93ba55b 100644 --- a/usr/local/www/interfaces_ppp.php +++ b/usr/local/www/interfaces_ppp.php @@ -87,13 +87,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", true, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", true, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_qinq.php b/usr/local/www/interfaces_qinq.php index ab79fcef4a..604d778ac2 100755 --- a/usr/local/www/interfaces_qinq.php +++ b/usr/local/www/interfaces_qinq.php @@ -95,13 +95,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", true, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", true, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_vlan.php b/usr/local/www/interfaces_vlan.php index 39211e7e56..0adfa7d230 100755 --- a/usr/local/www/interfaces_vlan.php +++ b/usr/local/www/interfaces_vlan.php @@ -89,13 +89,14 @@ include("head.inc"); $tab_array = array(); $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); - $tab_array[2] = array("VLANs", true, "interfaces_vlan.php"); - $tab_array[3] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[4] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[5] = array("GRE", false, "interfaces_gre.php"); - $tab_array[6] = array("GIF", false, "interfaces_gif.php"); - $tab_array[7] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[8] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", true, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> diff --git a/usr/local/www/interfaces_wireless.php b/usr/local/www/interfaces_wireless.php new file mode 100644 index 0000000000..8f90b71fa8 --- /dev/null +++ b/usr/local/www/interfaces_wireless.php @@ -0,0 +1,146 @@ + + + + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
InterfaceModeDescription
+ + + + +   + +  
 

+ Note:
+
+ Here you can configure clones of wireless interfaces, which can be assigned as separate independent interfaces. Only available on wireless chipsets that support this, with limitations on the number that can be created in each mode. +

 
+
+
+ + + diff --git a/usr/local/www/interfaces_wireless_edit.php b/usr/local/www/interfaces_wireless_edit.php new file mode 100644 index 0000000000..34596c2647 --- /dev/null +++ b/usr/local/www/interfaces_wireless_edit.php @@ -0,0 +1,205 @@ + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
Wireless clone configuration
Parent interface +
Mode +
Description + +
You may enter a description here + for your reference (not parsed).
  + + + + + +
+
+ + +