interfaces: remove is_interface_wireless() #5987

Make the presence of <wireless/> node authoritative except
for the assignment page where we need to set this node in
the first place.

Now pivot away from a handrolled regex of devices names to
trust the output of the sysctl net.wlan.devices which is also
the prefix for our clones.
This commit is contained in:
Franco Fichtner 2022-08-24 14:08:38 +02:00
parent c65133f9b9
commit feb7a4615d
4 changed files with 27 additions and 71 deletions

View File

@ -190,9 +190,8 @@ function interfaces_create_wireless_clones($verbose = false)
}
foreach (array_keys(get_configured_interface_with_descr()) as $if) {
$realif = $config['interfaces'][$if]['if'];
if (is_interface_wireless($realif)) {
interface_wireless_clone(interface_get_wireless_clone($realif), $config['interfaces'][$if]);
if (isset($config['interfaces'][$if]['wireless'])) {
interface_wireless_clone(interface_get_wireless_clone($config['interfaces'][$if]['if']), $config['interfaces'][$if]);
}
}
@ -857,7 +856,7 @@ function interface_bring_down($interface = 'wan', $ifacecfg = false)
* interface is down. They will also use 100% CPU if running after
* the wireless clone gets deleted.
*/
if (!empty($ifcfg['wireless'])) {
if (isset($ifcfg['wireless'])) {
kill_wpasupplicant($realif);
kill_hostapd($realif);
}
@ -1537,10 +1536,6 @@ function interface_sync_wireless_clones(&$ifcfg, $sync_changes = false) /* XXX k
'txpower',
);
if (!is_interface_wireless($ifcfg['if'])) {
return;
}
$baseif = interface_get_wireless_base($ifcfg['if']);
foreach (array_keys(legacy_config_get_interfaces(['virtual' => false])) as $if) {
@ -1607,7 +1602,7 @@ function interface_wireless_configure($if, &$wancfg)
{
global $config;
if (empty($wancfg['wireless'])) {
if (!isset($wancfg['wireless'])) {
return;
}
@ -3759,23 +3754,6 @@ function get_interface_ipv6($interface = 'wan', $ifconfig_details = null)
return $ipv6;
}
/****f* interfaces/is_interface_wireless
* NAME
* is_interface_wireless - Returns if an interface is wireless
* RESULT
* $tmp - Returns if an interface is wireless
******/
function is_interface_wireless($interface)
{
global $config;
$friendly = convert_real_interface_to_friendly_interface_name($interface);
/* XXX we might consider checking clones if wireless node is not set by default */
return isset($config['interfaces'][$friendly]['wireless']);
}
function get_interface_mac($interface, $ifconfig_details = null)
{
$intf_details = [];
@ -4005,7 +3983,7 @@ function get_interfaces_info($include_unlinked = false)
if ($ifinfo['status'] == "up") {
$wifconfiginfo = array();
if (is_interface_wireless($ifdescr)) {
if (isset($config['interfaces'][$ifdescr]['wireless'])) {
exec("/sbin/ifconfig {$ifinfo['if']} list sta", $wifconfiginfo);
array_shift($wifconfiginfo);
}

View File

@ -257,13 +257,13 @@ function test_wireless_capability($if, $cap)
return false;
}
function get_wireless_modes($interface) {
/* return wireless modes and channels */
$wireless_modes = array();
/* return wireless modes and channels */
function get_wireless_modes($interface)
{
$wireless_modes = [];
$cloned_interface = get_real_interface($interface);
if ($cloned_interface && is_interface_wireless($cloned_interface)) {
if ($cloned_interface) {
$chan_list = "/sbin/ifconfig {$cloned_interface} list chan";
$stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'";
$format_list = "/usr/bin/awk '{print \$5 \" \" \$6 \",\" \$1}'";
@ -298,15 +298,17 @@ function get_wireless_modes($interface) {
}
}
}
return($wireless_modes);
return $wireless_modes;
}
/* return channel numbers, frequency, max txpower, and max regulation txpower */
function get_wireless_channel_info($interface) {
$wireless_channels = array();
function get_wireless_channel_info($interface)
{
$wireless_channels = [];
$cloned_interface = get_real_interface($interface);
if ($cloned_interface && is_interface_wireless($cloned_interface)) {
if ($cloned_interface) {
$chan_list = "/sbin/ifconfig {$cloned_interface} list txpower";
$stack_list = "/usr/bin/awk -F\"Channel \" '{ gsub(/\\*/, \" \"); print \$2 \"\\\n\" \$3 }'";
$format_list = "/usr/bin/awk '{print \$1 \",\" \$3 \" \" \$4 \",\" \$5 \",\" \$7}'";
@ -321,7 +323,8 @@ function get_wireless_channel_info($interface) {
}
}
}
return($wireless_channels);
return $wireless_channels;
}
$ifdescrs = legacy_config_get_interfaces(['virtual' => false]);

View File

@ -36,36 +36,11 @@ require_once("interfaces.inc");
function match_wireless_interface($int)
{
$wireless_prefix = [
'an',
'ath',
'bwi',
'bwn',
'ipw',
'iwi',
'iwlwifi',
'iwm',
'iwn',
'malo',
'mwl',
'ndis',
'otus',
'ral',
'rsu',
'rtwn',
'rum',
'run',
'uath',
'upgt',
'ural',
'urtw',
'wi',
'wlan',
'wpi',
'zyd',
];
global $wireless_devices;
return preg_match('/^(' . implode('|', $wireless_prefix) . ')/', $int);
/* XXX check for wireless clones? */
return preg_match('/^(' . implode('|', $wireless_devices) . ')/', $int);
}
function link_interface_to_group($int)
@ -184,6 +159,7 @@ function list_interfaces()
return $interfaces;
}
$wireless_devices = legacy_interface_listget('wlan');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input_errors = [];
@ -226,7 +202,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$config['interfaces'][$newifname]['ipaddr'] = $interfaces[$_POST['if_add']]['type'];
}
if (match_wireless_interface($_POST['if_add'])) {
$config['interfaces'][$newifname]['wireless'] = array();
$config['interfaces'][$newifname]['wireless'] = [];
interface_sync_wireless_clones($config['interfaces'][$newifname], false);
}
@ -373,7 +349,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
if ($reloadif) {
if (match_wireless_interface($ifport)) {
if (isset($config['interfaces'][$ifname]['wireless'])) {
interface_sync_wireless_clones($config['interfaces'][$ifname], false);
}
/* Reload all for the interface. */

View File

@ -121,13 +121,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (!$listed) {
continue;
}
$ifinfo = $ifsinfo[$ifdescr];
$iswireless = is_interface_wireless($ifdescr); ?>
$ifinfo = $ifsinfo[$ifdescr]; ?>
<tr id="interface_widget_item_<?= html_safe($ifname) ?>">
<td style="width:15%; word-break: break-word;">
<?php if (isset($ifinfo['ppplink'])): ?>
<span title="3g" class="fa fa-mobile text-success"></span>
<?php elseif ($iswireless): ?>
<?php elseif (isset($config['interfaces'][$ifdescr]['wireless'])): ?>
<?php if ($ifinfo['status'] == 'associated' || $ifinfo['status'] == 'up'): ?>
<span title="wlan" class="fa fa-signal text-success"></span>
<?php else: ?>