summaryrefslogtreecommitdiffstats
path: root/extras/libmemif/src/libmemif.h
diff options
context:
space:
mode:
authorJakub Grajciar <jgrajcia@cisco.com>2019-07-31 14:40:52 +0200
committerDamjan Marion <dmarion@me.com>2019-08-21 14:45:43 +0000
commit17f2a7bbf25f54dbd71aa8f377875828b7b88e35 (patch)
treeab88f5d0759bfe703c818a40ea46d0e52b28783d /extras/libmemif/src/libmemif.h
parentb6103105f99e0c7f210a9596f205a1efd21b626f (diff)
libmemif: introduce 'memif_per_thread_' namespace
APIs in 'memif_per_thread_' namespace are used to split the global database into separate databases, to improve multi-thread use cases. Using 'memif_per_thread_init' client can create separate libmemif databases (libmemif_main_t). Client will reference these databases using memif_per_thread_handle_t. Each database requires unique socket. Created interface will be stored in the same database as the socket passed in connection arguments. Example code: extras/libmemif/examples/icmp_responder_3-1/main.c Type: feature Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: I261563ecc34761a76e94f20c20015394398ddfd7 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Diffstat (limited to 'extras/libmemif/src/libmemif.h')
-rw-r--r--extras/libmemif/src/libmemif.h136
1 files changed, 132 insertions, 4 deletions
diff --git a/extras/libmemif/src/libmemif.h b/extras/libmemif/src/libmemif.h
index cdbf04aea0d..609b98a7ba4 100644
--- a/extras/libmemif/src/libmemif.h
+++ b/extras/libmemif/src/libmemif.h
@@ -23,7 +23,7 @@
#define _LIBMEMIF_H_
/** Libmemif version. */
-#define LIBMEMIF_VERSION "3.0"
+#define LIBMEMIF_VERSION "3.1"
/** Default name of application using libmemif. */
#define MEMIF_DEFAULT_APP_NAME "libmemif-app"
@@ -96,6 +96,12 @@ typedef enum
#define MEMIF_FD_EVENT_MOD (1 << 4)
/** @} */
+/** \brief Memif per thread main handle
+ Pointer of type void, pointing to internal structure.
+ Used to identify internal per thread database.
+*/
+typedef void *memif_per_thread_main_handle_t;
+
/** \brief Memif connection handle
pointer of type void, pointing to internal structure
*/
@@ -227,6 +233,24 @@ void memif_register_external_region (memif_add_external_region_t * ar,
memif_del_external_region_t * dr,
memif_get_external_buffer_offset_t * go);
+/** \brief Register external region
+ @param pt_main - per thread main handle
+ @param ar - add external region callback
+ @param gr - get external region addr callback
+ @param dr - delete external region callback
+ @param go - get external buffer offset callback (optional)
+*/
+void memif_per_thread_register_external_region (memif_per_thread_main_handle_t
+ pt_main,
+ memif_add_external_region_t *
+ ar,
+ memif_get_external_region_addr_t
+ * gr,
+ memif_del_external_region_t *
+ dr,
+ memif_get_external_buffer_offset_t
+ * go);
+
/** @} */
/**
@@ -246,7 +270,11 @@ typedef enum
#endif /* _MEMIF_H_ */
/** \brief Memif connection arguments
- @param socket - memif socket handle, if NULL default socket will be used
+ @param socket - Memif socket handle, if NULL default socket will be used.
+ Default socket is only supported in global database (see memif_init).
+ Custom database does not create a default socket
+ (see memif_per_thread_init).
+ Memif connection is stored in the same database as the socket.
@param secret - otional parameter used as interface autenthication
@param num_s2m_rings - number of slave to master rings
@param num_m2s_rings - number of master to slave rings
@@ -465,6 +493,28 @@ int memif_init (memif_control_fd_update_t * on_control_fd_update,
char *app_name, memif_alloc_t * memif_alloc,
memif_realloc_t * memif_realloc, memif_free_t * memif_free);
+/** \brief Memif per thread initialization
+ @param pt_main - per thread main handle
+ @param private_ctx - private context
+ @param on_control_fd_update - if control fd updates inform user to watch new fd
+ @param app_name - application name (will be truncated to 32 chars)
+ @param memif_alloc - cutom memory allocator, NULL = default
+ @param memif_realloc - custom memory reallocation, NULL = default
+ @param memif_free - custom memory free, NULL = default
+
+ Per thread version of memif_init ().
+ Instead of using global database, creates and initializes unique database,
+ identified by 'memif_per_thread_main_handle_t'.
+
+ \return memif_err_t
+*/
+int memif_per_thread_init (memif_per_thread_main_handle_t * pt_main,
+ void *private_ctx,
+ memif_control_fd_update_t * on_control_fd_update,
+ char *app_name, memif_alloc_t * memif_alloc,
+ memif_realloc_t * memif_realloc,
+ memif_free_t * memif_free);
+
/** \brief Memif cleanup
Free libmemif internal allocations.
@@ -473,6 +523,15 @@ int memif_init (memif_control_fd_update_t * on_control_fd_update,
*/
int memif_cleanup ();
+/** \brief Memif per thread cleanup
+ @param pt_main - per thread main handle
+
+ Free libmemif internal allocations and sets the handle to NULL.
+
+ \return memif_err_t
+*/
+int memif_per_thread_cleanup (memif_per_thread_main_handle_t * pt_main);
+
/** \brief Memory interface create function
@param conn - connection handle for client app
@param args - memory interface connection arguments
@@ -521,6 +580,19 @@ int memif_create (memif_conn_handle_t * conn, memif_conn_args_t * args,
*/
int memif_control_fd_handler (int fd, uint8_t events);
+/** \brief Memif per thread control file descriptor handler
+ @param pt_main - per thread main handle
+ @param fd - file descriptor on which the event occured
+ @param events - event type(s) that occured
+
+ Per thread version of memif_control_fd_handler.
+
+ \return memif_err_t
+
+*/
+int memif_per_thread_control_fd_handler (memif_per_thread_main_handle_t
+ pt_main, int fd, uint8_t events);
+
/** \brief Memif delete
@param conn - pointer to memif connection handle
@@ -608,6 +680,17 @@ int memif_rx_burst (memif_conn_handle_t conn, uint16_t qid,
*/
int memif_poll_event (int timeout);
+/** \brief Memif poll event
+ @param pt_main - per thread main handle
+ @param timeout - timeout in seconds
+
+ Per thread version of memif_poll_event.
+
+ \return memif_err_t
+*/
+int memif_per_thread_poll_event (memif_per_thread_main_handle_t pt_main,
+ int timeout);
+
/** \brief Send signal to stop concurrently running memif_poll_event().
The function, however, does not wait for memif_poll_event() to stop.
@@ -622,6 +705,15 @@ int memif_poll_event (int timeout);
*/
#define MEMIF_HAVE_CANCEL_POLL_EVENT 1
int memif_cancel_poll_event ();
+/** \brief Send signal to stop concurrently running memif_poll_event().
+ @param pt_main - per thread main handle
+
+ Per thread version of memif_cancel_poll_event.
+
+ \return memif_err_t
+*/
+int memif_per_thread_cancel_poll_event (memif_per_thread_main_handle_t
+ pt_main);
/** \brief Set connection request timer value
@param timer - new timer value
@@ -633,6 +725,19 @@ int memif_cancel_poll_event ();
*/
int memif_set_connection_request_timer (struct itimerspec timer);
+/** \brief Set connection request timer value
+ @param pt_main - per thread main handle
+ @param timer - new timer value
+
+ Per thread version of memif_set_connection_request_timer
+
+ \return memif_err_t
+*/
+int
+memif_per_thread_set_connection_request_timer (memif_per_thread_main_handle_t
+ pt_main,
+ struct itimerspec timer);
+
/** \brief Send connection request
@param conn - memif connection handle
@@ -656,8 +761,22 @@ int memif_request_connection (memif_conn_handle_t conn);
\return memif_err_t
*/
-int memif_create_socket (memif_socket_handle_t * sock, const char * filename,
- void * private_ctx);
+int memif_create_socket (memif_socket_handle_t * sock, const char *filename,
+ void *private_ctx);
+
+/** \brief Create memif socket
+ @param pt_main - per thread main handle
+ @param sock - socket handle for client app
+ @param filename - path to socket file
+ @param private_ctx - private context
+
+ Per thread version of memif_create_sopcket.
+
+ \return memif_err_t
+*/
+int memif_per_thread_create_socket (memif_per_thread_main_handle_t pt_main,
+ memif_socket_handle_t * sock,
+ const char *filename, void *private_ctx);
/** \brief Delete memif socket
@param sock - socket handle for client app
@@ -669,6 +788,15 @@ int memif_create_socket (memif_socket_handle_t * sock, const char * filename,
*/
int memif_delete_socket (memif_socket_handle_t * sock);
+/** \brief Get socket filename
+ @param sock - socket handle for client app
+
+ Return constant pointer to socket filename.
+
+ \return cosnt char *
+*/
+const char *memif_get_socket_filename (memif_socket_handle_t sock);
+
/** @} */
#endif /* _LIBMEMIF_H_ */