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