5
0
mirror of git://git.proxmox.com/git/pve-common.git synced 2024-12-22 21:33:47 +03:00

INotify : check_bridge : fix bridge-ports with vlan tagged interface

Currently with strip vlan tag, that's wrong because
mtu && others check are done the main interface.
This commit is contained in:
Alexandre Derumier 2020-02-07 12:40:28 +01:00 committed by Thomas Lamprecht
parent dd3004e266
commit a70e9925ae
2 changed files with 34 additions and 9 deletions

View File

@ -1,7 +1,6 @@
package PVE::INotify; package PVE::INotify;
# todo: maybe we do not need update_file() ? # todo: maybe we do not need update_file() ?
use strict; use strict;
use warnings; use warnings;
@ -1554,18 +1553,26 @@ sub __write_etc_network_interfaces {
# check bridgeport option # check bridgeport option
my $bridgeports = {}; my $bridgeports = {};
my $bridges = {}; my $bridges = {};
foreach my $iface (keys %$ifaces) { my $ifaces_copy = { %$ifaces };
my $d = $ifaces->{$iface}; foreach my $iface (keys %$ifaces_copy) {
my $d = $ifaces_copy->{$iface};
if ($d->{type} eq 'bridge') { if ($d->{type} eq 'bridge') {
foreach my $p (split (/\s+/, $d->{bridge_ports})) { foreach my $p (split (/\s+/, $d->{bridge_ports})) {
$p =~ s/\.\d+$//; if($p =~ m/(\S+)\.(\d+)$/) {
my $n = $ifaces->{$p}; my $vlanparent = $1;
if (!defined($ifaces_copy->{$p})) {
$ifaces_copy->{$p}->{type} = 'vlan';
$ifaces_copy->{$p}->{method} = 'manual';
$ifaces_copy->{$p}->{method6} = 'manual';
$ifaces_copy->{$p}->{mtu} = $ifaces_copy->{$vlanparent}->{mtu} if defined($ifaces_copy->{$1}->{mtu});
}
}
my $n = $ifaces_copy->{$p};
die "bridge '$iface' - unable to find bridge port '$p'\n" if !$n; die "bridge '$iface' - unable to find bridge port '$p'\n" if !$n;
die "iface $p - ip address can't be set on interface if bridged in $iface\n" die "iface $p - ip address can't be set on interface if bridged in $iface\n"
if ($n->{method} && $n->{method} eq 'static' && $n->{address} ne '0.0.0.0') || if ($n->{method} && $n->{method} eq 'static' && $n->{address} ne '0.0.0.0') ||
($n->{method6} && $n->{method6} eq 'static' && $n->{address} ne '::'); ($n->{method6} && $n->{method6} eq 'static' && $n->{address} ne '::');
&$check_mtu($ifaces_copy, $p, $iface);
&$check_mtu($ifaces, $p, $iface);
$bridgeports->{$p} = $iface; $bridgeports->{$p} = $iface;
} }
$bridges->{$iface} = $d; $bridges->{$iface} = $d;

View File

@ -205,7 +205,7 @@ $config->{ifaces}->{vmbr3} = {
families => ['inet'], families => ['inet'],
bridge_stp => 'off', bridge_stp => 'off',
bridge_fd => 0, bridge_fd => 0,
bridge_ports => 'vxlan3.50', bridge_ports => 'vxlan3',
bridge_vlan_aware => 'yes', bridge_vlan_aware => 'yes',
bridge_vids => '2-10', bridge_vids => '2-10',
autostart => 1 autostart => 1
@ -229,7 +229,7 @@ iface vmbr2 inet manual
auto vmbr3 auto vmbr3
iface vmbr3 inet manual iface vmbr3 inet manual
bridge-ports vxlan3.50 bridge-ports vxlan3
bridge-stp off bridge-stp off
bridge-fd 0 bridge-fd 0
bridge-vlan-aware yes bridge-vlan-aware yes
@ -336,6 +336,17 @@ $config->{ifaces}->{'vmbr4'} = {
autostart => 1 autostart => 1
}; };
$config->{ifaces}->{'vmbr5'} = {
mtu => 1100,
type => 'bridge',
method => 'manual',
families => ['inet'],
bridge_stp => 'off',
bridge_fd => 0,
bridge_ports => 'vmbr4.99',
autostart => 1
};
expect load('loopback') . <<"CHECK"; expect load('loopback') . <<"CHECK";
source-directory interfaces.d source-directory interfaces.d
@ -373,6 +384,13 @@ iface vmbr4 inet manual
bridge-fd 0 bridge-fd 0
mtu 1200 mtu 1200
auto vmbr5
iface vmbr5 inet manual
bridge-ports vmbr4.99
bridge-stp off
bridge-fd 0
mtu 1100
auto vmbr1.100 auto vmbr1.100
iface vmbr1.100 inet manual iface vmbr1.100 inet manual
mtu 1300 mtu 1300