vlib: add option to plugin registration to prefer deep binding

Type: improvement
Change-Id: I9ce7e1ee7e7afe8e9befe36ae8c59291beaaaf36
Signed-off-by: Damjan Marion <damarion@cisco.com>
diff --git a/src/vlib/unix/plugin.c b/src/vlib/unix/plugin.c
index a714c7c..4a7ff27 100644
--- a/src/vlib/unix/plugin.c
+++ b/src/vlib/unix/plugin.c
@@ -304,7 +304,8 @@
     }
   vec_free (version_required);
 
-  handle = dlopen ((char *) pi->filename, RTLD_LAZY);
+  handle = dlopen ((char *) pi->filename,
+		   RTLD_LAZY | (reg->deep_bind ? RTLD_DEEPBIND : 0));
 
   if (handle == 0)
     {
diff --git a/src/vlib/unix/plugin.h b/src/vlib/unix/plugin.h
index ae15e5d..e3555fe 100644
--- a/src/vlib/unix/plugin.h
+++ b/src/vlib/unix/plugin.h
@@ -56,16 +56,16 @@
  * vlib_load_new_plugins().
  */
 
-/* *INDENT-OFF* */
-typedef CLIB_PACKED(struct {
-  u8 default_disabled;
+typedef struct
+{
+  u8 default_disabled : 1;
+  u8 deep_bind : 1;
   const char version[32];
   const char version_required[32];
   const char overrides[256];
   const char *early_init;
   const char *description;
-}) vlib_plugin_registration_t;
-/* *INDENT-ON* */
+} __clib_packed vlib_plugin_registration_t;
 
 /*
  * Plugins may also use this registration format, which is