net: use qemu_send_packet_raw() in qemu_announce_self()

Use qemu_send_packet_raw to send gratuitous arp. This will ensure that
vnet header is handled properly.

Also, avoid sending the gratuitous packet to the guest. There doesn't
appear to be any reason for doing that and the code will currently just
crash if the NIC is not associated with a vlan.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Gleb Natapov 2009-10-22 17:43:43 +01:00 committed by Anthony Liguori
parent 70783b9c9b
commit b04c4134d6
1 changed files with 1 additions and 6 deletions

View File

@ -126,8 +126,6 @@ static int announce_self_create(uint8_t *buf,
static void qemu_announce_self_once(void *opaque)
{
int i, len;
VLANState *vlan;
VLANClientState *vc;
uint8_t buf[60];
static int count = SELF_ANNOUNCE_ROUNDS;
QEMUTimer *timer = *(QEMUTimer **)opaque;
@ -136,10 +134,7 @@ static void qemu_announce_self_once(void *opaque)
if (!nd_table[i].used)
continue;
len = announce_self_create(buf, nd_table[i].macaddr);
vlan = nd_table[i].vlan;
QTAILQ_FOREACH(vc, &vlan->clients, next) {
vc->receive(vc, buf, len);
}
qemu_send_packet_raw(nd_table[i].vc, buf, len);
}
if (--count) {
/* delay 50ms, 150ms, 250ms, ... */