qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 5/10] Add network announce function


From: Avi Kivity
Subject: Re: [Qemu-devel] [PATCH 5/10] Add network announce function
Date: Wed, 10 Sep 2008 17:00:12 +0300
User-agent: Thunderbird 2.0.0.16 (X11/20080723)

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.

ARP is to announce an IP address moving to a different MAC address. Here the MAC address stays the same, but we want to announce to the switch that the MAC address is moving to a different port.

There may not even be an IP stack running in the guest, and we don't know the IP address(es) the guest is using, so I don't see how ARP fits here.

Since switches learn the MAC address to port association, all we need is to send _some_ packet.

  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

Some switches drop the first packet; and if those switches are chained, we need to send multiple packets.

--
error compiling committee.c: too many arguments to function





reply via email to

[Prev in Thread] Current Thread [Next in Thread]