diff options
-rw-r--r-- | src/connman.h | 2 | ||||
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | src/plugin.c | 9 |
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> @@ -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); } |