From 6b909723710ff6dc3114d067da2fa07a06775723 Mon Sep 17 00:00:00 2001 From: Stephan de Wit Date: Thu, 24 Aug 2023 09:58:34 +0200 Subject: [PATCH] dhcpd: map interfaces to interface names, not devices --- .../OPNsense/DHCPv4/Api/LeasesController.php | 14 ++++++++------ .../OPNsense/DHCPv6/Api/LeasesController.php | 18 ++++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/DHCPv4/Api/LeasesController.php b/src/opnsense/mvc/app/controllers/OPNsense/DHCPv4/Api/LeasesController.php index aa46f90c6..d5673ee43 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/DHCPv4/Api/LeasesController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/DHCPv4/Api/LeasesController.php @@ -43,7 +43,8 @@ class LeasesController extends ApiControllerBase $backend = new Backend(); $config = Config::getInstance()->object(); $online = []; - $if_map = []; + $if_devs = []; + $if_descrs = []; $ip_ranges = []; $interfaces = []; @@ -60,7 +61,8 @@ class LeasesController extends ApiControllerBase /* get all device names and their associated interface names */ foreach ($config->interfaces->children() as $if => $if_props) { - $if_map[(string)$if_props->if] = (string)$if_props->descr ?: strtoupper($if); + $if_devs[$if] = (string)$if_props->if; + $if_descrs[$if] = (string)$if_props->descr ?: strtoupper($if); } /* list online IPs and MACs */ @@ -153,14 +155,14 @@ class LeasesController extends ApiControllerBase if (!empty($lease['if'])) { /* interface already included */ - $intf = array_search(strtoupper($lease['if']), $if_map); - $intf_descr = $if_map[$intf]; + $intf = $lease['if']; + $intf_descr = $if_descrs[$intf]; } else { /* interface not known, check range */ foreach ($ip_ranges as $cidr => $if_dev) { if (!empty($lease['address']) && Util::isIPInCIDR($lease['address'], $cidr)) { - $intf = $if_dev; - $intf_descr = $if_map[$if_dev]; + $intf = array_search($if_dev, $if_devs); + $intf_descr = $if_descrs[$intf]; break; } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/DHCPv6/Api/LeasesController.php b/src/opnsense/mvc/app/controllers/OPNsense/DHCPv6/Api/LeasesController.php index ae9ac5fd0..088f671a5 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/DHCPv6/Api/LeasesController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/DHCPv6/Api/LeasesController.php @@ -43,7 +43,8 @@ class LeasesController extends ApiControllerBase $backend = new Backend(); $config = Config::getInstance()->object(); $online = []; - $if_map = []; + $if_devs = []; + $if_descrs = []; $ip_ranges = []; $leases = []; $interfaces = []; @@ -61,7 +62,8 @@ class LeasesController extends ApiControllerBase /* get all device names and their associated interface names */ foreach ($config->interfaces->children() as $if => $if_props) { - $if_map[(string)$if_props->if] = (string)$if_props->descr ?: strtoupper($if); + $if_devs[$if] = (string)$if_props->if; + $if_descrs[$if] = (string)$if_props->descr ?: strtoupper($if); } /* list online IPs and MACs */ @@ -155,8 +157,8 @@ class LeasesController extends ApiControllerBase if ($ndp['ip'] == $lease['address']) { $leases[$idx]['mac'] = $ndp['mac']; $leases[$idx]['man'] = empty($ndp['manufacturer']) ? '' : $ndp['manufacturer']; - $leases[$idx]['if'] = $ndp['intf']; - $leases[$idx]['if_descr'] = $if_map[$ndp['intf']]; + $leases[$idx]['if'] = array_search($ndp['intf'], $if_devs); + $leases[$idx]['if_descr'] = $if_descrs[$leases[$idx]['if']]; if (!empty($leases[$idx]['if_descr'])) { $interfaces[$leases[$idx]['if']] = $leases[$idx]['if_descr']; } @@ -194,13 +196,13 @@ class LeasesController extends ApiControllerBase $intf = ''; $intf_descr = ''; if (!empty($lease['if'])) { - $intf = array_search(strtoupper($lease['if']), $if_map); - $intf_descr = $if_map[$intf]; + $intf = $lease['if']; + $intf_descr = $if_descrs[$intf]; } else { foreach ($ip_ranges as $cidr => $if) { if (!empty($lease['address']) && Util::isIPInCIDR($lease['address'], $cidr)) { - $intf = $if; - $intf_descr = $if_map[$intf]; + $intf = array_search($if, $if_devs); + $intf_descr = $if_descrs[$intf]; break; } }