[pve-devel] [PATCH v3 pve-common 4/5] Inotify : add check vlan

Dennis Busch dennis.busch at stacktrace.de
Tue Aug 28 11:58:21 CEST 2018


Hello Alexandre,

your patch kills the option to just create vlans by using e.g. 
"bond0.111" as bridge_pots in a vmbr definition on the GUI because it 
then complains about a bond0.111 that is not defined. Makes big trouble 
at one of our customers. Could you please have another look at this?

Best regards

Dennis


stacktrace GmbH
Querstraße 3 | 96237 Ebersdorf

Amtsgericht Coburg, HRB 5043
Geschäftsführer: Dennis Busch | Jürgen Haas

Tel:     +49 9562 78 48 010
Mobil:   +49 171  12 62 761
E-Mail:  dennis.busch at stacktrace.de
De-Mail: dennis.busch at gmx.de-mail.de

Am 05.07.2018 um 02:56 schrieb Alexandre Derumier:
> 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 ++++++++++++++++
>   test/etc_network_interfaces/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
> 



More information about the pve-devel mailing list