updated to new rx_recv semantics
[sliver-openvswitch.git] / lib / netdev-tunnel.c
index f8eadab..6b54697 100644 (file)
@@ -106,7 +106,7 @@ netdev_tunnel_construct(struct netdev *netdev_)
 
     atomic_add(&next_n, 1, &n);
 
-    ovs_mutex_init(&netdev->mutex, PTHREAD_MUTEX_NORMAL);
+    ovs_mutex_init(&netdev->mutex);
     netdev->hwaddr[0] = 0xfe;
     netdev->hwaddr[1] = 0xff;
     netdev->hwaddr[2] = 0xff;
@@ -264,27 +264,29 @@ netdev_tunnel_rx_dealloc(struct netdev_rx *rx_)
 }
 
 static int
-netdev_tunnel_rx_recv(struct netdev_rx *rx_, void *buffer, size_t size)
+netdev_tunnel_rx_recv(struct netdev_rx *rx_, struct ofpbuf *buffer)
 {
+    size_t size = ofpbuf_tailroom(buffer);
     struct netdev_rx_tunnel *rx = netdev_rx_tunnel_cast(rx_);
     struct netdev_tunnel *netdev =
         netdev_tunnel_cast(rx_->netdev);
     if (!netdev->connected)
-        return -EAGAIN;
+        return EAGAIN;
     for (;;) {
         ssize_t retval;
-        retval = recv(rx->fd, buffer, size, MSG_TRUNC);
-           VLOG_DBG("%s: recv(%"PRIxPTR", %zu, MSG_TRUNC) = %zd",
-                   netdev_rx_get_name(rx_), (uintptr_t)buffer, size, retval);
+        retval = recv(rx->fd, buffer->data, size, MSG_TRUNC);
+           VLOG_DBG("%s: recv(%"PRIxPTR", %"PRIuSIZE", MSG_TRUNC) = %"PRIdSIZE,
+                   netdev_rx_get_name(rx_), (uintptr_t)buffer->data, size, retval);
         if (retval >= 0) {
-           netdev->stats.rx_packets++;
-           netdev->stats.rx_bytes += retval;
+               netdev->stats.rx_packets++;
+               netdev->stats.rx_bytes += retval;
             if (retval <= size) {
-                   return retval;
+                buffer->size += retval;
+                   return 0;
             } else {
                 netdev->stats.rx_errors++;
                 netdev->stats.rx_length_errors++;
-                return -EMSGSIZE;
+                return EMSGSIZE;
             }
         } else if (errno != EINTR) {
             if (errno != EAGAIN) {
@@ -292,7 +294,7 @@ netdev_tunnel_rx_recv(struct netdev_rx *rx_, void *buffer, size_t size)
                     netdev_rx_get_name(rx_), ovs_strerror(errno));
                    netdev->stats.rx_errors++;
             }
-            return -errno;
+            return errno;
         }
     }
 }
@@ -317,14 +319,14 @@ netdev_tunnel_send(struct netdev *netdev_, const void *buffer, size_t size)
     for (;;) {
         ssize_t retval;
         retval = send(dev->sockfd, buffer, size, 0);
-       VLOG_DBG("%s: send(%"PRIxPTR", %zu) = %zd",
+       VLOG_DBG("%s: send(%"PRIxPTR", %"PRIuSIZE") = %"PRIdSIZE,
                 netdev_get_name(netdev_), (uintptr_t)buffer, size, retval);
         if (retval >= 0) {
            dev->stats.tx_packets++;
            dev->stats.tx_bytes += retval;
            if (retval != size) {
-               VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%zd bytes of "
-                            "%zu) on %s", retval, size, netdev_get_name(netdev_));
+               VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%"PRIdSIZE" bytes of "
+                            "%"PRIuSIZE") on %s", retval, size, netdev_get_name(netdev_));
                dev->stats.tx_errors++;
            }
             return 0;
@@ -604,7 +606,9 @@ const struct netdev_class netdev_tunnel_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 */
@@ -612,13 +616,11 @@ const struct netdev_class netdev_tunnel_class = {
     NULL,                       /* get_in6 */
     NULL,                       /* add_router */
     NULL,                       /* get_next_hop */
-    NULL,                       /* get_drv_info */
+    NULL,                       /* get_status */
     NULL,                       /* arp_lookup */
 
     netdev_tunnel_update_flags,
 
-    netdev_tunnel_change_seq,
-
     netdev_tunnel_rx_alloc,
     netdev_tunnel_rx_construct,
     netdev_tunnel_rx_destruct,