qemu-e2k/hw/net
Jens Freimann 9711cd0dfc net/virtio: add failover support
This patch adds support to handle failover device pairs of a virtio-net
device and a (vfio-)pci device, where the virtio-net acts as the standby
device and the (vfio-)pci device as the primary.

The general idea is that we have a pair of devices, a (vfio-)pci and a
emulated (virtio-net) device. Before migration the vfio device is
unplugged and data flows to the emulated device, on the target side
another (vfio-)pci device is plugged in to take over the data-path. In the
guest the net_failover module will pair net devices with the same MAC
address.

To achieve this we need:

1. Provide a callback function for the should_be_hidden DeviceListener.
   It is called when the primary device is plugged in. Evaluate the QOpt
   passed in to check if it is the matching primary device. It returns
   if the device should be hidden or not.
   When it should be hidden it stores the device options in the VirtioNet
   struct and the device is added once the VIRTIO_NET_F_STANDBY feature is
   negotiated during virtio feature negotiation.

   If the virtio-net devices are not realized at the time the (vfio-)pci
   devices are realized, we need to connect the devices later. This way
   we make sure primary and standby devices can be specified in any
   order.

2. Register a callback for migration status notifier. When called it
   will unplug its primary device before the migration happens.

3. Register a callback for the migration code that checks if a device
   needs to be unplugged from the guest.

Signed-off-by: Jens Freimann <jfreimann@redhat.com>
Message-Id: <20191029114905.6856-11-jfreimann@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2019-10-29 18:55:26 -04:00
..
can Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
fsl_etsec hw/net/fsl_etsec/etsec.c: Switch to transaction-based ptimer API 2019-10-24 17:16:28 +01:00
rocker Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
allwinner_emac.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
cadence_gem.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
dp8393x.c dp8393x: manage big endian bus 2019-10-28 19:05:05 +01:00
e1000_regs.h
e1000.c hw/net/e1000: Fix erroneous comment 2019-08-21 10:42:10 +02:00
e1000e_core.c sysemu: Split sysemu/runstate.h off sysemu/sysemu.h 2019-08-16 13:37:36 +02:00
e1000e_core.h Supply missing header guards 2019-06-12 13:20:21 +02:00
e1000e.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
e1000x_common.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
e1000x_common.h Supply missing header guards 2019-06-12 13:20:21 +02:00
eepro100.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
etraxfs_eth.c Include qemu/module.h where needed, drop it from qemu-common.h 2019-06-12 13:18:33 +02:00
ftgmac100.c aspeed: add support for the Aspeed MII controller of the AST2600 2019-10-15 18:09:05 +01:00
imx_fec.c target-arm queue: 2019-08-16 17:21:40 +01:00
Kconfig net: add tulip (dec21143) driver 2019-10-29 10:28:07 +08:00
lan9118.c hw/net/lan9118.c: Switch to transaction-based ptimer API 2019-10-15 18:09:03 +01:00
lance.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
Makefile.objs net: add tulip (dec21143) driver 2019-10-29 10:28:07 +08:00
mcf_fec.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
milkymist-minimac2.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
mipsnet.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
ne2000-isa.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
ne2000-pci.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
ne2000.c Clean up inclusion of sysemu/sysemu.h 2019-08-16 13:31:53 +02:00
ne2000.h Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
net_rx_pkt.c
net_rx_pkt.h
net_tx_pkt.c
net_tx_pkt.h
opencores_eth.c Clean up inclusion of sysemu/sysemu.h 2019-08-16 13:31:53 +02:00
pcnet-pci.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
pcnet.c Clean up inclusion of sysemu/sysemu.h 2019-08-16 13:31:53 +02:00
pcnet.h memory: Fix type of IOMMUMemoryRegionClass member @parent_class 2019-08-16 13:31:51 +02:00
rtl8139.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
smc91c111.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
spapr_llan.c spapr: Replace spapr_vio_qirq() helper with spapr_vio_irq_pulse() helper 2019-10-04 19:08:22 +10:00
stellaris_enet.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
sungem.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
sunhme.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
trace-events net: add tulip (dec21143) driver 2019-10-29 10:28:07 +08:00
tulip.c net: add tulip (dec21143) driver 2019-10-29 10:28:07 +08:00
tulip.h net: add tulip (dec21143) driver 2019-10-29 10:28:07 +08:00
vhost_net-stub.c vhost-net: move stubs to a separate file 2019-02-21 12:28:01 -05:00
vhost_net.c vhost_net: enable packed ring support 2019-10-25 07:46:22 -04:00
virtio-net.c net/virtio: add failover support 2019-10-29 18:55:26 -04:00
vmware_utils.h
vmxnet3_defs.h Supply missing header guards 2019-06-12 13:20:21 +02:00
vmxnet3.c hw/net/vmxnet3: Fix leftover unregister_savevm 2019-09-12 11:13:55 +01:00
vmxnet3.h
vmxnet_debug.h
xen_nic.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
xgmac.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
xilinx_axienet.c hw/net/xilinx_axi: Use object_initialize_child for correct ref. counting 2019-09-03 16:20:34 +01:00
xilinx_ethlite.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00