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 961781FF189 for ; Thu, 4 Sep 2025 14:42:28 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 3B5722ED3B; Thu, 4 Sep 2025 14:42:44 +0200 (CEST) Date: Thu, 4 Sep 2025 14:42:39 +0200 From: Wolfgang Bumiller To: Stefan Hanreich Message-ID: References: <20250904081900.12655-1-s.hanreich@proxmox.com> <20250904081900.12655-11-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20250904081900.12655-11-s.hanreich@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756989743442 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.074 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: [pdm-devel] applied: [PATCH proxmox-api-types v4 1/6] sdn: add list/create zone endpoints X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Cc: pdm-devel@lists.proxmox.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" applied all api-types patches, thanks On Thu, Sep 04, 2025 at 10:18:35AM +0200, Stefan Hanreich wrote: > Signed-off-by: Stefan Hanreich > --- > pve-api-types/generate.pl | 18 +++++++++ > pve-api-types/src/types/verifiers.rs | 56 ++++++++++++++++++++++++++++ > 2 files changed, 74 insertions(+) > > diff --git a/pve-api-types/generate.pl b/pve-api-types/generate.pl > index cd08f3d..dc45d98 100644 > --- a/pve-api-types/generate.pl > +++ b/pve-api-types/generate.pl > @@ -79,6 +79,8 @@ Schema2Rust::register_format('bridge-pair' => { code => 'verifiers::verify_bridg > > Schema2Rust::register_format('pve-task-status-type' => { regex => '^(?i:ok|error|warning|unknown)$' }); > > +Schema2Rust::register_format('pve-sdn-zone-id' => { code => 'verifiers::verify_sdn_id' }); > + > Schema2Rust::register_enum_variant('PveVmCpuConfReportedModel::486' => 'I486'); > Schema2Rust::register_enum_variant('QemuConfigEfidisk0Efitype::2m' => 'Mb2'); > Schema2Rust::register_enum_variant('QemuConfigEfidisk0Efitype::4m' => 'Mb4'); > @@ -104,6 +106,10 @@ Schema2Rust::register_format('pve-iface' => { regex => '^[a-zA-Z][a-zA-Z0-9_]{1, > > Schema2Rust::register_format('pve-vlan-id-or-range' => { code => 'verifiers::verify_vlan_id_or_range' }); > > +Schema2Rust::register_format('pve-sdn-bgp-rt' => { code => 'verifiers::verify_sdn_bgp_rt' }); > +Schema2Rust::register_format('pve-sdn-controller-id' => { code => 'verifiers::verify_sdn_controller_id' }); > +Schema2Rust::register_format('pve-sdn-isis-net' => { regex => '^[a-fA-F0-9]{2}(\.[a-fA-F0-9]{4}){3,9}\.[a-fA-F0-9]{2}$' }); > + > # This is used as both a task status and guest status. > Schema2Rust::generate_enum('IsRunning', { > type => 'string', > @@ -328,6 +334,18 @@ api(GET => '/nodes/{node}/apt/update', 'list_available_updates', 'return-name' = > api(POST => '/nodes/{node}/apt/update', 'update_apt_database', 'output-type' => 'PveUpid', 'param-name' => 'AptUpdateParams'); > api(GET => '/nodes/{node}/apt/changelog', 'get_package_changelog', 'output-type' => 'String'); > > +Schema2Rust::generate_enum('SdnObjectState', { > + type => 'string', > + description => "The state of an SDN object.", > + enum => ['new', 'deleted', 'changed'], > +}); > + > +api(GET => '/cluster/sdn/zones', 'list_zones', 'return-name' => 'SdnZone'); > +Schema2Rust::derive('SdnZone' => 'Clone', 'PartialEq'); > +Schema2Rust::derive('SdnZonePending' => 'Clone', 'PartialEq'); > +api(POST => '/cluster/sdn/zones', 'create_zone', 'param-name' => 'CreateZone'); > +Schema2Rust::derive('CreateZone' => 'Clone', 'PartialEq'); > + > # NOW DUMP THE CODE: > # > # We generate one file for API types, and one for API method calls. > diff --git a/pve-api-types/src/types/verifiers.rs b/pve-api-types/src/types/verifiers.rs > index e0ad4ca..9a88118 100644 > --- a/pve-api-types/src/types/verifiers.rs > +++ b/pve-api-types/src/types/verifiers.rs > @@ -29,6 +29,12 @@ pub IFACE_RE = r##"^(?i)[a-z][a-z0-9_]{1,20}([:\.]\d+)?$"##; > > pub VLAN_ID_OR_RANGE = r##"^(\d+)(?:-(\d+))?$"##; > > +pub SDN_ID = r##"^(?i)[a-z][a-z0-9]+$"##; > + > +pub SDN_CONTROLLER_ID = r##"^(?i)[a-z][a-z0-9_-]*[a-z0-9]$"##; > + > +pub SDN_BGP_RT = r##"^(\d+):(\d+)$"##; > + > } > > pub fn verify_volume_id(s: &str) -> Result<(), Error> { > @@ -228,3 +234,53 @@ pub fn verify_vlan_id_or_range(s: &str) -> Result<(), Error> { > > Ok(()) > } > + > +pub fn verify_sdn_id(s: &str) -> Result<(), Error> { > + if s.len() > 8 { > + bail!("SDN ID cannot be longer than 8 characters") > + } > + > + if !SDN_ID.is_match(s) { > + bail!("SDN ID contains illegal characters"); > + } > + > + Ok(()) > +} > + > +pub fn verify_sdn_controller_id(s: &str) -> Result<(), Error> { > + if s.len() > 64 { > + bail!("SDN controller ID cannot be longer than 64 characters") > + } > + > + if !SDN_CONTROLLER_ID.is_match(s) { > + bail!("SDN controller ID contains illegal characters"); > + } > + > + Ok(()) > +} > + > +pub fn verify_sdn_bgp_rt(s: &str) -> Result<(), Error> { > + let captures = SDN_BGP_RT > + .captures(s) > + .ok_or_else(|| format_err!("invalid BGP RT: '{s}"))?; > + > + match (captures.get(1), captures.get(2)) { > + (Some(asn), Some(vni)) => { > + asn.as_str() > + .parse::() > + .map_err(|_| format_err!("Invalid ASN in BGP RT: {s}"))?; > + > + let vni: u32 = vni > + .as_str() > + .parse() > + .map_err(|_| format_err!("Invalid VNI in BGP RT: {s}"))?; > + > + if vni > 16_777_215 { > + bail!("invalid VNI in BGP RT: '{s}'") > + } > + } > + _ => bail!("invalid BGP RT: '{s}"), > + } > + > + Ok(()) > +} > -- > 2.47.2 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel