From patchwork Wed Oct 21 11:27:58 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [19/19] virtio-net: add tap_has_ufo flag to saved state Date: Wed, 21 Oct 2009 01:27:58 -0000 From: Mark McLoughlin X-Patchwork-Id: 36545 Message-Id: <1256124478-2988-20-git-send-email-markmc@redhat.com> To: qemu-devel@nongnu.org Cc: Mark McLoughlin If we tell the guest we support UFO and then migrate to host which doesn't support it, we will find ourselves in grave difficulties. Prevent this scenario by adding a flag to virtio-net's savevm format which indicates whether the device requires host UFO support. Signed-off-by: Mark McLoughlin --- hw/virtio-net.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/hw/virtio-net.c b/hw/virtio-net.c index 3349800..f919952 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -16,7 +16,7 @@ #include "qemu-timer.h" #include "virtio-net.h" -#define VIRTIO_NET_VM_VERSION 10 +#define VIRTIO_NET_VM_VERSION 11 #define MAC_TABLE_ENTRIES 64 #define MAX_VLAN (1 << 12) /* Per 802.1Q definition */ @@ -694,6 +694,7 @@ static void virtio_net_save(QEMUFile *f, void *opaque) qemu_put_byte(f, n->nomulti); qemu_put_byte(f, n->nouni); qemu_put_byte(f, n->nobcast); + qemu_put_byte(f, peer_has_vnet_hdr(n) && tap_has_ufo(n->vc->peer)); } static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) @@ -769,6 +770,15 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id) n->nobcast = qemu_get_byte(f); } + if (version_id >= 11) { + if (qemu_get_byte(f) && + (!peer_has_vnet_hdr(n) || !tap_has_ufo(n->vc->peer))) { + fprintf(stderr, + "virtio-net: saved image requires TUN_F_UFO support\n"); + return -1; + } + } + /* Find the first multicast entry in the saved MAC filter */ for (i = 0; i < n->mac_table.in_use; i++) { if (n->mac_table.macs[i * ETH_ALEN] & 1) {