On 2026-02-03 17:04, 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]>
> ---
>  src/PVE/Network/SDN.pm                        |  11 +-
>  src/PVE/Network/SDN/Controllers/BgpPlugin.pm  | 104 ++---
>  src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 372 +++++++++---------
>  src/PVE/Network/SDN/Controllers/IsisPlugin.pm |  28 +-
>  src/PVE/Network/SDN/Fabrics.pm                |  14 +-
>  src/PVE/Network/SDN/Frr.pm                    | 163 +-------
>  6 files changed, 276 insertions(+), 416 deletions(-)
> 

[..]

>  
> -Converts a given C<\%frr_config> to the raw config format.
> +Iterates over all bgp route-maps in C<\$frr_config> and renumbers their 
> sequence
> +numbers to be consecutive, starting from 1 and incrementing by 1 for each 
> entry.
>  
>  =cut
>  
> -sub to_raw_config {
> +sub fix_routemap_seqs {
>      my ($frr_config) = @_;
>  
> -    my $raw_config = [];
> +    my $routemaps = $frr_config->{'frr'}->{'bgp'}->{'routemaps'};

we should check if `routemaps`(and probably also `bgp`) exists, either
here, or where we call this in `generate_frr_raw_config`. but here is
probably better

> -    generate_frr_vrf($raw_config, $frr_config->{frr}->{vrf});
> -    generate_frr_interfaces($raw_config, $frr_config->{frr_interfaces});
> -    generate_frr_recurse($raw_config, $frr_config->{frr}, undef, 0);
> -    generate_frr_list($raw_config, $frr_config->{frr_access_list}, 
> "access-list");
> -    generate_frr_list($raw_config, $frr_config->{frr_prefix_list}, "ip 
> prefix-list");
> -    generate_frr_list($raw_config, $frr_config->{frr_prefix_list_v6}, "ipv6 
> prefix-list");
> -    generate_frr_simple_list($raw_config, 
> $frr_config->{frr_bgp_community_list});
> -    generate_frr_routemap($raw_config, $frr_config->{frr_routemap});
> -    generate_frr_simple_list($raw_config, $frr_config->{frr_ip_protocol});
> -
> -    return $raw_config;
> +    foreach my $id (sort keys %$routemaps) {
> +        my $routemap = $routemaps->{$id};
> +        my $order = 0;
> +        foreach my $seq (@$routemap) {
> +            $order++;
> +            $seq->{seq} = $order;
> +        }
> +    }
>  }
>  
>  =head3 raw_config_to_string(\@raw_config)
> @@ -339,139 +337,4 @@ sub append_local_config {
>      }
>  }
>  

[..]

>  1;




Reply via email to