• V
    net: fix qemu_can_send_packet logic · 60c07d93
    Vincent Palatin 提交于
    If any of the clients is not ready to receive (ie it has a can_receive
    callback and can_receive() returns false), we don't want to start
    sending, else this client may miss/discard the packet.
    
    I got this behaviour with the following setup :
    the emulated machine is using an USB-ethernet adapter, it is connected
    to the network using SLIRP and I'm dumping the traffic in a .pcap file.
    As per the following command line :
    -net nic,model=usb,vlan=1 -net user,vlan=1 -net dump,vlan=1,file=/tmp/pkt.pcap
    Every time that two packets are coming in a row from the host, the
    usb-net code will receive the first one, then returns 0 to can_receive
    call since it has a 1 packet long queue. But as the dump code is always
    ready to receive, qemu_can_send_packet will return true and the next
    packet will discard the previous one in the usb-net code.
    Signed-off-by: NVincent Palatin <vpalatin@chromium.org>
    Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
    60c07d93
net.c 38.3 KB