diff --git a/CHANGELOG.md b/CHANGELOG.md index 143412c50f5..d5232f0db1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## \[Unreleased\] + +### Fixed + +- [#4824](https://github.com/firecracker-microvm/firecracker/pull/4824): Add + missing configuration of tap offload features when restoring from a snapshot. + Setting the features was previously + [moved](https://github.com/firecracker-microvm/firecracker/pull/4680/commits/49ed5ea4b48ccd98903da037368fa3108f58ac1f) + from net device creation to device activation time, but it was not reflected + in the restore path. This was leading to inability to connect to the restored + VM if the offload features were used. +- [#4829](https://github.com/firecracker-microvm/firecracker/pull/4829): v1.9.0 + was missing most of the debugging information in the debuginfo file, due to a + change in the Cargo defaults. This has been corrected. + ## \[1.9.0\] ### Added diff --git a/Cargo.toml b/Cargo.toml index 1a5187f4f2f..914c4cdc87c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,3 +27,7 @@ panic = "abort" [profile.release] panic = "abort" lto = true +strip = "none" + +[profile.bench] +strip = "debuginfo" diff --git a/src/vmm/src/devices/virtio/net/device.rs b/src/vmm/src/devices/virtio/net/device.rs index e34676b2c31..d6543794e02 100755 --- a/src/vmm/src/devices/virtio/net/device.rs +++ b/src/vmm/src/devices/virtio/net/device.rs @@ -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 { diff --git a/src/vmm/src/devices/virtio/net/persist.rs b/src/vmm/src/devices/virtio/net/persist.rs index 271977a4792..eb482e29af8 100644 --- a/src/vmm/src/devices/virtio/net/persist.rs +++ b/src/vmm/src/devices/virtio/net/persist.rs @@ -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; @@ -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 { @@ -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)?; + net.device_state = DeviceState::Activated(constructor_args.mem); } diff --git a/tests/integration_tests/build/test_binary_static_linking.py b/tests/integration_tests/build/test_binary_static_linking.py deleted file mode 100644 index 1c277a4d00b..00000000000 --- a/tests/integration_tests/build/test_binary_static_linking.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# SPDX-License-Identifier: Apache-2.0 -"""Tests to check if the release binary is statically linked. - -""" - -import pytest - -from framework import utils - - -@pytest.mark.timeout(500) -def test_firecracker_binary_static_linking(microvm_factory): - """ - Test to make sure the firecracker binary is statically linked. - """ - fc_binary_path = microvm_factory.fc_binary_path - _, stdout, stderr = utils.check_output(f"file {fc_binary_path}") - assert "" in stderr - # expected "statically linked" for aarch64 and - # "static-pie linked" for x86_64 - assert "statically linked" in stdout or "static-pie linked" in stdout diff --git a/tests/integration_tests/functional/test_binary.py b/tests/integration_tests/functional/test_binary.py new file mode 100644 index 00000000000..67181bd3edb --- /dev/null +++ b/tests/integration_tests/functional/test_binary.py @@ -0,0 +1,48 @@ +# Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Tests to check several aspects of the binaries""" + +import re +import subprocess + +import pytest + +from framework import utils + + +@pytest.mark.timeout(500) +def test_firecracker_binary_static_linking(microvm_factory): + """ + Test to make sure the firecracker binary is statically linked. + """ + fc_binary_path = microvm_factory.fc_binary_path + _, stdout, stderr = utils.check_output(f"file {fc_binary_path}") + assert "" in stderr + # expected "statically linked" for aarch64 and + # "static-pie linked" for x86_64 + assert "statically linked" in stdout or "static-pie linked" in stdout + + +def test_release_debuginfo(microvm_factory): + """Ensure the debuginfo file has the right ELF sections""" + fc_binary = microvm_factory.fc_binary_path + debuginfo = fc_binary.with_suffix(".debug") + stdout = subprocess.check_output( + ["readelf", "-S", str(debuginfo)], + encoding="ascii", + ) + matches = { + match[0] for match in re.findall(r"\[..] (\.(\w|\.)+)", stdout, re.MULTILINE) + } + needed_sections = { + ".debug_aranges", + ".debug_info", + ".debug_abbrev", + ".debug_line", + ".debug_frame", + ".debug_str", + ".debug_ranges", + } + missing_sections = needed_sections - matches + assert missing_sections == set() diff --git a/tests/integration_tests/build/test_binary_size.py b/tests/integration_tests/functional/test_binary_size.py similarity index 100% rename from tests/integration_tests/build/test_binary_size.py rename to tests/integration_tests/functional/test_binary_size.py