summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-03 22:31:59 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-07-03 22:31:59 -0700
commit1205a11fdbbb58e0cedb387afdfb4e1c2b2ad2d0 (patch)
tree2465a5ff21eab5f52a0280de715283eed3ea0114
parent1c3c447691960239fd9362e9d63ee8f5004c00f3 (diff)
downloadconnman-1205a11fdbbb58e0cedb387afdfb4e1c2b2ad2d0.tar.gz
connman-1205a11fdbbb58e0cedb387afdfb4e1c2b2ad2d0.tar.bz2
connman-1205a11fdbbb58e0cedb387afdfb4e1c2b2ad2d0.zip
Use RTNL device detection only if udev is not available
-rw-r--r--src/Makefile.am2
-rw-r--r--src/connman.h3
-rw-r--r--src/detect.c125
-rw-r--r--src/element.c2
-rw-r--r--src/udev-compat.c90
5 files changed, 91 insertions, 131 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index b146a4b9..fb0d646e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -11,7 +11,7 @@ connmand_SOURCES = main.c connman.h log.c selftest.c error.c plugin.c \
element.c device.c network.c connection.c \
manager.c profile.c service.c agent.c notifier.c \
security.c resolver.c ipconfig.c rfkill.c \
- storage.c ipv4.c detect.c rtnl.c inet.c dbus.c
+ storage.c ipv4.c rtnl.c inet.c dbus.c
if UDEV
connmand_SOURCES += udev.c
diff --git a/src/connman.h b/src/connman.h
index 24b64adb..d778cc1d 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -175,9 +175,6 @@ int __connman_element_append_ipv4(struct connman_element *element,
int __connman_element_set_ipv4(struct connman_element *element,
const char *name, DBusMessageIter *value);
-int __connman_detect_init(void);
-void __connman_detect_cleanup(void);
-
int __connman_ipv4_init(void);
void __connman_ipv4_cleanup(void);
diff --git a/src/detect.c b/src/detect.c
deleted file mode 100644
index f239d851..00000000
--- a/src/detect.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *
- * Connection Manager
- *
- * Copyright (C) 2007-2009 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-
-#include "connman.h"
-
-static GSList *device_list = NULL;
-
-static struct connman_device *find_device(int index)
-{
- GSList *list;
-
- for (list = device_list; list; list = list->next) {
- struct connman_device *device = list->data;
-
- if (connman_device_get_index(device) == index)
- return device;
- }
-
- return NULL;
-}
-
-static void detect_newlink(unsigned short type, int index,
- unsigned flags, unsigned change)
-{
- struct connman_device *device;
-
- DBG("type %d index %d", type, index);
-
- device = find_device(index);
- if (device != NULL)
- return;
-
- device = connman_inet_create_device(index);
- if (device == NULL)
- return;
-
- if (connman_device_register(device) < 0) {
- connman_device_unref(device);
- return;
- }
-
- device_list = g_slist_append(device_list, device);
-}
-
-static void detect_dellink(unsigned short type, int index,
- unsigned flags, unsigned change)
-{
- struct connman_device *device;
-
- DBG("type %d index %d", type, index);
-
- device = find_device(index);
- if (device == NULL)
- return;
-
- device_list = g_slist_remove(device_list, device);
-
- connman_device_unregister(device);
- connman_device_unref(device);
-}
-
-static struct connman_rtnl detect_rtnl = {
- .name = "detect",
- .priority = CONNMAN_RTNL_PRIORITY_LOW,
- .newlink = detect_newlink,
- .dellink = detect_dellink,
-};
-
-int __connman_detect_init(void)
-{
- int err;
-
- DBG("");
-
- err = connman_rtnl_register(&detect_rtnl);
- if (err < 0)
- return err;
-
- connman_rtnl_send_getlink();
-
- return 0;
-}
-
-void __connman_detect_cleanup(void)
-{
- GSList *list;
-
- DBG("");
-
- connman_rtnl_unregister(&detect_rtnl);
-
- for (list = device_list; list; list = list->next) {
- struct connman_device *device = list->data;
-
- connman_device_unregister(device);
- connman_device_unref(device);
- }
-
- g_slist_free(device_list);
- device_list = NULL;
-}
diff --git a/src/element.c b/src/element.c
index 81f5eafa..dca26eaf 100644
--- a/src/element.c
+++ b/src/element.c
@@ -1425,7 +1425,6 @@ void __connman_element_start(void)
__connman_connection_init();
__connman_ipv4_init();
- __connman_detect_init();
__connman_rfkill_init();
}
@@ -1434,7 +1433,6 @@ void __connman_element_stop(void)
DBG("");
__connman_rfkill_cleanup();
- __connman_detect_cleanup();
__connman_ipv4_cleanup();
__connman_connection_cleanup();
}
diff --git a/src/udev-compat.c b/src/udev-compat.c
index 516a48db..333eb894 100644
--- a/src/udev-compat.c
+++ b/src/udev-compat.c
@@ -23,8 +23,73 @@
#include <config.h>
#endif
+#include <glib.h>
+
#include "connman.h"
+static GSList *device_list = NULL;
+
+static struct connman_device *find_device(int index)
+{
+ GSList *list;
+
+ for (list = device_list; list; list = list->next) {
+ struct connman_device *device = list->data;
+
+ if (connman_device_get_index(device) == index)
+ return device;
+ }
+
+ return NULL;
+}
+
+static void detect_newlink(unsigned short type, int index,
+ unsigned flags, unsigned change)
+{
+ struct connman_device *device;
+
+ DBG("type %d index %d", type, index);
+
+ device = find_device(index);
+ if (device != NULL)
+ return;
+
+ device = connman_inet_create_device(index);
+ if (device == NULL)
+ return;
+
+ if (connman_device_register(device) < 0) {
+ connman_device_unref(device);
+ return;
+ }
+
+ device_list = g_slist_append(device_list, device);
+}
+
+static void detect_dellink(unsigned short type, int index,
+ unsigned flags, unsigned change)
+{
+ struct connman_device *device;
+
+ DBG("type %d index %d", type, index);
+
+ device = find_device(index);
+ if (device == NULL)
+ return;
+
+ device_list = g_slist_remove(device_list, device);
+
+ connman_device_unregister(device);
+ connman_device_unref(device);
+}
+
+static struct connman_rtnl detect_rtnl = {
+ .name = "detect",
+ .priority = CONNMAN_RTNL_PRIORITY_LOW,
+ .newlink = detect_newlink,
+ .dellink = detect_dellink,
+};
+
char *__connman_udev_get_devtype(const char *ifname)
{
return NULL;
@@ -32,9 +97,34 @@ char *__connman_udev_get_devtype(const char *ifname)
int __connman_udev_init(void)
{
+ int err;
+
+ DBG("");
+
+ err = connman_rtnl_register(&detect_rtnl);
+ if (err < 0)
+ return err;
+
+ connman_rtnl_send_getlink();
+
return 0;
}
void __connman_udev_cleanup(void)
{
+ GSList *list;
+
+ DBG("");
+
+ connman_rtnl_unregister(&detect_rtnl);
+
+ for (list = device_list; list; list = list->next) {
+ struct connman_device *device = list->data;
+
+ connman_device_unregister(device);
+ connman_device_unref(device);
+ }
+
+ g_slist_free(device_list);
+ device_list = NULL;
}