diff options
author | Erik Fonnesbeck <efonnes@gmail.com> | 2010-02-22 13:08:09 -0700 |
---|---|---|
committer | Erik Fonnesbeck <efonnes@gmail.com> | 2010-02-22 13:08:09 -0700 |
commit | 8f0289e7ec338869f28467b748e27f580792b201 (patch) | |
tree | a7411623017304997bf9c18975918f7d35efed44 | |
parent | ce075a0fd4aa7eb0788f20233bf60706e4c77edf (diff) | |
download | pfsense-8f0289e7ec338869f28467b748e27f580792b201.zip pfsense-8f0289e7ec338869f28467b748e27f580792b201.tar.gz |
Sync configuration of shared settings between wireless clones.
-rw-r--r-- | etc/inc/interfaces.inc | 37 | ||||
-rwxr-xr-x | usr/local/www/interfaces.php | 4 | ||||
-rwxr-xr-x | usr/local/www/interfaces_assign.php | 4 |
3 files changed, 44 insertions, 1 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc index c2b4bd1..a387b1e 100644 --- a/etc/inc/interfaces.inc +++ b/etc/inc/interfaces.inc @@ -1427,6 +1427,40 @@ function interface_wireless_clone($realif, $wlcfg) { return true; } +function interface_sync_wireless_clones(&$ifcfg, $sync_changes = false) { + global $config, $g; + + $shared_settings = array('standard', 'turbo', 'protmode', 'channel', 'txpower'); + + if(!stristr($ifcfg['if'], "_wlan")) { + $baseif1 = $ifcfg['if']; + } else { + $baseif1 = substr($ifcfg['if'], 0, stripos($ifcfg['if'], "_wlan")); + } + + $iflist = get_configured_interface_list(); + foreach ($iflist as $if) { + if(!stristr($config['interfaces'][$if]['if'], "_wlan")) { + $baseif2 = $config['interfaces'][$if]['if']; + } else { + $baseif2 = substr($config['interfaces'][$if]['if'], 0, stripos($config['interfaces'][$if]['if'], "_wlan")); + } + if ($baseif1 != $baseif2) { + 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; + } + } + } +} + function interface_wireless_configure($if, &$wl, &$wlcfg) { global $config, $g; @@ -1443,6 +1477,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"); diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php index a2a07ed..16112a2 100755 --- a/usr/local/www/interfaces.php +++ b/usr/local/www/interfaces.php @@ -295,6 +295,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 +776,7 @@ function handle_wireless_post() { $wancfg['wireless']['wep']['key'][] = $newkey; } } + interface_sync_wireless_clones($wancfg, true); } $pgtitle = array("Interfaces", $pconfig['descr']); diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php index a2ca45a..8e5cb05 100755 --- a/usr/local/www/interfaces_assign.php +++ b/usr/local/www/interfaces_assign.php @@ -310,8 +310,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; } } |