Add support for IPv4 details in connection interface
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 21:26:58 +0000 (22:26 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 5 Jan 2009 21:26:58 +0000 (22:26 +0100)
include/element.h
src/connection.c
src/element.c

index 4824731..70e1ae4 100644 (file)
@@ -30,6 +30,7 @@ extern "C" {
 #include <glib.h>
 
 #include <connman/property.h>
+#include <connman/ipv4.h>
 
 /**
  * SECTION:element
@@ -101,6 +102,7 @@ struct connman_element {
        GSList *properties;
 
        struct {
+               enum connman_ipv4_method method;
                gchar *address;
                gchar *netmask;
                gchar *gateway;
index 79ae34d..01a84cc 100644 (file)
@@ -205,6 +205,8 @@ static DBusMessage *get_properties(DBusConnection *conn,
        struct connman_element *element = data;
        DBusMessage *reply;
        DBusMessageIter array, dict;
+       const char *method = NULL;
+       const char *address = NULL, *netmask = NULL, *gateway = NULL;
 
        DBG("conn %p", conn);
 
@@ -226,6 +228,32 @@ static DBusMessage *get_properties(DBusConnection *conn,
        connman_dbus_dict_append_variant(&dict, "Default",
                                        DBUS_TYPE_BOOLEAN, &element->enabled);
 
+       connman_element_get_value(element,
+                               CONNMAN_PROPERTY_ID_IPV4_METHOD, &method);
+
+       connman_element_get_value(element,
+                               CONNMAN_PROPERTY_ID_IPV4_ADDRESS, &address);
+       connman_element_get_value(element,
+                               CONNMAN_PROPERTY_ID_IPV4_NETMASK, &netmask);
+       connman_element_get_value(element,
+                               CONNMAN_PROPERTY_ID_IPV4_GATEWAY, &gateway);
+
+       if (method != NULL)
+               connman_dbus_dict_append_variant(&dict, "IPv4.Method",
+                                               DBUS_TYPE_STRING, &method);
+
+       if (address != NULL)
+               connman_dbus_dict_append_variant(&dict, "IPv4.Address",
+                                               DBUS_TYPE_STRING, &address);
+
+       if (netmask != NULL)
+               connman_dbus_dict_append_variant(&dict, "IPv4.Netmask",
+                                               DBUS_TYPE_STRING, &netmask);
+
+       if (gateway != NULL)
+               connman_dbus_dict_append_variant(&dict, "IPv4.Gateway",
+                                               DBUS_TYPE_STRING, &gateway);
+
        dbus_message_iter_close_container(&array, &dict);
 
        return reply;
index 129fa62..a81f755 100644 (file)
@@ -1005,6 +1005,14 @@ int connman_element_get_value(struct connman_element *element,
                return -EINVAL;
 
        switch (id) {
+       case CONNMAN_PROPERTY_ID_IPV4_METHOD:
+               if (element->ipv4.method == CONNMAN_IPV4_METHOD_UNKNOWN)
+                       return connman_element_get_value(element->parent,
+                                                               id, value);
+               __connman_element_lock(element);
+               *((const char **) value) = __connman_ipv4_method2string(element->ipv4.method);
+               __connman_element_unlock(element);
+               break;
        case CONNMAN_PROPERTY_ID_IPV4_ADDRESS:
                if (element->ipv4.address == NULL)
                        return connman_element_get_value(element->parent,
@@ -1351,6 +1359,9 @@ int connman_element_register(struct connman_element *element,
                }
        }
 
+       if (element->type == CONNMAN_ELEMENT_TYPE_DHCP)
+               element->ipv4.method = CONNMAN_IPV4_METHOD_DHCP;
+
        element->parent = parent;
 
        __connman_element_unlock(element);