On 2026-03-10 13:09, Gabriel Goller wrote:
> The structured frr config can be deserialized by rust and rendered using
> the templates (isis and bgp) in proxmox-frr.
> 
> Co-authored-by: Stefan Hanreich <[email protected]>
> Signed-off-by: Gabriel Goller <[email protected]>
> ---

[..]

> diff --git a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm 
> b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
> index cc217126607f..e3091c63ac8d 100644
> --- a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
> +++ b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
> @@ -55,15 +55,15 @@ sub generate_frr_config {
>      my $local_node = PVE::INotify::nodename();
>  
>      my @peers;
> -    my $asn = $plugin_config->{asn};
> +    my $asn = int($plugin_config->{asn});
>      my $ebgp = undef;
>      my $loopback = undef;
>      my $autortas = undef;
>      my $ifaceip = undef;
>      my $routerid = undef;
>  
> -    my $bgprouter = find_bgp_controller($local_node, $controller_cfg);
> -    my $isisrouter = find_isis_controller($local_node, $controller_cfg);
> +    my $bgp_controller = find_bgp_controller($local_node, $controller_cfg);
> +    my $isis_controller = find_isis_controller($local_node, $controller_cfg);
>  
>      if ($plugin_config->{'fabric'}) {
>          my $config = PVE::Network::SDN::Fabrics::config(1);
> @@ -102,10 +102,10 @@ sub generate_frr_config {
>      } elsif ($plugin_config->{'peers'}) {
>          @peers = PVE::Tools::split_list($plugin_config->{'peers'});
>  
> -        if ($bgprouter) {
> -            $loopback = $bgprouter->{loopback} if $bgprouter->{loopback};
> -        } elsif ($isisrouter) {
> -            $loopback = $isisrouter->{loopback} if $isisrouter->{loopback};
> +        if ($bgp_controller) {
> +            $loopback = $bgp_controller->{loopback} if 
> $bgp_controller->{loopback};
> +        } elsif ($isis_controller) {
> +            $loopback = $isis_controller->{loopback} if 
> $isis_controller->{loopback};
>          }
>  
>          ($ifaceip, my $interface) =
> @@ -116,58 +116,60 @@ sub generate_frr_config {
>          return;
>      }
>  
> -    if ($bgprouter) {
> -        $ebgp = 1 if $plugin_config->{'asn'} ne $bgprouter->{asn};
> -        $asn = $bgprouter->{asn} if $bgprouter->{asn};
> +    if ($bgp_controller) {
> +        $ebgp = 1 if $plugin_config->{'asn'} ne $bgp_controller->{asn};
> +        $asn = $bgp_controller->{asn} if $bgp_controller->{asn};

missing `int(..)`, so the var is flagged correctly

>          $autortas = $plugin_config->{'asn'} if $ebgp;
>      }
>  
>      return if !$asn || !$routerid;
> -    my $bgp = $config->{frr}->{router}->{"bgp $asn"} //= {};
> -
> -    my $remoteas = $ebgp ? "external" : $asn;
> -
> -    #global options
> -    my @controller_config = (
> -        "bgp router-id $routerid",
> -        "no bgp hard-administrative-reset",
> -        "no bgp default ipv4-unicast",
> -        "coalesce-time 1000",
> -        "no bgp graceful-restart notification",
> -    );
> -
> -    push(@{ $bgp->{""} }, @controller_config) if keys %{$bgp} == 0;
>  

[..]



Reply via email to