From 0cf0e923fcf9c41363b887a6f1b59ef6d3202000 Mon Sep 17 00:00:00 2001 From: Pavel Mores Date: Fri, 22 Mar 2024 19:33:33 +0100 Subject: [PATCH] runtime-rs: refactor QemuCmdLine::add_network_device() signature add_network_device() doesn't need to be passed NetworkInfo since it already has access to the full HypervisorConfig. Also, one of the goals of QemuCmdLine interface's design is to avoid coupling between QemuCmdLine and the hypervisor crate's device module, if at all possible. That's why add_network_device() shouldn't take device module's NetworkConfig but just parts that are useful in add_network_device()'s implementation. Signed-off-by: Pavel Mores --- .../hypervisor/src/qemu/cmdline_generator.rs | 19 +++++++++---------- .../crates/hypervisor/src/qemu/inner.rs | 9 +++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs b/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs index d40e9ff0e4..2a1eddb064 100644 --- a/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs +++ b/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs @@ -5,11 +5,10 @@ use super::network::{generate_netdev_fds, NetDevice}; use crate::utils::clear_cloexec; -use crate::{kernel_param::KernelParams, Address, HypervisorConfig, NetworkConfig}; +use crate::{kernel_param::KernelParams, Address, HypervisorConfig}; use anyhow::{anyhow, Context, Result}; use async_trait::async_trait; -use kata_types::config::hypervisor::NetworkInfo; use std::collections::HashMap; use std::fmt::Display; use std::fs::{read_to_string, File}; @@ -1262,20 +1261,20 @@ impl<'a> QemuCmdLine<'a> { pub fn add_network_device( &mut self, - config: &NetworkConfig, - _network_info: &NetworkInfo, - ) -> Result> { + dev_index: u64, + host_dev_name: &str, + guest_mac: Address, + ) -> Result<()> { let mut netdev = Netdev::new( - &format!("network-{}", &config.index), - &config.host_dev_name, + &format!("network-{}", dev_index), + host_dev_name, self.config.network_info.network_queues, )?; if self.config.network_info.disable_vhost_net { netdev.set_disable_vhost_net(true); } - let mut virtio_net_device = - DeviceVirtioNet::new(&netdev.id, config.guest_mac.clone().unwrap()); + let mut virtio_net_device = DeviceVirtioNet::new(&netdev.id, guest_mac); if should_disable_modern() { virtio_net_device.set_disable_modern(true); @@ -1286,7 +1285,7 @@ impl<'a> QemuCmdLine<'a> { self.devices.push(Box::new(netdev)); self.devices.push(Box::new(virtio_net_device)); - Ok(vec![]) + Ok(()) } pub fn add_console(&mut self, console_socket_path: &str) { diff --git a/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs b/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs index 64de76b8d7..31fc6ff650 100644 --- a/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs +++ b/src/runtime-rs/crates/hypervisor/src/qemu/inner.rs @@ -112,13 +112,14 @@ impl QemuInner { } } DeviceType::Network(network) => { - let network_info = &self.config.network_info; - // we need ensure add_network_device happens in netns. let _netns_guard = NetnsGuard::new(&netns).context("new netns guard")?; - _fds_for_qemu - .append(&mut cmdline.add_network_device(&network.config, network_info)?); + cmdline.add_network_device( + network.config.index, + &network.config.host_dev_name, + network.config.guest_mac.clone().unwrap(), + )?; } _ => info!(sl!(), "qemu cmdline: unsupported device: {:?}", device), }