summaryrefslogtreecommitdiff
path: root/src/element.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-21 17:01:25 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-21 17:01:25 +0100
commit03cbc012afd80dbdd75f1293ab2ada6b25044944 (patch)
treef47d5b9ac0e5776f4201e63f72e314752235bd3c /src/element.c
parentd09ffbb2caf8b7e1e5a092e79f3675eb98861798 (diff)
downloadconnman-03cbc012afd80dbdd75f1293ab2ada6b25044944.tar.gz
connman-03cbc012afd80dbdd75f1293ab2ada6b25044944.tar.bz2
connman-03cbc012afd80dbdd75f1293ab2ada6b25044944.zip
Add support for static IPv4 settings
Diffstat (limited to 'src/element.c')
-rw-r--r--src/element.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/element.c b/src/element.c
index 858ac767..f6742f22 100644
--- a/src/element.c
+++ b/src/element.c
@@ -818,6 +818,107 @@ gboolean connman_element_match_static_property(struct connman_element *element,
return result;
}
+int __connman_element_append_ipv4(struct connman_element *element,
+ DBusMessageIter *dict)
+{
+ const char *method = NULL;
+ const char *address = NULL, *netmask = NULL, *gateway = NULL;
+
+ 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);
+
+ return 0;
+}
+
+int __connman_element_set_ipv4(struct connman_element *element,
+ const char *name, DBusMessageIter *value)
+{
+ int type;
+
+ type = dbus_message_iter_get_arg_type(value);
+
+ if (g_str_equal(name, "IPv4.Method") == TRUE) {
+ enum connman_ipv4_method method;
+ const char *str;
+
+ if (type != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(value, &str);
+ method = __connman_ipv4_string2method(str);
+ if (method == CONNMAN_IPV4_METHOD_UNKNOWN)
+ return -EINVAL;
+
+ if (method == element->ipv4.method)
+ return -EALREADY;
+
+ element->ipv4.method = method;
+
+ connman_element_update(element);
+ } else if (g_str_equal(name, "IPv4.Address") == TRUE) {
+ const char *address;
+
+ if (type != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(value, &address);
+
+ g_free(element->ipv4.address);
+ element->ipv4.address = g_strdup(address);
+
+ connman_element_update(element);
+ } else if (g_str_equal(name, "IPv4.Netmask") == TRUE) {
+ const char *netmask;
+
+ if (type != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(value, &netmask);
+
+ g_free(element->ipv4.netmask);
+ element->ipv4.netmask = g_strdup(netmask);
+
+ connman_element_update(element);
+ } else if (g_str_equal(name, "IPv4.Gateway") == TRUE) {
+ const char *gateway;
+
+ if (type != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ dbus_message_iter_get_basic(value, &gateway);
+
+ g_free(element->ipv4.gateway);
+ element->ipv4.gateway = g_strdup(gateway);
+
+ connman_element_update(element);
+ }
+
+ return 0;
+}
+
static void append_connections(DBusMessageIter *entry)
{
DBusMessageIter value, iter;