From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
	by lore.proxmox.com (Postfix) with ESMTPS id 570AB1FF164
	for <inbox@lore.proxmox.com>; Fri, 28 Mar 2025 18:16:18 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 16C448D1F;
	Fri, 28 Mar 2025 18:14:12 +0100 (CET)
From: Gabriel Goller <g.goller@proxmox.com>
To: pve-devel@lists.proxmox.com
Date: Fri, 28 Mar 2025 18:13:40 +0100
Message-Id: <20250328171340.885413-53-g.goller@proxmox.com>
X-Mailer: git-send-email 2.39.5
In-Reply-To: <20250328171340.885413-1-g.goller@proxmox.com>
References: <20250328171340.885413-1-g.goller@proxmox.com>
MIME-Version: 1.0
X-SPAM-LEVEL: Spam detection results:  0
 AWL -0.025 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
Subject: [pve-devel] [PATCH pve-docs 1/1] fabrics: add initial documentation
 for sdn fabrics
X-BeenThere: pve-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

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.
+
+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
+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.
+
+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).
+
+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
+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.
+
+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
+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
+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.
+
+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
 ----
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel