From: Stoiko Ivanov <s.ivanov@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH common/stable-8] backport: fix #7193: allow vlan-interfaces as physical bridge ports
Date: Tue, 30 Dec 2025 17:23:45 +0100 [thread overview]
Message-ID: <20251230162415.665391-1-s.ivanov@proxmox.com> (raw)
the bug addressed in:
https://lore.proxmox.com/pve-devel/20251230160730.641868-1-s.ivanov@proxmox.com/T/#u
is also affecting current PVE 8.4 installations.
This patch backports the changes for 9 to PVE 8 (backport consists of
moving the code to PVE/Network.pm as PVE/IPRoute2.pm was introduced in
PVE 9 and adapting to the lack of `use v5.36;` in PVE8).
short summary of the cause of the issue:
057f62f ("fix #7118: fix bridge port detection when plugging netdev with vlan")
did not address that ports in the form of eno1.1234 (vlan 1234 on
eno1) were allowed as bridge-ports.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
minimally tested on a PVE 8 VM with a debian container, refusing to start
without the patch, starting with it.
src/PVE/Network.pm | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm
index bdc1627..9583549 100644
--- a/src/PVE/Network.pm
+++ b/src/PVE/Network.pm
@@ -943,7 +943,7 @@ sub is_linux_bridge {
my ($iface_name) = @_;
check_iface_name($iface_name);
- die "interface $iface_name does not exist\n" if ! -l "/sys/class/net/$iface_name";
+ die "interface $iface_name does not exist\n" if !-l "/sys/class/net/$iface_name";
return -d "/sys/class/net/$iface_name/bridge";
}
@@ -970,7 +970,9 @@ sub get_physical_bridge_ports {
$ip_links = ip_link_details() if !defined($ip_links);
return grep {
- (ip_link_is_physical($ip_links->{$_}) || ip_link_is_bond($ip_links->{$_}))
+ (ip_link_is_physical($ip_links->{$_})
+ || ip_link_is_bond($ip_links->{$_})
+ || ip_link_is_vlan($ip_links->{$_}))
&& defined($ip_links->{$_}->{master})
&& $ip_links->{$_}->{master} eq $bridge
} keys $ip_links->%*;
@@ -983,7 +985,7 @@ sub ip_link_details {
['ip', '-details', '-json', 'link', 'show'],
outfunc => sub {
$link_json .= shift;
- }
+ },
);
my $links = JSON::decode_json($link_json);
@@ -1010,6 +1012,15 @@ sub ip_link_is_bond {
&& $ip_link->{linkinfo}->{info_kind} eq 'bond';
}
+sub ip_link_is_vlan {
+ my ($ip_link) = @_;
+ return
+ $ip_link->{link_type} eq 'ether'
+ && defined($ip_link->{linkinfo})
+ && defined($ip_link->{linkinfo}->{info_kind})
+ && $ip_link->{linkinfo}->{info_kind} eq "vlan";
+}
+
sub altname_mapping {
my ($ip_links) = @_;
--
2.47.3
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next reply other threads:[~2025-12-30 16:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-30 16:23 Stoiko Ivanov [this message]
2025-12-31 7:16 ` [pve-devel] applied: " Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251230162415.665391-1-s.ivanov@proxmox.com \
--to=s.ivanov@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox