vmm: config: Implement PciDeviceCommonConfig::parse

This parses a subset of the device configuration options used for
devices that are PCI based.

Signed-off-by: Rob Bradford <rbradford@meta.com>
This commit is contained in:
Rob Bradford
2026-04-03 17:15:54 +01:00
parent 4f7ff8fe48
commit c66c2b8470

View File

@@ -209,6 +209,8 @@ pub enum Error {
/// Failed Parsing FwCfgItem config
#[error("Error parsing --fw-cfg-config items")]
ParseFwCfgItem(#[source] OptionParserError),
#[error("Error parsing common PCI device config")]
ParsePciDeviceCommonConfig(#[source] OptionParserError),
}
#[derive(Debug, PartialEq, Eq, Error)]
@@ -1197,6 +1199,35 @@ impl RateLimiterGroupConfig {
}
}
impl PciDeviceCommonConfig {
pub fn parse(input: &str) -> Result<Self> {
let mut parser = OptionParser::new();
parser.add("id").add("iommu").add("pci_segment");
parser
.parse_subset(input)
.map_err(Error::ParsePciDeviceCommonConfig)?;
let id = parser.get("id");
let iommu = parser
.convert::<Toggle>("iommu")
.map_err(Error::ParsePciDeviceCommonConfig)?
.unwrap_or(Toggle(false))
.0;
let pci_segment = parser
.convert("pci_segment")
.map_err(Error::ParsePciDeviceCommonConfig)?
.unwrap_or_default();
Ok(Self {
id,
iommu,
pci_segment,
})
}
}
impl DiskConfig {
pub const SYNTAX: &'static str = "Disk parameters \
\"path=<disk_image_path>,readonly=on|off,direct=on|off,iommu=on|off,\