From 37fbd0590c56f5386bf16710568f6adf7153177c Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 12 Apr 2009 19:52:14 +0200 Subject: [PATCH] Add basic IP configuration framework --- include/Makefile.am | 2 +- include/ipconfig.h | 54 +++++++++++++++++++++++++++++++++++++++++ src/Makefile.am | 4 +-- src/connman.h | 2 ++ src/ipconfig.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 include/ipconfig.h create mode 100644 src/ipconfig.c diff --git a/include/Makefile.am b/include/Makefile.am index 25f9b30..d6dbc30 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,7 +1,7 @@ includedir = @includedir@/connman -include_HEADERS = types.h log.h plugin.h security.h resolver.h \ +include_HEADERS = types.h log.h plugin.h security.h resolver.h ipconfig.h \ storage.h device.h network.h notifier.h nodist_include_HEADERS = version.h diff --git a/include/ipconfig.h b/include/ipconfig.h new file mode 100644 index 0000000..9e92c69 --- /dev/null +++ b/include/ipconfig.h @@ -0,0 +1,54 @@ +/* + * + * Connection Manager + * + * Copyright (C) 2007-2009 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 + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __CONNMAN_IPCONFIG_H +#define __CONNMAN_IPCONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * SECTION:ipconfig + * @title: IP configuration premitives + * @short_description: Functions for registering IP configuration modules + */ + +#define CONNMAN_IPCONFIG_PRIORITY_LOW -100 +#define CONNMAN_IPCONFIG_PRIORITY_DEFAULT 0 +#define CONNMAN_IPCONFIG_PRIORITY_HIGH 100 + +struct connman_ipconfig { + const char *name; + int priority; + int (*request) (const char *interface); + int (*release) (const char *interface); + int (*renew) (const char *interface); +}; + +extern int connman_ipconfig_register(struct connman_ipconfig *ipconfig); +extern void connman_ipconfig_unregister(struct connman_ipconfig *ipconfig); + +#ifdef __cplusplus +} +#endif + +#endif /* __CONNMAN_IPCONFIG_H */ diff --git a/src/Makefile.am b/src/Makefile.am index e0ccdae..9051c7f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -10,8 +10,8 @@ sbin_PROGRAMS = connmand connmand_SOURCES = main.c connman.h log.c selftest.c error.c plugin.c \ element.c device.c network.c connection.c \ manager.c profile.c service.c agent.c \ - security.c resolver.c notifier.c storage.c \ - ipv4.c detect.c rtnl.c dbus.c + security.c resolver.c ipconfig.c notifier.c \ + storage.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 a97dfad..67f7520 100644 --- a/src/connman.h +++ b/src/connman.h @@ -79,6 +79,8 @@ int __connman_security_check_privilege(DBusMessage *message, const char *__connman_ipv4_method2string(enum connman_ipv4_method method); enum connman_ipv4_method __connman_ipv4_string2method(const char *method); +#include + #include int __connman_resolver_init(void); diff --git a/src/ipconfig.c b/src/ipconfig.c new file mode 100644 index 0000000..1c8f296 --- /dev/null +++ b/src/ipconfig.c @@ -0,0 +1,67 @@ +/* + * + * Connection Manager + * + * Copyright (C) 2007 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 + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "connman.h" + +static GSList *ipconfig_list = NULL; + +static gint compare_priority(gconstpointer a, gconstpointer b) +{ + const struct connman_ipconfig *ipconfig1 = a; + const struct connman_ipconfig *ipconfig2 = b; + + return ipconfig2->priority - ipconfig1->priority; +} + +/** + * connman_ipconfig_register: + * @ipconfig: IP configuration module + * + * Register a new IP configuration module + * + * Returns: %0 on success + */ +int connman_ipconfig_register(struct connman_ipconfig *ipconfig) +{ + DBG("ipconfig %p name %s", ipconfig, ipconfig->name); + + ipconfig_list = g_slist_insert_sorted(ipconfig_list, ipconfig, + compare_priority); + + return 0; +} + +/** + * connman_ipconfig_unregister: + * @ipconfig: IP configuration module + * + * Remove a previously registered IP configuration module. + */ +void connman_ipconfig_unregister(struct connman_ipconfig *ipconfig) +{ + DBG("ipconfig %p name %s", ipconfig, ipconfig->name); + + ipconfig_list = g_slist_remove(ipconfig_list, ipconfig); +} -- 1.7.9.5