From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 830F41FF136 for ; Mon, 04 May 2026 18:13:30 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2CFD86873; Mon, 4 May 2026 18:12:14 +0200 (CEST) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Subject: [PATCH pve-network v4 23/47] controller: bgp: evpn: adapt to new match / set frr config syntax Date: Mon, 4 May 2026 18:03:20 +0200 Message-ID: <20260504160350.395470-24-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260504160350.395470-1-s.hanreich@proxmox.com> References: <20260504160350.395470-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: 1777910534278 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.662 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: QGPTS5OTHOWPYJRNQBBTTMAQWUJ3KO67 X-Message-ID-Hash: QGPTS5OTHOWPYJRNQBBTTMAQWUJ3KO67 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 exact keys / values are specified, instead of having to specify the types and subsequent types explicitly. Adapt the controllers to use the new fields so the configuration gets generated properly. Support for specifying relative metric values has been added to proxmox-frr as well, which necessitates a change from integer to string in the datatype for the metric. 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..54a2227 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