On Tue, Dec 15, 2015 at 2:18 PM, Yuanhan Liu <yuanhan.liu at linux.intel.com> wrote:
> On Tue, Dec 15, 2015 at 12:47:47PM +0100, Thibaut Collet wrote: > > On Tue, Dec 15, 2015 at 12:43 PM, Thibaut Collet < > thibaut.collet at 6wind.com> > > wrote: > > > > > > > > > > > On Tue, Dec 15, 2015 at 11:05 AM, Peter Xu <peterx at redhat.com> wrote: > > > > > >> On Tue, Dec 15, 2015 at 11:45:56AM +0300, Pavel Fedin wrote: > > >> > To tell the truth, i don't know. I am also learning qemu internals > on > > >> the fly. Indeed, i see that it should announce itself. But > > >> > this brings up a question: why do we need special announce > procedure in > > >> vhost-user then? > > >> > > >> I have the same question. Here is my guess... > > >> > > >> In customized networks, maybe people are not using ARP at all? When > > >> we use DPDK, we directly pass through the network logic inside > > >> kernel itself. So logically all the network protocols could be > > >> customized by the user of it. In the customized network, maybe there > > >> is some other protocol (rather than RARP) that would do the same > > >> thing as what ARP/RARP does. So, this SEND_RARP request could give > > >> the vhost-user backend a chance to format its own announce packet > > >> and broadcast (in the SEND_RARP request, the guest's mac address > > >> will be appended). > > >> > > >> CCing Victor to better know the truth... > > >> > > >> Peter > > >> > > > > > Hey Thibaut, > > First of all, thanks a lot for your lengthy explanation. > > > > Hi, > > > > > > After a migration, to avoid network outage, the guest must announce its > > > new location to the L2 layer, typically with a GARP. Otherwise requests > > > sent to the guest arrive to the old host until a ARP request is sent > (after > > > 30 seconds) or the guest sends some data. > > > > > > QEMU implementation of self announce after a migration with a vhost > > > backend is the following: > > > - If the VIRTIO_GUEST_ANNOUNCE feature has been negotiated the guest > > > sends automatically a GARP. > > I'm kind of clear how VIRTIO_GUEST_ANNOUNCE works so far, except that I > met a bug, which I will describe in another email. > > > > - Else if the vhost backend implements VHOST_USER_SEND_RARP this > request > > > is sent to the vhost backend. When this message is received the vhost > > > backend must act as it receives a RARP from the guest (purpose of this > RARP > > Can you be more specific about this? Say, what kind of acts the vhost > backend should do exactly? > > > > is to update switches' MAC->port maaping as a GARP). > > Isn't it vhost library is not aware of swtich at all? How could we > update switches's MAC-port mapping inside vhost library? > > > This RARP is a false > > > one, created by the vhost backend, > > I'm a bit confused now. You were just saying "vhost backend must act > as it __recevives__ a RARP from the guest", and you are now saying > "the RARP is a false one __created__ by the vhost backend". > > Thanks. > > --yliu > After a migration, to avoid netwotk outage, all interfaces of the guest must send a packet to update switches mapping (ideally a GARP). As some interfaces do not do it QEMU does it in behalf of the guest by sending a RARP (his RARP is not forged by the guest but by QEMU). This is the qemu_self_announce purpose that "spoofs" a RARP to all backend of guest ethernet interfaces. For vhost-user backend, QEMU can not do it directly and asks to the vhost-user backend to do it with the VHOST_USER_SEND_RARP request that contains the MAC address of the guest interface. Thibaut.