On 07/06/2016 10:02, Peter Lieven wrote: > Am 07.06.2016 um 09:55 schrieb Paolo Bonzini: >> >> On 07/06/2016 09:37, Peter Lieven wrote: >>> commit fefe2a78 accidently dropped the code path for injecting >>> raw packets. This feature is needed for sending gratuitous ARPs >>> after an incoming migration has completed. The result is increased >>> network downtime for vservers where the network card is not virtio-net >>> with the VIRTIO_NET_F_GUEST_ANNOUNCE feature. >>> >>> Fixes: fefe2a78abde932e0f340b21bded2c86def1d242 >>> Cc: [email protected] >>> Cc: [email protected] >>> Signed-off-by: Peter Lieven <[email protected]> >>> --- >>> net/net.c | 6 +++++- >>> 1 file changed, 5 insertions(+), 1 deletion(-) >>> >>> diff --git a/net/net.c b/net/net.c >>> index 5f3e5a9..d5834ea 100644 >>> --- a/net/net.c >>> +++ b/net/net.c >>> @@ -722,7 +722,11 @@ ssize_t qemu_deliver_packet_iov(NetClientState >>> *sender, >>> return 0; >>> } >>> - if (nc->info->receive_iov) { >>> + if (flags & QEMU_NET_PACKET_FLAG_RAW && iovcnt == 1 && >>> + nc->info->receive_raw) { >>> + /* this is required for qemu_announce_self() */ >>> + ret = nc->info->receive_raw(nc, iov[0].iov_base, >>> iov[0].iov_len); >> Possibly move "iovcnt == 1" from the if condition to an assertion >> inside it? > > I do not know if there is any other user that emits raw packets than > qemu_announce_self.
Currently all senders of raw packets go through qemu_send_packet_raw, which has iovcnt == 1. > The question is do you want to abort or just return -1 (which is the > case without this patch). I want to abort, since it's currently impossible to get into that situation. If someone wants to introduce qemu_sendv_packet_async_with_flags, they must also introduce nc->info->receive_raw_iov or something like that. Thanks, Paolo
