diff options
Diffstat (limited to 'plugins/ethernet.c')
-rw-r--r-- | plugins/ethernet.c | 230 |
1 files changed, 65 insertions, 165 deletions
diff --git a/plugins/ethernet.c b/plugins/ethernet.c index bafc75dd..b8e52ce0 100644 --- a/plugins/ethernet.c +++ b/plugins/ethernet.c @@ -2,7 +2,7 @@ * * Connection Manager * - * Copyright (C) 2007-2012 Intel Corporation. All rights reserved. + * Copyright (C) 2007-2013 Intel Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -41,7 +41,7 @@ #include <connman/log.h> #include <connman/setting.h> -static connman_bool_t eth_tethering = FALSE; +static bool eth_tethering = false; struct ethernet_data { int index; @@ -50,43 +50,43 @@ struct ethernet_data { struct connman_network *network; }; -static int cable_probe(struct connman_network *network) +static int eth_network_probe(struct connman_network *network) { DBG("network %p", network); return 0; } -static void cable_remove(struct connman_network *network) +static void eth_network_remove(struct connman_network *network) { DBG("network %p", network); } -static int cable_connect(struct connman_network *network) +static int eth_network_connect(struct connman_network *network) { DBG("network %p", network); - connman_network_set_connected(network, TRUE); + connman_network_set_connected(network, true); return 0; } -static int cable_disconnect(struct connman_network *network) +static int eth_network_disconnect(struct connman_network *network) { DBG("network %p", network); - connman_network_set_connected(network, FALSE); + connman_network_set_connected(network, false); return 0; } -static struct connman_network_driver cable_driver = { +static struct connman_network_driver eth_network_driver = { .name = "cable", .type = CONNMAN_NETWORK_TYPE_ETHERNET, - .probe = cable_probe, - .remove = cable_remove, - .connect = cable_connect, - .disconnect = cable_disconnect, + .probe = eth_network_probe, + .remove = eth_network_remove, + .connect = eth_network_connect, + .disconnect = eth_network_disconnect, }; static void add_network(struct connman_device *device, @@ -97,7 +97,7 @@ static void add_network(struct connman_device *device, network = connman_network_create("carrier", CONNMAN_NETWORK_TYPE_ETHERNET); - if (network == NULL) + if (!network) return; index = connman_device_get_index(device); @@ -110,7 +110,7 @@ static void add_network(struct connman_device *device, return; } - if (eth_tethering == FALSE) + if (!eth_tethering) /* * Prevent service from starting the reconnect * procedure as we do not want the DHCP client @@ -124,7 +124,7 @@ static void add_network(struct connman_device *device, static void remove_network(struct connman_device *device, struct ethernet_data *ethernet) { - if (ethernet->network == NULL) + if (!ethernet->network) return; connman_device_remove_network(device, ethernet->network); @@ -143,10 +143,10 @@ static void ethernet_newlink(unsigned flags, unsigned change, void *user_data) if ((ethernet->flags & IFF_UP) != (flags & IFF_UP)) { if (flags & IFF_UP) { DBG("power on"); - connman_device_set_powered(device, TRUE); + connman_device_set_powered(device, true); } else { DBG("power off"); - connman_device_set_powered(device, FALSE); + connman_device_set_powered(device, false); } } @@ -163,14 +163,14 @@ static void ethernet_newlink(unsigned flags, unsigned change, void *user_data) ethernet->flags = flags; } -static int ethernet_probe(struct connman_device *device) +static int eth_dev_probe(struct connman_device *device) { struct ethernet_data *ethernet; DBG("device %p", device); ethernet = g_try_new0(struct ethernet_data, 1); - if (ethernet == NULL) + if (!ethernet) return -ENOMEM; connman_device_set_data(device, ethernet); @@ -184,7 +184,7 @@ static int ethernet_probe(struct connman_device *device) return 0; } -static void ethernet_remove(struct connman_device *device) +static void eth_dev_remove(struct connman_device *device) { struct ethernet_data *ethernet = connman_device_get_data(device); @@ -199,7 +199,7 @@ static void ethernet_remove(struct connman_device *device) g_free(ethernet); } -static int ethernet_enable(struct connman_device *device) +static int eth_dev_enable(struct connman_device *device) { struct ethernet_data *ethernet = connman_device_get_data(device); @@ -208,7 +208,7 @@ static int ethernet_enable(struct connman_device *device) return connman_inet_ifup(ethernet->index); } -static int ethernet_disable(struct connman_device *device) +static int eth_dev_disable(struct connman_device *device) { struct ethernet_data *ethernet = connman_device_get_data(device); @@ -217,133 +217,40 @@ static int ethernet_disable(struct connman_device *device) return connman_inet_ifdown(ethernet->index); } -static struct connman_device_driver ethernet_driver = { +static struct connman_device_driver eth_dev_driver = { .name = "ethernet", .type = CONNMAN_DEVICE_TYPE_ETHERNET, - .probe = ethernet_probe, - .remove = ethernet_remove, - .enable = ethernet_enable, - .disable = ethernet_disable, + .probe = eth_dev_probe, + .remove = eth_dev_remove, + .enable = eth_dev_enable, + .disable = eth_dev_disable, }; -static GList *cdc_interface_list = NULL; - -static void tech_add_interface(struct connman_technology *technology, - int index, const char *name, const char *ident) -{ - DBG("index %d name %s ident %s", index, name, ident); - - if (g_list_find(cdc_interface_list, - GINT_TO_POINTER((int) index)) != NULL) - return; - - cdc_interface_list = g_list_prepend(cdc_interface_list, - (GINT_TO_POINTER((int) index))); -} - -static void tech_remove_interface(struct connman_technology *technology, - int index) -{ - DBG("index %d", index); - - cdc_interface_list = g_list_remove(cdc_interface_list, - GINT_TO_POINTER((int) index)); -} - -static void enable_tethering(struct connman_technology *technology, - const char *bridge) -{ - GList *list; - - for (list = cdc_interface_list; list; list = list->next) { - int index = GPOINTER_TO_INT(list->data); - - connman_technology_tethering_notify(technology, TRUE); - - connman_inet_ifup(index); - - connman_inet_add_to_bridge(index, bridge); - } -} - -static void disable_tethering(struct connman_technology *technology, - const char *bridge) -{ - GList *list; - - for (list = cdc_interface_list; list; list = list->next) { - int index = GPOINTER_TO_INT(list->data); - - connman_inet_remove_from_bridge(index, bridge); - - connman_inet_ifdown(index); - - connman_technology_tethering_notify(technology, FALSE); - } -} - -static int tech_set_tethering(struct connman_technology *technology, - const char *identifier, const char *passphrase, - const char *bridge, connman_bool_t enabled) -{ - DBG("bridge %s enabled %d", bridge, enabled); - - if (enabled) - enable_tethering(technology, bridge); - else - disable_tethering(technology, bridge); - - return 0; -} - -static int tech_probe(struct connman_technology *technology) +static int eth_tech_probe(struct connman_technology *technology) { return 0; } -static void tech_remove(struct connman_technology *technology) -{ - g_list_free(cdc_interface_list); - - cdc_interface_list = NULL; -} - -static struct connman_technology_driver tech_driver = { - .name = "cdc_ethernet", - .type = CONNMAN_SERVICE_TYPE_GADGET, - .probe = tech_probe, - .remove = tech_remove, - .add_interface = tech_add_interface, - .remove_interface = tech_remove_interface, - .set_tethering = tech_set_tethering, -}; - -static int eth_probe(struct connman_technology *technology) -{ - return 0; -} - -static void eth_remove(struct connman_technology *technology) +static void eth_tech_remove(struct connman_technology *technology) { DBG(""); } static GList *eth_interface_list = NULL; -static void eth_add_interface(struct connman_technology *technology, +static void eth_tech_add_interface(struct connman_technology *technology, int index, const char *name, const char *ident) { DBG("index %d name %s ident %s", index, name, ident); - if (g_list_find(eth_interface_list, - GINT_TO_POINTER((int) index)) != NULL) + if (g_list_find(eth_interface_list, GINT_TO_POINTER((int)index))) return; eth_interface_list = g_list_prepend(eth_interface_list, (GINT_TO_POINTER((int) index))); } -static void eth_remove_interface(struct connman_technology *technology, +static void eth_tech_remove_interface(struct connman_technology *technology, int index) { DBG("index %d", index); @@ -352,30 +259,34 @@ static void eth_remove_interface(struct connman_technology *technology, GINT_TO_POINTER((int) index)); } -static void eth_enable_tethering(struct connman_technology *technology, +static void eth_tech_enable_tethering(struct connman_technology *technology, const char *bridge) { GList *list; + struct ethernet_data *ethernet; for (list = eth_interface_list; list; list = list->next) { int index = GPOINTER_TO_INT(list->data); struct connman_device *device = connman_device_find_by_index(index); - if (device != NULL) - connman_device_disconnect_service(device); + if (device) { + ethernet = connman_device_get_data(device); + if (ethernet) + remove_network(device, ethernet); + } - connman_technology_tethering_notify(technology, TRUE); + connman_technology_tethering_notify(technology, true); connman_inet_ifup(index); connman_inet_add_to_bridge(index, bridge); - eth_tethering = TRUE; + eth_tethering = true; } } -static void eth_disable_tethering(struct connman_technology *technology, +static void eth_tech_disable_tethering(struct connman_technology *technology, const char *bridge) { GList *list; @@ -387,67 +298,58 @@ static void eth_disable_tethering(struct connman_technology *technology, connman_inet_remove_from_bridge(index, bridge); - connman_inet_ifdown(index); + connman_technology_tethering_notify(technology, false); - connman_technology_tethering_notify(technology, FALSE); - - if (device != NULL) + if (device) connman_device_reconnect_service(device); - eth_tethering = FALSE; + eth_tethering = false; } } -static int eth_set_tethering(struct connman_technology *technology, +static int eth_tech_set_tethering(struct connman_technology *technology, const char *identifier, const char *passphrase, - const char *bridge, connman_bool_t enabled) + const char *bridge, bool enabled) { - if (connman_technology_is_tethering_allowed( - CONNMAN_SERVICE_TYPE_ETHERNET) == FALSE) + if (!connman_technology_is_tethering_allowed( + CONNMAN_SERVICE_TYPE_ETHERNET)) return 0; DBG("bridge %s enabled %d", bridge, enabled); if (enabled) - eth_enable_tethering(technology, bridge); + eth_tech_enable_tethering(technology, bridge); else - eth_disable_tethering(technology, bridge); + eth_tech_disable_tethering(technology, bridge); return 0; } -static struct connman_technology_driver eth_driver = { +static struct connman_technology_driver eth_tech_driver = { .name = "ethernet", .type = CONNMAN_SERVICE_TYPE_ETHERNET, - .probe = eth_probe, - .remove = eth_remove, - .add_interface = eth_add_interface, - .remove_interface = eth_remove_interface, - .set_tethering = eth_set_tethering, + .probe = eth_tech_probe, + .remove = eth_tech_remove, + .add_interface = eth_tech_add_interface, + .remove_interface = eth_tech_remove_interface, + .set_tethering = eth_tech_set_tethering, }; static int ethernet_init(void) { int err; - err = connman_technology_driver_register(ð_driver); + err = connman_technology_driver_register(ð_tech_driver); if (err < 0) return err; - err = connman_network_driver_register(&cable_driver); + err = connman_network_driver_register(ð_network_driver); if (err < 0) return err; - err = connman_device_driver_register(ðernet_driver); - if (err < 0) { - connman_network_driver_unregister(&cable_driver); - return err; - } - - err = connman_technology_driver_register(&tech_driver); + err = connman_device_driver_register(ð_dev_driver); if (err < 0) { - connman_device_driver_unregister(ðernet_driver); - connman_network_driver_unregister(&cable_driver); + connman_network_driver_unregister(ð_network_driver); return err; } @@ -456,13 +358,11 @@ static int ethernet_init(void) static void ethernet_exit(void) { - connman_technology_driver_unregister(ð_driver); - - connman_technology_driver_unregister(&tech_driver); + connman_technology_driver_unregister(ð_tech_driver); - connman_network_driver_unregister(&cable_driver); + connman_network_driver_unregister(ð_network_driver); - connman_device_driver_unregister(ðernet_driver); + connman_device_driver_unregister(ð_dev_driver); } CONNMAN_PLUGIN_DEFINE(ethernet, "Ethernet interface plugin", VERSION, |