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>
diff --git a/extras/libmemif/test/socket_test.c b/extras/libmemif/test/socket_test.c
index 589bfd8..2d22938 100644
--- a/extras/libmemif/test/socket_test.c
+++ b/extras/libmemif/test/socket_test.c
@@ -296,7 +296,9 @@
 		   NULL, NULL)) != MEMIF_ERR_SUCCESS)
     ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err));
 
-  if ((err = memif_msg_send_hello (conn.fd)) != MEMIF_ERR_SUCCESS)
+  conn.args.socket = libmemif_main.default_socket;
+
+  if ((err = memif_msg_send_hello (get_libmemif_main (conn.args.socket), conn.fd)) != MEMIF_ERR_SUCCESS)
     ck_assert_msg (err == MEMIF_ERR_BAD_FD,
 		   "err code: %u, err msg: %s", err, memif_strerror (err));
 }
@@ -387,7 +389,7 @@
   memif_list_elt_t elt;
   elt.key = 69;
   elt.data_struct = &conn;
-  add_list_elt (&elt, &ms.interface_list, &ms.interface_list_len);
+  add_list_elt (get_libmemif_main (conn.args.socket), &elt, &ms.interface_list, &ms.interface_list_len);
 
   if ((err =
        memif_init (control_fd_update, TEST_APP_NAME, NULL,