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