X-Git-Url: https://git.proxmox.com/?p=pve-network.git;a=blobdiff_plain;f=PVE%2FNetwork%2FSDN%2FControllers%2FEvpnPlugin.pm;h=0c498939dc09431dd131e806f7643eedb09b045a;hp=2b48e9a10c62baafede6052e48e735cec07ad825;hb=9c24bcc5eb191d6f59541dc714d4c8df672f0925;hpb=847f51445231e827bfa6b5c81ac38ae80fd89e05 diff --git a/PVE/Network/SDN/Controllers/EvpnPlugin.pm b/PVE/Network/SDN/Controllers/EvpnPlugin.pm index 2b48e9a..0c49893 100644 --- a/PVE/Network/SDN/Controllers/EvpnPlugin.pm +++ b/PVE/Network/SDN/Controllers/EvpnPlugin.pm @@ -121,8 +121,10 @@ sub generate_controller_zone_config { my $exitnodes_primary = $plugin_config->{'exitnodes-primary'}; my $advertisesubnets = $plugin_config->{'advertise-subnets'}; my $exitnodes_local_routing = $plugin_config->{'exitnodes-local-routing'}; + my $rt_import = [PVE::Tools::split_list($plugin_config->{'rt-import'})] if $plugin_config->{'rt-import'}; my $asn = $controller->{asn}; + my @peers = PVE::Tools::split_list($controller->{'peers'}) if $controller->{'peers'}; my $ebgp = undef; my $loopback = undef; my $autortas = undef; @@ -136,6 +138,8 @@ sub generate_controller_zone_config { return if !$vrf || !$vrfvxlan || !$asn; + my ($ifaceip, $interface) = PVE::Network::SDN::Zones::Plugin::find_local_ip_interface_peers(\@peers, $loopback); + # vrf my @controller_config = (); push @controller_config, "vni $vrfvxlan"; @@ -143,7 +147,7 @@ sub generate_controller_zone_config { #main vrf router @controller_config = (); - push @controller_config, "no bgp ebgp-requires-policy" if $ebgp; + push @controller_config, "bgp router-id $ifaceip"; # push @controller_config, "!"; push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{""}}, @controller_config); @@ -198,6 +202,14 @@ sub generate_controller_zone_config { push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"l2vpn evpn"}}, @controller_config); } + if($rt_import) { + @controller_config = (); + foreach my $rt (sort @{$rt_import}) { + push @controller_config, "route-target import $rt"; + } + push(@{$config->{frr}->{router}->{"bgp $asn vrf $vrf"}->{"address-family"}->{"l2vpn evpn"}}, @controller_config); + } + return $config; } @@ -357,12 +369,11 @@ sub generate_controller_rawconfig { my $nodename = PVE::INotify::nodename(); my $final_config = []; - push @{$final_config}, "log syslog informational"; - push @{$final_config}, "ip forwarding"; - push @{$final_config}, "ipv6 forwarding"; + push @{$final_config}, "frr version 8.0.1"; push @{$final_config}, "frr defaults datacenter"; - push @{$final_config}, "service integrated-vtysh-config"; push @{$final_config}, "hostname $nodename"; + push @{$final_config}, "log syslog informational"; + push @{$final_config}, "service integrated-vtysh-config"; push @{$final_config}, "!"; if (-e "/etc/frr/frr.conf.local") { @@ -417,7 +428,13 @@ sub reload_controller { }; if (-e $conf_file && -e $bin_path) { - run_command([$bin_path, '--stdout', '--reload', $conf_file], outfunc => {}, errfunc => $err); + eval { + run_command([$bin_path, '--stdout', '--reload', $conf_file], outfunc => {}, errfunc => $err); + }; + if ($@) { + warn "frr reload command fail. Restarting frr."; + eval { run_command(['systemctl', 'restart', 'frr']); }; + } } }