From c4e564708b38c9863bb946778580704e48f3b8b2 Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Thu, 5 Jul 2018 02:56:33 +0200 Subject: [PATCH] Inotify : add check vlan verify than parent interface exist verify than parent interface type is eth,bond,bridge verify than parent bridge is vlan aware if type bridge --- src/PVE/INotify.pm | 19 ++++++++++++ .../t.create_network.pl | 30 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index f4a5945..f0f3144 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -1358,6 +1358,25 @@ sub __write_etc_network_interfaces { } } + # check vlan + foreach my $iface (keys %$ifaces) { + my $d = $ifaces->{$iface}; + if ($d->{type} eq 'vlan' && $iface =~ m/^(\S+)\.\d+$/) { + my $p = $1; + my $n = $ifaces->{$p}; + + die "vlan '$iface' - unable to find parent '$p'\n" + if $n->{exists} eq 0; + + if ($n->{type} eq 'bridge' && !$n->{bridge_vlan_aware}) { + die "vlan '$iface' - bridge vlan aware is not enabled on parent '$p'\n"; + } elsif ($n->{type} ne 'eth' && $n->{type} ne 'bridge' && $n->{type} ne 'bond') { + die "vlan '$iface' - wrong interface type on parent '$p' " . + "('$n->{type}' != 'eth|bond|bridge' )\n"; + } + } + } + # check bridgeport option my $bridgeports = {}; my $bridges = {}; diff --git a/test/etc_network_interfaces/t.create_network.pl b/test/etc_network_interfaces/t.create_network.pl index da47999..fda7237 100644 --- a/test/etc_network_interfaces/t.create_network.pl +++ b/test/etc_network_interfaces/t.create_network.pl @@ -60,7 +60,6 @@ $config->{ifaces}->{vmbr1} = { autostart => 1 }; - $config->{ifaces}->{vmbr2} = { type => 'bridge', method => 'manual', @@ -116,6 +115,26 @@ $config->{ifaces}->{vxlan3} = { autostart => 1 }; +$config->{ifaces}->{'vmbr1.100'} = { + type => 'vlan', + method => 'manual', + families => ['inet'], + autostart => 1 +}; + +$config->{ifaces}->{'bond0.100'} = { + type => 'vlan', + method => 'manual', + families => ['inet'], + autostart => 1 +}; + +$config->{ifaces}->{'eth1.100'} = { + type => 'vlan', + method => 'manual', + families => ['inet'], + autostart => 1 +}; expect load('loopback') . <<"CHECK"; source-directory interfaces.d @@ -134,6 +153,9 @@ iface eth2 inet manual auto eth3 iface eth3 inet manual +auto eth1.100 +iface eth1.100 inet manual + auto bond0 iface bond0 inet manual bond-slaves eth2 eth3 @@ -141,6 +163,9 @@ iface bond0 inet manual bond-mode 802.3ad bond-xmit-hash-policy layer3+4 +auto bond0.100 +iface bond0.100 inet manual + auto vmbr0 iface vmbr0 inet static address 10.0.0.2 @@ -172,6 +197,9 @@ iface vmbr3 inet manual bridge-vlan-aware yes bridge-vids 2-10 +auto vmbr1.100 +iface vmbr1.100 inet manual + auto vxlan1 iface vxlan1 inet manual vxlan-id 1 -- 2.39.2