MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / run_qemu_vm

Function run_qemu_vm

crates/openshell-driver-vm/src/runtime.rs:77–221  ·  view source on GitHub ↗
(config: &VmLaunchConfig)

Source from the content-addressed store, hash-verified

75}
76
77fn run_qemu_vm(config: &VmLaunchConfig) -> Result<(), String> {
78 let gpu_bdf = config
79 .gpu_bdf
80 .as_deref()
81 .ok_or("gpu_bdf is required for QEMU backend")?;
82 let tap_device = config
83 .tap_device
84 .as_deref()
85 .ok_or("tap_device is required for QEMU backend")?;
86 let guest_mac = config
87 .guest_mac
88 .as_deref()
89 .ok_or("guest_mac is required for QEMU backend")?;
90 let vsock_cid = config
91 .vsock_cid
92 .ok_or("vsock_cid is required for QEMU backend")?;
93 let _guest_ip = config
94 .guest_ip
95 .as_deref()
96 .ok_or("guest_ip is required for QEMU backend")?;
97 let host_ip = config
98 .host_ip
99 .as_deref()
100 .ok_or("host_ip is required for QEMU backend")?;
101
102 if !config.root_disk.is_file() {
103 return Err(format!(
104 "root disk image not found: {}",
105 config.root_disk.display()
106 ));
107 }
108 if !config.overlay_disk.is_file() {
109 return Err(format!(
110 "overlay disk image not found: {}",
111 config.overlay_disk.display()
112 ));
113 }
114 if let Some(image_disk) = &config.image_disk
115 && !image_disk.is_file()
116 {
117 return Err(format!("image disk not found: {}", image_disk.display()));
118 }
119
120 if let Err(err) = procguard::die_with_parent_cleanup(procguard_kill_children) {
121 return Err(format!("procguard arm failed: {err}"));
122 }
123
124 #[cfg(target_os = "linux")]
125 check_kvm_access()?;
126
127 let guest_env = qemu_guest_env_vars(config, host_dns_server());
128 write_guest_env_file(&config.overlay_disk, &guest_env)?;
129
130 let gw_port = config.gateway_port.unwrap_or(0);
131 setup_tap_networking(tap_device, host_ip, gw_port)?;
132 let mut tap_guard = TapGuard::new(tap_device.to_string(), host_ip.to_string(), gw_port);
133
134 let vmlinux = if let Some(kernel_image) = &config.kernel_image {

Callers 1

run_vmFunction · 0.85

Calls 15

die_with_parent_cleanupFunction · 0.85
check_kvm_accessFunction · 0.85
qemu_guest_env_varsFunction · 0.85
host_dns_serverFunction · 0.85
write_guest_env_fileFunction · 0.85
setup_tap_networkingFunction · 0.85
qemu_runtime_dirFunction · 0.85
build_kernel_cmdlineFunction · 0.85
qemu_disk_argsFunction · 0.85
teardown_tap_networkingFunction · 0.85
waitMethod · 0.80

Tested by

no test coverage detected