summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2021-09-15 15:08:28 +0200
committerDamjan Marion <damarion@cisco.com>2021-09-15 15:15:40 +0200
commitef4ddfa482b9d1d07b44b96a57a0a738bd3aca05 (patch)
treeb973ba74d418be258dc54a990fec9f007e030681
parent764a8780c2ad250b76f289d742d22216d8c0904e (diff)
vlib: add option to plugin registration to prefer deep binding
Type: improvement Change-Id: I9ce7e1ee7e7afe8e9befe36ae8c59291beaaaf36 Signed-off-by: Damjan Marion <damarion@cisco.com>
-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