diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-03-12 14:48:31 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-03-12 14:48:31 +0100 |
commit | c1925f58614237c3ecd8adce5c0b3f7d82b847cf (patch) | |
tree | 983a29bc3c5aeb444084546fd7844e31616e19aa /src/iface.c | |
parent | 79280d0cf6a006988cb3c6394da44b2aa4c38271 (diff) | |
download | connman-c1925f58614237c3ecd8adce5c0b3f7d82b847cf.tar.gz connman-c1925f58614237c3ecd8adce5c0b3f7d82b847cf.tar.bz2 connman-c1925f58614237c3ecd8adce5c0b3f7d82b847cf.zip |
Add option for interface limitation
Diffstat (limited to 'src/iface.c')
-rw-r--r-- | src/iface.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/iface.c b/src/iface.c index 65e4cdd0..18c44f66 100644 --- a/src/iface.c +++ b/src/iface.c @@ -47,6 +47,8 @@ static DBusConnection *connection = NULL; +static gchar *ifname_filter = NULL; + static GSList *drivers = NULL; int connman_iface_register(struct connman_iface_driver *driver) @@ -1095,7 +1097,7 @@ static int probe_device(LibHalContext *ctx, { DBusConnection *conn; struct connman_iface *iface; - char *temp, *sysfs; + char *temp, *sysfs, *ifname; int err; DBG("ctx %p driver %p udi %s", ctx, driver, udi); @@ -1124,10 +1126,20 @@ static int probe_device(LibHalContext *ctx, iface->index = -1; - if (g_str_has_prefix(driver->capability, "net") == TRUE) + if (g_str_has_prefix(driver->capability, "net") == TRUE) { iface->index = libhal_device_get_property_int(ctx, udi, "net.linux.ifindex", NULL); + ifname = libhal_device_get_property_string(ctx, udi, + "net.interface", NULL); + if (ifname != NULL && ifname_filter != NULL && + *ifname_filter != '\0' && + g_str_equal(ifname, ifname_filter) == FALSE) { + device_free(iface); + return -1; + } + } + iface->type = CONNMAN_IFACE_TYPE_UNKNOWN; iface->flags = 0; iface->state = CONNMAN_IFACE_STATE_UNKNOWN; @@ -1340,7 +1352,7 @@ static void hal_cleanup(void *data) static guint hal_watch = 0; -int __connman_iface_init(DBusConnection *conn) +int __connman_iface_init(DBusConnection *conn, const char *interface) { DBG("conn %p", conn); @@ -1348,6 +1360,9 @@ int __connman_iface_init(DBusConnection *conn) if (connection == NULL) return -1; + if (interface != NULL) + ifname_filter = g_strdup(interface); + hal_init(connection); hal_watch = g_dbus_add_watch(connection, "org.freedesktop.Hal", @@ -1364,5 +1379,7 @@ void __connman_iface_cleanup(void) hal_cleanup(connection); + g_free(ifname_filter); + dbus_connection_unref(connection); } |