X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-pltap.c;h=1875c0e58ba38394a383987cc95ca17a9e2077ea;hb=90b4feffb9a9031775b949090db6c1c3f963779a;hp=04e68bad30d2b453d45a5c5d9d3a545961d48840;hpb=5689b76e77dafa01d849aad0edf65d46f5d62c50;p=sliver-openvswitch.git diff --git a/lib/netdev-pltap.c b/lib/netdev-pltap.c index 04e68bad3..1875c0e58 100644 --- a/lib/netdev-pltap.c +++ b/lib/netdev-pltap.c @@ -514,23 +514,24 @@ netdev_pltap_rx_recv(struct netdev_rx *rx_, struct ofpbuf *buffer) struct tun_pi pi; struct iovec iov[2] = { { .iov_base = &pi, .iov_len = sizeof(pi) }, - { .iov_base = buffer->data, .iov_len = size } + { .iov_base = buffer->data, .iov_len = size } }; for (;;) { ssize_t retval; retval = readv(rx->fd, iov, 2); if (retval >= 0) { if (retval <= size) { - return retval; + buffer->size += retval; + return 0; } else { - return -EMSGSIZE; + return EMSGSIZE; } } else if (errno != EINTR) { if (errno != EAGAIN) { VLOG_WARN_RL(&rl, "error receiveing Ethernet packet on %s: %s", netdev_rx_get_name(rx_), ovs_strerror(errno)); } - return -errno; + return errno; } } }