From: Marcel Holtmann Date: Mon, 5 Jan 2009 17:15:15 +0000 (+0100) Subject: Move IPv4 handling into daemon core X-Git-Tag: 2.0_alpha~4129 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ef365b56fb876d1e02bbb7259f77c1945524df06;p=framework%2Fconnectivity%2Fconnman.git Move IPv4 handling into daemon core --- diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 71ae0cf..de4b58b 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -1,7 +1,7 @@ plugindir = $(libdir)/connman/plugins -plugin_LTLIBRARIES = ipv4.la +plugin_LTLIBRARIES = if LOOPBACK plugin_LTLIBRARIES += loopback.la @@ -53,8 +53,6 @@ plugin_LTLIBRARIES += hso.la hso_la_SOURCES = hso.c modem.h modem.c endif -ipv4_la_SOURCES = ipv4.c inet.h inet.c - if UDHCP plugin_LTLIBRARIES += udhcp.la diff --git a/src/Makefile.am b/src/Makefile.am index 54c06d8..a1cfcc2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,7 +8,7 @@ sbin_PROGRAMS = connmand connmand_SOURCES = main.c connman.h log.c selftest.c error.c plugin.c \ profile.c element.c device.c network.c connection.c \ security.c resolver.c storage.c manager.c agent.c \ - detect.c rtnl.c dbus.c + ipv4.c detect.c rtnl.c dbus.c if UDEV connmand_SOURCES += udev.c diff --git a/src/connman.h b/src/connman.h index b97d835..698c007 100644 --- a/src/connman.h +++ b/src/connman.h @@ -131,6 +131,9 @@ static inline void __connman_element_unlock(struct connman_element *element) int __connman_detect_init(void); void __connman_detect_cleanup(void); +int __connman_ipv4_init(void); +void __connman_ipv4_cleanup(void); + int __connman_connection_init(void); void __connman_connection_cleanup(void); diff --git a/src/element.c b/src/element.c index 2c7e755..eb26ae6 100644 --- a/src/element.c +++ b/src/element.c @@ -1556,6 +1556,7 @@ void __connman_element_start(void) started = TRUE; __connman_connection_init(); + __connman_ipv4_init(); __connman_detect_init(); } @@ -1564,6 +1565,7 @@ void __connman_element_stop(void) DBG(""); __connman_detect_cleanup(); + __connman_ipv4_cleanup(); __connman_connection_cleanup(); } diff --git a/plugins/ipv4.c b/src/ipv4.c similarity index 89% rename from plugins/ipv4.c rename to src/ipv4.c index c73c729..4518d97 100644 --- a/plugins/ipv4.c +++ b/src/ipv4.c @@ -31,21 +31,7 @@ #include #include -#define CONNMAN_API_SUBJECT_TO_CHANGE -#include -#include -#include -#include -#include - -#include "inet.h" - -enum connman_ipv4_method { - CONNMAN_IPV4_METHOD_UNKNOWN = 0, - CONNMAN_IPV4_METHOD_OFF = 1, - CONNMAN_IPV4_METHOD_STATIC = 2, - CONNMAN_IPV4_METHOD_DHCP = 3, -}; +#include "connman.h" struct connman_ipv4 { enum connman_ipv4_method method; @@ -152,6 +138,31 @@ static int clear_ipv4(struct connman_element *element) return 0; } +static char *index2name(int index) +{ + struct ifreq ifr; + int sk, err; + + if (index < 0) + return NULL; + + sk = socket(PF_INET, SOCK_DGRAM, 0); + if (sk < 0) + return NULL; + + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_ifindex = index; + + err = ioctl(sk, SIOCGIFNAME, &ifr); + + close(sk); + + if (err < 0) + return NULL; + + return strdup(ifr.ifr_name); +} + static int ipv4_probe(struct connman_element *element) { struct connman_element *connection; @@ -189,7 +200,7 @@ static int ipv4_probe(struct connman_element *element) connection->type = CONNMAN_ELEMENT_TYPE_CONNECTION; connection->index = element->index; - connection->devname = inet_index2name(element->index); + connection->devname = index2name(element->index); if (connman_element_register(connection, element) < 0) connman_element_unref(connection); @@ -207,19 +218,17 @@ static void ipv4_remove(struct connman_element *element) static struct connman_driver ipv4_driver = { .name = "ipv4", .type = CONNMAN_ELEMENT_TYPE_IPV4, + .priority = CONNMAN_DRIVER_PRIORITY_LOW, .probe = ipv4_probe, .remove = ipv4_remove, }; -static int ipv4_init(void) +int __connman_ipv4_init(void) { return connman_driver_register(&ipv4_driver); } -static void ipv4_exit(void) +void __connman_ipv4_cleanup(void) { connman_driver_unregister(&ipv4_driver); } - -CONNMAN_PLUGIN_DEFINE(ipv4, "IPv4 configuration plugin", VERSION, - ipv4_init, ipv4_exit)