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

index 48e7d68394c09bb9f8b4a4c2997c55dca0cccf19..d6cc4f68cd49ac2bca2067b2fde37111d763d5b4 100644 (file)
@@ -90,12 +90,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 vxlan-allowed don't conflict with another vxlan-allowed transport
 
     # verify that vxlan-allowed is matching currently vnet tag in this transport  
-
+    my $vxlanallowed = $transport->{'vxlan-allowed'};
+    if ($vxlanallowed) {
+       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($vxlanallowed, '16777216', $tag);
+                   };
+                   if($@) {
+                       die "vnet $id - vlan $tag is not allowed in transport $transportid";
+                   }
+               }
+           }
+       }
+    }
 }
 
 1;