From 0589eb09129e8e81dbb15dd98e06b915ec90a722 Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Mon, 30 Sep 2019 11:03:33 +0200 Subject: [PATCH] vxlan: move transport controller config to frrplugin To be able to use differents controllers model Signed-off-by: Alexandre Derumier --- PVE/Network/SDN.pm | 4 +-- PVE/Network/SDN/FrrPlugin.pm | 51 ++++++++++++++++++++++++++++++++++ PVE/Network/SDN/VxlanPlugin.pm | 50 --------------------------------- 3 files changed, 53 insertions(+), 52 deletions(-) diff --git a/PVE/Network/SDN.pm b/PVE/Network/SDN.pm index 1e5ba67..b5d98b7 100644 --- a/PVE/Network/SDN.pm +++ b/PVE/Network/SDN.pm @@ -199,8 +199,8 @@ sub generate_controller_config { if ($controllerid) { my $controller = $sdn_cfg->{ids}->{$controllerid}; if ($controller) { - my $controller_plugin = PVE::Network::SDN::Plugin->lookup($plugin_config->{type}); - $controller_plugin->generate_controller_config($plugin_config, $controller, $id, $uplinks, $config); + my $controller_plugin = PVE::Network::SDN::Plugin->lookup($controller->{type}); + $controller_plugin->generate_controller_transport_config($plugin_config, $controller, $id, $uplinks, $config); } } } diff --git a/PVE/Network/SDN/FrrPlugin.pm b/PVE/Network/SDN/FrrPlugin.pm index 455b185..532247a 100644 --- a/PVE/Network/SDN/FrrPlugin.pm +++ b/PVE/Network/SDN/FrrPlugin.pm @@ -119,6 +119,56 @@ sub generate_controller_config { return $config; } +sub generate_controller_transport_config { + my ($class, $plugin_config, $router, $id, $uplinks, $config) = @_; + + my $vrf = $plugin_config->{'vrf'}; + my $vrfvxlan = $plugin_config->{'vrf-vxlan'}; + my $asn = $router->{asn}; + my $gatewaynodes = $router->{'gateway-nodes'}; + + return if !$vrf || !$vrfvxlan || !$asn; + + #vrf + my @router_config = (); + push @router_config, "vni $vrfvxlan"; + push(@{$config->{frr}->{vrf}->{"$vrf"}}, @router_config); + + @router_config = (); + + my $is_gateway = undef; + my $local_node = PVE::INotify::nodename(); + + foreach my $gatewaynode (PVE::Tools::split_list($gatewaynodes)) { + $is_gateway = 1 if $gatewaynode eq $local_node; + } + + if ($is_gateway) { + + @router_config = (); + #import /32 routes of evpn network from vrf1 to default vrf (for packet return) + #frr 7.1 tag is bugged -> works fine with 7.1 stable branch(20190829-02-g6ba76bbc1) + #https://github.com/FRRouting/frr/issues/4905 + push @router_config, "import vrf $vrf"; + push(@{$config->{frr}->{router}->{"bgp $asn"}->{"address-family"}->{"ipv4 unicast"}}, @router_config); + push(@{$config->{frr}->{router}->{"bgp $asn"}->{"address-family"}->{"ipv6 unicast"}}, @router_config); + + @router_config = (); + #redistribute connected to be able to route to local vms on the gateway + push @router_config, "redistribute connected"; + push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"ipv4 unicast"}}, @router_config); + push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"ipv6 unicast"}}, @router_config); + + @router_config = (); + #add default originate to announce 0.0.0.0/0 type5 route in evpn + push @router_config, "default-originate ipv4"; + push @router_config, "default-originate ipv6"; + push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"l2vpn evpn"}}, @router_config); + } + + return $config; +} + sub on_delete_hook { my ($class, $routerid, $sdn_cfg) = @_; @@ -242,3 +292,4 @@ sub write_controller_config { 1; + diff --git a/PVE/Network/SDN/VxlanPlugin.pm b/PVE/Network/SDN/VxlanPlugin.pm index 986a250..d39a533 100644 --- a/PVE/Network/SDN/VxlanPlugin.pm +++ b/PVE/Network/SDN/VxlanPlugin.pm @@ -188,56 +188,6 @@ sub generate_sdn_config { return $config; } -sub generate_controller_config { - my ($class, $plugin_config, $router, $id, $uplinks, $config) = @_; - - my $vrf = $plugin_config->{'vrf'}; - my $vrfvxlan = $plugin_config->{'vrf-vxlan'}; - my $asn = $router->{asn}; - my $gatewaynodes = $router->{'gateway-nodes'}; - - return if !$vrf || !$vrfvxlan || !$asn; - - #vrf - my @router_config = (); - push @router_config, "vni $vrfvxlan"; - push(@{$config->{frr}->{vrf}->{"$vrf"}}, @router_config); - - @router_config = (); - - my $is_gateway = undef; - my $local_node = PVE::INotify::nodename(); - - foreach my $gatewaynode (PVE::Tools::split_list($gatewaynodes)) { - $is_gateway = 1 if $gatewaynode eq $local_node; - } - - if ($is_gateway) { - - @router_config = (); - #import /32 routes of evpn network from vrf1 to default vrf (for packet return) - #frr 7.1 tag is bugged -> works fine with 7.1 stable branch(20190829-02-g6ba76bbc1) - #https://github.com/FRRouting/frr/issues/4905 - push @router_config, "import vrf $vrf"; - push(@{$config->{frr}->{router}->{"bgp $asn"}->{"address-family"}->{"ipv4 unicast"}}, @router_config); - push(@{$config->{frr}->{router}->{"bgp $asn"}->{"address-family"}->{"ipv6 unicast"}}, @router_config); - - @router_config = (); - #redistribute connected to be able to route to local vms on the gateway - push @router_config, "redistribute connected"; - push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"ipv4 unicast"}}, @router_config); - push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"ipv6 unicast"}}, @router_config); - - @router_config = (); - #add default originate to announce 0.0.0.0/0 type5 route in evpn - push @router_config, "default-originate ipv4"; - push @router_config, "default-originate ipv6"; - push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"l2vpn evpn"}}, @router_config); - } - - return $config; -} - sub on_delete_hook { my ($class, $transportid, $sdn_cfg) = @_; -- 2.39.2