Tested this series of patches with virtio-net regression tests, everything works fine.
Tested-by: Lei Yang <[email protected]> On Sat, Oct 11, 2025 at 1:40 AM Vladimir Sementsov-Ogievskiy <[email protected]> wrote: > > Hi all! > > Here is a new migration parameter backend-transfer, which allows to > enable local migration of TAP virtio-net backend, including its > properties and open fds. > > With this new option, management software doesn't need to > initialize new TAP and do a switch to it. Nothing should be > done around virtio-net in local migration: it just migrates > and continues to use same TAP device. So we avoid extra logic > in management software, extra allocations in kernel (for new TAP), > and corresponding extra delay in migration downtime. > > v7: > > 01-13,18: r-b by Maxim Davydov > t-b by Lei Yang > > 05: fix tap->script to tap->downscript > 07: tiny rebase conflict around "NetOffloadsd ol = {}" > > 14: reworked to vmsd handler > tap is migrated inside virtio-net. And we support backend-transfer > only for virtio-net+tap. So, it's better to support initialization > postponing directly in virtio-net, the code is simplified, and we > don't have to manage global list of taps. > > 15: reworked on top of 14 > > 16: - drop QAPI_LIST_CONTAINS macro > - improve commit message > - improve QAPI documentation comments > > 17: - don't add extra check into virtio_net_update_host_features(), > as we now can call it only when needed (more explicit logic) > - drop extra includes > - no need in "attached_to_virtio_net" variable anymore > - add .has_tunnel to the state > > 19: add also test-cases for TAP migration without backend-transfer > (to be sure, that we don't break it with new feature:) > > Vladimir Sementsov-Ogievskiy (19): > net/tap: net_init_tap_one(): drop extra error propagation > net/tap: net_init_tap_one(): move parameter checking earlier > net/tap: rework net_tap_init() > net/tap: pass NULL to net_init_tap_one() in cases when scripts are > NULL > net/tap: rework scripts handling > net/tap: setup exit notifier only when needed > net/tap: split net_tap_fd_init() > net/tap: tap_set_sndbuf(): add return value > net/tap: rework tap_set_sndbuf() > net/tap: rework sndbuf handling > net/tap: introduce net_tap_setup() > net/tap: move vhost fd initialization to net_tap_new() > net/tap: finalize net_tap_set_fd() logic > migration: introduce .pre_incoming() vmsd handler > net/tap: postpone tap setup to pre-incoming > qapi: add interface for backend-transfer virtio-net/tap migration > virtio-net: support backend-transfer migration for virtio-net/tap > tests/functional: add skipWithoutSudo() decorator > tests/functional: add test_x86_64_tap_migration > > hw/net/virtio-net.c | 150 ++++++- > include/migration/vmstate.h | 1 + > include/net/tap.h | 5 + > migration/migration.c | 4 + > migration/options.c | 33 ++ > migration/options.h | 2 + > migration/savevm.c | 15 + > migration/savevm.h | 1 + > net/tap-bsd.c | 3 +- > net/tap-linux.c | 19 +- > net/tap-solaris.c | 3 +- > net/tap-stub.c | 3 +- > net/tap-win32.c | 11 + > net/tap.c | 425 +++++++++++++----- > net/tap_int.h | 3 +- > qapi/migration.json | 42 +- > tests/functional/qemu_test/decorators.py | 16 + > tests/functional/test_x86_64_tap_migration.py | 396 ++++++++++++++++ > 18 files changed, 1001 insertions(+), 131 deletions(-) > create mode 100644 tests/functional/test_x86_64_tap_migration.py > > -- > 2.48.1 >
