From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id E58E21FF16F for ; Tue, 8 Jul 2025 10:18:06 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B574510EE5; Tue, 8 Jul 2025 10:18:49 +0200 (CEST) Date: Tue, 8 Jul 2025 10:18:46 +0200 From: Wolfgang Bumiller To: Gabriel Goller Message-ID: References: <20250702145101.894299-1-g.goller@proxmox.com> <20250702145101.894299-23-g.goller@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250702145101.894299-23-g.goller@proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.079 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: Re: [pve-devel] [PATCH proxmox-ve-rs v4 16/22] config: sdn: fabrics: add section config X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Cc: 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" On Wed, Jul 02, 2025 at 04:50:07PM +0200, Gabriel Goller wrote: > From: Stefan Hanreich > > The Section type represents the configuration as stored in > '/etc/pve/sdn/fabrics.cfg'. It can contain a mix of fabric and node > sections, which are in turn unique to each protocol. We utilize the > generic FabricSection and NodeSection types to define every possible > section type in the section config. We also provide a helper for > sorting the sections in the configuration file into Fabrics and Nodes, > as well as conversion from / to the Fabric and Node types. > > Co-authored-by: Gabriel Goller > Signed-off-by: Stefan Hanreich > --- > .../src/sdn/fabric/section_config/mod.rs | 105 ++++++++++++++++++ > 1 file changed, 105 insertions(+) > > diff --git a/proxmox-ve-config/src/sdn/fabric/section_config/mod.rs b/proxmox-ve-config/src/sdn/fabric/section_config/mod.rs > index 7db378837eb1..174ea4d126c5 100644 > --- a/proxmox-ve-config/src/sdn/fabric/section_config/mod.rs > +++ b/proxmox-ve-config/src/sdn/fabric/section_config/mod.rs > @@ -2,3 +2,108 @@ pub mod fabric; > pub mod interface; > pub mod node; > pub mod protocol; > + > +use const_format::concatcp; > +use serde::{Deserialize, Serialize}; > + > +use crate::sdn::fabric::section_config::{ > + fabric::{Fabric, FabricSection, FABRIC_ID_REGEX_STR}, > + node::{Node, NodeSection, NODE_ID_REGEX_STR}, > + protocol::{ > + openfabric::{OpenfabricNodeProperties, OpenfabricProperties}, > + ospf::{OspfNodeProperties, OspfProperties}, > + }, > +}; > + > +use proxmox_schema::{api, const_regex, ApiStringFormat}; > + > +/// Represents a value that can be one of two given types. > +/// > +/// This is used for the fabrics section config, where values could either be Fabrics or Nodes. It Then please make it `Fabric(F)` and `Node(N)` instead of `Left` and `Right`... A local helper type with a completely generic name and variant names is just confusing otherwise. > +/// can be used to split the sections contained in the config into their concrete types safely. > +pub enum Either { > + Left(L), > + Right(R), > +} > + > +impl From
for Either { > + fn from(section: Section) -> Self { > + match section { > + Section::OpenfabricFabric(fabric_section) => Self::Left(fabric_section.into()), > + Section::OspfFabric(fabric_section) => Self::Left(fabric_section.into()), > + Section::OpenfabricNode(node_section) => Self::Right(node_section.into()), > + Section::OspfNode(node_section) => Self::Right(node_section.into()), > + } > + } > +} > + > +const_regex! { > + pub SECTION_ID_REGEX = concatcp!(r"^", FABRIC_ID_REGEX_STR, r"(?:_", NODE_ID_REGEX_STR, r")?$"); > +} > + > +pub const SECTION_ID_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&SECTION_ID_REGEX); > + > +/// A section in the SDN fabrics config. > +/// > +/// It contains two variants for every protocol: The fabric and the node. They are represented > +/// respectively by [`FabricSection`] and [`NodeSection`] which encapsulate the common properties > +/// of fabrics and nodes and take the specific properties for the protocol as a type parameter. > +#[api( > + "id-property": "id", > + "id-schema": { > + type: String, > + description: "fabric/node id", > + format: &SECTION_ID_FORMAT, > + }, > + "type-key": "type", > +)] > +#[derive(Debug, Clone, Serialize, Deserialize)] > +#[serde(rename_all = "snake_case", tag = "type")] > +pub enum Section { > + OpenfabricFabric(FabricSection), > + OspfFabric(FabricSection), > + OpenfabricNode(NodeSection), > + OspfNode(NodeSection), > +} > + > +impl From> for Section { > + fn from(section: FabricSection) -> Self { > + Self::OpenfabricFabric(section) > + } > +} > + > +impl From> for Section { > + fn from(section: FabricSection) -> Self { > + Self::OspfFabric(section) > + } > +} > + > +impl From> for Section { > + fn from(section: NodeSection) -> Self { > + Self::OpenfabricNode(section) > + } > +} > + > +impl From> for Section { > + fn from(section: NodeSection) -> Self { > + Self::OspfNode(section) > + } > +} > + > +impl From for Section { > + fn from(fabric: Fabric) -> Self { > + match fabric { > + Fabric::Openfabric(fabric_section) => fabric_section.into(), > + Fabric::Ospf(fabric_section) => fabric_section.into(), > + } > + } > +} > + > +impl From for Section { > + fn from(node: Node) -> Self { > + match node { > + Node::Openfabric(node_section) => node_section.into(), > + Node::Ospf(node_section) => node_section.into(), > + } > + } > +} > -- > 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel