runtime-rs: Network config distinguishes backends

Network backends determine the virtio dataplane implementations. Common
protocols include virtio-net, vhost-net and vhost-user-net, etc. Network
config has a new field named `backend` to specify which protocol to use.

Signed-off-by: Xuewei Niu <niuxuewei.nxw@antgroup.com>
This commit is contained in:
Xuewei Niu
2023-08-22 15:14:43 +08:00
parent 9203371833
commit a047331a34
15 changed files with 157 additions and 65 deletions

View File

@@ -19,7 +19,7 @@ use hypervisor::{
driver::NetworkConfig,
DeviceConfig, DeviceType,
},
Hypervisor, NetworkDevice,
Hypervisor, NetworkBackend, NetworkDevice, VirtioConfig,
};
use super::{
@@ -64,8 +64,11 @@ impl IPVlanEndpoint {
})?;
Ok(NetworkConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
backend: NetworkBackend::Virtio(VirtioConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
..Default::default()
}),
guest_mac: Some(guest_mac),
..Default::default()
})

View File

@@ -19,7 +19,7 @@ use hypervisor::{
driver::NetworkConfig,
DeviceConfig, DeviceType,
},
Hypervisor, NetworkDevice,
Hypervisor, NetworkBackend, NetworkDevice, VirtioConfig,
};
use super::{
@@ -63,8 +63,11 @@ impl MacVlanEndpoint {
})?;
Ok(NetworkConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
backend: NetworkBackend::Virtio(VirtioConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
..Default::default()
}),
guest_mac: Some(guest_mac),
..Default::default()
})

View File

@@ -10,7 +10,7 @@ use anyhow::{Context, Result};
use async_trait::async_trait;
use hypervisor::device::device_manager::{do_handle_device, DeviceManager};
use hypervisor::device::{DeviceConfig, DeviceType};
use hypervisor::{Hypervisor, NetworkConfig, NetworkDevice};
use hypervisor::{Hypervisor, NetworkBackend, NetworkConfig, NetworkDevice, VirtioConfig};
use tokio::sync::RwLock;
use super::endpoint_persist::TapEndpointState;
@@ -74,8 +74,11 @@ impl TapEndpoint {
fn get_network_config(&self) -> Result<NetworkConfig> {
let guest_mac = utils::parse_mac(&self.guest_mac).context("Parse mac address")?;
Ok(NetworkConfig {
host_dev_name: self.tap_iface.name.clone(),
virt_iface_name: self.name.clone(),
backend: NetworkBackend::Virtio(VirtioConfig {
host_dev_name: self.tap_iface.name.clone(),
virt_iface_name: self.name.clone(),
..Default::default()
}),
guest_mac: Some(guest_mac),
queue_num: self.queue_num,
queue_size: self.queue_size,

View File

@@ -19,7 +19,7 @@ use hypervisor::{
driver::NetworkConfig,
DeviceConfig, DeviceType,
},
Hypervisor, NetworkDevice,
Hypervisor, NetworkBackend, NetworkDevice, VirtioConfig,
};
use super::{
@@ -63,8 +63,11 @@ impl VethEndpoint {
})?;
Ok(NetworkConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
backend: NetworkBackend::Virtio(VirtioConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
..Default::default()
}),
guest_mac: Some(guest_mac),
..Default::default()
})

View File

@@ -19,7 +19,7 @@ use hypervisor::{
driver::NetworkConfig,
DeviceConfig, DeviceType,
},
Hypervisor, NetworkDevice,
Hypervisor, NetworkBackend, NetworkDevice, VirtioConfig,
};
use super::{
@@ -62,8 +62,11 @@ impl VlanEndpoint {
})?;
Ok(NetworkConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
backend: NetworkBackend::Virtio(VirtioConfig {
host_dev_name: iface.name.clone(),
virt_iface_name: self.net_pair.virt_iface.name.clone(),
..Default::default()
}),
guest_mac: Some(guest_mac),
..Default::default()
})