]> git.proxmox.com Git - pve-network.git/commitdiff
vlan: on_update_hook: check vnet tag in allowed vlan
authorAlexandre Derumier <aderumier@odiso.com>
Fri, 3 May 2019 09:00:19 +0000 (11:00 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 6 May 2019 05:57:56 +0000 (07:57 +0200)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/Network/Network/VlanPlugin.pm

index 8b399c86be36e20d37d91c77cb76d3d14718599e..4f553abd25bbdfa93388b6aabb9bbf82ebe16483 100644 (file)
@@ -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;