@@ -792,6 +792,10 @@ fn is_default_num_nics(n: &u32) -> bool {
792792 * n == default_num_nics ( )
793793}
794794
795+ fn is_zero ( n : & u32 ) -> bool {
796+ * n == 0
797+ }
798+
795799#[ derive( Deserialize , Serialize , Debug , Clone ) ]
796800pub struct VmConfig {
797801 #[ serde( with = "hex_bytes" , default ) ]
@@ -825,6 +829,11 @@ pub struct VmConfig {
825829 skip_serializing_if = "is_default_num_nics"
826830 ) ]
827831 pub num_nics : u32 ,
832+ /// Number of read-only verity volume devices attached to the guest. Each
833+ /// volume adds a virtio-blk PCI device before the NICs and therefore
834+ /// changes the measured ACPI/DSDT layout.
835+ #[ serde( default , skip_serializing_if = "is_zero" ) ]
836+ pub num_verity_volumes : u32 ,
828837 #[ serde( default ) ]
829838 pub hotplug_off : bool ,
830839 #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
@@ -1819,7 +1828,7 @@ mod platform_tests {
18191828}
18201829
18211830#[ cfg( test) ]
1822- mod vm_config_num_nics_tests {
1831+ mod vm_config_device_count_tests {
18231832 use super :: VmConfig ;
18241833
18251834 fn legacy_json ( ) -> serde_json:: Value {
@@ -1835,6 +1844,7 @@ mod vm_config_num_nics_tests {
18351844 fn legacy_config_without_num_nics_defaults_to_one ( ) {
18361845 let cfg: VmConfig = serde_json:: from_value ( legacy_json ( ) ) . unwrap ( ) ;
18371846 assert_eq ! ( cfg. num_nics, 1 ) ;
1847+ assert_eq ! ( cfg. num_verity_volumes, 0 ) ;
18381848 }
18391849
18401850 #[ test]
@@ -1857,4 +1867,20 @@ mod vm_config_num_nics_tests {
18571867 let serialized = serde_json:: to_value ( & cfg) . unwrap ( ) ;
18581868 assert_eq ! ( serialized. get( "num_nics" ) . and_then( |v| v. as_u64( ) ) , Some ( 2 ) ) ;
18591869 }
1870+
1871+ #[ test]
1872+ fn verity_volume_count_is_serialized_only_when_nonzero ( ) {
1873+ let mut cfg: VmConfig = serde_json:: from_value ( legacy_json ( ) ) . unwrap ( ) ;
1874+ let serialized = serde_json:: to_value ( & cfg) . unwrap ( ) ;
1875+ assert ! ( serialized. get( "num_verity_volumes" ) . is_none( ) ) ;
1876+
1877+ cfg. num_verity_volumes = 2 ;
1878+ let serialized = serde_json:: to_value ( & cfg) . unwrap ( ) ;
1879+ assert_eq ! (
1880+ serialized
1881+ . get( "num_verity_volumes" )
1882+ . and_then( |v| v. as_u64( ) ) ,
1883+ Some ( 2 )
1884+ ) ;
1885+ }
18601886}
0 commit comments