summaryrefslogtreecommitdiffstats
path: root/src/plugins/memif/memif.h
diff options
context:
space:
mode:
authorSteven <sluong@cisco.com>2017-05-30 10:35:51 -0700
committerDave Wallace <dwallacelf@gmail.com>2017-05-31 02:27:45 +0000
commitc2ebcbb89bea719418fc3f896ae3de4302acaf6d (patch)
tree7b035f314305d100c1c1c482887581739d96f987 /src/plugins/memif/memif.h
parent79ea7ec3b3c04d334a21107818c64d70c42b99ae (diff)
memif: multi-queues support
- Add rx-queues and tx-queues option to the create memif CLI - Add vlib_worker_thread_barrier_sync () to memif_conn_fd_read_ready () as the latter function may disconnect the ring and clean up the shared memory. - On transmit, write the rid (queue number) to the socket. - On receive, read the rid and trigger the interrupt for the corresponding thread. Change-Id: If1c7e26c7124174678f047909cbc33e931eaac8c Signed-off-by: Steven <sluong@cisco.com>
Diffstat (limited to 'src/plugins/memif/memif.h')
-rw-r--r--src/plugins/memif/memif.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/plugins/memif/memif.h b/src/plugins/memif/memif.h
index ea5b350173d..56028a25ce9 100644
--- a/src/plugins/memif/memif.h
+++ b/src/plugins/memif/memif.h
@@ -33,7 +33,9 @@ typedef struct
u8 log2_ring_size;
#define MEMIF_DEFAULT_RING_SIZE 1024
u16 num_s2m_rings;
+#define MEMIF_DEFAULT_RX_QUEUES 1
u16 num_m2s_rings;
+#define MEMIF_DEFAULT_TX_QUEUES 1
u16 buffer_size;
#define MEMIF_DEFAULT_BUFFER_SIZE 2048
u32 shared_mem_size;
@@ -126,6 +128,7 @@ typedef struct
u8 num_s2m_rings;
u8 num_m2s_rings;
u16 buffer_size;
+ u32 shared_mem_size;
memif_ring_data_t *ring_data;
@@ -189,6 +192,8 @@ typedef struct
u16 buffer_size;
u8 hw_addr_set;
u8 hw_addr[6];
+ u8 rx_queues;
+ u8 tx_queues;
/* return */
u32 sw_if_index;
@@ -211,6 +216,32 @@ clib_error_t *memif_plugin_api_hookup (vlib_main_t * vm);
#endif
#endif
+static_always_inline u8
+memif_get_rx_queues (memif_if_t * mif)
+{
+ u8 rx_queues;
+
+ if (mif->flags & MEMIF_IF_FLAG_IS_SLAVE)
+ rx_queues = mif->num_m2s_rings;
+ else
+ rx_queues = mif->num_s2m_rings;
+
+ return (rx_queues);
+}
+
+static_always_inline u8
+memif_get_tx_queues (memif_if_t * mif)
+{
+ u8 tx_queues;
+
+ if (mif->flags & MEMIF_IF_FLAG_IS_SLAVE)
+ tx_queues = mif->num_s2m_rings;
+ else
+ tx_queues = mif->num_m2s_rings;
+
+ return (tx_queues);
+}
+
static inline int
memfd_create (const char *name, unsigned int flags)
{