Repair vlib API socket server

- Teach vpp_api_test to send/receive API messages over sockets
- Add memfd-based shared memory
- Add api messages to create memfd-based shared memory segments
- vpp_api_test supports both socket and shared memory segment connections
- vpp_api_test pivot from socket to shared memory API messaging
- add socket client support to libvlibclient.so
- dead client reaper sends ping messages, container-friendly
- dead client reaper falls back to kill (<pid>, 0) live checking
  if e.g. a python app goes silent for tens of seconds
- handle ping messages in python client support code
- teach show api ring about pairwise shared-memory segments
- fix ip probing of already resolved destinations (VPP-998)

We'll need this work to implement proper host-stack client isolation

Change-Id: Ic23b65f75c854d0393d9a2e9d6b122a9551be769
Signed-off-by: Dave Barach <dave@barachs.net>
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Signed-off-by: Florin Coras <fcoras@cisco.com>
diff --git a/src/vppinfra/elog.h b/src/vppinfra/elog.h
index 05085b2..d50c9a6 100644
--- a/src/vppinfra/elog.h
+++ b/src/vppinfra/elog.h
@@ -525,12 +525,12 @@
 
 #ifdef CLIB_UNIX
 always_inline clib_error_t *
-elog_write_file (elog_main_t * em, char *unix_file, int flush_ring)
+elog_write_file (elog_main_t * em, char *clib_file, int flush_ring)
 {
   serialize_main_t m;
   clib_error_t *error;
 
-  error = serialize_open_unix_file (&m, unix_file);
+  error = serialize_open_clib_file (&m, clib_file);
   if (error)
     return error;
   error = serialize (&m, serialize_elog_main, em, flush_ring);
@@ -540,12 +540,12 @@
 }
 
 always_inline clib_error_t *
-elog_read_file (elog_main_t * em, char *unix_file)
+elog_read_file (elog_main_t * em, char *clib_file)
 {
   serialize_main_t m;
   clib_error_t *error;
 
-  error = unserialize_open_unix_file (&m, unix_file);
+  error = unserialize_open_clib_file (&m, clib_file);
   if (error)
     return error;
   error = unserialize (&m, unserialize_elog_main, em);
diff --git a/src/vppinfra/file.h b/src/vppinfra/file.h
index 69facea..6ebf512 100644
--- a/src/vppinfra/file.h
+++ b/src/vppinfra/file.h
@@ -68,7 +68,7 @@
   UNIX_FILE_UPDATE_ADD,
   UNIX_FILE_UPDATE_MODIFY,
   UNIX_FILE_UPDATE_DELETE,
-} unix_file_update_type_t;
+} clib_file_update_type_t;
 
 typedef struct
 {
@@ -76,7 +76,7 @@
   clib_file_t *file_pool;
 
   void (*file_update) (clib_file_t * file,
-		       unix_file_update_type_t update_type);
+		       clib_file_update_type_t update_type);
 
 } clib_file_main_t;
 
diff --git a/src/vppinfra/format.h b/src/vppinfra/format.h
index 5b7023a..3c4aec9 100644
--- a/src/vppinfra/format.h
+++ b/src/vppinfra/format.h
@@ -305,7 +305,7 @@
 /* Unix specific formats. */
 #ifdef CLIB_UNIX
 /* Setup input from Unix file. */
-void unformat_init_unix_file (unformat_input_t * input, int file_descriptor);
+void unformat_init_clib_file (unformat_input_t * input, int file_descriptor);
 
 /* Take input from Unix environment variable; returns
    1 if variable exists zero otherwise. */
diff --git a/src/vppinfra/serialize.c b/src/vppinfra/serialize.c
index 5d401a0..fe2146a 100644
--- a/src/vppinfra/serialize.c
+++ b/src/vppinfra/serialize.c
@@ -1147,7 +1147,7 @@
 #include <fcntl.h>
 
 static void
-unix_file_write (serialize_main_header_t * m, serialize_stream_t * s)
+clib_file_write (serialize_main_header_t * m, serialize_stream_t * s)
 {
   int fd, n;
 
@@ -1168,7 +1168,7 @@
 }
 
 static void
-unix_file_read (serialize_main_header_t * m, serialize_stream_t * s)
+clib_file_read (serialize_main_header_t * m, serialize_stream_t * s)
 {
   int fd, n;
 
@@ -1188,7 +1188,7 @@
 }
 
 static void
-serialize_open_unix_file_descriptor_helper (serialize_main_t * m, int fd,
+serialize_open_clib_file_descriptor_helper (serialize_main_t * m, int fd,
 					    uword is_read)
 {
   memset (m, 0, sizeof (m[0]));
@@ -1200,24 +1200,24 @@
       _vec_len (m->stream.buffer) = 0;
     }
 
-  m->header.data_function = is_read ? unix_file_read : unix_file_write;
+  m->header.data_function = is_read ? clib_file_read : clib_file_write;
   m->stream.data_function_opaque = fd;
 }
 
 void
-serialize_open_unix_file_descriptor (serialize_main_t * m, int fd)
+serialize_open_clib_file_descriptor (serialize_main_t * m, int fd)
 {
-  serialize_open_unix_file_descriptor_helper (m, fd, /* is_read */ 0);
+  serialize_open_clib_file_descriptor_helper (m, fd, /* is_read */ 0);
 }
 
 void
-unserialize_open_unix_file_descriptor (serialize_main_t * m, int fd)
+unserialize_open_clib_file_descriptor (serialize_main_t * m, int fd)
 {
-  serialize_open_unix_file_descriptor_helper (m, fd, /* is_read */ 1);
+  serialize_open_clib_file_descriptor_helper (m, fd, /* is_read */ 1);
 }
 
 static clib_error_t *
-serialize_open_unix_file_helper (serialize_main_t * m, char *file,
+serialize_open_clib_file_helper (serialize_main_t * m, char *file,
 				 uword is_read)
 {
   int fd, mode;
@@ -1227,20 +1227,20 @@
   if (fd < 0)
     return clib_error_return_unix (0, "open `%s'", file);
 
-  serialize_open_unix_file_descriptor_helper (m, fd, is_read);
+  serialize_open_clib_file_descriptor_helper (m, fd, is_read);
   return 0;
 }
 
 clib_error_t *
-serialize_open_unix_file (serialize_main_t * m, char *file)
+serialize_open_clib_file (serialize_main_t * m, char *file)
 {
-  return serialize_open_unix_file_helper (m, file, /* is_read */ 0);
+  return serialize_open_clib_file_helper (m, file, /* is_read */ 0);
 }
 
 clib_error_t *
-unserialize_open_unix_file (serialize_main_t * m, char *file)
+unserialize_open_clib_file (serialize_main_t * m, char *file)
 {
-  return serialize_open_unix_file_helper (m, file, /* is_read */ 1);
+  return serialize_open_clib_file_helper (m, file, /* is_read */ 1);
 }
 
 #endif /* CLIB_UNIX */
diff --git a/src/vppinfra/serialize.h b/src/vppinfra/serialize.h
index 6cc2372..90d615f 100644
--- a/src/vppinfra/serialize.h
+++ b/src/vppinfra/serialize.h
@@ -416,11 +416,11 @@
 void unserialize_open_vector (serialize_main_t * m, u8 * vector);
 
 #ifdef CLIB_UNIX
-clib_error_t *serialize_open_unix_file (serialize_main_t * m, char *file);
-clib_error_t *unserialize_open_unix_file (serialize_main_t * m, char *file);
+clib_error_t *serialize_open_clib_file (serialize_main_t * m, char *file);
+clib_error_t *unserialize_open_clib_file (serialize_main_t * m, char *file);
 
-void serialize_open_unix_file_descriptor (serialize_main_t * m, int fd);
-void unserialize_open_unix_file_descriptor (serialize_main_t * m, int fd);
+void serialize_open_clib_file_descriptor (serialize_main_t * m, int fd);
+void unserialize_open_clib_file_descriptor (serialize_main_t * m, int fd);
 #endif /* CLIB_UNIX */
 
 /* Main routines. */
diff --git a/src/vppinfra/test_serialize.c b/src/vppinfra/test_serialize.c
index e00eec3..6351b05 100644
--- a/src/vppinfra/test_serialize.c
+++ b/src/vppinfra/test_serialize.c
@@ -184,7 +184,7 @@
 
 #ifdef CLIB_UNIX
   if (tm->dump_file)
-    serialize_open_unix_file (sm, tm->dump_file);
+    serialize_open_clib_file (sm, tm->dump_file);
   else
 #endif
     serialize_open_vector (sm, 0);
@@ -217,7 +217,7 @@
 #ifdef CLIB_UNIX
   if (tm->dump_file)
     {
-      if ((error = unserialize_open_unix_file (um, tm->dump_file)))
+      if ((error = unserialize_open_clib_file (um, tm->dump_file)))
 	goto done;
     }
   else
diff --git a/src/vppinfra/time.c b/src/vppinfra/time.c
index 168d737..770ed8b 100644
--- a/src/vppinfra/time.c
+++ b/src/vppinfra/time.c
@@ -91,7 +91,7 @@
   if (fd < 0)
     return cpu_freq;
 
-  unformat_init_unix_file (&input, fd);
+  unformat_init_clib_file (&input, fd);
 
   ppc_timebase = 0;
   while (unformat_check_input (&input) != UNFORMAT_END_OF_INPUT)
@@ -130,7 +130,7 @@
   if (fd < 0)
     goto done;
 
-  unformat_init_unix_file (&input, fd);
+  unformat_init_clib_file (&input, fd);
   unformat (&input, "%f", &cpu_freq);
   cpu_freq *= 1e3;		/* measured in kHz */
   unformat_free (&input);
diff --git a/src/vppinfra/unformat.c b/src/vppinfra/unformat.c
index 5b17562..e30c6d3 100644
--- a/src/vppinfra/unformat.c
+++ b/src/vppinfra/unformat.c
@@ -1037,7 +1037,7 @@
 #ifdef CLIB_UNIX
 
 static uword
-unix_file_fill_buffer (unformat_input_t * input)
+clib_file_fill_buffer (unformat_input_t * input)
 {
   int fd = pointer_to_uword (input->fill_buffer_arg);
   uword l, n;
@@ -1055,9 +1055,9 @@
 }
 
 void
-unformat_init_unix_file (unformat_input_t * input, int file_descriptor)
+unformat_init_clib_file (unformat_input_t * input, int file_descriptor)
 {
-  unformat_init (input, unix_file_fill_buffer,
+  unformat_init (input, clib_file_fill_buffer,
 		 uword_to_pointer (file_descriptor, void *));
 }
 
diff --git a/src/vppinfra/unix-misc.c b/src/vppinfra/unix-misc.c
index 361015b..f693102 100644
--- a/src/vppinfra/unix-misc.c
+++ b/src/vppinfra/unix-misc.c
@@ -48,7 +48,7 @@
 __thread uword __os_thread_index = 0;
 
 clib_error_t *
-unix_file_n_bytes (char *file, uword * result)
+clib_file_n_bytes (char *file, uword * result)
 {
   struct stat s;
 
@@ -64,7 +64,7 @@
 }
 
 clib_error_t *
-unix_file_read_contents (char *file, u8 * result, uword n_bytes)
+clib_file_read_contents (char *file, u8 * result, uword n_bytes)
 {
   int fd = -1;
   uword n_done, n_left;
@@ -108,19 +108,19 @@
 }
 
 clib_error_t *
-unix_file_contents (char *file, u8 ** result)
+clib_file_contents (char *file, u8 ** result)
 {
   uword n_bytes;
   clib_error_t *error = 0;
   u8 *v;
 
-  if ((error = unix_file_n_bytes (file, &n_bytes)))
+  if ((error = clib_file_n_bytes (file, &n_bytes)))
     return error;
 
   v = 0;
   vec_resize (v, n_bytes);
 
-  error = unix_file_read_contents (file, v, n_bytes);
+  error = clib_file_read_contents (file, v, n_bytes);
 
   if (error)
     vec_free (v);
diff --git a/src/vppinfra/unix.h b/src/vppinfra/unix.h
index 29114cf..5b82c23 100644
--- a/src/vppinfra/unix.h
+++ b/src/vppinfra/unix.h
@@ -41,14 +41,14 @@
 #include <vppinfra/error.h>
 
 /* Number of bytes in a Unix file. */
-clib_error_t *unix_file_n_bytes (char *file, uword * result);
+clib_error_t *clib_file_n_bytes (char *file, uword * result);
 
 /* Read file contents into given buffer. */
-clib_error_t *unix_file_read_contents (char *file, u8 * result,
+clib_error_t *clib_file_read_contents (char *file, u8 * result,
 				       uword n_bytes);
 
 /* Read and return contents of Unix file. */
-clib_error_t *unix_file_contents (char *file, u8 ** result);
+clib_error_t *clib_file_contents (char *file, u8 ** result);
 
 /* As above but for /proc file system on Linux. */
 clib_error_t *unix_proc_file_contents (char *file, u8 ** result);