From ed776f9ab57e249da21b3bfd7da5848d2263c5b1 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 5 Aug 2008 02:38:14 +0200 Subject: [PATCH] Fix selecting network device --- src/connman.h | 2 +- src/element.c | 13 ++++++++++++- src/main.c | 10 +++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/connman.h b/src/connman.h index 5f64286..df1aabb 100644 --- a/src/connman.h +++ b/src/connman.h @@ -52,7 +52,7 @@ void __connman_plugin_cleanup(void); #include #include -int __connman_element_init(DBusConnection *conn); +int __connman_element_init(DBusConnection *conn, const char *device); void __connman_element_cleanup(void); void __connman_element_list(enum connman_element_type type, diff --git a/src/element.c b/src/element.c index 5537e41..7c892e6 100644 --- a/src/element.c +++ b/src/element.c @@ -40,6 +40,8 @@ static GSList *driver_list = NULL; static GThreadPool *thread_register = NULL; static GThreadPool *thread_unregister = NULL; +static gchar *device_filter = NULL; + static const char *type2string(enum connman_element_type type) { switch (type) { @@ -601,6 +603,11 @@ int connman_element_register(struct connman_element *element, { DBG("element %p name %s parent %p", element, element->name, parent); + if (device_filter && element->type == CONNMAN_ELEMENT_TYPE_DEVICE) { + if (g_str_equal(device_filter, element->netdev.name) == FALSE) + return -EINVAL; + } + if (connman_element_ref(element) == NULL) return -EINVAL; @@ -788,7 +795,7 @@ static void unregister_element(gpointer data, gpointer user_data) connman_element_unref(element); } -int __connman_element_init(DBusConnection *conn) +int __connman_element_init(DBusConnection *conn, const char *device) { struct connman_element *element; @@ -798,6 +805,8 @@ int __connman_element_init(DBusConnection *conn) if (connection == NULL) return -EIO; + device_filter = g_strdup(device); + g_static_rw_lock_writer_lock(&element_lock); element = connman_element_create(); @@ -873,5 +882,7 @@ void __connman_element_cleanup(void) element_root = NULL; g_static_rw_lock_writer_unlock(&element_lock); + g_free(device_filter); + dbus_connection_unref(connection); } diff --git a/src/main.c b/src/main.c index 1c63f1e..3a5990b 100644 --- a/src/main.c +++ b/src/main.c @@ -50,14 +50,14 @@ static void disconnect_callback(void *user_data) g_main_loop_quit(main_loop); } -static gchar *option_interface = NULL; +static gchar *option_device = NULL; static gboolean option_detach = TRUE; static gboolean option_compat = FALSE; static gboolean option_debug = FALSE; static GOptionEntry options[] = { - { "interface", 'i', 0, G_OPTION_ARG_STRING, &option_interface, - "Specify network interface", "IFACE" }, + { "device", 'i', 0, G_OPTION_ARG_STRING, &option_device, + "Specify network device/interface", "DEV" }, { "nodaemon", 'n', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &option_detach, "Don't fork daemon to background" }, @@ -138,7 +138,7 @@ int main(int argc, char *argv[]) __connman_storage_init(); - __connman_element_init(conn); + __connman_element_init(conn, option_device); __connman_agent_init(conn); @@ -146,7 +146,7 @@ int main(int argc, char *argv[]) __connman_plugin_init(); - g_free(option_interface); + g_free(option_device); memset(&sa, 0, sizeof(sa)); sa.sa_handler = sig_term; -- 2.7.4