From 57e9b801236a43ccc917338b606389d821593c2e Mon Sep 17 00:00:00 2001 From: Wei Liu Date: Fri, 5 Aug 2022 13:11:18 +0000 Subject: [PATCH] vmm: provide oem_strings option Signed-off-by: Wei Liu --- arch/src/x86_64/mod.rs | 11 +++++++++-- src/main.rs | 2 +- vmm/src/config.rs | 9 +++++++++ vmm/src/vm.rs | 13 +++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/arch/src/x86_64/mod.rs b/arch/src/x86_64/mod.rs index da30cdc73..57380c2ac 100644 --- a/arch/src/x86_64/mod.rs +++ b/arch/src/x86_64/mod.rs @@ -820,14 +820,15 @@ pub fn configure_system( sgx_epc_region: Option, serial_number: Option<&str>, uuid: Option<&str>, + oem_strings: Option<&[&str]>, ) -> super::Result<()> { // Write EBDA address to location where ACPICA expects to find it guest_mem .write_obj((layout::EBDA_START.0 >> 4) as u16, layout::EBDA_POINTER) .map_err(Error::EbdaSetup)?; - let size = - smbios::setup_smbios(guest_mem, serial_number, uuid, None).map_err(Error::SmbiosSetup)?; + let size = smbios::setup_smbios(guest_mem, serial_number, uuid, oem_strings) + .map_err(Error::SmbiosSetup)?; // Place the MP table after the SMIOS table aligned to 16 bytes let offset = GuestAddress(layout::SMBIOS_START).unchecked_add(size); @@ -1181,6 +1182,7 @@ mod tests { None, None, None, + None, ); assert!(config_err.is_err()); @@ -1203,6 +1205,7 @@ mod tests { None, None, None, + None, ) .unwrap(); @@ -1224,6 +1227,7 @@ mod tests { None, None, None, + None, ) .unwrap(); @@ -1236,6 +1240,7 @@ mod tests { None, None, None, + None, ) .unwrap(); @@ -1257,6 +1262,7 @@ mod tests { None, None, None, + None, ) .unwrap(); @@ -1269,6 +1275,7 @@ mod tests { None, None, None, + None, ) .unwrap(); } diff --git a/src/main.rs b/src/main.rs index 890416c37..88e15c154 100644 --- a/src/main.rs +++ b/src/main.rs @@ -155,7 +155,7 @@ fn create_app<'a>( Arg::new("platform") .long("platform") .help( - "num_pci_segments=,iommu_segments=,serial_number=,uuid=", + "num_pci_segments=,iommu_segments=,serial_number=,uuid=,oem_strings=", ) .takes_value(true) .group("vm-config"), diff --git a/vmm/src/config.rs b/vmm/src/config.rs index d51b54b69..24202c805 100644 --- a/vmm/src/config.rs +++ b/vmm/src/config.rs @@ -636,6 +636,8 @@ pub struct PlatformConfig { pub serial_number: Option, #[serde(default)] pub uuid: Option, + #[serde(default)] + pub oem_strings: Option>, } impl PlatformConfig { @@ -645,6 +647,7 @@ impl PlatformConfig { parser.add("iommu_segments"); parser.add("serial_number"); parser.add("uuid"); + parser.add("oem_strings"); parser.parse(platform).map_err(Error::ParsePlatform)?; let num_pci_segments: u16 = parser @@ -659,11 +662,16 @@ impl PlatformConfig { .convert("serial_number") .map_err(Error::ParsePlatform)?; let uuid = parser.convert("uuid").map_err(Error::ParsePlatform)?; + let oem_strings = parser + .convert::("oem_strings") + .map_err(Error::ParsePlatform)? + .map(|v| v.0); Ok(PlatformConfig { num_pci_segments, iommu_segments, serial_number, uuid, + oem_strings, }) } @@ -693,6 +701,7 @@ impl Default for PlatformConfig { iommu_segments: None, serial_number: None, uuid: None, + oem_strings: None, } } } diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index 49efa43ba..2d62760fe 100644 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -1127,6 +1127,18 @@ impl Vm { .as_ref() .and_then(|p| p.uuid.clone()); + let oem_strings = self + .config + .lock() + .unwrap() + .platform + .as_ref() + .and_then(|p| p.oem_strings.clone()); + + let oem_strings = oem_strings + .as_deref() + .map(|strings| strings.iter().map(|s| s.as_ref()).collect::>()); + arch::configure_system( &mem, arch::layout::CMDLINE_START, @@ -1136,6 +1148,7 @@ impl Vm { sgx_epc_region, serial_number.as_deref(), uuid.as_deref(), + oem_strings.as_deref(), ) .map_err(Error::ConfigureSystem)?; Ok(())