summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Fonnesbeck <efonnes@gmail.com>2010-02-22 13:08:09 -0700
committerErik Fonnesbeck <efonnes@gmail.com>2010-02-22 13:08:09 -0700
commit8f0289e7ec338869f28467b748e27f580792b201 (patch)
treea7411623017304997bf9c18975918f7d35efed44
parentce075a0fd4aa7eb0788f20233bf60706e4c77edf (diff)
downloadpfsense-8f0289e7ec338869f28467b748e27f580792b201.zip
pfsense-8f0289e7ec338869f28467b748e27f580792b201.tar.gz
Sync configuration of shared settings between wireless clones.
-rw-r--r--etc/inc/interfaces.inc37
-rwxr-xr-xusr/local/www/interfaces.php4
-rwxr-xr-xusr/local/www/interfaces_assign.php4
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;
}
}
OpenPOWER on IntegriCloud