net: return status from qemu_deliver_packet()
authorMark McLoughlin <markmc@redhat.com>
Wed, 29 Apr 2009 10:34:52 +0000 (11:34 +0100)
committerMark McLoughlin <markmc@redhat.com>
Tue, 9 Jun 2009 10:38:50 +0000 (11:38 +0100)
Will allow qemu_send_packet() handle queue full condition.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>

net.c

diff --git a/net.c b/net.c
index 8403120..e48b0fe 100644 (file)
--- a/net.c
+++ b/net.c
@@ -409,16 +409,30 @@ int qemu_can_send_packet(VLANClientState *sender)
     return 0;
 }
 
-static void
+static int
 qemu_deliver_packet(VLANClientState *sender, const uint8_t *buf, int size)
 {
     VLANClientState *vc;
+    int ret = -1;
 
     for (vc = sender->vlan->first_client; vc != NULL; vc = vc->next) {
-        if (vc != sender && !vc->link_down) {
-            vc->receive(vc, buf, size);
+        ssize_t len;
+
+        if (vc == sender) {
+            continue;
+        }
+
+        if (vc->link_down) {
+            ret = size;
+            continue;
         }
+
+        len = vc->receive(vc, buf, size);
+
+        ret = (ret >= 0) ? ret : len;
     }
+
+    return ret;
 }
 
 void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size)