all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Stefan Hanreich <s.hanreich@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH proxmox-ve-rs 2/2] ve-config: guest: add fallback enum variant
Date: Fri,  9 Oct 2026 11:00:04 +0200	[thread overview]
Message-ID: <20261009090006.104013-3-s.hanreich@proxmox.com> (raw)
In-Reply-To: <20261009090006.104013-1-s.hanreich@proxmox.com>

In order for ve-config to stay forward-compatible with the addition of
new network interface types, introduce a fallback variant to contain
any potential unknown variants that may be introduced in the future.
Since the netX properties in qemu-server use KeyAliasInfo, and the
struct does not provide the possibility of allowing arbitrary keys,
this does not allow using arbitrary models when using the short form -
which is currently prevalent in the configuration files.

Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
---

Notes:
    Practically not really an improvement, but I had it initially and
    thought it wouldn't hurt to include it in the series nonetheles. If
    not desired or deemed to useless, this patch can be dropped when
    applying.

 Cargo.toml                        |  1 +
 proxmox-ve-config/Cargo.toml      |  1 +
 proxmox-ve-config/src/guest/vm.rs | 11 +++++++++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 4655b178..2f9058dd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,6 +24,7 @@ regex = "1.7"
 serde = { version = "1" }
 thiserror = "2.0.0"
 
+proxmox-fixed-string = { version = "0.1.1" }
 proxmox-frr = { version = "0.5.1", path = "proxmox-frr" }
 proxmox-network-types = { version = "1.1.2" }
 proxmox-schema = { version = "5" }
diff --git a/proxmox-ve-config/Cargo.toml b/proxmox-ve-config/Cargo.toml
index 7e3939d4..3d5aa9eb 100644
--- a/proxmox-ve-config/Cargo.toml
+++ b/proxmox-ve-config/Cargo.toml
@@ -19,6 +19,7 @@ serde = { workspace = true, features = [ "derive" ] }
 serde_json = "1"
 
 proxmox-base64 = "1"
+proxmox-fixed-string.workspace = true
 proxmox-frr = { workspace = true, optional = true }
 proxmox-network-types = { workspace = true, features = [ "api-types" ] }
 proxmox-schema = { workspace = true, features = [ "api-types" ] }
diff --git a/proxmox-ve-config/src/guest/vm.rs b/proxmox-ve-config/src/guest/vm.rs
index cebcb9e6..3ce04c73 100644
--- a/proxmox-ve-config/src/guest/vm.rs
+++ b/proxmox-ve-config/src/guest/vm.rs
@@ -2,7 +2,8 @@ use std::collections::BTreeMap;
 use std::io;
 use std::str::FromStr;
 
-use anyhow::{Error, bail};
+use anyhow::{Context, Error, bail};
+use proxmox_fixed_string::FixedString;
 use serde::Deserialize;
 
 use proxmox_network_types::ip_address::{Ipv4Cidr, Ipv6Cidr};
@@ -32,6 +33,7 @@ pub enum NetworkDeviceModel {
     Ne2kIsa,
     Ne2kPci,
     Pcnet,
+    UnknownEnumValue(FixedString),
 }
 
 proxmox_serde::forward_deserialize_to_from_str!(NetworkDeviceModel);
@@ -56,7 +58,12 @@ impl FromStr for NetworkDeviceModel {
             "ne2k_isa" => Ok(NetworkDeviceModel::Ne2kIsa),
             "ne2k_pci" => Ok(NetworkDeviceModel::Ne2kPci),
             "pcnet" => Ok(NetworkDeviceModel::Pcnet),
-            _ => bail!("Invalid network device model: {s}"),
+            _ => {
+                let unknown_variant = FixedString::try_from(s)
+                    .with_context(|| format!("unable to parse network device model {s}"))?;
+
+                Ok(NetworkDeviceModel::UnknownEnumValue(unknown_variant))
+            }
         }
     }
 }
-- 
2.47.3





      parent reply	other threads:[~2026-10-09  9:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-09  9:00 [PATCH proxmox-ve-rs 0/2] fix network interface name parsing Stefan Hanreich
2026-10-09  9:00 ` [PATCH proxmox-ve-rs 1/2] fix #7584: ve-config: guest: add missing network interface models Stefan Hanreich
2026-10-09  9:00 ` Stefan Hanreich [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261009090006.104013-3-s.hanreich@proxmox.com \
    --to=s.hanreich@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal