clientapi-pve 2026.5.24

Generated from apidoc.js. NOT an official Proxmox specification. See https://pve.proxmox.com/pve-docs/api-viewer/ for the upstream documentation.
Documentation
/*
 * Proxmox Virtual Environment API
 *
 * Generated from apidoc.js. NOT an official Proxmox specification. See https://pve.proxmox.com/pve-docs/api-viewer/ for the upstream documentation.
 *
 * The version of the OpenAPI document: 9.x
 * 
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct PveQemuNetConfig {

    /// Bridge to attach the network device to. The Proxmox VE standard bridge is called 'vmbr0'.  If you do not specify a bridge, we create a kvm user (NATed) network device, which provides DHCP and DNS services. The following addresses are used:   10.0.2.2   Gateway  10.0.2.3   DNS Server  10.0.2.4   SMB Server  The DHCP server assign addresses to the guest starting from 10.0.2.15. 
    #[serde(rename = "bridge", skip_serializing_if = "Option::is_none")]
    pub bridge: Option<String>,

    #[serde(rename = "e1000", skip_serializing_if = "Option::is_none")]
    pub e1000: Option<String>,

    #[serde(rename = "e1000-82540em", skip_serializing_if = "Option::is_none")]
    pub e1000_82540em: Option<String>,

    #[serde(rename = "e1000-82544gc", skip_serializing_if = "Option::is_none")]
    pub e1000_82544gc: Option<String>,

    #[serde(rename = "e1000-82545em", skip_serializing_if = "Option::is_none")]
    pub e1000_82545em: Option<String>,

    #[serde(rename = "e1000e", skip_serializing_if = "Option::is_none")]
    pub e1000e: Option<String>,

    /// Whether this interface should be protected by the firewall.
    #[serde(rename = "firewall", skip_serializing_if = "Option::is_none")]
    pub firewall: Option<models::PveBoolean>,

    #[serde(rename = "i82551", skip_serializing_if = "Option::is_none")]
    pub i82551: Option<String>,

    #[serde(rename = "i82557b", skip_serializing_if = "Option::is_none")]
    pub i82557b: Option<String>,

    #[serde(rename = "i82559er", skip_serializing_if = "Option::is_none")]
    pub i82559er: Option<String>,

    /// Whether this interface should be disconnected (like pulling the plug).
    #[serde(rename = "link_down", skip_serializing_if = "Option::is_none")]
    pub link_down: Option<models::PveBoolean>,

    /// A common MAC address with the I/G (Individual/Group) bit not set.
    #[serde(rename = "macaddr", skip_serializing_if = "Option::is_none")]
    pub macaddr: Option<String>,

    /// Network Card Model. The 'virtio' model provides the best performance with very low CPU overhead. If your guest does not support this driver, it is usually best to use 'e1000'.
    #[serde(rename = "model")]
    pub model: models::PveModelEnum,

    /// Force MTU of network device (VirtIO only). Setting to '1' or empty will use the bridge MTU
    #[serde(rename = "mtu", skip_serializing_if = "Option::is_none")]
    pub mtu: Option<i32>,

    #[serde(rename = "ne2k_isa", skip_serializing_if = "Option::is_none")]
    pub ne2k_isa: Option<String>,

    #[serde(rename = "ne2k_pci", skip_serializing_if = "Option::is_none")]
    pub ne2k_pci: Option<String>,

    #[serde(rename = "pcnet", skip_serializing_if = "Option::is_none")]
    pub pcnet: Option<String>,

    /// Number of packet queues to be used on the device.
    #[serde(rename = "queues", skip_serializing_if = "Option::is_none")]
    pub queues: Option<i32>,

    /// Rate limit in mbps (megabytes per second) as floating point number.
    #[serde(rename = "rate", skip_serializing_if = "Option::is_none")]
    pub rate: Option<f64>,

    #[serde(rename = "rtl8139", skip_serializing_if = "Option::is_none")]
    pub rtl8139: Option<String>,

    /// VLAN tag to apply to packets on this interface.
    #[serde(rename = "tag", skip_serializing_if = "Option::is_none")]
    pub tag: Option<i32>,

    /// VLAN trunks to pass through this interface.
    #[serde(rename = "trunks", skip_serializing_if = "Option::is_none")]
    pub trunks: Option<String>,

    #[serde(rename = "virtio", skip_serializing_if = "Option::is_none")]
    pub virtio: Option<String>,

    #[serde(rename = "vmxnet3", skip_serializing_if = "Option::is_none")]
    pub vmxnet3: Option<String>,


}

impl PveQemuNetConfig {
    pub fn new(model: models::PveModelEnum) -> PveQemuNetConfig {
        PveQemuNetConfig {
            
            bridge: None,
            
            e1000: None,
            
            e1000_82540em: None,
            
            e1000_82544gc: None,
            
            e1000_82545em: None,
            
            e1000e: None,
            
            firewall: None,
            
            i82551: None,
            
            i82557b: None,
            
            i82559er: None,
            
            link_down: None,
            
            macaddr: None,
            
            model,
            
            mtu: None,
            
            ne2k_isa: None,
            
            ne2k_pci: None,
            
            pcnet: None,
            
            queues: None,
            
            rate: None,
            
            rtl8139: None,
            
            tag: None,
            
            trunks: None,
            
            virtio: None,
            
            vmxnet3: None,
            
        }
    }
}


impl PveQemuNetConfig {
    /// Serialise this PveQemuNetConfig into Proxmox's CLI-style shorthand
    /// string (`key=value,…`). The property marked `x-pve-default-key`
    /// is emitted positionally without a `key=` prefix; aliases collapse
    /// multiple property names to the same wire key.
    ///
    /// Example: `PveQemuNetConfig `
    /// → `"virtio,bridge=vmbr0"`
    pub fn to_shorthand(&self) -> String {
        let mut parts: Vec<String> = Vec::new();
        
        
        parts.push(format!("{}", self.model));
        
        
        
        
        if let Some(ref v) = self.bridge {
            parts.push(format!("bridge={}", v));
        }
        
        
        if let Some(ref v) = self.e1000 {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.e1000_82540em {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.e1000_82544gc {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.e1000_82545em {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.e1000e {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.firewall {
            parts.push(format!("firewall={}", v));
        }
        
        
        if let Some(ref v) = self.i82551 {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.i82557b {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.i82559er {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.link_down {
            parts.push(format!("link_down={}", v));
        }
        
        
        if let Some(ref v) = self.macaddr {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.mtu {
            parts.push(format!("mtu={}", v));
        }
        
        
        if let Some(ref v) = self.ne2k_isa {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.ne2k_pci {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.pcnet {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.queues {
            parts.push(format!("queues={}", v));
        }
        
        
        if let Some(ref v) = self.rate {
            parts.push(format!("rate={}", v));
        }
        
        
        if let Some(ref v) = self.rtl8139 {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.tag {
            parts.push(format!("tag={}", v));
        }
        
        
        if let Some(ref v) = self.trunks {
            parts.push(format!("trunks={}", v));
        }
        
        
        if let Some(ref v) = self.virtio {
            parts.push(format!("macaddr={}", v));
        }
        
        
        if let Some(ref v) = self.vmxnet3 {
            parts.push(format!("macaddr={}", v));
        }
        
        parts.join(",")
    }
}