]> git.proxmox.com Git - pve-network.git/commitdiff
frr: add prefix-list support
authorAlexandre Derumier <aderumier@odiso.com>
Wed, 30 Nov 2022 15:18:59 +0000 (16:18 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 16 Jan 2023 15:54:00 +0000 (16:54 +0100)
parsing of prefix-list in frr.conf.local was missing

reported on forum:
https://forum.proxmox.com/threads/using-the-proxmox-sdn-to-manage-host-connectivity-with-bgp.118553

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/Network/SDN/Controllers/BgpPlugin.pm
PVE/Network/SDN/Controllers/EvpnPlugin.pm
test/zones/evpn/ebgp_loopback/expected_controller_config

index 6e69f677a39edef67e3be35be33be9ae459e073d..0b8cf1a171928122af9b5afa92e3ec5af2871168 100644 (file)
@@ -118,7 +118,7 @@ sub generate_controller_config {
     }
 
     if ($loopback) {
-       push(@{$config->{frr}->{''}}, "ip prefix-list loopbacks_ips seq 10 permit 0.0.0.0/0 le 32");
+       $config->{frr_prefix_list}->{loopbacks_ips}->{10} = "permit 0.0.0.0/0 le 32";
        push(@{$config->{frr}->{''}}, "ip protocol bgp route-map correct_src");
 
        my $routemap_config = ();
index d09f2a9e6c3179f6c9c7e1fe655cec340d76ec50..727aeaafc015ceee91ffe8cd63b202dd6eabf9ca 100644 (file)
@@ -384,17 +384,17 @@ sub generate_frr_routemap {
    }
 }
 
-sub generate_frr_accesslist {
-    my ($final_config, $accesslists) = @_;
+sub generate_frr_list {
+    my ($final_config, $lists, $type) = @_;
 
     my $config = [];
 
-    for my $id (sort keys %$accesslists) {
-       my $accesslist = $accesslists->{$id};
+    for my $id (sort keys %$lists) {
+       my $list = $lists->{$id};
 
-       for my $seq (sort keys %$accesslist) {
-           my $rule = $accesslist->{$seq};
-           push @$config, "access-list $id seq $seq $rule";
+       for my $seq (sort keys %$list) {
+           my $rule = $list->{$seq};
+           push @$config, "$type $id seq $seq $rule";
        }
     }
 
@@ -422,7 +422,8 @@ sub generate_controller_rawconfig {
     }
 
     generate_frr_recurse($final_config, $config->{frr}, undef, 0);
-    generate_frr_accesslist($final_config, $config->{frr_access_list});
+    generate_frr_list($final_config, $config->{frr_access_list}, "access-list");
+    generate_frr_list($final_config, $config->{frr_prefix_list}, "ip prefix-list");
     generate_frr_routemap($final_config, $config->{frr_routemap});
 
     push @{$final_config}, "!";
@@ -467,6 +468,9 @@ sub parse_merge_frr_local_config {
        } elsif ($line =~ m/^access-list (.+) seq (\d+) (.+)$/) {
            $config->{'frr_access_list'}->{$1}->{$2} = $3;
            next;
+       } elsif ($line =~ m/^ip prefix-list (.+) seq (\d+) (.*)$/) {
+           $config->{'frr_prefix_list'}->{$1}->{$2} = $3;
+           next;
        } elsif($line =~ m/^exit-address-family$/) {
            next;
        } elsif($line =~ m/^exit$/) {
index 64fca316b5a5cf1c97926055c84bb362fc55b43f..548d532a02e7788ad793487e830c553580e3c59d 100644 (file)
@@ -4,7 +4,6 @@ hostname localhost
 log syslog informational
 service integrated-vtysh-config
 !
-ip prefix-list loopbacks_ips seq 10 permit 0.0.0.0/0 le 32
 ip protocol bgp route-map correct_src
 !
 vrf vrf_myzone
@@ -53,6 +52,8 @@ router bgp 65001 vrf vrf_myzone
  exit-address-family
 exit
 !
+ip prefix-list loopbacks_ips seq 10 permit 0.0.0.0/0 le 32
+!
 route-map MAP_VTEP_IN permit 1
 exit
 !