kvm: qemu: net: drop packet from tap device if all NICs are down
If you do e.g. "set_link virtio.0 down" and there are packets pending on the tap interface, we currently buffer a packet and constantly try and send it until the link is up again.
We actually just want to drop the packet if the NIC is down. Upstream qemu already does this, we just differ because we buffer packets from the tap interface.
Reported-by Yan Vugenfirer <[email protected]>
Signed-off-by Mark McLoughlin <[email protected]>
--- qemu/net.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
qemu/net.c +4 -2
@@ -412,8 +412,10 @@ int qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)hex_dump (stdout, buf, size);#endif for (vc = vlan->first_client; vc !=NULL ; vc = vc->next) { -if (vc != vc1 && !vc->link_down) { -if (!vc->fd_can_read || vc->fd_can_read (vc->opaque)) { +if (vc != vc1) { +if (vc->link_down) + ret =0 ; +else if (!vc->fd_can_read || vc->fd_can_read (vc->opaque)) { vc->fd_read (vc->opaque, buf, size); ret =0 ; }
Signature · 1 line
1.6.0.6
Avi Kivity
AppliedQuoted 9 lines · Mark McLoughlin
If you do e.g. "
set_linkvirtio.0 down" and there are packets pending on the tap interface, we currently buffer a packet and constantly try and send it until the link is up again.We actually just want to drop the packet if the NIC is down. Upstream qemu already does this, we just differ because we buffer packets from the tap interface.
Applied, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function