From ff6b8aa4f13b9ffbc27c17243769bb6fe1b4ab72 Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser <kaspar@schleiser.de> Date: Thu, 11 Jan 2018 23:48:57 +0100 Subject: [PATCH] cpu/native/netdev_tap: adapt to netdev with iolist --- Makefile.dep | 1 + cpu/native/netdev_tap/netdev_tap.c | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Makefile.dep b/Makefile.dep index aafc7540b3..eb0e4c67af 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -110,6 +110,7 @@ endif ifneq (,$(filter netdev_tap,$(USEMODULE))) USEMODULE += netif USEMODULE += netdev_eth + USEMODULE += iolist endif ifneq (,$(filter gnrc_tftp,$(USEMODULE))) diff --git a/cpu/native/netdev_tap/netdev_tap.c b/cpu/native/netdev_tap/netdev_tap.c index 1416a77793..2330e64f4f 100644 --- a/cpu/native/netdev_tap/netdev_tap.c +++ b/cpu/native/netdev_tap/netdev_tap.c @@ -26,6 +26,7 @@ #include <stdlib.h> #include <string.h> #include <sys/ioctl.h> +#include <sys/uio.h> #include <unistd.h> /* needs to be included before native's declarations of ntohl etc. */ @@ -51,6 +52,7 @@ #include "async_read.h" +#include "iolist.h" #include "net/eui64.h" #include "net/netdev.h" #include "net/netdev/eth.h" @@ -64,7 +66,7 @@ /* netdev interface */ static int _init(netdev_t *netdev); -static int _send(netdev_t *netdev, const struct iovec *vector, unsigned n); +static int _send(netdev_t *netdev, const iolist_t *iolist); static int _recv(netdev_t *netdev, void *buf, size_t n, void *info); static inline void _get_mac_addr(netdev_t *netdev, uint8_t *dst) @@ -273,17 +275,20 @@ static int _recv(netdev_t *netdev, void *buf, size_t len, void *info) return -1; } -static int _send(netdev_t *netdev, const struct iovec *vector, unsigned n) +static int _send(netdev_t *netdev, const iolist_t *iolist) { netdev_tap_t *dev = (netdev_tap_t*)netdev; - int res = _native_writev(dev->tap_fd, vector, n); + + struct iovec iov[iolist_count(iolist)]; + + unsigned n; + size_t bytes = iolist_to_iovec(iolist, iov, &n); + + int res = _native_writev(dev->tap_fd, iov, n); #ifdef MODULE_NETSTATS_L2 - size_t bytes = 0; - for (unsigned i = 0; i < n; i++) { - bytes += vector->iov_len; - vector++; - } netdev->stats.tx_bytes += bytes; +#else + (void)bytes; #endif if (netdev->event_callback) { netdev->event_callback(netdev, NETDEV_EVENT_TX_COMPLETE); -- GitLab