[pve-devel] [PATCH v2 pve-network 3/5] zones: evpn: move vnet mac option to evpn zone plugin

Alexandre Derumier aderumier at odiso.com
Wed Apr 21 22:55:47 CEST 2021


This is only used by evpn plugin, and we can have
same anycast mac for all vnets like cisco,juniper,arista...

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/Network/SDN/VnetPlugin.pm                |  6 ------
 PVE/Network/SDN/Zones/EvpnPlugin.pm          | 17 +++++++++++------
 test/zones/evpn/ipv4/expected_sdn_interfaces |  1 +
 test/zones/evpn/ipv4/sdn_config              |  2 +-
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/PVE/Network/SDN/VnetPlugin.pm b/PVE/Network/SDN/VnetPlugin.pm
index 34841ae..96a13b4 100644
--- a/PVE/Network/SDN/VnetPlugin.pm
+++ b/PVE/Network/SDN/VnetPlugin.pm
@@ -70,11 +70,6 @@ sub properties {
             description => "alias name of the vnet",
 	    optional => 1,
         },
-        mac => {
-            type => 'string',
-            description => "Anycast router mac address",
-	    optional => 1, format => 'mac-addr'
-        }
     };
 }
 
@@ -83,7 +78,6 @@ sub options {
         zone => { optional => 0},
         tag => { optional => 1},
         alias => { optional => 1 },
-        mac => { optional => 1 },
         vlanaware => { optional => 1 },
     };
 }
diff --git a/PVE/Network/SDN/Zones/EvpnPlugin.pm b/PVE/Network/SDN/Zones/EvpnPlugin.pm
index ca000cf..d68d3ee 100644
--- a/PVE/Network/SDN/Zones/EvpnPlugin.pm
+++ b/PVE/Network/SDN/Zones/EvpnPlugin.pm
@@ -28,6 +28,11 @@ sub properties {
 	    type => 'string',
 	    description => "Frr router name",
 	},
+        'mac' => {
+            type => 'string',
+            description => "Anycast logical router mac address",
+            optional => 1, format => 'mac-addr'
+        },
 	'exitnodes' => get_standard_option('pve-node-list'),
     };
 }
@@ -40,6 +45,7 @@ sub options {
         controller => { optional => 0 },
 	exitnodes => { optional => 1 },
 	mtu => { optional => 1 },
+	mac => { optional => 1 },
 	dns => { optional => 1 },
 	reversedns => { optional => 1 },
 	dnszone => { optional => 1 },
@@ -55,7 +61,7 @@ sub generate_sdn_config {
     my $alias = $vnet->{alias};
     my $ipv4 = $vnet->{ipv4};
     my $ipv6 = $vnet->{ipv6};
-    my $mac = $vnet->{mac};
+    my $mac = $plugin_config->{'mac'};
 
     my $vrf_iface = "vrf_$zoneid";
     my $vrfvxlan = $plugin_config->{'vrf-vxlan'};
@@ -184,6 +190,10 @@ sub on_update_hook {
 		if (defined($zone_cfg->{ids}->{$id}->{'vrf-vxlan'}) && $zone_cfg->{ids}->{$id}->{'vrf-vxlan'} eq $vrfvxlan);
     }
 
+    if (!defined($zone_cfg->{ids}->{$zoneid}->{'mac'})) {
+	my $dc = PVE::Cluster::cfs_read_file('datacenter.cfg');
+	$zone_cfg->{ids}->{$zoneid}->{'mac'} = PVE::Tools::random_ether_addr($dc->{mac_prefix});
+    }
 }
 
 
@@ -206,11 +216,6 @@ sub vnet_update_hook {
 	next if $other_zone->{type} ne 'vxlan' && $other_zone->{type} ne 'evpn';
 	raise_param_exc({ tag => "vxlan tag $tag already exist in vnet $id in zone $other_zoneid "}) if $other_tag && $tag eq $other_tag;
     }
-
-    if (!defined($vnet->{mac})) {
-	my $dc = PVE::Cluster::cfs_read_file('datacenter.cfg');
-	$vnet->{mac} = PVE::Tools::random_ether_addr($dc->{mac_prefix});
-    }
 }
 
 
diff --git a/test/zones/evpn/ipv4/expected_sdn_interfaces b/test/zones/evpn/ipv4/expected_sdn_interfaces
index 6d2d3b6..e2d5a75 100644
--- a/test/zones/evpn/ipv4/expected_sdn_interfaces
+++ b/test/zones/evpn/ipv4/expected_sdn_interfaces
@@ -3,6 +3,7 @@
 auto myvnet
 iface myvnet
 	address 10.0.0.1/24
+	hwaddress A2:1D:CB:1A:C0:8B
 	bridge_ports vxlan_myvnet
 	bridge_stp off
 	bridge_fd 0
diff --git a/test/zones/evpn/ipv4/sdn_config b/test/zones/evpn/ipv4/sdn_config
index 4c115a9..dd73b5c 100644
--- a/test/zones/evpn/ipv4/sdn_config
+++ b/test/zones/evpn/ipv4/sdn_config
@@ -7,7 +7,7 @@
              },
 
   zones   => {
-               ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000 } },
+               ids => { myzone => { ipam => "pve", type => "evpn", controller => "evpnctl", 'vrf-vxlan' => 1000, 'mac' => 'A2:1D:CB:1A:C0:8B' } },
              },
   controllers  => {
                ids => { evpnctl => { type => "evpn", 'peers' => '192.168.0.1,192.168.0.2,192.168.0.3', asn => "65000" } },
-- 
2.20.1





More information about the pve-devel mailing list