summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vlib/unix/plugin.c3
-rw-r--r--src/vlib/unix/plugin.h10
2 files changed, 7 insertions, 6 deletions
diff --git a/src/vlib/unix/plugin.c b/src/vlib/unix/plugin.c
index a714c7c29ce..4a7ff2753f2 100644
--- a/src/vlib/unix/plugin.c
+++ b/src/vlib/unix/plugin.c
@@ -304,7 +304,8 @@ process_reg:
}
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 ae15e5db973..e3555fe3ba9 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