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 ED0F71FF16E for <inbox@lore.proxmox.com>; Mon, 31 Mar 2025 10:44:33 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C3C473E13D; Mon, 31 Mar 2025 10:44:22 +0200 (CEST) Mime-Version: 1.0 Date: Mon, 31 Mar 2025 10:44:18 +0200 Message-Id: <D8UBHZP29Y1F.3P978YHUL3Q1E@proxmox.com> Cc: "pve-devel" <pve-devel-bounces@lists.proxmox.com> From: "Shannon Sterz" <s.sterz@proxmox.com> To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com> X-Mailer: aerc 0.20.1-0-g2ecb8770224a-dirty References: <20250328171340.885413-1-g.goller@proxmox.com> <20250328171340.885413-53-g.goller@proxmox.com> In-Reply-To: <20250328171340.885413-53-g.goller@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.016 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 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [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> 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