From: Alexandre Derumier Date: Fri, 3 May 2019 09:00:19 +0000 (+0200) Subject: vlan: on_update_hook: check vnet tag in allowed vlan X-Git-Url: https://git.proxmox.com/?p=pve-network.git;a=commitdiff_plain;h=da07e2b119d1bf660eaa926377a86b4b4a316370 vlan: on_update_hook: check vnet tag in allowed vlan Signed-off-by: Alexandre Derumier --- diff --git a/PVE/Network/Network/VlanPlugin.pm b/PVE/Network/Network/VlanPlugin.pm index 8b399c8..4f553ab 100644 --- a/PVE/Network/Network/VlanPlugin.pm +++ b/PVE/Network/Network/VlanPlugin.pm @@ -105,11 +105,30 @@ sub on_delete_hook { } sub on_update_hook { - my ($class, $networkid, $scfg) = @_; + my ($class, $transportid, $network_cfg) = @_; + + my $transport = $network_cfg->{ids}->{$transportid}; # verify that vlan-allowed don't conflict with another vlan-allowed transport # verify that vlan-allowed is matching currently vnet tag in this transport + my $vlanallowed = $transport->{'vlan-allowed'}; + if ($vlanallowed) { + foreach my $id (keys %{$network_cfg->{ids}}) { + my $network = $network_cfg->{ids}->{$id}; + if ($network->{type} eq 'vnet' && defined($network->{tag})) { + if(defined($network->{transportzone}) && $network->{transportzone} eq $transportid) { + my $tag = $network->{tag}; + eval { + PVE::Network::Network::Plugin::parse_tag_number_or_range($vlanallowed, '4096', $tag); + }; + if($@) { + die "vlan $tag is not allowed in transport $transportid"; + } + } + } + } + } } 1;