From: Stefan Hanreich <s.hanreich@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: Re: [PATCH proxmox-ve-rs 7/9] ve-config: add route map section config
Date: Thu, 26 Mar 2026 14:49:33 +0100 [thread overview]
Message-ID: <0aa01d27-a09f-4ef4-8cd3-347dc12ad8cd@proxmox.com> (raw)
In-Reply-To: <5iohvs5qsusyt3bfk7hwmkrxcus7v3eiafqitfp7peil3lccug@cvrs5d4xlbjf>
ah, forgot to remove this again during development - fixed!
3/25/26 3:35 PM, Gabriel Goller wrote:
> On 25.03.2026 10:41, Stefan Hanreich wrote:
>> Those types represent FRR route maps inside a section config format.
>> For an example of the exact format and its FRR representation see the
>> module-level documentation.
>>
>> One section config entry maps to one route map entry. A route map
>> consists of one or more route map entries inside the section config.
>> The ID of a section encodes the name of the route map as well as the
>> order # of the entry.
>>
>> The route map module exports specific types for the API that handle
>> converting the section config ID, because currently it is only
>> possible to deserialize section config IDs to Strings. To avoid
>> having to implement the parsing logic along every step of the stack
>> (Perl backend, UI), use specific API types in the public API that
>> handle parsing the section ID into route map name and order.
>>
>> Contrary to most SDN entities, route maps IDs can be 32 characters
>> long instead of 8 and support underscores as well as hyphens. This is
>> because the restriction of having to generate network interface names
>> does not apply to FRR entities, so we can be more lenient with IDs
>> here, allowing users to specify more descriptive names.
>>
>> Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
>> ---
>> proxmox-ve-config/debian/control | 2 +
>> proxmox-ve-config/src/sdn/mod.rs | 1 +
>> proxmox-ve-config/src/sdn/route_map.rs | 491 +++++++++++++++++++++++++
>> 3 files changed, 494 insertions(+)
>> create mode 100644 proxmox-ve-config/src/sdn/route_map.rs
>>
>> diff --git a/proxmox-ve-config/debian/control b/proxmox-ve-config/debian/control
>> index 440cf73..5206340 100644
>> --- a/proxmox-ve-config/debian/control
>> +++ b/proxmox-ve-config/debian/control
>> @@ -24,6 +24,7 @@ Build-Depends-Arch: cargo:native <!nocheck>,
>> librust-serde-1+default-dev <!nocheck>,
>> librust-serde-1+derive-dev <!nocheck>,
>> librust-serde-json-1+default-dev <!nocheck>,
>> + librust-serde-with-3+default-dev <!nocheck>,
>> librust-thiserror-2+default-dev <!nocheck>,
>> librust-tracing-0.1+default-dev (>= 0.1.37-~~) <!nocheck>
>> Maintainer: Proxmox Support Team <support@proxmox.com>
>> @@ -55,6 +56,7 @@ Depends:
>> librust-serde-1+default-dev,
>> librust-serde-1+derive-dev,
>> librust-serde-json-1+default-dev,
>> + librust-serde-with-3+default-dev,
>> librust-thiserror-2+default-dev,
>> librust-tracing-0.1+default-dev (>= 0.1.37-~~)
>> Suggests:
>
> serde-with is not import and used AFAICS.
>
>> diff --git a/proxmox-ve-config/src/sdn/mod.rs b/proxmox-ve-config/src/sdn/mod.rs
>> index 344c02c..24069ad 100644
>> --- a/proxmox-ve-config/src/sdn/mod.rs
>> +++ b/proxmox-ve-config/src/sdn/mod.rs
>> @@ -2,6 +2,7 @@ pub mod config;
>> pub mod fabric;
>> pub mod ipam;
>> pub mod prefix_list;
>> +pub mod route_map;
>>
>> use std::{error::Error, fmt::Display, str::FromStr};
>>
>> diff --git a/proxmox-ve-config/src/sdn/route_map.rs b/proxmox-ve-config/src/sdn/route_map.rs
>> new file mode 100644
>> index 0000000..3f4da56
>> --- /dev/null
>> +++ b/proxmox-ve-config/src/sdn/route_map.rs
>> @@ -0,0 +1,491 @@
>> +//! Section config types for FRR Route Maps.
>> +//!
>> +//! This module contains the API types required for representing FRR Route Maps as section config.
>> +//! Each entry in the section config maps to a Route Map entry, *not* a route map as a whole, the
>> +//! order of the entry is encoded in the ID of the Route Map.
>> +//!
>> +//! Route maps in FRR consists of at least one entry, which are ordered by their given sequence
>> +//! number / order. Each entry has a default matching policy, which is applied if the matching
>> +//! conditions of the entry are met.
>> +//!
>> +//! An example for a simple FRR Route Map entry loooks like this:
>> +//!
>> +//! ```text
>> +//! route-map test permit 10
>> +//! match ip next-hop address 192.0.2.1
>> +//! set local-preference 200
>> +//! ```
>> +//!
>> +//! The corresponding representation as a section config entry looks like this:
>> +//!
>> +//! ```text
>> +//! route-map-entry: test_10
>> +//! action permit
>> +//! match key=ip-next-hop-address,value=192.0.2.1
>> +//! set key=local-preference,value=200
>> +//! ```
>> +//!
>> +//! Match and Set Actions are encoded as an array with a property string that has a key and an
>> +//! optional value paramter, because some options do not require an additional value.
>> +//!
>> +//! This abstraction currently supports Match and Set actions, but not call actions and exit
>> +//! actions.
>> +
>> +use core::net::IpAddr;
>
> We usually always use imports from std:: (also in libraries). Note that this
> series introduces core:: imports in a few ve-rs patches.
>
>> +
>> +use anyhow::format_err;
>> +use const_format::concatcp;
>> +
>> +use proxmox_network_types::ip_address::api_types::{Ipv4Addr, Ipv6Addr};
>> +use proxmox_sdn_types::{
>> + bgp::{EvpnRouteType, SetMetricValue, SetTagValue},
>> + IntegerWithSign, Vni,
>> [snip]
next prev parent reply other threads:[~2026-03-26 13:49 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-25 9:41 [PATCH cluster/network/proxmox{-ve-rs,-perl-rs} 00/27] Add support for route maps / prefix lists to SDN Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-cluster 1/2] cfs: add 'sdn/route-maps.cfg' to observed files Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-cluster 2/2] cfs: add 'sdn/prefix-lists.cfg' " Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 1/9] sdn-types: add common route-map helper types Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 2/9] frr: implement routemap match/set statements via adjacent tagging Stefan Hanreich
2026-03-26 14:44 ` Hannes Laimer
2026-03-27 9:02 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 3/9] frr: allow rendering prefix-lists/route-maps separately Stefan Hanreich
2026-03-25 14:32 ` Gabriel Goller
2026-03-26 12:17 ` Stefan Hanreich
2026-03-27 10:50 ` Hannes Laimer
2026-03-27 11:34 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 4/9] frr-templates: change route maps template to adapt to new types Stefan Hanreich
2026-03-25 14:33 ` Gabriel Goller
2026-03-25 14:58 ` Gabriel Goller
2026-03-27 11:01 ` Hannes Laimer
2026-03-27 11:17 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 5/9] ve-config: add prefix list section config Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 6/9] ve-config: frr: implement frr config generation for prefix lists Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 7/9] ve-config: add route map section config Stefan Hanreich
2026-03-25 14:35 ` Gabriel Goller
2026-03-26 13:49 ` Stefan Hanreich [this message]
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 8/9] ve-config: frr: implement frr config generation for route maps Stefan Hanreich
2026-03-25 15:03 ` Gabriel Goller
2026-03-26 13:50 ` Stefan Hanreich
2026-03-27 11:17 ` Hannes Laimer
2026-03-27 11:21 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-ve-rs 9/9] ve-config: fabrics: adapt frr config generation to new format Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-perl-rs 1/3] pve-rs: sdn: add route maps module Stefan Hanreich
2026-03-26 10:32 ` Wolfgang Bumiller
2026-03-26 13:57 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-perl-rs 2/3] pve-rs: sdn: add prefix lists module Stefan Hanreich
2026-03-25 9:41 ` [PATCH proxmox-perl-rs 3/3] sdn: add prefix list / route maps to frr config generation helper Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 01/13] controller: bgp: evpn: adapt to new match / set frr config syntax Stefan Hanreich
2026-03-26 15:19 ` Hannes Laimer
2026-03-27 10:05 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 02/13] sdn: add prefix lists module Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 03/13] api2: add prefix list module Stefan Hanreich
2026-03-26 15:01 ` Hannes Laimer
2026-03-27 9:57 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 04/13] sdn: add route map module Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 05/13] api2: add route maps api module Stefan Hanreich
2026-03-26 15:05 ` Hannes Laimer
2026-03-27 9:57 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 06/13] api2: add route map module Stefan Hanreich
2026-03-26 15:07 ` Hannes Laimer
2026-03-27 9:57 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 07/13] api2: add route map entry module Stefan Hanreich
2026-03-26 15:13 ` Hannes Laimer
2026-03-27 10:01 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 08/13] evpn controller: add route_map_{in,out} parameter Stefan Hanreich
2026-03-27 10:44 ` Hannes Laimer
2026-03-27 11:12 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 09/13] sdn: generate route map / prefix list configuration on sdn apply Stefan Hanreich
2026-03-27 10:47 ` Hannes Laimer
2026-03-27 11:13 ` Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 10/13] tests: add simple route map test case Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 11/13] tests: add bgp evpn route map/prefix list testcase Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 12/13] tests: add route map with prefix " Stefan Hanreich
2026-03-25 9:41 ` [PATCH pve-network 13/13] bgp controller: allow configuring custom route maps Stefan Hanreich
2026-03-25 11:38 ` [PATCH cluster/network/proxmox{-ve-rs,-perl-rs} 00/27] Add support for route maps / prefix lists to SDN Stefan Hanreich
2026-03-27 10:17 ` Stefan Hanreich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0aa01d27-a09f-4ef4-8cd3-347dc12ad8cd@proxmox.com \
--to=s.hanreich@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.