From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 0FC341FF0AE for ; Tue, 13 Oct 2026 14:32:39 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 68266213DD; Tue, 13 Oct 2026 14:32:36 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.10.3 smtp.infra.comaite.com B94B162BF1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comaite.com; s=377A38C6-3A8D-11E5-A0EC-E97757B27CB3; t=1791893672; bh=bktLYEGzpbA7yhWBVOXq9min9V+f4D64lee9SbfCTDM=; h=From:To:Date:Message-ID:MIME-Version; b=Wfz9wnSAt4kWzAQ7TdHB8HMtew5O+2vwiDvEONoMMepPQ7lLwfO/cYGWL2eFZ4Ist BdhjiaVlFOd4E6zQe9e6lU+fNv4gQHrTEP5lI8HmqPa8+ehRg/x7tb9wX8zVNjoBY6 eyQtyK/+Vhh/rNtW9m3x4IZGuQ165UjujnabJDS4vXKVoTeQPhJOt7RmBQ0VNxpW3p amWsFr1GZOszEdvNIM+MH6E2NDy76WoTBx+LOEOGhzHtNQqAolwzE9LmnX9aW88MQD yJSaNq6vmI5my65gQVWe5JxXhRIPh81uOYMFZBSosPbT/PsrGDs+VbQWuW4vX6NwBp sMPHXJidfS6qA== From: =?UTF-8?q?R=C3=A9mi=20PAETA?= To: pve-devel@lists.proxmox.com Subject: [RFC PATCH ve-rs 01/16] ve-config: sdn: add ovn zone type Date: Tue, 13 Oct 2026 14:14:17 +0200 Message-ID: <20261013121432.2642979-2-remi.paeta@comaite.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20261013121432.2642979-1-remi.paeta@comaite.com> References: <1116090294.1714263.1791537779868.JavaMail.zimbra@comaite.com> <20261013121432.2642979-1-remi.paeta@comaite.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.500 Adjusted score from AWL reputation of From: address DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: EEMJUQ7Z2IX6R2XNP5ITXPBK7UGBZ5LS X-Message-ID-Hash: EEMJUQ7Z2IX6R2XNP5ITXPBK7UGBZ5LS X-MailFrom: remi.paeta@comaite.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: pve-network gains an "ovn" zone type. An unknown zone type makes the parsing of the whole SDN running configuration fail, so proxmox-firewall would stop generating any rule on nodes with OVN zones, for all guests. The zone type does not need any specific handling: OVN zones only carry vnets and subnets like the other zone types. Signed-off-by: Rémi PAETA --- proxmox-ve-config/src/sdn/config.rs | 3 +++ proxmox-ve-config/tests/sdn/main.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/proxmox-ve-config/src/sdn/config.rs b/proxmox-ve-config/src/sdn/config.rs index 2f30cf2..5a5c291 100644 --- a/proxmox-ve-config/src/sdn/config.rs +++ b/proxmox-ve-config/src/sdn/config.rs @@ -69,6 +69,7 @@ pub enum ZoneType { Qinq, Vxlan, Evpn, + Ovn, } proxmox_serde::forward_deserialize_to_from_str!(ZoneType); @@ -84,6 +85,7 @@ impl FromStr for ZoneType { "qinq" => Ok(ZoneType::Qinq), "vxlan" => Ok(ZoneType::Vxlan), "evpn" => Ok(ZoneType::Evpn), + "ovn" => Ok(ZoneType::Ovn), _ => Err(SdnConfigError::InvalidZoneType), } } @@ -97,6 +99,7 @@ impl Display for ZoneType { ZoneType::Qinq => "qinq", ZoneType::Vxlan => "vxlan", ZoneType::Evpn => "evpn", + ZoneType::Ovn => "ovn", }) } } diff --git a/proxmox-ve-config/tests/sdn/main.rs b/proxmox-ve-config/tests/sdn/main.rs index a5f6845..5585669 100644 --- a/proxmox-ve-config/tests/sdn/main.rs +++ b/proxmox-ve-config/tests/sdn/main.rs @@ -72,6 +72,34 @@ fn parse_running_config() { assert_eq!(sdn_config, parsed_config); } +#[test] +fn parse_running_config_ovn_zone() { + let running_config: RunningConfig = serde_json::from_str( + r#"{ + "zones": { "ids": { "ovnzone": { "type": "ovn", "controller": "ovnctl", "ipam": "pve" } } }, + "vnets": { "ids": { "ovnvnet": { "type": "vnet", "zone": "ovnzone" } } }, + "subnets": { "ids": {} } + }"#, + ) + .unwrap(); + + let parsed_config = SdnConfig::try_from(running_config).unwrap(); + + let sdn_config = SdnConfig::from_zones([ZoneConfig::from_vnets( + ZoneName::from_str("ovnzone").unwrap(), + ZoneType::Ovn, + [VnetConfig::new( + VnetName::from_str("ovnvnet").unwrap(), + None, + )], + ) + .unwrap()]) + .unwrap(); + + assert_eq!(sdn_config, parsed_config); + assert_eq!(ZoneType::Ovn.to_string(), "ovn"); +} + #[test] fn sdn_config() { let mut sdn_config = SdnConfig::new(); -- 2.47.3