Lines Matching +full:add +full:- +full:user +full:- +full:device

3 // SPDX-License-Identifier: Apache-2.0
32 #[error("Error parsing --fs: tag missing")]
35 #[error("Error parsing --fs: max tag length is {VIRTIO_FS_TAG_LEN}")]
38 #[error("Error parsing --fs: socket missing")]
41 #[error("Error parsing --pmem: file missing")]
44 #[error("Error parsing --vsock: socket missing")]
47 #[error("Error parsing --vsock: cid missing")]
50 #[error("Error parsing --restore: source_url missing")]
53 #[error("Error parsing --cpus")]
56 #[error("Invalid feature in --cpus features list: {0}")]
59 #[error("Error parsing --memory")]
62 #[error("Error parsing --memory-zone")]
65 #[error("Error parsing --memory-zone: id missing")]
67 /// Error parsing rate-limiter group options
68 #[error("Error parsing --rate-limit-group")]
71 #[error("Error parsing --disk")]
74 #[error("Error parsing --net")]
77 #[error("Error parsing --rng")]
80 #[error("Error parsing --balloon")]
83 #[error("Error parsing --fs")]
86 #[error("Error parsing --pmem")]
89 #[error("Error parsing --console")]
92 /// Failed parsing debug-console
93 #[error("Error parsing --debug-console")]
96 #[error("Error parsing --console: invalid console mode given")]
98 /// Failed parsing device parameters
99 #[error("Error parsing --device")]
101 /// Missing path from device,
102 #[error("Error parsing --device: path missing")]
105 #[error("Error parsing --vsock")]
108 #[error("Error parsing --restore")]
112 #[error("Error parsing --sgx-epc")]
116 #[error("Error parsing --sgx-epc: id missing")]
119 #[error("Error parsing --numa")]
125 #[error("Error parsing --sev_snp")]
126 /// Failed parsing SEV-SNP config
129 #[error("Error parsing --tdx")]
136 /// Failed parsing userspace device
137 #[error("Error parsing --user-device")]
139 /// Missing socket for userspace device
140 #[error("Error parsing --user-device: socket missing")]
143 #[error("Error parsing --pci-segment")]
146 #[error("Error parsing --platform")]
148 /// Failed parsing vDPA device
149 #[error("Error parsing --vdpa")]
151 /// Missing path for vDPA device
152 #[error("Error parsing --vdpa: path missing")]
154 /// Failed parsing TPM device
155 #[error("Error parsing --tpm")]
157 /// Missing path for TPM device
158 #[error("Error parsing --tpm: path missing")]
161 #[error("Error parsing --landlock-rules")]
164 #[error("Error parsing --landlock-rules: path/access field missing")]
182 /// Missing file value for debug-console
189 /// Using vhost user requires shared memory
190 #[error("Using vhost-user requires using shared memory or huge pages")]
193 #[error("No socket provided when using vhost-user")]
243 /// Need shared memory for vfio-user
244 #[error("Using user devices requires using shared memory or huge pages")]
268 #[error("Device is on an IOMMU PCI segment ({0}) but not placed behind IOMMU")]
272 "Device is on an IOMMU PCI segment ({0}) but does not support being placed behind IOMMU"
281 /// Placing the device behind a virtual IOMMU is not supported
282 #[error("Device does not support being placed behind IOMMU")]
284 /// Duplicated device path (device added twice)
285 #[error("Duplicated device path: {0}")]
294 #[error("Default PCI segment assigned to non-zero NUMA node {0}")]
296 /// Invalid rate-limiter group
297 #[error("Invalid rate-limiter group")]
312 /// Path provided in landlock-rules doesn't exist
313 #[error("Path {0:?} provided in landlock-rules does not exist")]
315 /// Access provided in landlock-rules in invalid
316 #[error("access provided in landlock-rules in invalid")]
318 /// Invalid block device serial length
319 #[error("Block device serial length ({0}) exceeds maximum allowed length ({1})")]
379 pub fn from_arg_matches(args: &'a ArgMatches) -> Self { in from_arg_matches()
384 .get_many::<String>("memory-zone") in from_arg_matches()
393 .get_many::<String>("rate-limit-group") in from_arg_matches()
403 let debug_console = args.get_one::<String>("debug-console").unwrap().as_str(); in from_arg_matches()
412 .get_many::<String>("device") in from_arg_matches()
415 .get_many::<String>("user-device") in from_arg_matches()
426 .get_many::<String>("sgx-epc") in from_arg_matches()
433 .get_many::<String>("pci-segment") in from_arg_matches()
442 let host_data = args.get_one::<String>("host-data").map(|x| x as &str); in from_arg_matches()
445 .get_many::<String>("landlock-rules") in from_arg_matches()
501 fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { in from_str()
504 "virtio-mem" => Ok(HotplugMethod::VirtioMem), in from_str()
517 fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { in from_str()
544 pub fn parse(cpus: &str) -> Result<Self> { in parse()
547 .add("boot") in parse()
548 .add("max") in parse()
549 .add("topology") in parse()
550 .add("kvm_hyperv") in parse()
551 .add("max_phys_bits") in parse()
552 .add("affinity") in parse()
553 .add("features"); in parse()
623 pub fn parse(disk: &str) -> Result<Self> { in parse()
626 .add("mmio32_aperture_weight") in parse()
627 .add("mmio64_aperture_weight") in parse()
628 .add("pci_segment"); in parse()
651 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
678 pub fn parse(platform: &str) -> Result<Self> { in parse()
681 .add("num_pci_segments") in parse()
682 .add("iommu_segments") in parse()
683 .add("iommu_address_width") in parse()
684 .add("serial_number") in parse()
685 .add("uuid") in parse()
686 .add("oem_strings"); in parse()
688 parser.add("tdx"); in parse()
690 parser.add("sev_snp"); in parse()
739 pub fn validate(&self) -> ValidationResult<()> { in validate()
765 pub fn parse(memory: &str, memory_zones: Option<Vec<&str>>) -> Result<Self> { in parse()
768 .add("size") in parse()
769 .add("file") in parse()
770 .add("mergeable") in parse()
771 .add("hotplug_method") in parse()
772 .add("hotplug_size") in parse()
773 .add("hotplugged_size") in parse()
774 .add("shared") in parse()
775 .add("hugepages") in parse()
776 .add("hugepage_size") in parse()
777 .add("prefault") in parse()
778 .add("thp"); in parse()
833 .add("id") in parse()
834 .add("size") in parse()
835 .add("file") in parse()
836 .add("shared") in parse()
837 .add("hugepages") in parse()
838 .add("hugepage_size") in parse()
839 .add("host_numa_node") in parse()
840 .add("hotplug_size") in parse()
841 .add("hotplugged_size") in parse()
842 .add("prefault"); in parse()
917 pub fn total_size(&self) -> u64 { in total_size()
942 pub fn parse(rate_limit_group: &str) -> Result<Self> { in parse()
945 .add("bw_size") in parse()
946 .add("bw_one_time_burst") in parse()
947 .add("bw_refill_time") in parse()
948 .add("ops_size") in parse()
949 .add("ops_one_time_burst") in parse()
950 .add("ops_refill_time") in parse()
951 .add("id"); in parse()
1010 pub fn validate(&self, _vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1034 pub fn parse(disk: &str) -> Result<Self> { in parse()
1037 .add("path") in parse()
1038 .add("readonly") in parse()
1039 .add("direct") in parse()
1040 .add("iommu") in parse()
1041 .add("queue_size") in parse()
1042 .add("num_queues") in parse()
1043 .add("vhost_user") in parse()
1044 .add("socket") in parse()
1045 .add("bw_size") in parse()
1046 .add("bw_one_time_burst") in parse()
1047 .add("bw_refill_time") in parse()
1048 .add("ops_size") in parse()
1049 .add("ops_one_time_burst") in parse()
1050 .add("ops_refill_time") in parse()
1051 .add("id") in parse()
1052 .add("_disable_io_uring") in parse()
1053 .add("_disable_aio") in parse()
1054 .add("pci_segment") in parse()
1055 .add("serial") in parse()
1056 .add("rate_limit_group") in parse()
1057 .add("queue_affinity"); in parse()
1189 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1218 // Check Block device serial length in validate()
1240 fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { in from_str()
1258 pub fn parse(net: &str) -> Result<Self> { in parse()
1262 .add("tap") in parse()
1263 .add("ip") in parse()
1264 .add("mask") in parse()
1265 .add("mac") in parse()
1266 .add("host_mac") in parse()
1267 .add("offload_tso") in parse()
1268 .add("offload_ufo") in parse()
1269 .add("offload_csum") in parse()
1270 .add("mtu") in parse()
1271 .add("iommu") in parse()
1272 .add("queue_size") in parse()
1273 .add("num_queues") in parse()
1274 .add("vhost_user") in parse()
1275 .add("socket") in parse()
1276 .add("vhost_mode") in parse()
1277 .add("id") in parse()
1278 .add("fd") in parse()
1279 .add("bw_size") in parse()
1280 .add("bw_one_time_burst") in parse()
1281 .add("bw_refill_time") in parse()
1282 .add("ops_size") in parse()
1283 .add("ops_one_time_burst") in parse()
1284 .add("ops_refill_time") in parse()
1285 .add("pci_segment"); in parse()
1425 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1477 pub fn parse(rng: &str) -> Result<Self> { in parse()
1479 parser.add("src").add("iommu"); in parse()
1502 pub fn parse(balloon: &str) -> Result<Self> { in parse()
1504 parser.add("size"); in parse()
1505 parser.add("deflate_on_oom"); in parse()
1506 parser.add("free_page_reporting"); in parse()
1536 pub const SYNTAX: &'static str = "virtio-fs parameters \
1540 pub fn parse(fs: &str) -> Result<Self> { in parse()
1543 .add("tag") in parse()
1544 .add("queue_size") in parse()
1545 .add("num_queues") in parse()
1546 .add("socket") in parse()
1547 .add("id") in parse()
1548 .add("pci_segment"); in parse()
1583 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1611 pub fn parse(pmem: &str) -> Result<Self> { in parse()
1614 .add("size") in parse()
1615 .add("file") in parse()
1616 .add("iommu") in parse()
1617 .add("discard_writes") in parse()
1618 .add("id") in parse()
1619 .add("pci_segment"); in parse()
1653 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1671 pub fn parse(console: &str) -> Result<Self> { in parse()
1678 .add("file") in parse()
1679 .add("iommu") in parse()
1680 .add("socket"); in parse()
1725 pub fn parse(debug_console_ops: &str) -> Result<Self> { in parse()
1732 .add("file") in parse()
1733 .add("iobase"); in parse()
1778 …"Direct device assignment parameters \"path=<device_path>,iommu=on|off,id=<device_id>,pci_segment=…
1780 pub fn parse(device: &str) -> Result<Self> { in parse()
1783 .add("path") in parse()
1784 .add("id") in parse()
1785 .add("iommu") in parse()
1786 .add("pci_segment") in parse()
1787 .add("x_nv_gpudirect_clique"); in parse()
1788 parser.parse(device).map_err(Error::ParseDevice)?; in parse()
1816 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1835 "Userspace device socket=<socket_path>,id=<device_id>,pci_segment=<segment_id>\"";
1837 pub fn parse(user_device: &str) -> Result<Self> { in parse()
1839 parser.add("socket").add("id").add("pci_segment"); in parse()
1859 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1879 pub const SYNTAX: &'static str = "vDPA device \
1883 pub fn parse(vdpa: &str) -> Result<Self> { in parse()
1886 .add("path") in parse()
1887 .add("num_queues") in parse()
1888 .add("iommu") in parse()
1889 .add("id") in parse()
1890 .add("pci_segment"); in parse()
1921 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
1942 pub fn parse(vsock: &str) -> Result<Self> { in parse()
1945 .add("socket") in parse()
1946 .add("cid") in parse()
1947 .add("iommu") in parse()
1948 .add("id") in parse()
1949 .add("pci_segment"); in parse()
1980 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
2002 pub fn parse(sgx_epc: &str) -> Result<Self> { in parse()
2004 parser.add("id").add("size").add("prefault"); in parse()
2029 pub fn parse(numa: &str) -> Result<Self> { in parse()
2032 .add("guest_numa_id") in parse()
2033 .add("cpus") in parse()
2034 .add("distances") in parse()
2035 .add("memory_zones") in parse()
2036 .add("sgx_epc_sections") in parse()
2037 .add("pci_segments"); in parse()
2101 ) -> std::result::Result<S::Ok, S::Error> in serialize_restorednetconfig_fds()
2107 let invalid_fds = vec![-1; x.len()]; in serialize_restorednetconfig_fds()
2116 ) -> std::result::Result<Option<Vec<i32>>, D::Error> in deserialize_restorednetconfig_fds()
2123 Ok(Some(vec![-1; invalid_fds.len()])) in deserialize_restorednetconfig_fds()
2147 pub fn parse(restore: &str) -> Result<Self> { in parse()
2149 parser.add("source_url").add("prefault").add("net_fds"); in parse()
2184 pub fn validate(&self, vm_config: &VmConfig) -> ValidationResult<()> { in validate()
2228 pub const SYNTAX: &'static str = "TPM device \
2231 pub fn parse(tpm: &str) -> Result<Self> { in parse()
2233 parser.add("socket"); in parse()
2247 pub fn parse(landlock_rule: &str) -> Result<Self> { in parse()
2249 parser.add("path").add("access"); in parse()
2272 pub fn validate(&self) -> ValidationResult<()> { in validate()
2286 ) -> ValidationResult<()> { in validate_identifier()
2300 pub fn backed_by_shared_memory(&self) -> bool { in backed_by_shared_memory()
2317 // Also enables virtio-iommu if the config needs it
2320 pub fn validate(&mut self) -> ValidationResult<BTreeSet<String>> { in validate()
2350 // (vm-virtio: Enable the vmm support for virtio-console). in validate()
2361 tty_consoles.push("virtio-console"); in validate()
2364 tty_consoles.push("serial-console"); in validate()
2368 tty_consoles.push("debug-console"); in validate()
2538 for device in devices { in validate()
2539 if !device_paths.insert(device.path.to_string_lossy()) { in validate()
2541 device.path.to_string_lossy().to_string(), in validate()
2545 device.validate(self)?; in validate()
2546 self.iommu |= device.iommu; in validate()
2548 Self::validate_identifier(&mut id_list, &device.id)?; in validate()
2643 pub fn parse(vm_params: VmParams) -> Result<Self> { in parse()
2866 pub fn remove_device(&mut self, id: &str) -> bool { in remove_device()
2869 // Remove if VFIO device in remove_device()
2876 // Remove if VFIO user device in remove_device()
2883 // Remove if disk device in remove_device()
2890 // Remove if fs device in remove_device()
2897 // Remove if net device in remove_device()
2904 // Remove if pmem device in remove_device()
2911 // Remove if vDPA device in remove_device()
2918 // Remove if vsock device in remove_device()
2945 pub fn is_tdx_enabled(&self) -> bool { in is_tdx_enabled()
2950 pub fn is_sev_snp_enabled(&self) -> bool { in is_sev_snp_enabled()
2956 fn clone(&self) -> Self { in clone()
3017 fn test_cpu_parsing() -> Result<()> { in test_cpu_parsing()
3085 fn test_mem_parsing() -> Result<()> { in test_mem_parsing()
3129 MemoryConfig::parse("hotplug_method=virtio-mem,hotplug_size=512M", None)?, in test_mem_parsing()
3149 fn test_rate_limit_group_parsing() -> Result<()> { in test_rate_limit_group_parsing()
3182 fn test_pci_segment_parsing() -> Result<()> { in test_pci_segment_parsing()
3221 fn disk_fixture() -> DiskConfig { in disk_fixture()
3243 fn test_disk_parsing() -> Result<()> { in test_disk_parsing()
3310 DiskConfig::parse("path=/path/to_file,queue_affinity=[0@[1],1@[2],2@[3,4],3@[5-8]]")?, in test_disk_parsing()
3336 fn net_fixture() -> NetConfig { in net_fixture()
3361 fn test_net_parsing() -> Result<()> { in test_net_parsing()
3423 fn test_parse_rng() -> Result<()> { in test_parse_rng()
3449 fn fs_fixture() -> FsConfig { in fs_fixture()
3461 fn test_parse_fs() -> Result<()> { in test_parse_fs()
3479 fn pmem_fixture() -> PmemConfig { in pmem_fixture()
3491 fn test_pmem_parsing() -> Result<()> { in test_pmem_parsing()
3519 fn test_console_parsing() -> Result<()> { in test_console_parsing()
3597 fn device_fixture() -> DeviceConfig { in device_fixture()
3599 path: PathBuf::from("/path/to/device"), in device_fixture()
3608 fn test_device_parsing() -> Result<()> { in test_device_parsing()
3609 // Device must have a path provided in test_device_parsing()
3612 DeviceConfig::parse("path=/path/to/device")?, in test_device_parsing()
3617 DeviceConfig::parse("path=/path/to/device,iommu=on")?, in test_device_parsing()
3625 DeviceConfig::parse("path=/path/to/device,iommu=on,id=mydevice0")?, in test_device_parsing()
3636 fn vdpa_fixture() -> VdpaConfig { in vdpa_fixture()
3638 path: PathBuf::from("/dev/vhost-vdpa"), in vdpa_fixture()
3647 fn test_vdpa_parsing() -> Result<()> { in test_vdpa_parsing()
3650 assert_eq!(VdpaConfig::parse("path=/dev/vhost-vdpa")?, vdpa_fixture()); in test_vdpa_parsing()
3652 VdpaConfig::parse("path=/dev/vhost-vdpa,num_queues=2,id=my_vdpa")?, in test_vdpa_parsing()
3663 fn test_tpm_parsing() -> Result<()> { in test_tpm_parsing()
3676 fn test_vsock_parsing() -> Result<()> { in test_vsock_parsing()
3703 fn test_restore_parsing() -> Result<()> { in test_restore_parsing()
3777 fds: Some(vec![-1, -1, -1, -1]), in test_restore_config_validation()
3783 fds: Some(vec![-1, -1]), in test_restore_config_validation()
3883 fn platform_fixture() -> PlatformConfig { in platform_fixture()
3898 fn numa_fixture() -> NumaConfig { in numa_fixture()
4605 fn test_landlock_parsing() -> Result<()> { in test_landlock_parsing()