[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 12/13] net: netmap: simplify netmap_receive()
From: |
Jason Wang |
Subject: |
[Qemu-devel] [PULL 12/13] net: netmap: simplify netmap_receive() |
Date: |
Fri, 22 Feb 2019 22:55:19 +0800 |
From: Vincenzo Maffione <address@hidden>
Improve code reuse by implementing netmap_receive() with a call
to netmap_receive_iov().
Signed-off-by: Vincenzo Maffione <address@hidden>
Signed-off-by: Jason Wang <address@hidden>
---
net/netmap.c | 50 +++++++++++---------------------------------------
1 file changed, 11 insertions(+), 39 deletions(-)
diff --git a/net/netmap.c b/net/netmap.c
index 71a8122..852106a 100644
--- a/net/netmap.c
+++ b/net/netmap.c
@@ -154,45 +154,6 @@ static void netmap_writable(void *opaque)
qemu_flush_queued_packets(&s->nc);
}
-static ssize_t netmap_receive(NetClientState *nc,
- const uint8_t *buf, size_t size)
-{
- NetmapState *s = DO_UPCAST(NetmapState, nc, nc);
- struct netmap_ring *ring = s->tx;
- uint32_t i;
- uint32_t idx;
- uint8_t *dst;
-
- if (unlikely(!ring)) {
- /* Drop. */
- return size;
- }
-
- if (unlikely(size > ring->nr_buf_size)) {
- RD(5, "[netmap_receive] drop packet of size %d > %d\n",
- (int)size, ring->nr_buf_size);
- return size;
- }
-
- if (nm_ring_empty(ring)) {
- /* No available slots in the netmap TX ring. */
- netmap_write_poll(s, true);
- return 0;
- }
-
- i = ring->cur;
- idx = ring->slot[i].buf_idx;
- dst = (uint8_t *)NETMAP_BUF(ring, idx);
-
- ring->slot[i].len = size;
- ring->slot[i].flags = 0;
- pkt_copy(buf, dst, size);
- ring->cur = ring->head = nm_ring_next(ring, i);
- ioctl(s->nmd->fd, NIOCTXSYNC, NULL);
-
- return size;
-}
-
static ssize_t netmap_receive_iov(NetClientState *nc,
const struct iovec *iov, int iovcnt)
{
@@ -259,6 +220,17 @@ static ssize_t netmap_receive_iov(NetClientState *nc,
return iov_size(iov, iovcnt);
}
+static ssize_t netmap_receive(NetClientState *nc,
+ const uint8_t *buf, size_t size)
+{
+ struct iovec iov;
+
+ iov.iov_base = (void *)buf;
+ iov.iov_len = size;
+
+ return netmap_receive_iov(nc, &iov, 1);
+}
+
/* Complete a previous send (backend --> guest) and enable the
fd_read callback. */
static void netmap_send_completed(NetClientState *nc, ssize_t len)
--
2.5.0
- [Qemu-devel] [PULL 00/13] Netpatches, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 02/13] net: Introduce announce timer, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 05/13] migration: Switch to using announce timer, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 13/13] net: netmap: improve netmap_receive_iov(), Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 11/13] net: netmap: small improvements netmap_send(), Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 09/13] hmp: Add hmp_announce_self, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 12/13] net: netmap: simplify netmap_receive(),
Jason Wang <=
- [Qemu-devel] [PULL 08/13] qmp: Add announce-self command, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 06/13] net: Add a network device specific self-announcement ability, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 10/13] tests: Add a test for qemu self announcements, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 03/13] migration: Add announce parameters, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 07/13] virtio-net: Allow qemu_announce_self to trigger virtio announcements, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 01/13] net/colo-compare.c: Remove duplicated code, Jason Wang, 2019/02/22
- [Qemu-devel] [PULL 04/13] virtio-net: Switch to using announce timer, Jason Wang, 2019/02/22
- Re: [Qemu-devel] [PULL 00/13] Netpatches, Peter Maydell, 2019/02/26