summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/connman.h2
-rw-r--r--src/main.c6
-rw-r--r--src/plugin.c9
3 files changed, 14 insertions, 3 deletions
diff --git a/src/connman.h b/src/connman.h
index b4276a45..0afef062 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -62,7 +62,7 @@ gboolean __connman_debug_enabled(void);
#include <connman/plugin.h>
-int __connman_plugin_init(void);
+int __connman_plugin_init(const char *pattern);
void __connman_plugin_cleanup(void);
#include <connman/security.h>
diff --git a/src/main.c b/src/main.c
index 971359de..b895b1c0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -51,6 +51,7 @@ static void disconnect_callback(DBusConnection *conn, void *user_data)
}
static gchar *option_device = NULL;
+static gchar *option_plugin = NULL;
static gboolean option_detach = TRUE;
static gboolean option_selftest = FALSE;
static gboolean option_compat = FALSE;
@@ -59,6 +60,8 @@ static gboolean option_debug = FALSE;
static GOptionEntry options[] = {
{ "device", 'i', 0, G_OPTION_ARG_STRING, &option_device,
"Specify network device/interface", "DEV" },
+ { "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin,
+ "Specify plugins to load", "NAME" },
{ "nodaemon", 'n', G_OPTION_FLAG_REVERSE,
G_OPTION_ARG_NONE, &option_detach,
"Don't fork daemon to background" },
@@ -163,11 +166,12 @@ int main(int argc, char *argv[])
__connman_rtnl_init();
__connman_udev_init();
- __connman_plugin_init();
+ __connman_plugin_init(option_plugin);
__connman_element_start();
g_free(option_device);
+ g_free(option_plugin);
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sig_term;
diff --git a/src/plugin.c b/src/plugin.c
index 2ebe327f..716eb7cc 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -60,7 +60,7 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
return TRUE;
}
-int __connman_plugin_init(void)
+int __connman_plugin_init(const char *pattern)
{
GDir *dir;
const gchar *file;
@@ -97,6 +97,13 @@ int __connman_plugin_init(void)
continue;
}
+ if (g_pattern_match_simple(pattern,
+ desc->name) == FALSE) {
+ DBG("ignoring %s", desc->description);
+ dlclose(handle);
+ continue;
+ }
+
if (add_plugin(handle, desc) == FALSE)
dlclose(handle);
}