X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fnetdev-pltap.c;h=1875c0e58ba38394a383987cc95ca17a9e2077ea;hb=90b4feffb9a9031775b949090db6c1c3f963779a;hp=c8c79896a09ab8a813bcccc516823b03c5be0dca;hpb=77d14d9c7f9ce7245eff56aacd420646577892d0;p=sliver-openvswitch.git diff --git a/lib/netdev-pltap.c b/lib/netdev-pltap.c index c8c79896a..1875c0e58 100644 --- a/lib/netdev-pltap.c +++ b/lib/netdev-pltap.c @@ -153,7 +153,7 @@ netdev_pltap_construct(struct netdev *netdev_) struct netdev_pltap *netdev = netdev_pltap_cast(netdev_); int error; - ovs_mutex_init(&netdev->mutex, PTHREAD_MUTEX_NORMAL); + ovs_mutex_init(&netdev->mutex); netdev->real_name = xzalloc(IFNAMSIZ + 1); memset(&netdev->local_addr, 0, sizeof(netdev->local_addr)); netdev->valid_local_ip = false; @@ -507,29 +507,31 @@ netdev_pltap_set_config(struct netdev *dev_, const struct smap *args) } static int -netdev_pltap_rx_recv(struct netdev_rx *rx_, void *buffer, size_t size) +netdev_pltap_rx_recv(struct netdev_rx *rx_, struct ofpbuf *buffer) { + size_t size = ofpbuf_tailroom(buffer); struct netdev_rx_pltap *rx = netdev_rx_pltap_cast(rx_); struct tun_pi pi; struct iovec iov[2] = { { .iov_base = &pi, .iov_len = sizeof(pi) }, - { .iov_base = buffer, .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; } } } @@ -562,7 +564,7 @@ netdev_pltap_send(struct netdev *netdev_, const void *buffer, size_t size) retval = writev(dev->fd, iov, 2); if (retval >= 0) { if (retval != size + 4) { - VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%zd bytes of %zu) on %s", + VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%"PRIdSIZE" bytes of %"PRIuSIZE") on %s", retval, size + 4, netdev_get_name(netdev_)); } return 0; @@ -847,7 +849,9 @@ const struct netdev_class netdev_pltap_class = { NULL, /* set_queue */ NULL, /* delete_queue */ NULL, /* get_queue_stats */ - NULL, /* dump_queues */ + NULL, /* queue_dump_start */ + NULL, /* queue_dump_next */ + NULL, /* queue_dump_done */ NULL, /* dump_queue_stats */ NULL, /* get_in4 */ @@ -860,8 +864,6 @@ const struct netdev_class netdev_pltap_class = { netdev_pltap_update_flags, - netdev_pltap_change_seq, - netdev_pltap_rx_alloc, netdev_pltap_rx_construct, netdev_pltap_rx_destruct,