From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 35B941FF13B for ; Wed, 25 Mar 2026 10:42:23 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 84EF8EA57; Wed, 25 Mar 2026 10:42:15 +0100 (CET) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Subject: [PATCH pve-network 01/13] controller: bgp: evpn: adapt to new match / set frr config syntax Date: Wed, 25 Mar 2026 10:41:26 +0100 Message-ID: <20260325094142.174364-16-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260325094142.174364-1-s.hanreich@proxmox.com> References: <20260325094142.174364-1-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1774431664137 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.720 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: QM3MPBP6NRXUYII2VMQAUDW42EIAZ4JJ X-Message-ID-Hash: QM3MPBP6NRXUYII2VMQAUDW42EIAZ4JJ X-MailFrom: s.hanreich@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: proxmox-frr has changed the representation of match / set statements in its structs. It has changed to generic key / value fields, where the keys specify the literal name of the key in the FRR configuration. Adapt the controllers to use the new fields so the configuration gets generated properly. Signed-off-by: Stefan Hanreich --- src/PVE/Network/SDN/Controllers/BgpPlugin.pm | 7 +++--- src/PVE/Network/SDN/Controllers/EvpnPlugin.pm | 24 ++++++++----------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/PVE/Network/SDN/Controllers/BgpPlugin.pm b/src/PVE/Network/SDN/Controllers/BgpPlugin.pm index 8891541..d54c9ec 100644 --- a/src/PVE/Network/SDN/Controllers/BgpPlugin.pm +++ b/src/PVE/Network/SDN/Controllers/BgpPlugin.pm @@ -136,13 +136,12 @@ sub generate_frr_config { $config->{frr}->{protocol_routemaps}->{bgp}->{v4} = "correct_src"; my $routemap_config = { - protocol_type => 'ip', - match_type => 'address', - value => { list_type => 'prefixlist', list_name => 'loopbacks_ips' }, + key => 'ip address prefix-list', + value => 'loopbacks_ips', }; my $routemap = { matches => [$routemap_config], - sets => [{ set_type => 'src', value => $ifaceip }], + sets => [{ key => 'src', value => $ifaceip }], action => "permit", seq => 1, }; diff --git a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm index d2825f5..3e643b1 100644 --- a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm +++ b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm @@ -329,9 +329,8 @@ sub generate_zone_frr_config { if (!$exitnodes_primary || $exitnodes_primary eq $local_node) { # Filter default route coming from other exit nodes on primary node my $routemap_config_v6 = { - protocol_type => 'ipv6', - match_type => 'address', - value => { list_type => 'prefixlist', list_name => 'only_default_v6' }, + key => 'ipv6 address prefix-list', + value => 'only_default_v6', }; my $routemap_v6 = { seq => 1, matches => [$routemap_config_v6], action => "deny" }; unshift( @@ -339,23 +338,21 @@ sub generate_zone_frr_config { ); my $routemap_config = { - protocol_type => 'ip', - match_type => 'address', - value => { list_type => 'prefixlist', list_name => 'only_default' }, + key => 'ip address prefix-list', + value => 'only_default', }; my $routemap = { seq => 1, matches => [$routemap_config], action => "deny" }; unshift(@{ $config->{frr}->{routemaps}->{'MAP_VTEP_IN'} }, $routemap); } elsif ($exitnodes_primary ne $local_node) { my $routemap_config_v6 = { - protocol_type => 'ipv6', - match_type => 'address', - value => { list_type => 'prefixlist', list_name => 'only_default_v6' }, + key => 'ipv6 address prefix-list', + value => 'only_default_v6', }; my $routemap_v6 = { seq => 1, matches => [$routemap_config_v6], - sets => [{ set_type => 'metric', value => 200 }], + sets => [{ key => 'metric', value => 200 }], action => "permit", }; unshift( @@ -363,14 +360,13 @@ sub generate_zone_frr_config { ); my $routemap_config = { - protocol_type => 'ip', - match_type => 'address', - value => { list_type => 'prefixlist', list_name => 'only_default' }, + key => 'ip address prefix-list', + value => 'only_default', }; my $routemap = { seq => 1, matches => [$routemap_config], - sets => [{ set_type => 'metric', value => 200 }], + sets => [{ key => 'metric', value => 200 }], action => "permit", }; unshift(@{ $config->{frr}->{routemaps}->{'MAP_VTEP_OUT'} }, $routemap); -- 2.47.3