From 550f5e35b343ee6d7cdcd9ea6fa4f5d6f3487e72 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Mon, 6 Dec 2021 15:00:18 +0100 Subject: [PATCH] interafces: patch in parent devices for LAGG and bridge --- src/etc/inc/interfaces.inc | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc index 810764a48..e2e1f6f79 100644 --- a/src/etc/inc/interfaces.inc +++ b/src/etc/inc/interfaces.inc @@ -3645,19 +3645,33 @@ function interface_parent_devices($interface) $ifcfg = $config['interfaces'][$interface]; if (strstr($ifcfg['if'], '_vlan')) { - if (isset($config['vlans']['vlan'])) { - foreach ($config['vlans']['vlan'] as $vlanidx => $vlan) { - if ($ifcfg['if'] == $vlan['vlanif']) { - $parents[] = $vlan['if']; - break; - } + foreach (config_read_array('vlans', 'vlan') as $vlan) { + if ($ifcfg['if'] == $vlan['vlanif']) { + $parents[] = $vlan['if']; + break; + } + } + } elseif (strstr($ifcfg['if'], 'bridge')) { + foreach (config_read_array('bridges', 'bridged') as $bridge) { + if ($ifcfg['if'] == $bridge['bridgeif']) { + foreach (explode(',', $bridge['members']) as $member) { + /* bridge stores members as configured interfaces */ + $parents[] = get_real_interface($member); + } + break; + } + } + } elseif (strstr($ifcfg['if'], 'lagg')) { + foreach (config_read_array('laggs', 'lagg') as $lagg) { + if ($ifcfg['if'] == $lagg['laggif']) { + foreach (explode(',', $lagg['members']) as $member) { + $parents[] = $member; + } + break; } } } - /* XXX LAGG */ - /* XXX bridge */ - return $parents; }