From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 919BC1FF13C for ; Thu, 02 Apr 2026 10:11:40 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 869A1BD3E; Thu, 2 Apr 2026 10:12:01 +0200 (CEST) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Subject: [PATCH proxmox-perl-rs v2 11/25] pve-rs: fabrics: add helpers for parsing interface property strings Date: Thu, 2 Apr 2026 10:11:31 +0200 Message-ID: <20260402081148.76276-12-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260402081148.76276-1-s.hanreich@proxmox.com> References: <20260402081148.76276-1-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1775117456990 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.703 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 Message-ID-Hash: WY5JQLD4WZ675RWU5MH4N74JSYO2TEGL X-Message-ID-Hash: WY5JQLD4WZ675RWU5MH4N74JSYO2TEGL X-MailFrom: s.hanreich@proxmox.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: The API methods in pve-network need to be able to parse the property strings in the CRUD methods. This is because the API methods are handling key generation for WireGuard interfaces, which require the name of the interface to detect changes in the interfaces key of nodes. Signed-off-by: Stefan Hanreich --- pve-rs/src/bindings/sdn/fabrics.rs | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/pve-rs/src/bindings/sdn/fabrics.rs b/pve-rs/src/bindings/sdn/fabrics.rs index be5d0f7..45739f8 100644 --- a/pve-rs/src/bindings/sdn/fabrics.rs +++ b/pve-rs/src/bindings/sdn/fabrics.rs @@ -20,6 +20,7 @@ pub mod pve_rs_sdn_fabrics { use perlmod::Value; use proxmox_network_types::ip_address::{Cidr, Ipv4Cidr, Ipv6Cidr}; + use proxmox_schema::property_string::PropertyString; use proxmox_section_config::typed::SectionConfigData; use proxmox_ve_config::common::valid::{Valid, Validatable}; @@ -334,6 +335,43 @@ pub mod pve_rs_sdn_fabrics { } } + #[export] + /// Parses a wireguard interface property-string (create-only parameters) and returns it as a struct. + /// + /// Helper for pve-network API methods, that need to parse the property strings for + /// handling the WireGuard key generation logic. + pub fn parse_wireguard_create_interface( + property_string: &str, + ) -> Result { + Ok(property_string + .parse::>()? + .into_inner()) + } + + #[export] + /// Parse a wireguard interface property-string and returns it as a struct. + /// + /// Helper for pve-network API methods, that need to parse the property strings for + /// handling the WireGuard key generation logic. + pub fn parse_wireguard_interface( + property_string: &str, + ) -> Result { + Ok(property_string + .parse::>()? + .into_inner()) + } + + #[export] + /// Formats a given wireguard interface as a property string. + /// + /// Helper for pve-network API methods, that need to print the property strings for + /// handling the WireGuard key generation logic. + pub fn print_wireguard_interface( + wireguard_interface: WireGuardInterfaceProperties, + ) -> Result { + Ok(PropertyString::new(wireguard_interface).to_property_string()?) + } + /// Method: Map all interface names of a node to a different one, according to the given /// mapping. /// -- 2.47.3