runtime-rs: remove vhost_fd from VsockConfig and make it cloneable.

Currently encounters difficulty in utilizing the clone operation
on VsockConfig due to the implicit management of the vhost fd
within the runtime-rs. This responsibility should be delegated to
the VMM(especially QEMU) child process, as it's not runtime-rs core
responsibilities. We'll remove the member vhost_fd from VsockConfig
and make the VsockConfig/VsockDevice Cloneable.

Fixes: #8474

Signed-off-by: alex.lyn <alex.lyn@antgroup.com>
This commit is contained in:
alex.lyn 2023-11-27 15:11:21 +08:00
parent eb90962b27
commit e31dbc94a5

View File

@ -84,16 +84,13 @@ impl Device for HybridVsockDevice {
}
}
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct VsockConfig {
/// A 32-bit Context Identifier (CID) used to identify the guest.
pub guest_cid: u32,
/// Vhost vsock fd. Hold to ensure CID is not used by other VM.
pub vhost_fd: File,
}
#[derive(Debug)]
#[derive(Clone, Debug)]
pub struct VsockDevice {
/// Unique identifier of the device
pub id: String,
@ -121,16 +118,13 @@ const CID_RETRY_COUNT: u32 = 50;
impl VsockDevice {
pub async fn new(id: String) -> Result<Self> {
let (guest_cid, vhost_fd) = generate_vhost_vsock_cid()
let (guest_cid, _vhost_fd) = generate_vhost_vsock_cid()
.await
.context("generate vhost vsock cid failed")?;
Ok(Self {
id,
config: VsockConfig {
guest_cid,
vhost_fd,
},
config: VsockConfig { guest_cid },
})
}
}