From e960f7948f76f8d0cdb887884d940233b377dcda Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 16 Jul 2021 09:40:49 +0200 Subject: [PATCH] fix #2831: never set bridge_fd to 0 with STP on MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit it's an invalid combination that causes the network reload/setup to fail. unfortunately, this is not caught by ifupdown2 itself, but only rejected by the kernel with ERANGE over netlink. Signed-off-by: Fabian Grünbichler --- src/PVE/INotify.pm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index 8cf4b44..4f682be 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -1061,13 +1061,12 @@ sub __read_etc_network_interfaces { } elsif ($iface =~ m/^vmbr\d+$/) { if (!$d->{ovs_type}) { $d->{type} = 'bridge'; - - if (!defined ($d->{bridge_fd})) { - $d->{bridge_fd} = 0; - } if (!defined ($d->{bridge_stp})) { $d->{bridge_stp} = 'off'; } + if (!defined($d->{bridge_fd}) && $d->{bridge_stp} eq 'off') { + $d->{bridge_fd} = 0; + } } elsif ($d->{ovs_type} eq 'OVSBridge') { $d->{type} = $d->{ovs_type}; } @@ -1259,11 +1258,16 @@ sub __interface_to_string { $done->{bridge_ports} = 1; my $v = defined($d->{bridge_stp}) ? $d->{bridge_stp} : 'off'; + my $no_stp = $v eq 'off'; + $raw .= "\tbridge-stp $v\n"; $done->{bridge_stp} = 1; $v = defined($d->{bridge_fd}) ? $d->{bridge_fd} : 0; - $raw .= "\tbridge-fd $v\n"; + # 0 is only allowed when STP is disabled + if ($v || $no_stp) { + $raw .= "\tbridge-fd $v\n"; + } $done->{bridge_fd} = 1; if( defined($d->{bridge_vlan_aware})) { -- 2.39.2