This email list is read-only.  Emails sent to this list will be discarded
----------------------------------
 .gitignore           |    1 +
 doc/Makefile.am      |    2 +-
 include/element.h    |   16 +-
 include/property.h   |   22 ++-
 plugins/Makefile.am  |    4 +-
 plugins/bluetooth.c  |    2 +-
 plugins/dhclient.c   |   13 +-
 plugins/ethernet.c   |   62 ++++++---
 plugins/hal.c        |   19 ++-
 plugins/inet.c       |   59 ++++++++
 plugins/inet.h       |   22 +++
 plugins/ipv4.c       |   13 +-
 plugins/resolvconf.c |   29 +++-
 plugins/resolvfile.c |    4 +-
 plugins/supplicant.c |   13 +-
 plugins/wifi.c       |   17 +--
 src/element.c        |  402 +++++++++++++++++++++++++++++++++++++++++++++----
 17 files changed, 581 insertions(+), 119 deletions(-)

New commits:
commit f5621af4d484694ad91ba9a78e7b89b2f8cf31e6
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 21:19:13 2008 +0200

    Remove backup files at cleanup stage

commit a977d2f3861ad3344238326c744974009545c591
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 21:14:09 2008 +0200

    Use INET helpers for setting the interface name

commit 7f30feb2513f6a1609f291e4e9c647a08434d2c2
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 21:12:59 2008 +0200

    Fixup resolver plugins to use INET helpers

commit 85f79afa2392e6ef108812685b8a1901448c4ebb
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 21:11:44 2008 +0200

    Fixup breakage due to new property constants

commit 135f8ccd37f76068bc75e21f23fb68e74be57c0e
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 21:11:01 2008 +0200

    Add INET helper functions

commit 29fdbe87a8f2e0f13dcc027ba78eefe85263907d
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 20:09:10 2008 +0200

    Use element->index and element->name variables

commit 7f4054b0b2d6c43c59caef670b4330895337d992
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Sep 1 20:07:39 2008 +0200

    Fixup due to element API changes

commit 074d489a01de3dfb1fa2b8e9ad48bf42fff1302b
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Aug 25 11:19:06 2008 +0200

    Add more advanced properties implementation

commit 910534c6b94fa23ade84f402e4aca9a9575e390a
Author: Marcel Holtmann <[EMAIL PROTECTED]>
Date:   Mon Aug 25 11:14:14 2008 +0200

    Add auto-generated doc/dbus directory


Diff in this email is a maximum of 400 lines.
diff --git a/.gitignore b/.gitignore
index f4b0834..dd020ea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,4 +36,5 @@ doc/connman-*.txt
 doc/*.sgml
 doc/version.xml
 doc/xml
+doc/dbus
 doc/html
diff --git a/doc/Makefile.am b/doc/Makefile.am
index b9ade0f..92d9540 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -29,7 +29,7 @@ INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/gdbus \
 GTKDOC_LIBS = $(DBUS_LIBS) $(GLIB_LIBS) $(GMODULE_LIBS) $(GTHREAD_LIBS)
 
 MAINTAINERCLEANFILES = Makefile.in \
-       $(DOC_MODULE).types $(DOC_MODULE)-*.txt *.sgml
+       $(DOC_MODULE).types $(DOC_MODULE)-*.txt *.sgml *.bak
 
 if ENABLE_GTK_DOC
 include $(top_srcdir)/doc/gtk-doc.make
diff --git a/include/element.h b/include/element.h
index e2d7ea8..57103d3 100644
--- a/include/element.h
+++ b/include/element.h
@@ -73,6 +73,7 @@ struct connman_driver;
 struct connman_element {
        gint refcount;
        GStaticMutex mutex;
+       gint index;
        gchar *name;
        gchar *path;
        enum connman_element_type type;
@@ -89,12 +90,6 @@ struct connman_element {
        GSList *properties;
 
        struct {
-               int index;
-               short flags;
-               gchar *name;
-       } netdev;
-
-       struct {
                gchar *identifier;
        } network;
 
@@ -111,16 +106,19 @@ struct connman_element {
 #define connman_element_lock(element)    g_static_mutex_lock(&(element)->mutex)
 #define connman_element_unlock(element)  
g_static_mutex_unlock(&(element)->mutex)
 
-extern struct connman_element *connman_element_create(void);
+extern struct connman_element *connman_element_create(const char *name);
 extern struct connman_element *connman_element_ref(struct connman_element 
*element);
 extern void connman_element_unref(struct connman_element *element);
 
 extern int connman_element_add_static_property(struct connman_element *element,
                                const char *name, int type, const void *value);
+extern int connman_element_define_properties(struct connman_element *element, 
...);
+extern int connman_element_create_property(struct connman_element *element,
+                                               const char *name, int type);
 extern int connman_element_set_property(struct connman_element *element,
-                       enum connman_property_type type, const void *value);
+                               enum connman_property_id id, const void *value);
 extern int connman_element_get_value(struct connman_element *element,
-                               enum connman_property_type type, void *value);
+                               enum connman_property_id id, void *value);
 
 extern int connman_element_register(struct connman_element *element,
                                        struct connman_element *parent);
diff --git a/include/property.h b/include/property.h
index d343948..14198be 100644
--- a/include/property.h
+++ b/include/property.h
@@ -32,21 +32,29 @@ extern "C" {
  * @short_description: Functions for handling properties
  */
 
-enum connman_property_type {
-       CONNMAN_PROPERTY_TYPE_INVALID = 0,
+enum connman_property_id {
+       CONNMAN_PROPERTY_ID_INVALID = 0,
 
-       CONNMAN_PROPERTY_TYPE_IPV4_ADDRESS,
-       CONNMAN_PROPERTY_TYPE_IPV4_NETMASK,
-       CONNMAN_PROPERTY_TYPE_IPV4_GATEWAY,
-       CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER,
+       CONNMAN_PROPERTY_ID_IPV4_METHOD,
+       CONNMAN_PROPERTY_ID_IPV4_ADDRESS,
+       CONNMAN_PROPERTY_ID_IPV4_NETMASK,
+       CONNMAN_PROPERTY_ID_IPV4_GATEWAY,
+       CONNMAN_PROPERTY_ID_IPV4_NAMESERVER,
 };
 
+/**
+ * connman_property_flags:
+ * @CONNMAN_PROPERTY_FLAG_STATIC: read-only property
+ * @CONNMAN_PROPERTY_FLAG_REFERENCE: inheritated value (reference only)
+ */
 enum connman_property_flags {
-       CONNMAN_PROPERTY_FLAG_STATIC = (1 << 0),
+       CONNMAN_PROPERTY_FLAG_STATIC     = (1 << 0),
+       CONNMAN_PROPERTY_FLAG_REFERENCE  = (1 << 1),
 };
 
 struct connman_property {
        enum connman_property_flags flags;
+       enum connman_property_id id;
        char *name;
        int type;
        void *value;
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index d210f46..b4e9805 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -8,7 +8,7 @@ rtnllink_la_SOURCES = rtnllink.c
 
 ethernet_la_SOURCES = ethernet.c
 
-wifi_la_SOURCES = wifi.c supplicant.h supplicant.c
+wifi_la_SOURCES = wifi.c inet.h inet.c supplicant.h supplicant.c
 
 bluetooth_la_SOURCES = bluetooth.c
 bluetooth_la_LIBADD = @GDBUS_LIBS@
@@ -19,7 +19,7 @@ dhclient_la_CFLAGS = @GLIB_CFLAGS@ @GDBUS_CFLAGS@ 
-DDHCLIENT=\"@[EMAIL PROTECTED]" \
 
 ipv4_la_SOURCES = ipv4.c
 
-resolvconf_la_SOURCES = resolvconf.c
+resolvconf_la_SOURCES = resolvconf.c inet.h inet.c
 
 resolvfile_la_SOURCES = resolvfile.c
 
diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index 6d41fb2..2d0d7ad 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -43,7 +43,7 @@ static void create_element(DBusConnection *conn, const char 
*path)
 
        DBG("conn %p path %s", conn, path);
 
-       element = connman_element_create();
+       element = connman_element_create(NULL);
 
        element->name = g_path_get_basename(path);
        element->type = CONNMAN_ELEMENT_TYPE_DEVICE;
diff --git a/plugins/dhclient.c b/plugins/dhclient.c
index ee8a3a5..342e6d7 100644
--- a/plugins/dhclient.c
+++ b/plugins/dhclient.c
@@ -31,6 +31,8 @@
 #include <connman/dbus.h>
 #include <connman/log.h>
 
+#include "inet.h"
+
 #define DHCLIENT_INTF "org.isc.dhclient"
 #define DHCLIENT_PATH "/org/isc/dhclient"
 
@@ -140,8 +142,8 @@ static int dhclient_probe(struct connman_element *element)
        if (task == NULL)
                return -ENOMEM;
 
-       task->ifindex = element->netdev.index;
-       task->ifname = g_strdup(element->netdev.name);
+       task->ifindex = element->index;
+       task->ifname = inet_index2name(element->index);
        task->element = element;
 
        if (task->ifname == NULL) {
@@ -203,7 +205,7 @@ static void dhclient_remove(struct connman_element *element)
 
        g_static_mutex_lock(&task_mutex);
 
-       task = find_task_by_index(element->netdev.index);
+       task = find_task_by_index(element->index);
        if (task != NULL)
                task_list = g_slist_remove(task_list, task);
 
@@ -301,10 +303,9 @@ static DBusHandlerResult dhclient_filter(DBusConnection 
*conn,
        } else if (g_ascii_strcasecmp(text, "BOUND") == 0 ||
                                g_ascii_strcasecmp(text, "REBOOT") == 0) {
                struct connman_element *element;
-               element = connman_element_create();
+               element = connman_element_create(NULL);
                element->type = CONNMAN_ELEMENT_TYPE_IPV4;
-               element->netdev.index = task->ifindex;
-               element->netdev.name = g_strdup(task->ifname);
+               element->index = task->ifindex;
                connman_element_update(task->element);
                connman_element_register(element, task->element);
        } else if (g_ascii_strcasecmp(text, "RENEW") == 0 ||
diff --git a/plugins/ethernet.c b/plugins/ethernet.c
index 0f248bc..697149b 100644
--- a/plugins/ethernet.c
+++ b/plugins/ethernet.c
@@ -35,6 +35,11 @@
 #include <connman/driver.h>
 #include <connman/log.h>
 
+struct ethernet_data {
+       int index;
+       short flags;
+};
+
 static GStaticMutex ethernet_mutex = G_STATIC_MUTEX_INIT;
 static GSList *ethernet_list = NULL;
 
@@ -45,11 +50,12 @@ static void create_element(struct connman_element *parent,
 
        DBG("parent %p name %s", parent, parent->name);
 
-       element = connman_element_create();
+       element = connman_element_create(NULL);
+       if (element == NULL)
+               return;
 
        element->type = type;
-       element->netdev.index = parent->netdev.index;
-       element->netdev.name = g_strdup(parent->netdev.name);
+       element->index = parent->index;
 
        connman_element_register(element, parent);
 }
@@ -70,20 +76,22 @@ static void rtnl_link(struct nlmsghdr *hdr, const char 
*type)
 
        for (list = ethernet_list; list; list = list->next) {
                struct connman_element *element = list->data;
+               struct ethernet_data *ethernet;
 
-               if (element->type != CONNMAN_ELEMENT_TYPE_DEVICE)
+               ethernet = connman_element_get_data(element);
+               if (ethernet == NULL)
                        continue;
 
-               if (element->netdev.index != msg->ifi_index)
+               if (ethernet->index != msg->ifi_index)
                        continue;
 
-               if ((element->netdev.flags & IFF_RUNNING) ==
-                                               (msg->ifi_flags & IFF_RUNNING))
+               if ((ethernet->flags & IFF_RUNNING) ==
+                                       (msg->ifi_flags & IFF_RUNNING))
                        continue;
 
-               element->netdev.flags = msg->ifi_flags;
+               ethernet->flags = msg->ifi_flags;
 
-               if (msg->ifi_flags & IFF_RUNNING) {
+               if (ethernet->flags & IFF_RUNNING) {
                        DBG("carrier on");
 
                        create_element(element, CONNMAN_ELEMENT_TYPE_DHCP);
@@ -153,7 +161,7 @@ static gboolean rtnl_event(GIOChannel *chan, GIOCondition 
cond, gpointer data)
        return TRUE;
 }
 
-static GIOChannel *channel = NULL;
+static GIOChannel *channel;
 
 static int rtnl_request(void)
 {
@@ -184,19 +192,19 @@ static int rtnl_request(void)
                        (struct sockaddr *) &addr, sizeof(addr));
 }
 
-static int iface_up(struct connman_element *element)
+static int iface_up(struct ethernet_data *ethernet)
 {
        struct ifreq ifr;
        int sk, err;
 
-       DBG("element %p", element);
+       DBG("index %d flags %d", ethernet->index, ethernet->flags);
 
        sk = socket(PF_INET, SOCK_DGRAM, 0);
        if (sk < 0)
                return -errno;
 
        memset(&ifr, 0, sizeof(ifr));
-       ifr.ifr_ifindex = element->netdev.index;
+       ifr.ifr_ifindex = ethernet->index;
 
        if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
                err = -errno;
@@ -228,19 +236,19 @@ done:
        return err;
 }
 
-static int iface_down(struct connman_element *element)
+static int iface_down(struct ethernet_data *ethernet)
 {
        struct ifreq ifr;
        int sk, err;
 
-       DBG("element %p", element);
+       DBG("index %d flags %d", ethernet->index, ethernet->flags);
 
        sk = socket(PF_INET, SOCK_DGRAM, 0);
        if (sk < 0)
                return -errno;
 
        memset(&ifr, 0, sizeof(ifr));
-       ifr.ifr_ifindex = element->netdev.index;
+       ifr.ifr_ifindex = ethernet->index;
 
        if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
                err = -errno;
@@ -272,13 +280,23 @@ done:
 
 static int ethernet_probe(struct connman_element *element)
 {
+       struct ethernet_data *ethernet;
+
        DBG("element %p name %s", element, element->name);
 
+       ethernet = g_try_new0(struct ethernet_data, 1);
+       if (ethernet == NULL)
+               return -ENOMEM;
+
        g_static_mutex_lock(&ethernet_mutex);
        ethernet_list = g_slist_append(ethernet_list, element);
        g_static_mutex_unlock(&ethernet_mutex);
 
-       iface_up(element);
+       connman_element_set_data(element, ethernet);
+
+       ethernet->index = element->index;
+
+       iface_up(ethernet);
 
        rtnl_request();
 
@@ -287,13 +305,19 @@ static int ethernet_probe(struct connman_element *element)
 
 static void ethernet_remove(struct connman_element *element)
 {
+       struct ethernet_data *ethernet = connman_element_get_data(element);
+
        DBG("element %p name %s", element, element->name);
 
-       iface_down(element);
+       connman_element_set_data(element, NULL);
+
+       iface_down(ethernet);
 
        g_static_mutex_lock(&ethernet_mutex);
        ethernet_list = g_slist_remove(ethernet_list, element);
        g_static_mutex_unlock(&ethernet_mutex);
+
+       g_free(ethernet);
 }
 
 static struct connman_driver ethernet_driver = {
@@ -340,8 +364,6 @@ static void rtnl_cleanup(void)
 
        g_io_channel_shutdown(channel, TRUE, NULL);
        g_io_channel_unref(channel);
-
-       channel = NULL;
 }
 
 static int ethernet_init(void)
diff --git a/plugins/hal.c b/plugins/hal.c
index 2afe856..942faaf 100644
--- a/plugins/hal.c
+++ b/plugins/hal.c
@@ -85,18 +85,18 @@ static void device_netdev(LibHalContext *ctx, const char 
*udi,
 {
        if (element->subtype == CONNMAN_ELEMENT_SUBTYPE_ETHERNET ||
                        element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIFI) {
-               element->netdev.index = libhal_device_get_property_int(ctx,
+               element->index = libhal_device_get_property_int(ctx,
                                                udi, "net.linux.ifindex", NULL);
 
-               element->netdev.name = libhal_device_get_property_string(ctx,
+               element->name = libhal_device_get_property_string(ctx,
                                                udi, "net.interface", NULL);
        }
 
        if (element->subtype == CONNMAN_ELEMENT_SUBTYPE_MODEM) {
-               element->netdev.index = libhal_device_get_property_int(ctx,
+               element->index = libhal_device_get_property_int(ctx,
                                                udi, "serial.port", NULL);
 
-               element->netdev.name = libhal_device_get_property_string(ctx,
+               element->name = libhal_device_get_property_string(ctx,
                                                udi, "serial.device", NULL);
        }
 }
@@ -108,15 +108,22 @@ static void create_element(LibHalContext *ctx, const char 
*udi,
 
        DBG("ctx %p udi %s", ctx, udi);
 
-       element = connman_element_create();
+       element = connman_element_create(NULL);
 
-       element->name = g_path_get_basename(udi);
        element->type = CONNMAN_ELEMENT_TYPE_DEVICE;
_______________________________________________
Commits mailing list
[email protected]
https://www.moblin.org/mailman/listinfo/commits

Reply via email to