From 5ca07ed9d4b394934521d098bb6cce4c3188ad38 Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Mon, 5 Oct 2020 17:08:42 +0200 Subject: [PATCH] zone: add vnet_update_hook move verify_tag code in this hook add mac address generation for simple && evpn plugin Signed-off-by: Alexandre Derumier --- PVE/API2/Network/SDN/Vnets.pm | 4 ++-- PVE/Network/SDN/Zones/EvpnPlugin.pm | 19 +++++++++++++++---- PVE/Network/SDN/Zones/Plugin.pm | 5 +++-- PVE/Network/SDN/Zones/QinQPlugin.pm | 8 ++++---- PVE/Network/SDN/Zones/SimplePlugin.pm | 14 +++++++++++--- PVE/Network/SDN/Zones/VlanPlugin.pm | 8 ++++---- PVE/Network/SDN/Zones/VxlanPlugin.pm | 8 ++++---- 7 files changed, 43 insertions(+), 23 deletions(-) diff --git a/PVE/API2/Network/SDN/Vnets.pm b/PVE/API2/Network/SDN/Vnets.pm index 23bc8bb..58ec21f 100644 --- a/PVE/API2/Network/SDN/Vnets.pm +++ b/PVE/API2/Network/SDN/Vnets.pm @@ -131,7 +131,7 @@ __PACKAGE__->register_method ({ my $zoneid = $cfg->{ids}->{$id}->{zone}; my $plugin_config = $zone_cfg->{ids}->{$zoneid}; my $plugin = PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type}); - $plugin->verify_tag($opts->{tag}); + $plugin->vnet_update_hook($cfg->{ids}->{$id}); my $subnet_cfg = PVE::Network::SDN::Subnets::config(); @@ -174,7 +174,7 @@ __PACKAGE__->register_method ({ my $zoneid = $cfg->{ids}->{$id}->{zone}; my $plugin_config = $zone_cfg->{ids}->{$zoneid}; my $plugin = PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type}); - $plugin->verify_tag($opts->{tag}); + $plugin->vnet_update_hook($cfg->{ids}->{$id}); my $subnet_cfg = PVE::Network::SDN::Subnets::config(); diff --git a/PVE/Network/SDN/Zones/EvpnPlugin.pm b/PVE/Network/SDN/Zones/EvpnPlugin.pm index 83ceb3a..0ebe13e 100644 --- a/PVE/Network/SDN/Zones/EvpnPlugin.pm +++ b/PVE/Network/SDN/Zones/EvpnPlugin.pm @@ -5,6 +5,9 @@ use warnings; use PVE::Network::SDN::Zones::VxlanPlugin; use PVE::Tools qw($IPV4RE); use PVE::INotify; +use PVE::Cluster; +use PVE::Tools; + use PVE::Network::SDN::Controllers::EvpnPlugin; use base('PVE::Network::SDN::Zones::VxlanPlugin'); @@ -143,15 +146,23 @@ sub on_update_hook { die "vrf-vxlan $vrfvxlan is already declared in $id" if (defined($zone_cfg->{ids}->{$id}->{'vrf-vxlan'}) && $zone_cfg->{ids}->{$id}->{'vrf-vxlan'} eq $vrfvxlan); } + } -sub verify_tag { - my ($class, $tag) = @_; - raise_param_exc({ tag => "missing vxlan tag"}) if !defined($tag); - raise_param_exc({ tag => "vxlan tag max value is 16777216"}) if $tag > 16777216; +sub vnet_update_hook { + my ($class, $vnet) = @_; + + raise_param_exc({ tag => "missing vxlan tag"}) if !defined($vnet->{tag}); + raise_param_exc({ tag => "vxlan tag max value is 16777216"}) if $vnet->{tag} > 16777216; + + if (!defined($vnet->{mac})) { + my $dc = PVE::Cluster::cfs_read_file('datacenter.cfg'); + $vnet->{mac} = PVE::Tools::random_ether_addr($dc->{mac_prefix}); + } } + 1; diff --git a/PVE/Network/SDN/Zones/Plugin.pm b/PVE/Network/SDN/Zones/Plugin.pm index 451699f..7f6db0e 100644 --- a/PVE/Network/SDN/Zones/Plugin.pm +++ b/PVE/Network/SDN/Zones/Plugin.pm @@ -139,8 +139,9 @@ sub on_update_hook { # do nothing by default } -sub verify_tag { - my ($class, $tag) = @_; +sub vnet_update_hook { + my ($class, $vnet) = @_; + # do nothing by default } diff --git a/PVE/Network/SDN/Zones/QinQPlugin.pm b/PVE/Network/SDN/Zones/QinQPlugin.pm index 5fffd15..c828af4 100644 --- a/PVE/Network/SDN/Zones/QinQPlugin.pm +++ b/PVE/Network/SDN/Zones/QinQPlugin.pm @@ -211,11 +211,11 @@ sub status { return $err_msg; } -sub verify_tag { - my ($class, $tag) = @_; +sub vnet_update_hook { + my ($class, $vnet) = @_; - raise_param_exc({ tag => "missing vlan tag"}) if !defined($tag); - raise_param_exc({ tag => "vlan tag max value is 4096"}) if $tag > 4096; + raise_param_exc({ tag => "missing vlan tag"}) if !defined($vnet->{tag}); + raise_param_exc({ tag => "vlan tag max value is 4096"}) if $vnet->{tag} > 4096; } 1; diff --git a/PVE/Network/SDN/Zones/SimplePlugin.pm b/PVE/Network/SDN/Zones/SimplePlugin.pm index 312dcbf..7006b13 100644 --- a/PVE/Network/SDN/Zones/SimplePlugin.pm +++ b/PVE/Network/SDN/Zones/SimplePlugin.pm @@ -4,6 +4,8 @@ use strict; use warnings; use PVE::Network::SDN::Zones::Plugin; use PVE::Exception qw(raise raise_param_exc); +use PVE::Cluster; +use PVE::Tools; use base('PVE::Network::SDN::Zones::Plugin'); @@ -71,10 +73,16 @@ sub status { return $err_msg; } -sub verify_tag { - my ($class, $tag) = @_; - raise_param_exc({ tag => "vlan tag is not allowed on simple bridge"}) if defined($tag); +sub vnet_update_hook { + my ($class, $vnet) = @_; + + raise_param_exc({ tag => "vlan tag is not allowed on simple bridge"}) if defined($vnet->{tag}); + + if (!defined($vnet->{mac})) { + my $dc = PVE::Cluster::cfs_read_file('datacenter.cfg'); + $vnet->{mac} = PVE::Tools::random_ether_addr($dc->{mac_prefix}); + } } 1; diff --git a/PVE/Network/SDN/Zones/VlanPlugin.pm b/PVE/Network/SDN/Zones/VlanPlugin.pm index 8485ae1..7f90d31 100644 --- a/PVE/Network/SDN/Zones/VlanPlugin.pm +++ b/PVE/Network/SDN/Zones/VlanPlugin.pm @@ -170,11 +170,11 @@ sub status { return $err_msg; } -sub verify_tag { - my ($class, $tag) = @_; +sub vnet_update_hook { + my ($class, $vnet) = @_; - raise_param_exc({ tag => "missing vlan tag"}) if !defined($tag); - raise_param_exc({ tag => "vlan tag max value is 4096"}) if $tag > 4096; + raise_param_exc({ tag => "missing vlan tag"}) if !defined($vnet->{tag}); + raise_param_exc({ tag => "vlan tag max value is 4096"}) if $vnet->{tag} > 4096; } 1; diff --git a/PVE/Network/SDN/Zones/VxlanPlugin.pm b/PVE/Network/SDN/Zones/VxlanPlugin.pm index 8386c43..79af054 100644 --- a/PVE/Network/SDN/Zones/VxlanPlugin.pm +++ b/PVE/Network/SDN/Zones/VxlanPlugin.pm @@ -89,11 +89,11 @@ sub generate_sdn_config { return $config; } -sub verify_tag { - my ($class, $tag) = @_; +sub vnet_update_hook { + my ($class, $vnet) = @_; - raise_param_exc({ tag => "missing vxlan tag"}) if !defined($tag); - raise_param_exc({ tag => "vxlan tag max value is 16777216"}) if $tag > 16777216; + raise_param_exc({ tag => "missing vxlan tag"}) if !defined($vnet->{tag}); + raise_param_exc({ tag => "vxlan tag max value is 16777216"}) if $vnet->{tag} > 16777216; } 1; -- 2.39.2