Skip to content

Commit

Permalink
fix(net): set tap offload features on restore
Browse files Browse the repository at this point in the history
Set tap offload features on restore.

Signed-off-by: Nikita Kalyazin <kalyazin@amazon.com>
  • Loading branch information
kalyazin committed Sep 30, 2024
1 parent d3b02e0 commit 30fae4a
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/vmm/src/devices/virtio/net/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ impl Net {

/// Builds the offload features we will setup on the TAP device based on the features that the
/// guest supports.
fn build_tap_offload_features(guest_supported_features: u64) -> u32 {
pub fn build_tap_offload_features(guest_supported_features: u64) -> u32 {
let add_if_supported =
|tap_features: &mut u32, supported_features: u64, tap_flag: u32, virtio_flag: u32| {
if supported_features & (1 << virtio_flag) != 0 {
Expand Down
9 changes: 8 additions & 1 deletion src/vmm/src/devices/virtio/net/persist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use serde::{Deserialize, Serialize};
use utils::net::mac::MacAddr;

use super::device::Net;
use super::NET_NUM_QUEUES;
use super::{TapError, NET_NUM_QUEUES};
use crate::devices::virtio::device::DeviceState;
use crate::devices::virtio::persist::{PersistError as VirtioStateError, VirtioDeviceState};
use crate::devices::virtio::queue::FIRECRACKER_MAX_QUEUE_SIZE;
Expand Down Expand Up @@ -65,6 +65,8 @@ pub enum NetPersistError {
VirtioState(#[from] VirtioStateError),
/// Indicator that no MMDS is associated with this device.
NoMmdsDataStore,
/// Setting tap interface offload flags failed: {0}
TapSetOffload(TapError),
}

impl Persist<'_> for Net {
Expand Down Expand Up @@ -129,6 +131,11 @@ impl Persist<'_> for Net {
net.acked_features = state.virtio_state.acked_features;

if state.virtio_state.activated {
let supported_flags: u32 = Net::build_tap_offload_features(net.acked_features);
net.tap
.set_offload(supported_flags)
.map_err(NetPersistError::TapSetOffload)?;

Check warning on line 137 in src/vmm/src/devices/virtio/net/persist.rs

View check run for this annotation

Codecov / codecov/patch

src/vmm/src/devices/virtio/net/persist.rs#L134-L137

Added lines #L134 - L137 were not covered by tests

net.device_state = DeviceState::Activated(constructor_args.mem);
}

Expand Down

0 comments on commit 30fae4a

Please sign in to comment.