From feb7a4615d707f3243eafee010ac4900693018a1 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Wed, 24 Aug 2022 14:08:38 +0200 Subject: [PATCH] interfaces: remove is_interface_wireless() #5987 Make the presence of 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. --- src/etc/inc/interfaces.inc | 32 +++------------- src/www/interfaces.php | 23 ++++++----- src/www/interfaces_assign.php | 38 ++++--------------- .../widgets/widgets/interface_list.widget.php | 5 +-- 4 files changed, 27 insertions(+), 71 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 6505293db..50e749c0c 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -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); } diff --git a/src/www/interfaces.php b/src/www/interfaces.php index 1d0018496..bc409baee 100644 --- a/src/www/interfaces.php +++ b/src/www/interfaces.php @@ -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]); diff --git a/src/www/interfaces_assign.php b/src/www/interfaces_assign.php index 0eacb95dc..f93a2f5e4 100644 --- a/src/www/interfaces_assign.php +++ b/src/www/interfaces_assign.php @@ -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. */ diff --git a/src/www/widgets/widgets/interface_list.widget.php b/src/www/widgets/widgets/interface_list.widget.php index c881cb6be..b96ee5d3a 100644 --- a/src/www/widgets/widgets/interface_list.widget.php +++ b/src/www/widgets/widgets/interface_list.widget.php @@ -121,13 +121,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'GET') { if (!$listed) { continue; } - $ifinfo = $ifsinfo[$ifdescr]; - $iswireless = is_interface_wireless($ifdescr); ?> + $ifinfo = $ifsinfo[$ifdescr]; ?> - +