From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Qemu-devel] [PATCH 5/10] Add network announce function Date: Wed, 10 Sep 2008 08:54:27 -0500 Message-ID: <48C7D193.8070309@us.ibm.com> References: <1220989802-13706-1-git-send-email-aliguori@us.ibm.com> <1220989802-13706-6-git-send-email-aliguori@us.ibm.com> <48C7CB28.2090707@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: qemu-devel@nongnu.org, Chris Wright , Uri Lublin , kvm@vger.kernel.org, Avi Kivity To: Chris Lalancette Return-path: Received: from e5.ny.us.ibm.com ([32.97.182.145]:40117 "EHLO e5.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751763AbYIJNz3 (ORCPT ); Wed, 10 Sep 2008 09:55:29 -0400 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by e5.ny.us.ibm.com (8.13.8/8.13.8) with ESMTP id m8ADtK7Q026144 for ; Wed, 10 Sep 2008 09:55:20 -0400 Received: from d01av04.pok.ibm.com (d01av04.pok.ibm.com [9.56.224.64]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v9.1) with ESMTP id m8ADtHKA239956 for ; Wed, 10 Sep 2008 09:55:17 -0400 Received: from d01av04.pok.ibm.com (loopback [127.0.0.1]) by d01av04.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m8ADtGLO016680 for ; Wed, 10 Sep 2008 09:55:17 -0400 In-Reply-To: <48C7CB28.2090707@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Chris Lalancette wrote: > 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? > I didn't write this code originally. Perhaps Uri or Avi know who did and can provide some insight? Regards, Anthony Liguori > Chris Lalancette > >