From: "Shannon Sterz" <s.sterz@proxmox.com>
To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com>
Cc: "pve-devel" <pve-devel-bounces@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH pve-docs 1/1] fabrics: add initial documentation for sdn fabrics
Date: Mon, 31 Mar 2025 10:44:18 +0200 [thread overview]
Message-ID: <D8UBHZP29Y1F.3P978YHUL3Q1E@proxmox.com> (raw)
In-Reply-To: <20250328171340.885413-53-g.goller@proxmox.com>
On Fri Mar 28, 2025 at 6:13 PM CET, Gabriel Goller wrote:
> Add initial documentation for the openfabric and ospf options.
>
> Signed-off-by: Gabriel Goller <g.goller@proxmox.com>
> ---
> pvesdn.adoc | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 155 insertions(+)
>
> diff --git a/pvesdn.adoc b/pvesdn.adoc
> index 5d5d27bfbc1f..feb6898beaa5 100644
> --- a/pvesdn.adoc
> +++ b/pvesdn.adoc
> @@ -517,6 +517,161 @@ Loopback:: Use a loopback or dummy interface as the source of the EVPN network
> (for multipath).
>
>
> +[[pvesdn_config_fabrics]]
> +Fabrics
> +-------
> +
> +Fabrics in {pve} SDN provide automated routing between nodes in a cluster. They
> +simplify the configuration of underlay networks between nodes to form the
> +foundation for SDN deployments.
> +
> +Fabrics in {pve} automatically configure routing protocols on your physical
> +network interfaces to establish connectivity between nodes in the cluster. This
> +creates a resilient, auto-configuring network fabric that adapts to changes in
> +network topology.
feels strange to have two adjacent paragraphs start with "Fabrics in
Proxmox VE" you could do something "You can use Fabrics to
automatically..." or just "They" imo.
> +
> +Installation
> +~~~~~~~~~~~~
> +
> +We use the FRR implementations of OpenFabric and OSPF, so first you need to
> +install `frr` and the `frr-pythontools` package:
> +
> +----
> +apt update
> +apt install frr frr-pythontools
> +----
> +
> +Configuration
> +~~~~~~~~~~~~~
> +
> +To create a Fabric, head over to Datacenter->SDN->Fabrics and click "Add
> +Fabric" to create a new fabric. After selecting the preferred protocol, the
starting and ending the sentence with "To create a (new) Fabric" is
redundant. lose the "to create a new fabric." at the end.
> +fabric is created. With the "+" button you can select the nodes which you want
> +to add to the fabric, you also have to select the interfaces used to
> +communicate to the other nodes.
nit: with the other nodes.
> +
> +Router-ID Selection
> +^^^^^^^^^^^^^^^^^^^
> +
> +Each node in a fabric needs a unique router ID, which is an IPv4 (or IPv6 in
> +OpenFabric) address in dotted-decimal notation (e.g., 192.168.1.1).
does this apply to v6 too? i've never seen IPv6 represented in dotted
decimal notation. imo if you mention IPv6 here, you should specify it's
representation. maybe:
Each node in a fabric needs a unique router ID, which is an IPv4 address
in dotted decimal notation (e.g. 192.168.1.1). In OpenFabric this can
also be an IPv6 address in the typical hexadecimal representation
separated by colons (e.g., 2001:db8::1428:57ab).
> +
> +Loopback Prefix
> +^^^^^^^^^^^^^^^
> +
> +You can specify a CIDR network range (e.g., 10.0.0.0/24) as a loopback prefix for the fabric.
> +When configured, the system will automatically verify that all router-IDs are contained within
> +this prefix. This ensures consistency in your addressing scheme and helps prevent addressing
> +conflicts or errors. The loopback prefix applies to the entire fabric and is optional.
> +
> +[[pvesdn_openfabric]]
> +OpenFabric
> +~~~~~~~~~~
> +
> +OpenFabric is a routing protocol specifically designed for data center fabrics.
> +It's based on IS-IS and optimized for the leaf-spine topology common in data
> +centers.
> +
> +Configuration options:
> +
> +[[pvesdn_openfabric_fabric]]
> +On the Fabric
> +^^^^^^^^^^^^^
> +
> +Name:: This is the name of the OpenFabric fabric and can be at most 8 characters long.
> +
> +Loopback Prefix:: CIDR (IPv4 or IPv6) network range (e.g., 10.0.0.0/24) used to verify that
> +all router-IDs in the fabric are contained within this prefix.
> +
> +Hello Interval:: Controls how frequently (in seconds) hello packets are sent to
> +discover and maintain connections with neighboring nodes. Lower values detect
> +failures faster but increase network traffic. If empty, the default value will
what is the default value? would it make sense to mention that here?
> +be used. This option is global on the fabric, meaning every interface on every
> +node in this fabric will inherit this hello-interval property.
> +
> +[[pvesdn_openfabric_node]]
> +On the Node
> +^^^^^^^^^^^
> +
> +Node:: Select the node which will be added to the fabric. Only nodes that
> +currently are in the cluster will be shown.
> +
> +Router-ID:: A unique IPv4 or IPv6 address used to generate the OpenFabric
> +Network Entity Title (NET). Each node in the same fabric must have a different
> +Router-ID, while a single node must use the same NET address across all fabrics
> +(this consistency is automatically managed by {pve}).
> +
> +NOTE: When using IPv6 addresses, we use the last 3 segments to generate the
> +NET. Ensure these segments differ between nodes.
would it make sense to make this a `WARNING` instead of a `NOTE`? sounds
like this is a bit more important to get right.
> +Interfaces:: Specify the interfaces used to establish peering connections with
> +other OpenFabric nodes. Preferably select interfaces without pre-assigned IP
> +addresses, then configure addresses in the IPv4/IPv6 column if needed. A dummy
> +"loopback" interface with the router-id is automatically created.
> +Interface-specific settings override the global fabric settings.
> +
> +The following optional parameters can be configured per interface when enabling
> +the additional columns:
> +
> +Passive::: When enabled, the interface will not form OpenFabric adjacencies but
> +its networks will still be advertised.
> +
> +Hello Interval::: Controls how frequently (in seconds) hello packets are sent
> +on this specific interface. Lower values detect failures faster but increase
> +network traffic.
> +
> +CSNP Interval::: Controls how frequently (in seconds) Complete Sequence Number
> +PDUs are sent. CSNPs contain a complete list of all LSPs in the database.
> +
> +Hello Multiplier::: Defines how many missed hello packets constitute a failed
> +connection. Higher values make the connection more resilient to packet loss but
> +slow down failure detection.
> +
> +[[pvesdn_ospf]]
> +OSPF
> +~~~~
> +
> +OSPF (Open Shortest Path First) is a widely-used link-state routing protocol
> +that efficiently calculates the shortest path for routing traffic through IP
> +networks.
> +
> +[[pvesdn_ospf_fabric]]
> +On the Fabric
> +^^^^^^^^^^^^^
> +
> +Area:: This specifies the OSPF area identifier, which can be either an integer
> +(i32) or an IP address. Areas are a way to organize and structure OSPF networks
i32 is super intuitive for Rust programmers but "32-bit signed integer"
would be clearer to everyone else ;)
> +hierarchically, with Area 0 (or 0.0.0.0) serving as the backbone area.
> +
> +Loopback Prefix:: CIDR (only IPv4) network range (e.g., 10.0.0.0/24) used to
> +verify that all router-IDs in the fabric are contained within this prefix.
> +
> +Area:: This specifies the OSPF area identifier, which can be either an integer
> +(i32) or an IP address. Areas are a way to organize and structure OSPF networks
same here :)
> +hierarchically, with Area 0 (or 0.0.0.0) serving as the backbone area.
> +
> +[[pvesdn_ospf_node]]
> +On the Node
> +^^^^^^^^^^^
> +
> +Node:: Select the node which will be added to the fabric. Only nodes that
> +currently are in the cluster will be shown.
"that are currently in..."
> +
> +Router-ID:: A unique IPv4 address used to identify this router within the OSPF
> +network. Each node in the same fabric must have a different Router-ID.
> +
> +Interfaces:: Specify the interfaces used to establish peering connections with
> +other OSPF nodes. Preferably select interfaces without pre-assigned IP
> +addresses, then configure addresses in the IPv4 column if needed. A dummy
> +"loopback" interface with the router-id is automatically created.
> +
> +The following optional parameter can be configured per interface when enabling
> +the additional columns:
> +
> +Passive::: When enabled, the interface will not form OSPF adjacencies but
> +its networks will still be advertised.
> +
> +
> [[pvesdn_config_ipam]]
> IPAM
> ----
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-03-31 8:44 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-28 17:12 [pve-devel] [PATCH cluster/docs/manager/network/proxmox{, -ve-rs, -firewall, -perl-rs} 00/52] Add SDN Fabrics Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox 1/1] serde: add string_as_bool module for boolean string parsing Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 01/17] add proxmox-network-types crate Gabriel Goller
2025-03-31 14:09 ` Thomas Lamprecht
2025-03-31 14:38 ` Stefan Hanreich
2025-03-31 16:20 ` Thomas Lamprecht
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 02/17] network-types: add common hostname and openfabric types Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 03/17] network-types: add openfabric NET type Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 04/17] network-types: move Ipv4Cidr and Ipv6Cidr types Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 05/17] frr: create proxmox-frr crate Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 06/17] frr: add common frr types Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 07/17] frr: add openfabric types Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 08/17] frr: add ospf types Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 09/17] frr: add route-map types Gabriel Goller
2025-03-28 17:12 ` [pve-devel] [PATCH proxmox-ve-rs 10/17] frr: add generic types over openfabric and ospf Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 11/17] frr: add serializer for all FRR types Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 12/17] ve-config: add openfabric section-config Gabriel Goller
2025-03-31 13:48 ` Christoph Heiss
2025-03-31 15:04 ` Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 13/17] ve-config: add ospf section-config Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 14/17] ve-config: add FRR conversion helpers for openfabric and ospf Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 15/17] ve-config: add validation for section-config Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 16/17] ve-config: add section-config to frr types conversion Gabriel Goller
2025-03-31 13:51 ` Christoph Heiss
2025-03-31 14:31 ` Stefan Hanreich
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-ve-rs 17/17] ve-config: add integrations tests Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-firewall 1/1] firewall: nftables: migrate to proxmox-network-types Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 1/7] perl-rs: sdn: initial fabric infrastructure Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 2/7] perl-rs: sdn: add CRUD helpers for OpenFabric fabric management Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 3/7] perl-rs: sdn: OpenFabric perlmod methods Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 4/7] perl-rs: sdn: implement OSPF interface file configuration generation Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 5/7] perl-rs: sdn: add CRUD helpers for OSPF fabric management Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 6/7] perl-rs: sdn: OSPF perlmod methods Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH proxmox-perl-rs 7/7] perl-rs: sdn: implement OSPF interface file configuration generation Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-cluster 1/1] cluster: add sdn fabrics config files Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 01/17] sdn: fix value returned by pending_config Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 02/17] debian: add dependency to proxmox-perl-rs Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 03/17] fabrics: add fabrics module Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 04/17] refactor: controller: move frr methods into helper Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 05/17] controllers: implement new api for frr config generation Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 06/17] sdn: add frr config generation helper Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 07/17] test: isis: add test for standalone configuration Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 08/17] sdn: frr: add daemon status to frr helper Gabriel Goller
2025-04-02 10:41 ` Fabian Grünbichler
2025-04-02 10:50 ` Stefan Hanreich
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 09/17] sdn: running: apply fabrics config Gabriel Goller
2025-04-02 10:41 ` Fabian Grünbichler
2025-04-02 12:26 ` Stefan Hanreich
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 10/17] fabrics: generate ifupdown configuration Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 11/17] api: add fabrics subfolder Gabriel Goller
2025-04-02 10:41 ` Fabian Grünbichler
2025-04-02 12:20 ` Stefan Hanreich
2025-04-02 12:29 ` Fabian Grünbichler
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 12/17] api: fabrics: add common helpers Gabriel Goller
2025-04-02 10:41 ` Fabian Grünbichler
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 13/17] fabric: openfabric: add api endpoints Gabriel Goller
2025-04-02 10:37 ` Fabian Grünbichler
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 14/17] fabric: ospf: " Gabriel Goller
2025-04-02 10:37 ` Fabian Grünbichler
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 15/17] test: fabrics: add test cases for ospf and openfabric + evpn Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 16/17] frr: bump frr config version to 10.2.1 Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-network 17/17] frr: fix reloading frr configuration Gabriel Goller
2025-04-02 10:37 ` Fabian Grünbichler
2025-04-02 10:42 ` Stefan Hanreich
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 1/7] api: use new generalized frr and etc network config helper functions Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 2/7] fabrics: add common interface panel Gabriel Goller
2025-04-02 9:26 ` Friedrich Weber
2025-04-02 10:04 ` Gabriel Goller
2025-04-02 10:10 ` Friedrich Weber
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 3/7] fabrics: add additional interface fields for openfabric and ospf Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 4/7] fabrics: add FabricEdit components Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 5/7] fabrics: add NodeEdit components Gabriel Goller
2025-04-03 9:16 ` Christoph Heiss
2025-04-04 15:45 ` Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 6/7] fabrics: Add main FabricView Gabriel Goller
2025-04-02 9:26 ` Friedrich Weber
2025-04-02 9:50 ` Christoph Heiss
2025-04-02 10:40 ` Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-manager 7/7] utils: avoid line-break in pending changes message Gabriel Goller
2025-03-28 17:13 ` [pve-devel] [PATCH pve-docs 1/1] fabrics: add initial documentation for sdn fabrics Gabriel Goller
2025-03-31 8:44 ` Shannon Sterz [this message]
2025-03-31 12:24 ` Gabriel Goller
2025-04-02 8:43 ` Gabriel Goller
2025-04-02 8:49 ` Christoph Heiss
2025-04-02 9:09 ` Gabriel Goller
2025-04-02 9:16 ` Christoph Heiss
2025-04-03 8:30 ` [pve-devel] [PATCH cluster/docs/manager/network/proxmox{, -ve-rs, -firewall, -perl-rs} 00/52] Add SDN Fabrics Friedrich Weber
2025-04-03 10:21 ` Gabriel Goller
2025-04-03 13:44 ` Friedrich Weber
2025-04-03 14:03 ` Stefan Hanreich
2025-04-03 14:20 ` Friedrich Weber
2025-04-04 7:53 ` Stefan Hanreich
2025-04-04 10:55 ` Hannes Duerr
2025-04-04 12:48 ` Gabriel Goller
2025-04-04 12:53 ` Hannes Duerr
2025-04-04 14:26 ` Gabriel Goller
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=D8UBHZP29Y1F.3P978YHUL3Q1E@proxmox.com \
--to=s.sterz@proxmox.com \
--cc=pve-devel-bounces@lists.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal