vmm: Move impl Default for ... to vm_config.rs

This is consistent when considering that some structs have a
`#[derive(Default)`] so it makes sense for the default implementations
to be in the same location.

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2022-10-06 13:19:47 +01:00
parent 7ad58457b0
commit d692dfb8e3
2 changed files with 127 additions and 126 deletions

View File

@ -18,11 +18,6 @@ use std::str::FromStr;
use thiserror::Error; use thiserror::Error;
use virtio_devices::{RateLimiterConfig, TokenBucketConfig}; use virtio_devices::{RateLimiterConfig, TokenBucketConfig};
pub const DEFAULT_VCPUS: u8 = 1;
pub const DEFAULT_MEMORY_MB: u64 = 512;
pub const DEFAULT_RNG_SOURCE: &str = "/dev/urandom";
const MAX_NUM_PCI_SEGMENTS: u16 = 16; const MAX_NUM_PCI_SEGMENTS: u16 = 16;
/// Errors associated with VM configuration parameters. /// Errors associated with VM configuration parameters.
@ -453,12 +448,6 @@ impl<'a> VmParams<'a> {
} }
} }
impl Default for HotplugMethod {
fn default() -> Self {
HotplugMethod::Acpi
}
}
#[derive(Debug)] #[derive(Debug)]
pub enum ParseHotplugMethodError { pub enum ParseHotplugMethodError {
InvalidValue(String), InvalidValue(String),
@ -585,20 +574,6 @@ impl CpusConfig {
} }
} }
impl Default for CpusConfig {
fn default() -> Self {
CpusConfig {
boot_vcpus: DEFAULT_VCPUS,
max_vcpus: DEFAULT_VCPUS,
topology: None,
kvm_hyperv: false,
max_phys_bits: DEFAULT_MAX_PHYS_BITS,
affinity: None,
features: CpuFeatures::default(),
}
}
}
impl PlatformConfig { impl PlatformConfig {
pub fn parse(platform: &str) -> Result<Self> { pub fn parse(platform: &str) -> Result<Self> {
let mut parser = OptionParser::new(); let mut parser = OptionParser::new();
@ -664,20 +639,6 @@ impl PlatformConfig {
} }
} }
impl Default for PlatformConfig {
fn default() -> Self {
PlatformConfig {
num_pci_segments: DEFAULT_NUM_PCI_SEGMENTS,
iommu_segments: None,
serial_number: None,
uuid: None,
oem_strings: None,
#[cfg(feature = "tdx")]
tdx: false,
}
}
}
impl MemoryConfig { impl MemoryConfig {
pub fn parse(memory: &str, memory_zones: Option<Vec<&str>>) -> Result<Self> { pub fn parse(memory: &str, memory_zones: Option<Vec<&str>>) -> Result<Self> {
let mut parser = OptionParser::new(); let mut parser = OptionParser::new();
@ -843,23 +804,6 @@ impl MemoryConfig {
} }
} }
impl Default for MemoryConfig {
fn default() -> Self {
MemoryConfig {
size: DEFAULT_MEMORY_MB << 20,
mergeable: false,
hotplug_method: HotplugMethod::Acpi,
hotplug_size: None,
hotplugged_size: None,
shared: false,
hugepages: false,
hugepage_size: None,
prefault: false,
zones: None,
}
}
}
impl CmdlineConfig { impl CmdlineConfig {
pub fn parse(cmdline: Option<&str>) -> Result<Self> { pub fn parse(cmdline: Option<&str>) -> Result<Self> {
let args = cmdline let args = cmdline
@ -870,25 +814,6 @@ impl CmdlineConfig {
} }
} }
impl Default for DiskConfig {
fn default() -> Self {
Self {
path: None,
readonly: false,
direct: false,
iommu: false,
num_queues: default_diskconfig_num_queues(),
queue_size: default_diskconfig_queue_size(),
vhost_user: false,
vhost_socket: None,
id: None,
disable_io_uring: false,
rate_limiter_config: None,
pci_segment: 0,
}
}
}
impl DiskConfig { impl DiskConfig {
pub const SYNTAX: &'static str = "Disk parameters \ pub const SYNTAX: &'static str = "Disk parameters \
\"path=<disk_image_path>,readonly=on|off,direct=on|off,iommu=on|off,\ \"path=<disk_image_path>,readonly=on|off,direct=on|off,iommu=on|off,\
@ -1052,12 +977,6 @@ impl DiskConfig {
} }
} }
impl Default for VhostMode {
fn default() -> Self {
VhostMode::Client
}
}
#[derive(Debug)] #[derive(Debug)]
pub enum ParseVhostModeError { pub enum ParseVhostModeError {
InvalidValue(String), InvalidValue(String),
@ -1075,29 +994,6 @@ impl FromStr for VhostMode {
} }
} }
impl Default for NetConfig {
fn default() -> Self {
Self {
tap: default_netconfig_tap(),
ip: default_netconfig_ip(),
mask: default_netconfig_mask(),
mac: default_netconfig_mac(),
host_mac: None,
mtu: None,
iommu: false,
num_queues: default_netconfig_num_queues(),
queue_size: default_netconfig_queue_size(),
vhost_user: false,
vhost_socket: None,
vhost_mode: VhostMode::Client,
id: None,
fds: None,
rate_limiter_config: None,
pci_segment: 0,
}
}
}
impl NetConfig { impl NetConfig {
pub const SYNTAX: &'static str = "Network parameters \ pub const SYNTAX: &'static str = "Network parameters \
\"tap=<if_name>,ip=<ip_addr>,mask=<net_mask>,mac=<mac_addr>,fd=<fd1,fd2...>,iommu=on|off,\ \"tap=<if_name>,ip=<ip_addr>,mask=<net_mask>,mac=<mac_addr>,fd=<fd1,fd2...>,iommu=on|off,\
@ -1320,15 +1216,6 @@ impl RngConfig {
} }
} }
impl Default for RngConfig {
fn default() -> Self {
RngConfig {
src: PathBuf::from(DEFAULT_RNG_SOURCE),
iommu: false,
}
}
}
impl BalloonConfig { impl BalloonConfig {
pub const SYNTAX: &'static str = pub const SYNTAX: &'static str =
"Balloon parameters \"size=<balloon_size>,deflate_on_oom=on|off,\ "Balloon parameters \"size=<balloon_size>,deflate_on_oom=on|off,\
@ -1367,19 +1254,6 @@ impl BalloonConfig {
} }
} }
impl Default for FsConfig {
fn default() -> Self {
Self {
tag: "".to_owned(),
socket: PathBuf::new(),
num_queues: default_fsconfig_num_queues(),
queue_size: default_fsconfig_queue_size(),
id: None,
pci_segment: 0,
}
}
}
impl FsConfig { impl FsConfig {
pub const SYNTAX: &'static str = "virtio-fs parameters \ pub const SYNTAX: &'static str = "virtio-fs parameters \
\"tag=<tag_name>,socket=<socket_path>,num_queues=<number_of_queues>,\ \"tag=<tag_name>,socket=<socket_path>,num_queues=<number_of_queues>,\

View File

@ -53,6 +53,22 @@ pub struct CpusConfig {
pub features: CpuFeatures, pub features: CpuFeatures,
} }
pub const DEFAULT_VCPUS: u8 = 1;
impl Default for CpusConfig {
fn default() -> Self {
CpusConfig {
boot_vcpus: DEFAULT_VCPUS,
max_vcpus: DEFAULT_VCPUS,
topology: None,
kvm_hyperv: false,
max_phys_bits: DEFAULT_MAX_PHYS_BITS,
affinity: None,
features: CpuFeatures::default(),
}
}
}
pub const DEFAULT_NUM_PCI_SEGMENTS: u16 = 1; pub const DEFAULT_NUM_PCI_SEGMENTS: u16 = 1;
pub fn default_platformconfig_num_pci_segments() -> u16 { pub fn default_platformconfig_num_pci_segments() -> u16 {
DEFAULT_NUM_PCI_SEGMENTS DEFAULT_NUM_PCI_SEGMENTS
@ -75,6 +91,20 @@ pub struct PlatformConfig {
pub tdx: bool, pub tdx: bool,
} }
impl Default for PlatformConfig {
fn default() -> Self {
PlatformConfig {
num_pci_segments: DEFAULT_NUM_PCI_SEGMENTS,
iommu_segments: None,
serial_number: None,
uuid: None,
oem_strings: None,
#[cfg(feature = "tdx")]
tdx: false,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct MemoryZoneConfig { pub struct MemoryZoneConfig {
pub id: String, pub id: String,
@ -103,6 +133,12 @@ pub enum HotplugMethod {
VirtioMem, VirtioMem,
} }
impl Default for HotplugMethod {
fn default() -> Self {
HotplugMethod::Acpi
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct MemoryConfig { pub struct MemoryConfig {
pub size: u64, pub size: u64,
@ -126,12 +162,37 @@ pub struct MemoryConfig {
pub zones: Option<Vec<MemoryZoneConfig>>, pub zones: Option<Vec<MemoryZoneConfig>>,
} }
pub const DEFAULT_MEMORY_MB: u64 = 512;
impl Default for MemoryConfig {
fn default() -> Self {
MemoryConfig {
size: DEFAULT_MEMORY_MB << 20,
mergeable: false,
hotplug_method: HotplugMethod::Acpi,
hotplug_size: None,
hotplugged_size: None,
shared: false,
hugepages: false,
hugepage_size: None,
prefault: false,
zones: None,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub enum VhostMode { pub enum VhostMode {
Client, Client,
Server, Server,
} }
impl Default for VhostMode {
fn default() -> Self {
VhostMode::Client
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct KernelConfig { pub struct KernelConfig {
pub path: PathBuf, pub path: PathBuf,
@ -185,6 +246,25 @@ pub fn default_diskconfig_queue_size() -> u16 {
DEFAULT_QUEUE_SIZE_VUBLK DEFAULT_QUEUE_SIZE_VUBLK
} }
impl Default for DiskConfig {
fn default() -> Self {
Self {
path: None,
readonly: false,
direct: false,
iommu: false,
num_queues: default_diskconfig_num_queues(),
queue_size: default_diskconfig_queue_size(),
vhost_user: false,
vhost_socket: None,
id: None,
disable_io_uring: false,
rate_limiter_config: None,
pci_segment: 0,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct NetConfig { pub struct NetConfig {
#[serde(default = "default_netconfig_tap")] #[serde(default = "default_netconfig_tap")]
@ -246,6 +326,29 @@ pub fn default_netconfig_queue_size() -> u16 {
DEFAULT_QUEUE_SIZE_VUNET DEFAULT_QUEUE_SIZE_VUNET
} }
impl Default for NetConfig {
fn default() -> Self {
Self {
tap: default_netconfig_tap(),
ip: default_netconfig_ip(),
mask: default_netconfig_mask(),
mac: default_netconfig_mac(),
host_mac: None,
mtu: None,
iommu: false,
num_queues: default_netconfig_num_queues(),
queue_size: default_netconfig_queue_size(),
vhost_user: false,
vhost_socket: None,
vhost_mode: VhostMode::Client,
id: None,
fds: None,
rate_limiter_config: None,
pci_segment: 0,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct RngConfig { pub struct RngConfig {
pub src: PathBuf, pub src: PathBuf,
@ -253,6 +356,17 @@ pub struct RngConfig {
pub iommu: bool, pub iommu: bool,
} }
pub const DEFAULT_RNG_SOURCE: &str = "/dev/urandom";
impl Default for RngConfig {
fn default() -> Self {
RngConfig {
src: PathBuf::from(DEFAULT_RNG_SOURCE),
iommu: false,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub struct BalloonConfig { pub struct BalloonConfig {
pub size: u64, pub size: u64,
@ -286,6 +400,19 @@ pub fn default_fsconfig_queue_size() -> u16 {
1024 1024
} }
impl Default for FsConfig {
fn default() -> Self {
Self {
tag: "".to_owned(),
socket: PathBuf::new(),
num_queues: default_fsconfig_num_queues(),
queue_size: default_fsconfig_queue_size(),
id: None,
pci_segment: 0,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
pub struct PmemConfig { pub struct PmemConfig {
pub file: PathBuf, pub file: PathBuf,