提交 b04c4134 编写于 作者: G Gleb Natapov 提交者: Anthony Liguori

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: NGleb Natapov <gleb@redhat.com>
Signed-off-by: NMark McLoughlin <markmc@redhat.com>
Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
上级 70783b9c
...@@ -126,8 +126,6 @@ static int announce_self_create(uint8_t *buf, ...@@ -126,8 +126,6 @@ static int announce_self_create(uint8_t *buf,
static void qemu_announce_self_once(void *opaque) static void qemu_announce_self_once(void *opaque)
{ {
int i, len; int i, len;
VLANState *vlan;
VLANClientState *vc;
uint8_t buf[60]; uint8_t buf[60];
static int count = SELF_ANNOUNCE_ROUNDS; static int count = SELF_ANNOUNCE_ROUNDS;
QEMUTimer *timer = *(QEMUTimer **)opaque; QEMUTimer *timer = *(QEMUTimer **)opaque;
...@@ -136,10 +134,7 @@ static void qemu_announce_self_once(void *opaque) ...@@ -136,10 +134,7 @@ static void qemu_announce_self_once(void *opaque)
if (!nd_table[i].used) if (!nd_table[i].used)
continue; continue;
len = announce_self_create(buf, nd_table[i].macaddr); len = announce_self_create(buf, nd_table[i].macaddr);
vlan = nd_table[i].vlan; qemu_send_packet_raw(nd_table[i].vc, buf, len);
QTAILQ_FOREACH(vc, &vlan->clients, next) {
vc->receive(vc, buf, len);
}
} }
if (--count) { if (--count) {
/* delay 50ms, 150ms, 250ms, ... */ /* delay 50ms, 150ms, 250ms, ... */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册