On 06/08/2015 04:21 PM, Thibaut Collet wrote: > Hi, > > My understanding of gratuitous packet with virtio for any backend > (vhost user or other): > - When the VM is loaded (first start or migration) the virtio net > interfaces are loaded ( virtio_net_load_device function in > hw/net/virtio-net.c) > - If the guest has the VIRTIO_NET_F_GUEST_ANNOUNCE capability, request > to send gratuitous packet is done. > > 1. To enable gratuitous packet through this mechanism I have > added VIRTIO_NET_F_GUEST_ANNOUNCE capability to hw/net/vhost_net.c. So > host and guest can negotiate this feature when vhost-user is used. > > 2. self announce occurs in case of live migration. During a live > migration a GARP is sent to all net backend through a queue dedicated > to the net backend. > But for vhost-user: > - this operation is not possible (vhost-user has no queue) > - it is already done with the previous mechanism. > Rather to define a queue to vhost user and notify twice the guest > to send gratuitous packet I have disable GARP from self announce and > use only the first mechanism for that. > > I have tested my modifications with guest that supports > VIRTIO_NET_F_GUEST_ANNOUNCE and vhost-user on the host. After a live > migration I have the GARP from the guest.
Yes, your patch works well for recent drivers. But the problem is legacy guest/driver without VIRTIO_NET_F_GUEST_ANNOUNCE. In this case there will be no GARP sent after migration. Thanks