+int connman_element_add_static_property(struct connman_element *element,
+ const char *name, int type, const void *value)
+{
+ struct connman_property *property;
+
+ DBG("element %p name %s", element, element->name);
+
+ if (type != DBUS_TYPE_STRING)
+ return -EINVAL;
+
+ property = g_try_new0(struct connman_property, 1);
+ if (property == NULL)
+ return -ENOMEM;
+
+ property->flags = CONNMAN_PROPERTY_FLAG_STATIC;
+
+ property->name = g_strdup(name);
+ property->type = type;
+
+ DBG("name %s type %d value %p", name, type, value);
+
+ switch (type) {
+ case DBUS_TYPE_STRING:
+ property->value = g_strdup(*((const char **) value));
+ break;
+ }
+
+ element->properties = g_slist_append(element->properties, property);
+
+ return 0;
+}
+
+int connman_element_set_property(struct connman_element *element,
+ enum connman_property_type type, const void *value)
+{
+ switch (type) {
+ case CONNMAN_PROPERTY_TYPE_INVALID:
+ return -EINVAL;
+ case CONNMAN_PROPERTY_TYPE_IPV4_ADDRESS:
+ g_free(element->ipv4.address);
+ element->ipv4.address = g_strdup(*((const char **) value));
+ break;
+ case CONNMAN_PROPERTY_TYPE_IPV4_NETMASK:
+ g_free(element->ipv4.netmask);
+ element->ipv4.netmask = g_strdup(*((const char **) value));
+ break;
+ case CONNMAN_PROPERTY_TYPE_IPV4_GATEWAY:
+ g_free(element->ipv4.gateway);
+ element->ipv4.gateway = g_strdup(*((const char **) value));
+ break;
+ }
+
+ g_dbus_emit_signal(connection, CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "ElementUpdated",
+ DBUS_TYPE_OBJECT_PATH, &element->path,
+ DBUS_TYPE_INVALID);
+
+ return 0;
+}
+
+int connman_element_get_value(struct connman_element *element,
+ enum connman_property_type type, void *value)
+{
+ if (element->type == CONNMAN_ELEMENT_TYPE_ROOT)
+ return -EINVAL;
+
+ switch (type) {
+ case CONNMAN_PROPERTY_TYPE_INVALID:
+ return -EINVAL;
+ case CONNMAN_PROPERTY_TYPE_IPV4_ADDRESS:
+ if (element->ipv4.address == NULL)
+ return connman_element_get_value(element->parent,
+ type, value);
+ *((char **) value) = element->ipv4.address;
+ break;
+ case CONNMAN_PROPERTY_TYPE_IPV4_NETMASK:
+ if (element->ipv4.netmask == NULL)
+ return connman_element_get_value(element->parent,
+ type, value);
+ *((char **) value) = element->ipv4.netmask;
+ break;
+ case CONNMAN_PROPERTY_TYPE_IPV4_GATEWAY:
+ if (element->ipv4.gateway == NULL)
+ return connman_element_get_value(element->parent,
+ type, value);
+ *((char **) value) = element->ipv4.gateway;
+ break;
+ }
+
+ return 0;
+}
+