From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KdPnL-0005Ct-8i for qemu-devel@nongnu.org; Wed, 10 Sep 2008 09:31:43 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KdPnJ-0005Bl-3M for qemu-devel@nongnu.org; Wed, 10 Sep 2008 09:31:42 -0400 Received: from [199.232.76.173] (port=55357 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KdPnI-0005Bi-Pa for qemu-devel@nongnu.org; Wed, 10 Sep 2008 09:31:40 -0400 Received: from mx2.redhat.com ([66.187.237.31]:53678) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KdPnI-00050X-FQ for qemu-devel@nongnu.org; Wed, 10 Sep 2008 09:31:40 -0400 Message-ID: <48C7CB28.2090707@redhat.com> Date: Wed, 10 Sep 2008 15:27:04 +0200 From: Chris Lalancette MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 5/10] Add network announce function References: <1220989802-13706-1-git-send-email-aliguori@us.ibm.com> <1220989802-13706-6-git-send-email-aliguori@us.ibm.com> In-Reply-To: <1220989802-13706-6-git-send-email-aliguori@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Chris Wright , Uri Lublin , Anthony Liguori , kvm@vger.kernel.org Anthony Liguori wrote: > +static int announce_self_create(uint8_t *buf, > + uint8_t *mac_addr) > +{ > + uint32_t magic = EXPERIMENTAL_MAGIC; > + uint16_t proto = htons(ETH_P_EXPERIMENTAL); > + > + /* FIXME: should we send a different packet (arp/rarp/ping)? */ > + > + memset(buf, 0xff, 6); /* h_dst */ > + memcpy(buf + 6, mac_addr, 6); /* h_src */ > + memcpy(buf + 12, &proto, 2); /* h_proto */ > + memcpy(buf + 14, &magic, 4); /* magic */ > + > + return 18; /* len */ > +} > + > +void qemu_announce_self(void) > +{ > + int i, j, len; > + VLANState *vlan; > + VLANClientState *vc; > + uint8_t buf[256]; > + > + for (i = 0; i < nb_nics; i++) { > + len = announce_self_create(buf, nd_table[i].macaddr); > + vlan = nd_table[i].vlan; > + for(vc = vlan->first_client; vc != NULL; vc = vc->next) { > + if (vc->fd_read == tap_receive) /* send only if tap */ > + for (j=0; j < SELF_ANNOUNCE_ROUNDS; j++) > + vc->fd_read(vc->opaque, buf, len); > + } > + } > +} > + This one is yucky, as the FIXME points out. First, I'm guessing the point of this is to do an ARP poison on the switch? If so, we probably want to do some kind of ARP packet, although I'm not an expert on this. Also, why are we trying SELF_ANNOUNCE_ROUNDS times? Is there some issue where some of these get dropped, or is it just being safe about it? Chris Lalancette