diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 6e21dc040..4a7890006 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -180,30 +180,30 @@ function _interfaces_vlan_configure($vlan) interfaces_bring_up($vlan['vlanif']); } -function interfaces_create_wireless_clones($verbose = false) +function interfaces_wlan_clone($device) { global $config; - if ($verbose) { - echo 'Creating wireless clone interfaces...'; - flush(); - } - foreach (array_keys(get_configured_interface_with_descr()) as $if) { - if (isset($config['interfaces'][$if]['wireless'])) { - interface_wireless_clone(get_real_interface($if), $config['interfaces'][$if]); + if (!isset($config['interfaces'][$if]['wireless'])) { + continue; + } + $realif = get_real_interface($if); + /* XXX 'if' check only required if parent is still embedded */ + if ($device == $realif || $device == $config['interfaces'][$if]['if']) { + _interfaces_wlan_clone($realif, $config['interfaces'][$if]); + return; } } if (isset($config['wireless']['clone'])) { foreach ($config['wireless']['clone'] as $clone) { - interface_wireless_clone($clone['cloneif'], $clone); + if ($device == $clone['cloneif']) { + _interfaces_wlan_clone($clone['cloneif'], $clone); + return; + } } } - - if ($verbose) { - echo "done.\n"; - } } function interfaces_bridge_configure($device) @@ -755,7 +755,6 @@ function interfaces_configure($verbose = false) } interfaces_loopback_configure($verbose); - interfaces_create_wireless_clones($verbose); interfaces_lagg_configure($verbose); interfaces_vlan_configure($verbose); @@ -1450,7 +1449,7 @@ function interface_carp_configure($vip) } } -function interface_wireless_clone($realif, $wlcfg) +function _interfaces_wlan_clone($realif, $wlcfg) { /* * Check to see if interface has been cloned as of yet. @@ -1607,10 +1606,10 @@ function interface_wireless_configure($if, &$wancfg) $wancfg['wireless'] = []; } - /* XXX interface_wireless_clone() and interface_sync_wireless_clones() need work */ + /* XXX _interfaces_wlan_clone() and interface_sync_wireless_clones() need work */ // Clone wireless nic if needed. - interface_wireless_clone($if, $wancfg); + _interfaces_wlan_clone($if, $wancfg); // Reject inadvertent changes to shared settings in case the interface hasn't been configured. interface_sync_wireless_clones($wancfg, false); diff --git a/src/etc/inc/plugins.inc.d/core.inc b/src/etc/inc/plugins.inc.d/core.inc index d658aeba6..92f3bf0f6 100644 --- a/src/etc/inc/plugins.inc.d/core.inc +++ b/src/etc/inc/plugins.inc.d/core.inc @@ -231,7 +231,7 @@ function core_devices() } $devices[] = [ - 'function' => null, /* XXX needs to handle implied clones as well */ + 'function' => 'interfaces_wlan_clone', 'names' => $wlan_names, 'pattern' => '_wlan', 'volatile' => true, diff --git a/src/www/interfaces.php b/src/www/interfaces.php index dd7a64283..b2447f199 100644 --- a/src/www/interfaces.php +++ b/src/www/interfaces.php @@ -505,7 +505,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { /* Sync first to be sure it displays the actual settings that will be used */ interface_sync_wireless_clones($a_interfaces[$if], false); /* Get wireless modes */ - interface_wireless_clone(get_real_interface($if), $a_interfaces[$if]); + _interfaces_wlan_clone(get_real_interface($if), $a_interfaces[$if]); $wlanbaseif = interface_get_wireless_base($a_interfaces[$if]['if']); $std_wl_copy_fieldnames = array( 'standard', 'mode','protmode', 'ssid', 'channel', 'txpower', 'diversity', 'txantenna', 'rxantenna', @@ -945,7 +945,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { if ($clone_count > 1) { $wlanif = get_real_interface($if); $a_interfaces[$if]['wireless']['mode'] = $pconfig['mode']; - if (!interface_wireless_clone("{$wlanif}_", $a_interfaces[$if])) { + if (!_interfaces_wlan_clone("{$wlanif}_", $a_interfaces[$if])) { $input_errors[] = sprintf(gettext("Unable to change mode to %s. You may already have the maximum number of wireless clones supported in this mode."), $wlan_modes[$a_interfaces[$if]['wireless']['mode']]); } else { legacy_interface_destroy("{$wlanif}_"); diff --git a/src/www/interfaces_wireless_edit.php b/src/www/interfaces_wireless_edit.php index 6cb679669..964f57bb6 100644 --- a/src/www/interfaces_wireless_edit.php +++ b/src/www/interfaces_wireless_edit.php @@ -101,7 +101,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { } } if (count($input_errors) == 0) { - if (!interface_wireless_clone($clone['cloneif'], $clone)) { + if (!_interfaces_wlan_clone($clone['cloneif'], $clone)) { $input_errors[] = sprintf(gettext('Error creating interface with mode %s. The %s interface may not support creating more clones with the selected mode.'), $wlan_modes[$clone['mode']], $clone['if']); } else { if (isset($id)) {