vmm: provide oem_strings option

Signed-off-by: Wei Liu <liuwe@microsoft.com>
This commit is contained in:
Wei Liu 2022-08-05 13:11:18 +00:00 committed by Rob Bradford
parent 964985bb5c
commit 57e9b80123
4 changed files with 32 additions and 3 deletions

View File

@ -820,14 +820,15 @@ pub fn configure_system(
sgx_epc_region: Option<SgxEpcRegion>,
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();
}

View File

@ -155,7 +155,7 @@ fn create_app<'a>(
Arg::new("platform")
.long("platform")
.help(
"num_pci_segments=<num_pci_segments>,iommu_segments=<list_of_segments>,serial_number=<dmi_device_serial_number>,uuid=<dmi_device_uuid>",
"num_pci_segments=<num_pci_segments>,iommu_segments=<list_of_segments>,serial_number=<dmi_device_serial_number>,uuid=<dmi_device_uuid>,oem_strings=<list_of_strings>",
)
.takes_value(true)
.group("vm-config"),

View File

@ -636,6 +636,8 @@ pub struct PlatformConfig {
pub serial_number: Option<String>,
#[serde(default)]
pub uuid: Option<String>,
#[serde(default)]
pub oem_strings: Option<Vec<String>>,
}
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::<StringList>("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,
}
}
}

View File

@ -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::<Vec<&str>>());
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(())