DBusMessageIter array, dict;
connman_uint8_t strength = 0;
const char *device, *network;
- const char *type = NULL, *method = NULL;
- const char *address = NULL, *netmask = NULL, *gateway = NULL;
+ const char *type = NULL;
DBG("conn %p", conn);
connman_dbus_dict_append_variant(&dict, "Network",
DBUS_TYPE_OBJECT_PATH, &network);
- 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);
+ __connman_element_append_ipv4(element, &dict);
dbus_message_iter_close_container(&array, &dict);
{
}
+int __connman_element_append_ipv4(struct connman_element *element,
+ DBusMessageIter *dict);
+int __connman_element_set_ipv4(struct connman_element *element,
+ const char *name, DBusMessageIter *value);
+
int __connman_detect_init(void);
void __connman_detect_cleanup(void);
switch (device->mode) {
case CONNMAN_DEVICE_MODE_UNKNOWN:
+ break;
case CONNMAN_DEVICE_MODE_TRANSPORT_IP:
+ __connman_element_append_ipv4(&device->element, &dict);
break;
case CONNMAN_DEVICE_MODE_NETWORK_SINGLE:
case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE:
dbus_message_iter_get_basic(&value, &priority);
device->priority = priority;
+ } else if (g_str_has_prefix(name, "IPv4") == TRUE) {
+ switch (device->mode) {
+ case CONNMAN_DEVICE_MODE_UNKNOWN:
+ case CONNMAN_DEVICE_MODE_NETWORK_SINGLE:
+ case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE:
+ return __connman_error_invalid_arguments(msg);
+ case CONNMAN_DEVICE_MODE_TRANSPORT_IP:
+ __connman_element_set_ipv4(&device->element,
+ name, &value);
+ break;
+ }
}
__connman_storage_save_device(device);
connman_element_add_static_property(&device->element,
"Type", DBUS_TYPE_STRING, &str);
+ device->element.ipv4.method = CONNMAN_IPV4_METHOD_DHCP;
+
device->type = type;
device->mode = CONNMAN_DEVICE_MODE_UNKNOWN;
device->policy = CONNMAN_DEVICE_POLICY_AUTO;
device->carrier = carrier;
if (carrier == TRUE) {
+ enum connman_element_type type = CONNMAN_ELEMENT_TYPE_UNKNOWN;
struct connman_element *element;
+ switch (device->element.ipv4.method) {
+ case CONNMAN_IPV4_METHOD_UNKNOWN:
+ case CONNMAN_IPV4_METHOD_OFF:
+ return 0;
+ case CONNMAN_IPV4_METHOD_STATIC:
+ type = CONNMAN_ELEMENT_TYPE_IPV4;
+ break;
+ case CONNMAN_IPV4_METHOD_DHCP:
+ type = CONNMAN_ELEMENT_TYPE_DHCP;
+ break;
+ }
+
element = connman_element_create(NULL);
if (element != NULL) {
- element->type = CONNMAN_ELEMENT_TYPE_DHCP;
+ element->type = type;
element->index = device->element.index;
if (connman_element_register(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;