diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-01-21 21:42:41 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-01-21 21:42:41 +0100 |
commit | 0f02f72a8e871f79c8230b9bc954c9db66dbd34b (patch) | |
tree | c10533a9f38719a569736ccaefdb99db072ef755 | |
parent | ec02283f6e4bcfa2cda224cbc23b398c2862c5d1 (diff) | |
download | connman-0f02f72a8e871f79c8230b9bc954c9db66dbd34b.tar.gz connman-0f02f72a8e871f79c8230b9bc954c9db66dbd34b.tar.bz2 connman-0f02f72a8e871f79c8230b9bc954c9db66dbd34b.zip |
Add extra options to exclude devices and plugins
-rw-r--r-- | src/connman.h | 5 | ||||
-rw-r--r-- | src/element.c | 3 | ||||
-rw-r--r-- | src/main.c | 14 | ||||
-rw-r--r-- | src/plugin.c | 13 |
4 files changed, 27 insertions, 8 deletions
diff --git a/src/connman.h b/src/connman.h index 58f57ff5..42382348 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(const char *pattern); +int __connman_plugin_init(const char *pattern, const char *exclude); void __connman_plugin_cleanup(void); #include <connman/security.h> @@ -100,7 +100,8 @@ void __connman_driver_rescan(struct connman_driver *driver); #include <connman/element.h> -int __connman_element_init(DBusConnection *conn, const char *device); +int __connman_element_init(DBusConnection *conn, const char *device, + const char *nodevice); void __connman_element_start(void); void __connman_element_stop(void); void __connman_element_cleanup(void); diff --git a/src/element.c b/src/element.c index 0a6a0378..2f1aa433 100644 --- a/src/element.c +++ b/src/element.c @@ -1177,7 +1177,8 @@ int connman_element_set_enabled(struct connman_element *element, return 0; } -int __connman_element_init(DBusConnection *conn, const char *device) +int __connman_element_init(DBusConnection *conn, const char *device, + const char *nodevice) { struct connman_element *element; @@ -52,6 +52,8 @@ static void disconnect_callback(DBusConnection *conn, void *user_data) static gchar *option_device = NULL; static gchar *option_plugin = NULL; +static gchar *option_nodevice = NULL; +static gchar *option_noplugin = NULL; static gboolean option_detach = TRUE; static gboolean option_compat = FALSE; static gboolean option_debug = FALSE; @@ -60,9 +62,13 @@ static gboolean option_version = FALSE; static GOptionEntry options[] = { { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device, - "Specify network device/interface", "DEV" }, + "Specify networking device or interface", "DEV" }, + { "nodevice", 'I', 0, G_OPTION_ARG_STRING, &option_nodevice, + "Specify networking interface to ignore", "DEV" }, { "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin, "Specify plugins to load", "NAME" }, + { "noplugin", 'P', 0, G_OPTION_ARG_STRING, &option_noplugin, + "Specify plugins not to load", "NAME" }, { "nodaemon", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &option_detach, "Don't fork daemon to background" }, @@ -164,7 +170,7 @@ int main(int argc, char *argv[]) __connman_dbus_init(conn); __connman_storage_init(); - __connman_element_init(conn, option_device); + __connman_element_init(conn, option_device, option_nodevice); __connman_agent_init(conn); __connman_manager_init(conn, option_compat); @@ -174,12 +180,14 @@ int main(int argc, char *argv[]) __connman_rtnl_init(); __connman_udev_init(); - __connman_plugin_init(option_plugin); + __connman_plugin_init(option_plugin, option_noplugin); __connman_element_start(); g_free(option_device); g_free(option_plugin); + g_free(option_nodevice); + g_free(option_noplugin); memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_term; diff --git a/src/plugin.c b/src/plugin.c index 7fb7d444..59d3572c 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -43,8 +43,10 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc) if (desc->init == NULL) return FALSE; - if (g_str_equal(desc->version, CONNMAN_VERSION) == FALSE) + if (g_str_equal(desc->version, CONNMAN_VERSION) == FALSE) { + DBG("version mismatch for %s", desc->description); return FALSE; + } plugin = g_try_new0(struct connman_plugin, 1); if (plugin == NULL) @@ -63,7 +65,7 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc) return TRUE; } -int __connman_plugin_init(const char *pattern) +int __connman_plugin_init(const char *pattern, const char *exclude) { GDir *dir; const gchar *file; @@ -100,6 +102,13 @@ int __connman_plugin_init(const char *pattern) continue; } + if (exclude != NULL && g_pattern_match_simple(exclude, + desc->name) == TRUE) { + DBG("excluding %s", desc->description); + dlclose(handle); + continue; + } + if (pattern != NULL && g_pattern_match_simple(pattern, desc->name) == FALSE) { DBG("ignoring %s", desc->description); |