tcp: fix single loop prefetch
[vpp.git] / extras / libmemif / src / main.c
index 5645851..1f4672c 100644 (file)
@@ -15,6 +15,7 @@
  *------------------------------------------------------------------
  */
 
+#define _GNU_SOURCE
 #include <stdint.h>
 #include <net/if.h>
 #include <sys/types.h>
@@ -44,6 +45,7 @@
 #include <sys/timerfd.h>
 #include <sys/epoll.h>
 #include <signal.h>
+#include <linux/memfd.h>
 
 /* memif protocol msg, ring and descriptor definitions */
 #include <memif.h>
@@ -686,9 +688,8 @@ memif_create (memif_conn_handle_t * c, memif_conn_args_t * args,
               MEMIF_DEFAULT_SOCKET_FILENAME, sfl);
     }
 
-  if (args->secret)
+  if ((l = strlen ((char *) args->secret)) > 0)
     {
-      l = strlen ((char *) args->secret);
       strncpy ((char *) conn->args.secret, (char *) args->secret, l);
     }
 
@@ -886,7 +887,7 @@ memif_control_fd_handler (int fd, uint8_t events)
 
              sun.sun_family = AF_UNIX;
 
-             strncpy (sun.sun_path, conn->args.socket_filename,
+             strncpy (sun.sun_path, (char*) conn->args.socket_filename,
                       sizeof (sun.sun_path) - 1);
 
              if (connect (sockfd, (struct sockaddr *) &sun,
@@ -1090,7 +1091,7 @@ memif_disconnect_internal (memif_connection_t * c)
 
   if (c->fd > 0)
     {
-      memif_msg_send_disconnect (c->fd, "interface deleted", 0);
+      memif_msg_send_disconnect (c->fd, (uint8_t *) "interface deleted", 0);
       lm->control_fd_update (c->fd, MEMIF_FD_EVENT_DEL);
       close (c->fd);
     }
@@ -1479,13 +1480,11 @@ memif_buffer_enq_tx (memif_conn_handle_t conn, uint16_t qid,
   *count_out = 0;
 
   ring_size = (1 << mq->log2_ring_size);
-  ns = ring->tail - mq->last_tail;
-  mq->last_tail += ns;
   slot = (c->args.is_master) ? ring->tail : ring->head;
   slot += mq->alloc_bufs;
 
   /* can only be called by slave */
-  ns = ring_size - ring->head + mq->alloc_bufs + mq->last_tail;
+  ns = ring_size - (ring->head + mq->alloc_bufs) + ring->tail;
 
   b0 = bufs;
 
@@ -1561,15 +1560,13 @@ memif_buffer_alloc (memif_conn_handle_t conn, uint16_t qid,
   *count_out = 0;
 
   ring_size = (1 << mq->log2_ring_size);
-  ns = ring->tail - mq->last_tail;
-  mq->last_tail += ns;
   slot = (c->args.is_master) ? ring->tail : ring->head;
   slot += mq->alloc_bufs;
 
   if (c->args.is_master)
-    ns = ring->head + mq->alloc_bufs - ring->tail;
+    ns = ring->head - (ring->tail + mq->alloc_bufs);
   else
-    ns = ring_size - ring->head + mq->alloc_bufs + mq->last_tail;
+    ns = ring_size - (ring->head + mq->alloc_bufs) + ring->tail;
 
   while (count && ns)
     {
@@ -1596,7 +1593,6 @@ memif_buffer_alloc (memif_conn_handle_t conn, uint16_t qid,
                  *count_out += 1;
                  mq->alloc_bufs++;
                  ns--;
-                 count--;
 
                  ring->desc[b0->desc_index & mask].flags |=
                    MEMIF_DESC_FLAG_NEXT;
@@ -1694,7 +1690,7 @@ memif_refill_queue (memif_conn_handle_t conn, uint16_t qid, uint16_t count,
 
   if (headroom)
     {
-      slot = (c->args.is_master) ? ring->head : ring->tail;
+      slot = ring->head;
       while (slot < head)
        {
          uint16_t x =
@@ -1882,7 +1878,7 @@ memif_get_details (memif_conn_handle_t conn, memif_details_t * md,
   l1 = strlen ((char *) c->args.interface_name);
   if (l0 + l1 < buflen)
     {
-      md->if_name = strcpy (buf + l0, (char *) c->args.interface_name);
+      md->if_name = (uint8_t *) strcpy (buf + l0, (char *) c->args.interface_name);
       l0 += l1 + 1;
     }
   else
@@ -1891,7 +1887,7 @@ memif_get_details (memif_conn_handle_t conn, memif_details_t * md,
   l1 = strlen ((char *) lm->app_name);
   if (l0 + l1 < buflen)
     {
-      md->inst_name = strcpy (buf + l0, (char *) lm->app_name);
+      md->inst_name = (uint8_t *) strcpy (buf + l0, (char *) lm->app_name);
       l0 += l1 + 1;
     }
   else
@@ -1900,7 +1896,7 @@ memif_get_details (memif_conn_handle_t conn, memif_details_t * md,
   l1 = strlen ((char *) c->remote_if_name);
   if (l0 + l1 < buflen)
     {
-      md->remote_if_name = strcpy (buf + l0, (char *) c->remote_if_name);
+      md->remote_if_name = (uint8_t *) strcpy (buf + l0, (char *) c->remote_if_name);
       l0 += l1 + 1;
     }
   else
@@ -1909,7 +1905,7 @@ memif_get_details (memif_conn_handle_t conn, memif_details_t * md,
   l1 = strlen ((char *) c->remote_name);
   if (l0 + l1 < buflen)
     {
-      md->remote_inst_name = strcpy (buf + l0, (char *) c->remote_name);
+      md->remote_inst_name = (uint8_t *) strcpy (buf + l0, (char *) c->remote_name);
       l0 += l1 + 1;
     }
   else
@@ -1917,12 +1913,12 @@ memif_get_details (memif_conn_handle_t conn, memif_details_t * md,
 
   md->id = c->args.interface_id;
 
-  if (c->args.secret)
+  if (strlen((char *) c->args.secret) > 0)
     {
       l1 = strlen ((char *) c->args.secret);
       if (l0 + l1 < buflen)
        {
-         md->secret = strcpy (buf + l0, (char *) c->args.secret);
+         md->secret = (uint8_t *) strcpy (buf + l0, (char *) c->args.secret);
          l0 += l1 + 1;
        }
       else
@@ -1936,7 +1932,7 @@ memif_get_details (memif_conn_handle_t conn, memif_details_t * md,
   if (l0 + l1 < buflen)
     {
       md->socket_filename =
-       strcpy (buf + l0, (char *) c->args.socket_filename);
+       (uint8_t *) strcpy (buf + l0, (char *) c->args.socket_filename);
       l0 += l1 + 1;
     }
   else