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