static DBusConnection *connection = NULL;
+static gchar *ifname_filter = NULL;
+
static GSList *drivers = NULL;
int connman_iface_register(struct connman_iface_driver *driver)
iface->state = CONNMAN_IFACE_STATE_SHUTDOWN;
state_changed(iface);
connman_iface_clear_ipv4(iface);
- __connman_iface_down(iface);
+ if (iface->driver->stop)
+ iface->driver->stop(iface);
+ else
+ __connman_iface_down(iface);
break;
case CONNMAN_IFACE_POLICY_IGNORE:
break;
case CONNMAN_IFACE_POLICY_AUTO:
- __connman_iface_up(iface);
+ if (iface->driver->start)
+ iface->driver->start(iface);
+ else
+ __connman_iface_up(iface);
state_changed(iface);
break;
if (iface->policy == CONNMAN_IFACE_POLICY_AUTO) {
iface->state = CONNMAN_IFACE_STATE_ENABLED;
- __connman_iface_up(iface);
+ if (iface->driver->start)
+ iface->driver->start(iface);
+ else
+ __connman_iface_up(iface);
} else
iface->state = CONNMAN_IFACE_STATE_SHUTDOWN;
+
state_changed(iface);
}
if (reply == NULL)
return NULL;
- //if (driver->scan)
- // driver->scan(iface);
+ if (driver->scan) {
+ //driver->scan(iface);
+ }
dbus_message_append_args(reply, DBUS_TYPE_INVALID);
{
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);
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;
static guint hal_watch = 0;
-int __connman_iface_init(DBusConnection *conn)
+int __connman_iface_init(DBusConnection *conn, const char *interface)
{
DBG("conn %p", 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",
hal_cleanup(connection);
+ g_free(ifname_filter);
+
dbus_connection_unref(connection);
}