From 5b7d0ea99e30cc67acb1a08cd1b71d44f3e3fc9b Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 29 Nov 2009 23:18:56 +0100 Subject: [PATCH] Use network details also for Ethernet devices --- include/device.h | 3 - include/network.h | 2 +- plugins/ethernet.c | 111 +++++++++++++++++++++++-------- src/connman.h | 6 -- src/device.c | 189 +---------------------------------------------------- src/element.c | 2 - src/inet.c | 2 +- src/network.c | 12 ++-- src/profile.c | 22 ------- src/service.c | 158 ++++++++------------------------------------ test/list-networks | 4 +- 11 files changed, 123 insertions(+), 388 deletions(-) diff --git a/include/device.h b/include/device.h index 3a5b4be..de2b2d6 100644 --- a/include/device.h +++ b/include/device.h @@ -55,7 +55,6 @@ enum connman_device_mode { CONNMAN_DEVICE_MODE_UNKNOWN = 0, CONNMAN_DEVICE_MODE_NETWORK_SINGLE = 1, CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE = 2, - CONNMAN_DEVICE_MODE_TRANSPORT_IP = 3, }; struct connman_device; @@ -86,8 +85,6 @@ connman_bool_t connman_device_get_secondary(struct connman_device *device); int connman_device_set_powered(struct connman_device *device, connman_bool_t powered); -int connman_device_set_carrier(struct connman_device *device, - connman_bool_t carrier); int connman_device_set_scanning(struct connman_device *device, connman_bool_t scanning); void connman_device_cleanup_scanning(struct connman_device *device); diff --git a/include/network.h b/include/network.h index c95d4c6..f5004b8 100644 --- a/include/network.h +++ b/include/network.h @@ -37,7 +37,7 @@ extern "C" { enum connman_network_type { CONNMAN_NETWORK_TYPE_UNKNOWN = 0, - CONNMAN_NETWORK_TYPE_CABLE = 1, + CONNMAN_NETWORK_TYPE_ETHERNET = 1, CONNMAN_NETWORK_TYPE_WIFI = 2, CONNMAN_NETWORK_TYPE_WIMAX = 3, CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN = 8, diff --git a/plugins/ethernet.c b/plugins/ethernet.c index 97e1d6a..87c71ac 100644 --- a/plugins/ethernet.c +++ b/plugins/ethernet.c @@ -43,8 +43,71 @@ struct ethernet_data { int index; unsigned flags; unsigned int watch; + struct connman_network *network; }; +static int cable_probe(struct connman_network *network) +{ + DBG("network %p", network); + + return 0; +} + +static void cable_remove(struct connman_network *network) +{ + DBG("network %p", network); +} + +static int cable_connect(struct connman_network *network) +{ + DBG("network %p", network); + + return 0; +} + +static int cable_disconnect(struct connman_network *network) +{ + DBG("network %p", network); + + return 0; +} + +static struct connman_network_driver cable_driver = { + .name = "cable", + .type = CONNMAN_NETWORK_TYPE_ETHERNET, + .probe = cable_probe, + .remove = cable_remove, + .connect = cable_connect, + .disconnect = cable_disconnect, +}; + +static void add_network(struct connman_device *device) +{ + struct connman_network *network; + int index; + + network = connman_network_create("carrier", + CONNMAN_NETWORK_TYPE_ETHERNET); + if (network == NULL) + return; + + index = connman_device_get_index(device); + connman_network_set_index(network, index); + + connman_network_set_name(network, "Wired"); + connman_network_set_protocol(network, CONNMAN_NETWORK_PROTOCOL_IP); + + if (connman_device_add_network(device, network) < 0) { + connman_network_unref(network); + return; + } + + connman_network_set_available(network, TRUE); + connman_network_set_connected(network, TRUE); + + connman_network_set_group(network, "cable"); +} + static void ethernet_newlink(unsigned flags, unsigned change, void *user_data) { struct connman_device *device = user_data; @@ -65,10 +128,10 @@ static void ethernet_newlink(unsigned flags, unsigned change, void *user_data) if ((ethernet->flags & IFF_LOWER_UP) != (flags & IFF_LOWER_UP)) { if (flags & IFF_LOWER_UP) { DBG("carrier on"); - connman_device_set_carrier(device, TRUE); + add_network(device); } else { DBG("carrier off"); - connman_device_set_carrier(device, FALSE); + connman_device_remove_all_networks(device); } } @@ -106,6 +169,8 @@ static void ethernet_remove(struct connman_device *device) connman_rtnl_remove_watch(ethernet->watch); + connman_device_remove_all_networks(device); + g_free(ethernet); } @@ -127,30 +192,6 @@ static int ethernet_disable(struct connman_device *device) return connman_inet_ifdown(ethernet->index); } -static int ethernet_connect(struct connman_device *device) -{ - struct ethernet_data *ethernet = connman_device_get_data(device); - - DBG("device %p", device); - - if (!(ethernet->flags & IFF_LOWER_UP)) - return -ENOTCONN; - - return connman_device_set_connected(device, TRUE); -} - -static int ethernet_disconnect(struct connman_device *device) -{ - struct ethernet_data *ethernet = connman_device_get_data(device); - - DBG("device %p", device); - - if (!(ethernet->flags & IFF_LOWER_UP)) - return -ENOTCONN; - - return connman_device_set_connected(device, FALSE); -} - static struct connman_device_driver ethernet_driver = { .name = "ethernet", .type = CONNMAN_DEVICE_TYPE_ETHERNET, @@ -158,17 +199,29 @@ static struct connman_device_driver ethernet_driver = { .remove = ethernet_remove, .enable = ethernet_enable, .disable = ethernet_disable, - .connect = ethernet_connect, - .disconnect = ethernet_disconnect, }; static int ethernet_init(void) { - return connman_device_driver_register(ðernet_driver); + int err; + + err = connman_network_driver_register(&cable_driver); + if (err < 0) + return err; + + err = connman_device_driver_register(ðernet_driver); + if (err < 0) { + connman_network_driver_unregister(&cable_driver); + return err; + } + + return 0; } static void ethernet_exit(void) { + connman_network_driver_unregister(&cable_driver); + connman_device_driver_unregister(ðernet_driver); } diff --git a/src/connman.h b/src/connman.h index c53f521..7224546 100644 --- a/src/connman.h +++ b/src/connman.h @@ -334,10 +334,6 @@ const char *__connman_service_default(void); void __connman_service_put(struct connman_service *service); -struct connman_service *__connman_service_lookup_from_device(struct connman_device *device); -struct connman_service *__connman_service_create_from_device(struct connman_device *device); -void __connman_service_remove_from_device(struct connman_device *device); - struct connman_service *__connman_service_lookup_from_network(struct connman_network *network); struct connman_service *__connman_service_create_from_network(struct connman_network *network); void __connman_service_update_from_network(struct connman_network *network); @@ -346,8 +342,6 @@ void __connman_service_remove_from_network(struct connman_network *network); const char *__connman_service_get_path(struct connman_service *service); unsigned int __connman_service_get_order(struct connman_service *service); -int __connman_service_set_carrier(struct connman_service *service, - connman_bool_t carrier); int __connman_service_indicate_state(struct connman_service *service, enum connman_service_state state); int __connman_service_indicate_error(struct connman_service *service, diff --git a/src/device.c b/src/device.c index fbc7295..9378eef 100644 --- a/src/device.c +++ b/src/device.c @@ -42,7 +42,6 @@ struct connman_device { connman_bool_t powered; connman_bool_t powered_pending; connman_bool_t powered_persistent; - connman_bool_t carrier; connman_bool_t scanning; connman_bool_t disconnected; connman_bool_t reconnect; @@ -56,7 +55,6 @@ struct connman_device { int phyindex; unsigned int connections; guint scan_timeout; - struct connman_ipconfig *ipconfig; struct connman_device_driver *driver; void *driver_data; @@ -205,81 +203,6 @@ enum connman_service_type __connman_device_get_service_type(struct connman_devic return CONNMAN_SERVICE_TYPE_UNKNOWN; } -static int set_connected(struct connman_device *device, - connman_bool_t connected) -{ - if (connected == TRUE) { - enum connman_element_type type = CONNMAN_ELEMENT_TYPE_UNKNOWN; - struct connman_element *element; - - device->disconnected = TRUE; - - switch (device->element.ipv4.method) { - case CONNMAN_IPCONFIG_METHOD_UNKNOWN: - case CONNMAN_IPCONFIG_METHOD_IGNORE: - return 0; - case CONNMAN_IPCONFIG_METHOD_STATIC: - type = CONNMAN_ELEMENT_TYPE_IPV4; - break; - case CONNMAN_IPCONFIG_METHOD_DHCP: - type = CONNMAN_ELEMENT_TYPE_DHCP; - break; - } - - element = connman_element_create(NULL); - if (element != NULL) { - struct connman_service *service; - - element->type = type; - element->index = device->element.index; - - if (connman_element_register(element, - &device->element) < 0) - connman_element_unref(element); - - device->disconnected = FALSE; - - service = __connman_service_lookup_from_device(device); - __connman_service_indicate_state(service, - CONNMAN_SERVICE_STATE_CONFIGURATION); - } - } else { - struct connman_service *service; - - connman_element_unregister_children(&device->element); - - device->disconnected = TRUE; - - service = __connman_service_lookup_from_device(device); - __connman_service_indicate_state(service, - CONNMAN_SERVICE_STATE_IDLE); - } - - if (connected == TRUE) { - enum connman_service_type type; - - type = __connman_device_get_service_type(device); - __connman_notifier_connect(type); - } else { - enum connman_service_type type; - - type = __connman_device_get_service_type(device); - __connman_notifier_disconnect(type); - } - - return 0; -} - -static int set_carrier(struct connman_device *device, connman_bool_t carrier) -{ - if (carrier == TRUE) - __connman_profile_add_device(device); - else - __connman_profile_remove_device(device); - - return set_connected(device, carrier); -} - static int powered_changed(struct connman_device *device) { DBusMessage *signal; @@ -340,8 +263,6 @@ static int set_powered(struct connman_device *device, connman_bool_t powered) g_hash_table_remove_all(device->networks); - set_carrier(device, FALSE); - if (driver->disable) { err = driver->disable(device); if (err == 0) @@ -441,9 +362,6 @@ static DBusMessage *get_properties(DBusConnection *conn, 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: if (device->scan_interval > 0) @@ -543,8 +461,6 @@ static DBusMessage *set_property(DBusConnection *conn, switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: - return __connman_error_invalid_arguments(msg); case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: break; @@ -562,25 +478,6 @@ static DBusMessage *set_property(DBusConnection *conn, reset_scan_trigger(device); } - } else if (g_str_has_prefix(name, "IPv4.") == TRUE) { - int err; - - if (device->ipconfig == NULL) - return __connman_error_invalid_property(msg); - - 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: - break; - } - - err = __connman_ipconfig_set_ipv4(device->ipconfig, - name + 5, &value); - if (err < 0) - return __connman_error_failed(msg, -err); } else return __connman_error_invalid_property(msg); @@ -597,7 +494,6 @@ static DBusMessage *propose_scan(DBusConnection *conn, switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: return __connman_error_not_supported(msg); case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: @@ -718,10 +614,6 @@ static int setup_device(struct connman_device *device) case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: break; - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: - if (device->carrier == TRUE && device->secondary == FALSE) - __connman_profile_add_device(device); - break; } if (device->offlinemode == FALSE && @@ -767,10 +659,6 @@ static void remove_device(struct connman_device *device) case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: break; - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: - if (device->secondary == FALSE) - __connman_profile_remove_device(device); - break; } type = __connman_device_get_service_type(device); @@ -888,11 +776,6 @@ static void device_destruct(struct connman_element *element) g_free(device->control); g_free(device->interface); - if (device->ipconfig != NULL) { - connman_ipconfig_unref(device->ipconfig); - device->ipconfig = NULL; - } - g_free(device->last_network); g_hash_table_destroy(device->networks); @@ -1053,15 +936,6 @@ const char *connman_device_get_path(struct connman_device *device) void connman_device_set_index(struct connman_device *device, int index) { device->element.index = index; - - if (device->ipconfig != NULL) { - if (index == connman_ipconfig_get_index(device->ipconfig)) - return; - - connman_ipconfig_unref(device->ipconfig); - } - - device->ipconfig = connman_ipconfig_create(index); } /** @@ -1264,35 +1138,6 @@ int __connman_device_set_blocked(struct connman_device *device, return set_powered(device, powered); } -/** - * connman_device_set_carrier: - * @device: device structure - * @carrier: carrier state - * - * Change carrier state of device (only for device without scanning) - */ -int connman_device_set_carrier(struct connman_device *device, - connman_bool_t carrier) -{ - DBG("device %p carrier %d", device, carrier); - - switch (device->mode) { - case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: - case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: - return -EINVAL; - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: - break; - } - - if (device->carrier == carrier) - return -EALREADY; - - device->carrier = carrier; - - return set_carrier(device, device->carrier); -} - int __connman_device_scan(struct connman_device *device) { if (!device->driver || !device->driver->scan) @@ -1558,7 +1403,6 @@ int connman_device_set_disconnected(struct connman_device *device, switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: return -EINVAL; case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: @@ -1588,33 +1432,6 @@ connman_bool_t connman_device_get_disconnected(struct connman_device *device) } /** - * connman_device_set_connected: - * @device: device structure - * @connected: connected state - * - * Change connected state of device (for Ethernet like devices) - */ -int connman_device_set_connected(struct connman_device *device, - connman_bool_t connected) -{ - DBG("device %p connected %d", device, connected); - - switch (device->mode) { - case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: - case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: - return -EINVAL; - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: - break; - } - - if (device->carrier == FALSE) - return -ENOTCONN; - - return set_connected(device, connected); -} - -/** * connman_device_set_string: * @device: device structure * @key: unique identifier @@ -1724,9 +1541,11 @@ int connman_device_add_network(struct connman_device *device, DBG("device %p network %p", device, network); + if (identifier == NULL) + return -EINVAL; + switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: return -EINVAL; case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: @@ -1967,7 +1786,6 @@ static int device_load(struct connman_device *device) switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: break; case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: @@ -2008,7 +1826,6 @@ static int device_save(struct connman_device *device) switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: - case CONNMAN_DEVICE_MODE_TRANSPORT_IP: break; case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: diff --git a/src/element.c b/src/element.c index ffa4304..d2e8701 100644 --- a/src/element.c +++ b/src/element.c @@ -258,8 +258,6 @@ struct connman_service *__connman_element_get_service(struct connman_element *el case CONNMAN_DEVICE_TYPE_NOVATEL: break; case CONNMAN_DEVICE_TYPE_ETHERNET: - service = __connman_service_lookup_from_device(device); - break; case CONNMAN_DEVICE_TYPE_WIFI: case CONNMAN_DEVICE_TYPE_WIMAX: case CONNMAN_DEVICE_TYPE_BLUETOOTH: diff --git a/src/inet.c b/src/inet.c index fa47735..ab9cf62 100644 --- a/src/inet.c +++ b/src/inet.c @@ -493,7 +493,7 @@ struct connman_device *connman_inet_create_device(int index) mode = CONNMAN_DEVICE_MODE_UNKNOWN; break; case CONNMAN_DEVICE_TYPE_ETHERNET: - mode = CONNMAN_DEVICE_MODE_TRANSPORT_IP; + mode = CONNMAN_DEVICE_MODE_NETWORK_SINGLE; ident = index2ident(index, NULL); break; case CONNMAN_DEVICE_TYPE_WIFI: diff --git a/src/network.c b/src/network.c index c885122..a14907a 100644 --- a/src/network.c +++ b/src/network.c @@ -75,8 +75,8 @@ static const char *type2string(enum connman_network_type type) case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: break; - case CONNMAN_NETWORK_TYPE_CABLE: - return "cable"; + case CONNMAN_NETWORK_TYPE_ETHERNET: + return "ethernet"; case CONNMAN_NETWORK_TYPE_WIFI: return "wifi"; case CONNMAN_NETWORK_TYPE_WIMAX: @@ -554,9 +554,9 @@ void connman_network_set_group(struct connman_network *network, switch (network->type) { case CONNMAN_NETWORK_TYPE_UNKNOWN: - case CONNMAN_NETWORK_TYPE_CABLE: case CONNMAN_NETWORK_TYPE_VENDOR: return; + case CONNMAN_NETWORK_TYPE_ETHERNET: case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: case CONNMAN_NETWORK_TYPE_CELLULAR: @@ -612,7 +612,7 @@ connman_bool_t __connman_network_get_weakness(struct connman_network *network) switch (network->type) { case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: - case CONNMAN_NETWORK_TYPE_CABLE: + case CONNMAN_NETWORK_TYPE_ETHERNET: case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: case CONNMAN_NETWORK_TYPE_CELLULAR: @@ -1340,7 +1340,7 @@ static int network_probe(struct connman_element *element) case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: break; - case CONNMAN_NETWORK_TYPE_CABLE: + case CONNMAN_NETWORK_TYPE_ETHERNET: case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: case CONNMAN_NETWORK_TYPE_CELLULAR: @@ -1372,7 +1372,7 @@ static void network_remove(struct connman_element *element) case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: break; - case CONNMAN_NETWORK_TYPE_CABLE: + case CONNMAN_NETWORK_TYPE_ETHERNET: case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: case CONNMAN_NETWORK_TYPE_CELLULAR: diff --git a/src/profile.c b/src/profile.c index 71a3067..97aa5e5 100644 --- a/src/profile.c +++ b/src/profile.c @@ -285,28 +285,6 @@ void __connman_profile_changed(gboolean delayed) changed_timeout = g_timeout_add_seconds(1, services_changed, NULL); } -int __connman_profile_add_device(struct connman_device *device) -{ - struct connman_service *service; - - DBG("device %p", device); - - service = __connman_service_create_from_device(device); - if (service == NULL) - return -EINVAL; - - return 0; -} - -int __connman_profile_remove_device(struct connman_device *device) -{ - DBG("device %p", device); - - __connman_service_remove_from_device(device); - - return 0; -} - int __connman_profile_add_network(struct connman_network *network) { struct connman_service *service; diff --git a/src/service.c b/src/service.c index 3175471..5a941bb 100644 --- a/src/service.c +++ b/src/service.c @@ -63,7 +63,6 @@ struct connman_service { char *mnc; connman_bool_t roaming; struct connman_ipconfig *ipconfig; - struct connman_device *device; struct connman_network *network; DBusMessage *pending; guint timeout; @@ -928,8 +927,6 @@ static gboolean connect_timeout(gpointer user_data) if (service->network != NULL) __connman_network_disconnect(service->network); - else if (service->device != NULL) - __connman_device_disconnect(service->device); __connman_ipconfig_disable(service->ipconfig); @@ -957,35 +954,30 @@ static gboolean connect_timeout(gpointer user_data) static void set_reconnect_state(struct connman_service *service, connman_bool_t reconnect) { - if (service->network != NULL) { - struct connman_device *device; - - device = connman_network_get_device(service->network); + struct connman_device *device; - __connman_device_set_reconnect(device, reconnect); + if (service->network == NULL) + return; + device = connman_network_get_device(service->network); + if (device == NULL) return; - } - if (service->device != NULL) - __connman_device_set_reconnect(service->device, - reconnect); + __connman_device_set_reconnect(device, reconnect); } static connman_bool_t get_reconnect_state(struct connman_service *service) { - if (service->network != NULL) { - struct connman_device *device; - - device = connman_network_get_device(service->network); + struct connman_device *device; - return __connman_device_get_reconnect(device); - } + if (service->network == NULL) + return FALSE; - if (service->device != NULL) - return __connman_device_get_reconnect(service->device); + device = connman_network_get_device(service->network); + if (device == NULL) + return FALSE; - return FALSE; + return __connman_device_get_reconnect(device); } static DBusMessage *connect_service(DBusConnection *conn, @@ -1425,13 +1417,11 @@ char *connman_service_get_interface(struct connman_service *service) if (service == NULL) return NULL; - if (service->network != NULL) { - index = connman_network_get_index(service->network); - } else if (service->device != NULL) { - index = connman_device_get_index(service->device); - } else + if (service->network == NULL) return NULL; + index = connman_network_get_index(service->network); + return connman_inet_ifname(index); } @@ -1595,7 +1585,7 @@ static connman_bool_t prepare_network(struct connman_service *service) connman_network_set_string(service->network, "WiFi.Passphrase", service->passphrase); break; - case CONNMAN_NETWORK_TYPE_CABLE: + case CONNMAN_NETWORK_TYPE_ETHERNET: case CONNMAN_NETWORK_TYPE_WIMAX: case CONNMAN_NETWORK_TYPE_BLUETOOTH_PAN: case CONNMAN_NETWORK_TYPE_BLUETOOTH_DUN: @@ -1661,13 +1651,6 @@ int __connman_service_connect(struct connman_service *service) __connman_ipconfig_enable(service->ipconfig); err = __connman_network_connect(service->network); - } else if (service->device != NULL) { - if (service->favorite == FALSE) - return -ENOLINK; - - __connman_ipconfig_enable(service->ipconfig); - - err = __connman_device_connect(service->device); } else return -EOPNOTSUPP; @@ -1694,10 +1677,6 @@ int __connman_service_disconnect(struct connman_service *service) if (service->network != NULL) { err = __connman_network_disconnect(service->network); - } else if (service->device != NULL) { - if (service->favorite == FALSE) - return -ENOLINK; - err = __connman_device_disconnect(service->device); } else return -EOPNOTSUPP; @@ -2053,97 +2032,6 @@ static void setup_ipconfig(struct connman_service *service, int index) } /** - * __connman_service_lookup_from_device: - * @device: device structure - * - * Look up a service by device (reference count will not be increased) - */ -struct connman_service *__connman_service_lookup_from_device(struct connman_device *device) -{ - struct connman_service *service; - const char *ident; - char *name; - - ident = __connman_device_get_ident(device); - if (ident == NULL) - return NULL; - - name = g_strdup_printf("%s_%s", - __connman_device_get_type(device), ident); - service = __connman_service_lookup(name); - g_free(name); - - return service; -} - -/** - * __connman_service_create_from_device: - * @device: device structure - * - * Look up service by device and if not found, create one - */ -struct connman_service *__connman_service_create_from_device(struct connman_device *device) -{ - struct connman_service *service; - const char *ident; - char *name; - - ident = __connman_device_get_ident(device); - if (ident == NULL) - return NULL; - - name = g_strdup_printf("%s_%s", - __connman_device_get_type(device), ident); - service = __connman_service_get(name); - g_free(name); - - if (service == NULL) - return NULL; - - if (service->path != NULL) { - __connman_profile_changed(TRUE); - return service; - } - - service->type = __connman_device_get_service_type(device); - - service->autoconnect = FALSE; - - service->device = device; - - setup_ipconfig(service, connman_device_get_index(device)); - - service_register(service); - - __connman_profile_changed(TRUE); - - if (service->favorite == TRUE) - __connman_service_auto_connect(); - - return service; -} - -void __connman_service_remove_from_device(struct connman_device *device) -{ - struct connman_service *service; - enum connman_service_type type; - - service = __connman_service_lookup_from_device(device); - if (service == NULL) - return; - - type = service->type; - - __connman_service_put(service); - - default_changed(); - - __connman_notifier_disconnect(type); - - __connman_service_auto_connect(); -} - -/** * __connman_service_lookup_from_network: * @network: network structure * @@ -2155,6 +2043,8 @@ struct connman_service *__connman_service_lookup_from_network(struct connman_net const char *ident, *group; char *name; + DBG("network %p", network); + ident = __connman_network_get_ident(network); if (ident == NULL) return NULL; @@ -2208,7 +2098,7 @@ static enum connman_service_type convert_network_type(struct connman_network *ne case CONNMAN_NETWORK_TYPE_UNKNOWN: case CONNMAN_NETWORK_TYPE_VENDOR: break; - case CONNMAN_NETWORK_TYPE_CABLE: + case CONNMAN_NETWORK_TYPE_ETHERNET: return CONNMAN_SERVICE_TYPE_ETHERNET; case CONNMAN_NETWORK_TYPE_WIFI: return CONNMAN_SERVICE_TYPE_WIFI; @@ -2279,6 +2169,8 @@ static void update_from_network(struct connman_service *service, GSequenceIter *iter; const char *str; + DBG("service %p network %p", service, network); + if (service->state == CONNMAN_SERVICE_STATE_READY) return; @@ -2355,6 +2247,8 @@ struct connman_service *__connman_service_create_from_network(struct connman_net const char *ident, *group; char *name; + DBG("network %p", network); + ident = __connman_network_get_ident(network); if (ident == NULL) return NULL; @@ -2419,6 +2313,8 @@ void __connman_service_update_from_network(struct connman_network *network) connman_bool_t roaming; GSequenceIter *iter; + DBG("network %p", network); + service = __connman_service_lookup_from_network(network); if (service == NULL) return; @@ -2466,6 +2362,8 @@ void __connman_service_remove_from_network(struct connman_network *network) { struct connman_service *service; + DBG("network %p", network); + service = __connman_service_lookup_from_network(network); if (service == NULL) return; diff --git a/test/list-networks b/test/list-networks index e8fb00a..bf552c7 100755 --- a/test/list-networks +++ b/test/list-networks @@ -26,8 +26,8 @@ for path in properties["Devices"]: properties = device.GetProperties() try: - if properties["Type"] not in ["wifi", "wimax", - "bluetooth", "cellular"]: + if properties["Type"] not in ["ethernet", "wifi", "wimax", + "bluetooth", "cellular"]: continue except: continue -- 2.7.4