From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark McLoughlin Subject: Re: Add qemu_send_raw() to vlan. Date: Thu, 15 Oct 2009 08:36:08 +0100 Message-ID: <1255592168.2726.29.camel@blaa> References: <20090526100302.GS3948@redhat.com> <1255590285.2726.27.camel@blaa> <20091015073312.GC30889@redhat.com> Reply-To: Mark McLoughlin Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: avi@redhat.com, kvm@vger.kernel.org To: Gleb Natapov Return-path: Received: from mx1.redhat.com ([209.132.183.28]:33067 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932095AbZJOHiS (ORCPT ); Thu, 15 Oct 2009 03:38:18 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9F7bqsZ012684 for ; Thu, 15 Oct 2009 03:37:52 -0400 In-Reply-To: <20091015073312.GC30889@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Thu, 2009-10-15 at 09:33 +0200, Gleb Natapov wrote: > On Thu, Oct 15, 2009 at 08:04:45AM +0100, Mark McLoughlin wrote: > > Hi Gleb, > > > > On Tue, 2009-05-26 at 13:03 +0300, Gleb Natapov wrote: > > > It gets packet without virtio header and adds it if needed. Allows to > > > inject packets to vlan from outside. To send gracious arp for instance. > > ... > > > diff --git a/net.h b/net.h > > > index 931133b..3d0b6f2 100644 > > > --- a/net.h > > > +++ b/net.h > > > ... > > > @@ -63,6 +64,7 @@ int qemu_can_send_packet(VLANClientState *vc); > > > ssize_t qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov, > > > int iovcnt); > > > int qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size); > > > +void qemu_send_packet_raw(VLANClientState *vc, const uint8_t *buf, int size); > > > void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6]); > > > void qemu_check_nic_model(NICInfo *nd, const char *model); > > > void qemu_check_nic_model_list(NICInfo *nd, const char * const *models, > > > > I've only just now noticed that we never actually made announce_self() > > use this ... care to do that? > > > Something like this: > > --- > Use qemu_send_packet_raw to send gracious arp. This will ensure that > vnet header is handled properly. > > Signed-off-by: Gleb Natapov Acked-by: Mark McLoughlin > diff --git a/savevm.c b/savevm.c > index 7a363b6..8ea2daf 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -132,7 +132,7 @@ static void qemu_announce_self_once(void *opaque) > len = announce_self_create(buf, nd_table[i].macaddr); > vlan = nd_table[i].vlan; > for(vc = vlan->first_client; vc != NULL; vc = vc->next) { > - vc->receive(vc, buf, len); > + qemu_send_packet_raw(vc, buf, len); This makes things even more gratuitous because we're making every net client send the packet rather than receive it, but it works fine in practice. Cheers, Mark.