On Mon, Jun 08, 2015 at 10:21:38AM +0200, 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.
I think Jason is pointing out that your patch lacks support for guests that do not negotiate VIRTIO_NET_F_GUEST_ANNOUNCE. If the guest does not set the feature bit then packets might continue to get forwarded to the old host. Perhaps the correct place to implement this is in the virtio-net.c device instead of in vhost-user.c. The non-vhost-user case should also skip sending two ARP packets. BUT before we go any further: I've asked several times whether vhost-user support live migration? You didn't answer that question. Fixing this issue only makes sense if vhost-user live migration is supported. Stefan
pgpM_NS32wDTt.pgp
Description: PGP signature