updated to new rx_recv semantics
[sliver-openvswitch.git] / lib / netdev-pltap.c
index 00181ab..1875c0e 100644 (file)
@@ -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;
@@ -862,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,