qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Mark McLoughlin <markmc@redhat.com>
To: qemu-devel@nongnu.org
Cc: Mark McLoughlin <markmc@redhat.com>
Subject: [Qemu-devel] [PATCH 09/19] net: add flags parameter to packet queue interface
Date: Wed, 21 Oct 2009 12:27:48 +0100	[thread overview]
Message-ID: <1256124478-2988-10-git-send-email-markmc@redhat.com> (raw)
In-Reply-To: <1256124478-2988-1-git-send-email-markmc@redhat.com>

This allows for the addition of a raw flag, and leaves the way open
for other flags too.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
---
 net-queue.c |   26 ++++++++++++++++++--------
 net-queue.h |    6 ++++++
 net.c       |   14 ++++++++++++--
 3 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/net-queue.c b/net-queue.c
index 75457f0..f6b01e9 100644
--- a/net-queue.c
+++ b/net-queue.c
@@ -41,6 +41,7 @@
 struct NetPacket {
     QTAILQ_ENTRY(NetPacket) entry;
     VLANClientState *sender;
+    unsigned flags;
     int size;
     NetPacketSent *sent_cb;
     uint8_t data[0];
@@ -89,6 +90,7 @@ void qemu_del_net_queue(NetQueue *queue)
 
 static ssize_t qemu_net_queue_append(NetQueue *queue,
                                      VLANClientState *sender,
+                                     unsigned flags,
                                      const uint8_t *buf,
                                      size_t size,
                                      NetPacketSent *sent_cb)
@@ -97,6 +99,7 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
 
     packet = qemu_malloc(sizeof(NetPacket) + size);
     packet->sender = sender;
+    packet->flags = flags;
     packet->size = size;
     packet->sent_cb = sent_cb;
     memcpy(packet->data, buf, size);
@@ -108,6 +111,7 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
 
 static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
                                          VLANClientState *sender,
+                                         unsigned flags,
                                          const struct iovec *iov,
                                          int iovcnt,
                                          NetPacketSent *sent_cb)
@@ -123,6 +127,7 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
     packet = qemu_malloc(sizeof(NetPacket) + max_len);
     packet->sender = sender;
     packet->sent_cb = sent_cb;
+    packet->flags = flags;
     packet->size = 0;
 
     for (i = 0; i < iovcnt; i++) {
@@ -139,13 +144,14 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
 
 static ssize_t qemu_net_queue_deliver(NetQueue *queue,
                                       VLANClientState *sender,
+                                      unsigned flags,
                                       const uint8_t *data,
                                       size_t size)
 {
     ssize_t ret = -1;
 
     queue->delivering = 1;
-    ret = queue->deliver(sender, data, size, queue->opaque);
+    ret = queue->deliver(sender, flags, data, size, queue->opaque);
     queue->delivering = 0;
 
     return ret;
@@ -153,13 +159,14 @@ static ssize_t qemu_net_queue_deliver(NetQueue *queue,
 
 static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
                                           VLANClientState *sender,
+                                          unsigned flags,
                                           const struct iovec *iov,
                                           int iovcnt)
 {
     ssize_t ret = -1;
 
     queue->delivering = 1;
-    ret = queue->deliver_iov(sender, iov, iovcnt, queue->opaque);
+    ret = queue->deliver_iov(sender, flags, iov, iovcnt, queue->opaque);
     queue->delivering = 0;
 
     return ret;
@@ -167,6 +174,7 @@ static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
 
 ssize_t qemu_net_queue_send(NetQueue *queue,
                             VLANClientState *sender,
+                            unsigned flags,
                             const uint8_t *data,
                             size_t size,
                             NetPacketSent *sent_cb)
@@ -174,12 +182,12 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
     ssize_t ret;
 
     if (queue->delivering) {
-        return qemu_net_queue_append(queue, sender, data, size, NULL);
+        return qemu_net_queue_append(queue, sender, flags, data, size, NULL);
     }
 
-    ret = qemu_net_queue_deliver(queue, sender, data, size);
+    ret = qemu_net_queue_deliver(queue, sender, flags, data, size);
     if (ret == 0 && sent_cb != NULL) {
-        qemu_net_queue_append(queue, sender, data, size, sent_cb);
+        qemu_net_queue_append(queue, sender, flags, data, size, sent_cb);
         return 0;
     }
 
@@ -190,6 +198,7 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
 
 ssize_t qemu_net_queue_send_iov(NetQueue *queue,
                                 VLANClientState *sender,
+                                unsigned flags,
                                 const struct iovec *iov,
                                 int iovcnt,
                                 NetPacketSent *sent_cb)
@@ -197,12 +206,12 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue,
     ssize_t ret;
 
     if (queue->delivering) {
-        return qemu_net_queue_append_iov(queue, sender, iov, iovcnt, NULL);
+        return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, NULL);
     }
 
-    ret = qemu_net_queue_deliver_iov(queue, sender, iov, iovcnt);
+    ret = qemu_net_queue_deliver_iov(queue, sender, flags, iov, iovcnt);
     if (ret == 0 && sent_cb != NULL) {
-        qemu_net_queue_append_iov(queue, sender, iov, iovcnt, sent_cb);
+        qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, sent_cb);
         return 0;
     }
 
@@ -234,6 +243,7 @@ void qemu_net_queue_flush(NetQueue *queue)
 
         ret = qemu_net_queue_deliver(queue,
                                      packet->sender,
+                                     packet->flags,
                                      packet->data,
                                      packet->size);
         if (ret == 0 && packet->sent_cb != NULL) {
diff --git a/net-queue.h b/net-queue.h
index ea17df6..343760e 100644
--- a/net-queue.h
+++ b/net-queue.h
@@ -32,15 +32,19 @@ typedef struct NetQueue NetQueue;
 typedef void (NetPacketSent) (VLANClientState *sender, ssize_t ret);
 
 typedef ssize_t (NetPacketDeliver) (VLANClientState *sender,
+                                    unsigned flags,
                                     const uint8_t *buf,
                                     size_t size,
                                     void *opaque);
 
 typedef ssize_t (NetPacketDeliverIOV) (VLANClientState *sender,
+                                       unsigned flags,
                                        const struct iovec *iov,
                                        int iovcnt,
                                        void *opaque);
 
+#define QEMU_NET_PACKET_FLAG_NONE  0
+
 NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
                              NetPacketDeliverIOV *deliver_iov,
                              void *opaque);
@@ -48,12 +52,14 @@ void qemu_del_net_queue(NetQueue *queue);
 
 ssize_t qemu_net_queue_send(NetQueue *queue,
                             VLANClientState *sender,
+                            unsigned flags,
                             const uint8_t *data,
                             size_t size,
                             NetPacketSent *sent_cb);
 
 ssize_t qemu_net_queue_send_iov(NetQueue *queue,
                                 VLANClientState *sender,
+                                unsigned flags,
                                 const struct iovec *iov,
                                 int iovcnt,
                                 NetPacketSent *sent_cb);
diff --git a/net.c b/net.c
index 56d979b..30dc402 100644
--- a/net.c
+++ b/net.c
@@ -302,10 +302,12 @@ static char *assign_name(VLANClientState *vc1, const char *model)
 }
 
 static ssize_t qemu_deliver_packet(VLANClientState *sender,
+                                   unsigned flags,
                                    const uint8_t *data,
                                    size_t size,
                                    void *opaque);
 static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
+                                       unsigned flags,
                                        const struct iovec *iov,
                                        int iovcnt,
                                        void *opaque);
@@ -450,6 +452,7 @@ int qemu_can_send_packet(VLANClientState *sender)
 }
 
 static ssize_t qemu_deliver_packet(VLANClientState *sender,
+                                   unsigned flags,
                                    const uint8_t *data,
                                    size_t size,
                                    void *opaque)
@@ -464,6 +467,7 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
 }
 
 static ssize_t qemu_vlan_deliver_packet(VLANClientState *sender,
+                                        unsigned flags,
                                         const uint8_t *buf,
                                         size_t size,
                                         void *opaque)
@@ -543,7 +547,9 @@ ssize_t qemu_send_packet_async(VLANClientState *sender,
         queue = sender->vlan->send_queue;
     }
 
-    return qemu_net_queue_send(queue, sender, buf, size, sent_cb);
+    return qemu_net_queue_send(queue, sender,
+                               QEMU_NET_PACKET_FLAG_NONE,
+                               buf, size, sent_cb);
 }
 
 void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size)
@@ -580,6 +586,7 @@ static ssize_t calc_iov_length(const struct iovec *iov, int iovcnt)
 }
 
 static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
+                                       unsigned flags,
                                        const struct iovec *iov,
                                        int iovcnt,
                                        void *opaque)
@@ -598,6 +605,7 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
 }
 
 static ssize_t qemu_vlan_deliver_packet_iov(VLANClientState *sender,
+                                            unsigned flags,
                                             const struct iovec *iov,
                                             int iovcnt,
                                             void *opaque)
@@ -646,7 +654,9 @@ ssize_t qemu_sendv_packet_async(VLANClientState *sender,
         queue = sender->vlan->send_queue;
     }
 
-    return qemu_net_queue_send_iov(queue, sender, iov, iovcnt, sent_cb);
+    return qemu_net_queue_send_iov(queue, sender,
+                                   QEMU_NET_PACKET_FLAG_NONE,
+                                   iov, iovcnt, sent_cb);
 }
 
 ssize_t
-- 
1.6.2.5

  parent reply	other threads:[~2009-10-21 11:30 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-21 11:27 [Qemu-devel] [PATCH 00/19] Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 01/19] net: remove unused includes of if_tun.h and if_tap.h Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 02/19] net: import linux tap ioctl definitions Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 03/19] net: make tap_receive() re-use tap_receive_iov() code Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 04/19] net: enable IFF_VNET_HDR on tap fds if available Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 05/19] net: refactor tap initialization Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 06/19] net: add a vnet_hdr=on|off parameter Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 07/19] net: add a client type code Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 08/19] net: add tap_has_vnet_hdr() and tap_using_vnet_hdr() APIs Mark McLoughlin
2009-10-21 11:27 ` Mark McLoughlin [this message]
2009-10-21 11:27 ` [Qemu-devel] [PATCH 10/19] net: add an API for 'raw' packets Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 11/19] net: add receive_raw parameter to qemu_new_vlan_client() Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 12/19] net: use qemu_send_packet_raw() in qemu_announce_self() Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 13/19] net: implement tap support for receive_raw() Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 14/19] virtio-net: add vnet_hdr support Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 15/19] net: add tap_set_offload() Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 16/19] virtio-net: enable tap offload if guest supports it Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 17/19] Work around dhclient brokenness Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 18/19] Enable UFO on virtio-net and tap devices Mark McLoughlin
2009-10-21 11:27 ` [Qemu-devel] [PATCH 19/19] virtio-net: add tap_has_ufo flag to saved state Mark McLoughlin
  -- strict thread matches above, loose matches on Subject: below --
2009-10-22 16:43 [Qemu-devel] [PATCH 00/19 v2] Add virtio-net/tap support for partial csums and GSO Mark McLoughlin
2009-10-22 16:43 ` [Qemu-devel] [PATCH 09/19] net: add flags parameter to packet queue interface Mark McLoughlin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1256124478-2988-10-git-send-email-markmc@redhat.com \
    --to=markmc@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).