libmemif: add private header size field 29/11429/2
authorJakub Grajciar <jgrajcia@cisco.com>
Wed, 28 Mar 2018 08:21:05 +0000 (10:21 +0200)
committerDamjan Marion <dmarion.lists@gmail.com>
Wed, 28 Mar 2018 13:35:40 +0000 (13:35 +0000)
Change-Id: I09567c8ee9c92e91918840f80942a005069d9842
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
extras/libmemif/src/libmemif.h
extras/libmemif/src/main.c
extras/libmemif/src/memif.h
extras/libmemif/src/socket.c

index 14c4503..e1f96f9 100644 (file)
@@ -74,6 +74,7 @@ typedef enum
   MEMIF_ERR_UNKNOWN_MSG,       /*!< unknown message type */
   MEMIF_ERR_POLL_CANCEL,       /*!< memif_poll_event() was cancelled */
   MEMIF_ERR_MAX_RING,          /*!< too large ring size */
+  MEMIF_ERR_PRIVHDR,           /*!< private hdrs not supported */
 } memif_err_t;
 
 /**
index f83f710..42bced6 100644 (file)
@@ -54,7 +54,7 @@
 /* private structs and functions */
 #include <memif_private.h>
 
-#define ERRLIST_LEN 38
+#define ERRLIST_LEN 39
 #define MAX_ERRBUF_LEN 256
 
 #if __x86_x64__
@@ -144,7 +144,9 @@ const char *memif_errlist[ERRLIST_LEN] = {  /* MEMIF_ERR_SUCCESS */
   /* MEMIF_ERR_POLL_CANCEL */
   "Memif event polling was canceled.",
   /* MEMIF_ERR_MAX_RING */
-  "Maximum log2 ring size is 15"
+  "Maximum log2 ring size is 15.",
+  /* MEMIF_ERR_PRIVHDR */
+  "Private headers not supported."
 };
 
 #define MEMIF_ERR_UNDEFINED "undefined error"
index 38b5402..3fbce91 100644 (file)
@@ -103,6 +103,7 @@ typedef struct __attribute__ ((packed))
   memif_region_index_t region;
   memif_region_offset_t offset;
   memif_log2_ring_size_t log2_ring_size;
+  uint16_t private_hdr_size;   /* used for private metadata */
 } memif_msg_add_ring_t;
 
 typedef struct __attribute__ ((packed))
index 8f18d89..a471e0b 100644 (file)
@@ -227,6 +227,7 @@ memif_msg_enq_add_ring (memif_connection_t * c, uint8_t index, uint8_t dir)
   ar->region = mq->region;
   ar->log2_ring_size = mq->log2_ring_size;
   ar->flags = (dir == MEMIF_RING_S2M) ? MEMIF_MSG_ADD_RING_FLAG_S2M : 0;
+  ar->private_hdr_size = 0;
 
   e->next = NULL;
   if (c->msg_queue == NULL)
@@ -516,6 +517,9 @@ memif_msg_receive_add_ring (memif_connection_t * c, memif_msg_t * msg, int fd)
   if (fd < 0)
     return MEMIF_ERR_NO_INTFD;
 
+  if (ar->private_hdr_size != 0)
+    return MEMIF_ERR_PRIVHDR;
+
   if (ar->flags & MEMIF_MSG_ADD_RING_FLAG_S2M)
     {
       if (ar->index > MEMIF_MAX_S2M_RING)