Commit 3e021d40b7548b2eeec62a082411c0745a5c635f
1 parent
4f1c942b
net: return status from qemu_deliver_packet()
Will allow qemu_send_packet() handle queue full condition. Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Showing
1 changed file
with
17 additions
and
3 deletions
net.c
... | ... | @@ -409,16 +409,30 @@ int qemu_can_send_packet(VLANClientState *sender) |
409 | 409 | return 0; |
410 | 410 | } |
411 | 411 | |
412 | -static void | |
412 | +static int | |
413 | 413 | qemu_deliver_packet(VLANClientState *sender, const uint8_t *buf, int size) |
414 | 414 | { |
415 | 415 | VLANClientState *vc; |
416 | + int ret = -1; | |
416 | 417 | |
417 | 418 | for (vc = sender->vlan->first_client; vc != NULL; vc = vc->next) { |
418 | - if (vc != sender && !vc->link_down) { | |
419 | - vc->receive(vc, buf, size); | |
419 | + ssize_t len; | |
420 | + | |
421 | + if (vc == sender) { | |
422 | + continue; | |
423 | + } | |
424 | + | |
425 | + if (vc->link_down) { | |
426 | + ret = size; | |
427 | + continue; | |
420 | 428 | } |
429 | + | |
430 | + len = vc->receive(vc, buf, size); | |
431 | + | |
432 | + ret = (ret >= 0) ? ret : len; | |
421 | 433 | } |
434 | + | |
435 | + return ret; | |
422 | 436 | } |
423 | 437 | |
424 | 438 | void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size) | ... | ... |