summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Luebbe <jlu@pengutronix.de>2012-02-09 12:52:29 +0100
committerMichael Olbrich <m.olbrich@pengutronix.de>2012-02-10 15:14:23 +0100
commit859ed7494212f66dc78e22dfccc875d1cad43d22 (patch)
tree03b9265fd27737629306ea3c38c8a0fe880b5bb9
parent57fa4c6cf029c52271afb5d1f27e5ddc52f40056 (diff)
downloadptxdist-859ed7494212f66dc78e22dfccc875d1cad43d22.tar.gz
ptxdist-859ed7494212f66dc78e22dfccc875d1cad43d22.tar.xz
networkmanager: update and fix Network Manager, support systemd, handle NFS root
Signed-off-by: Jan Luebbe <jlu@pengutronix.de> Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
-rw-r--r--generic/etc/NetworkManager/NetworkManager.conf5
-rw-r--r--generic/etc/init.d/NetworkManager84
-rw-r--r--generic/lib/init/nm-unmanage.sh25
-rw-r--r--generic/lib/systemd/system/NetworkManager-unmanage.service11
-rw-r--r--generic/lib/systemd/system/NetworkManager.service14
-rw-r--r--patches/NetworkManager-0.9.2.0/0001-settings-pass-config-file-name-to-settings-plugins.patch409
-rw-r--r--patches/NetworkManager-0.9.2.0/series1
-rw-r--r--rules/networkmanager.in31
-rw-r--r--rules/networkmanager.make94
9 files changed, 632 insertions, 42 deletions
diff --git a/generic/etc/NetworkManager/NetworkManager.conf b/generic/etc/NetworkManager/NetworkManager.conf
new file mode 100644
index 000000000..d8b33d914
--- /dev/null
+++ b/generic/etc/NetworkManager/NetworkManager.conf
@@ -0,0 +1,5 @@
+[main]
+plugins=ifupdown,keyfile
+
+[ifupdown]
+managed=false
diff --git a/generic/etc/init.d/NetworkManager b/generic/etc/init.d/NetworkManager
new file mode 100644
index 000000000..50a5467ad
--- /dev/null
+++ b/generic/etc/init.d/NetworkManager
@@ -0,0 +1,84 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: NetworkManager
+# Required-Start: $remote_fs dbus hal
+# Required-Stop: $remote_fs dbus hal
+# Should-Start: $syslog
+# Should-Stop: $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: network connection manager
+# Description: Daemon for automatically switching network
+# connections to the best available connection.
+### END INIT INFO
+
+set -e
+
+prefix=/usr
+exec_prefix=/usr
+sbindir=${exec_prefix}/sbin
+localstatedir=/var
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DESC="network connection manager"
+NAME="NetworkManager"
+
+DAEMON=${sbindir}/$NAME
+
+PIDDIR=${localstatedir}/run
+PIDFILE=$PIDDIR/$NAME.pid
+CONFFILE=$PIDDIR/$NAME.conf
+STATEFILE=$PIDDIR/$NAME.state
+
+DAEMON_OPTS="--config=$CONFFILE --state-file=$STATEFILE"
+
+USER=root
+
+# Gracefully exit if the package has been removed.
+test -x $DAEMON || exit 0
+
+test -f /etc/default/NetworkManager && . /etc/default/NetworkManager
+
+#
+# Function that starts the daemon/service.
+#
+d_start() {
+ /lib/init/nm-unmanage.sh
+
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --oknodo --user $USER --exec $DAEMON -- $DAEMON_OPTS --pid-file $PIDFILE
+
+}
+
+#
+# Function that stops the daemon/service.
+#
+d_stop() {
+ start-stop-daemon --stop --retry 5 --quiet --pidfile $PIDFILE \
+ --oknodo --user $USER --exec $DAEMON
+
+}
+
+
+case "$1" in
+ start)
+ echo "Starting $DESC" "$NAME"
+ d_start
+ ;;
+ stop)
+ echo "Stopping $DESC" "$NAME"
+ d_stop
+ ;;
+ restart|force-reload)
+ echo "Restarting $DESC" "$NAME"
+ d_stop
+ d_start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/generic/lib/init/nm-unmanage.sh b/generic/lib/init/nm-unmanage.sh
new file mode 100644
index 000000000..3d4cb6840
--- /dev/null
+++ b/generic/lib/init/nm-unmanage.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# configure NM to regard already configured interfaces as unmanaged (for NFS root)
+
+CONFFILE=/var/run/NetworkManager.conf
+
+if [ ! -f $CONFFILE ]; then
+ # set previously enabled interfaces to unmanaged
+ cat /etc/NetworkManager/NetworkManager.conf > $CONFFILE
+
+ UNMANAGED=""
+ for IF in $(ls /sys/class/net); do
+ IF_FLAGS="$(cat /sys/class/net/$IF/flags)"
+ if [ "$((IF_FLAGS&1))" = "1" -a "$IF" != "lo" ]; then
+ IF_ADDR="$(cat /sys/class/net/$IF/address)"
+ UNMANAGED="$UNMANAGED;mac:$IF_ADDR"
+ fi
+ done
+
+ echo "" >> $CONFFILE
+ echo "[keyfile]" >> $CONFFILE
+ echo "# unmanaged-devices added by $0" >> $CONFFILE
+ echo "unmanaged-devices=${UNMANAGED:1}" >> $CONFFILE
+fi
+
diff --git a/generic/lib/systemd/system/NetworkManager-unmanage.service b/generic/lib/systemd/system/NetworkManager-unmanage.service
new file mode 100644
index 000000000..9e41dc562
--- /dev/null
+++ b/generic/lib/systemd/system/NetworkManager-unmanage.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Network Manager configuration (ignore kernel activated network interfaces)
+Before=NetworkManager.service
+ConditionPathExists=!/var/run/NetworkManager.conf
+
+[Service]
+Type=oneshot
+ExecStart=/lib/init/nm-unmanage.sh
+
+[Install]
+WantedBy=NetworkManager.service
diff --git a/generic/lib/systemd/system/NetworkManager.service b/generic/lib/systemd/system/NetworkManager.service
new file mode 100644
index 000000000..be03e4d46
--- /dev/null
+++ b/generic/lib/systemd/system/NetworkManager.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Network Manager
+After=syslog.target
+Wants=network.target
+Before=network.target
+
+[Service]
+Type=dbus
+BusName=org.freedesktop.NetworkManager
+ExecStart=/usr/sbin/NetworkManager --no-daemon --config=/var/run/NetworkManager.conf --state-file=/var/run/NetworkManager.state
+
+[Install]
+WantedBy=multi-user.target
+Alias=dbus-org.freedesktop.NetworkManager.service
diff --git a/patches/NetworkManager-0.9.2.0/0001-settings-pass-config-file-name-to-settings-plugins.patch b/patches/NetworkManager-0.9.2.0/0001-settings-pass-config-file-name-to-settings-plugins.patch
new file mode 100644
index 000000000..634275be6
--- /dev/null
+++ b/patches/NetworkManager-0.9.2.0/0001-settings-pass-config-file-name-to-settings-plugins.patch
@@ -0,0 +1,409 @@
+From 7b7e426b653a3a342d7b0522957283d0999a9070 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com>
+Date: Tue, 15 Nov 2011 13:30:16 +0100
+Subject: [PATCH] settings: pass config file name to settings plugins
+
+Thus plugins will use the correct configuration file, even in case the name
+is specified on command line with --config.
+---
+ src/settings/nm-settings.c | 7 +++--
+ src/settings/nm-system-config-interface.h | 2 +-
+ src/settings/plugins/ifcfg-rh/plugin.c | 2 +-
+ src/settings/plugins/ifcfg-suse/plugin.c | 4 +-
+ src/settings/plugins/ifnet/net_parser.c | 13 +++++++---
+ src/settings/plugins/ifnet/plugin.c | 35 ++++++++++++++++++++++++-----
+ src/settings/plugins/ifnet/plugin.h | 2 +
+ src/settings/plugins/ifupdown/plugin.c | 28 +++++++++++-----------
+ src/settings/plugins/keyfile/plugin.c | 29 +++++++++++------------
+ src/settings/plugins/keyfile/plugin.h | 4 +-
+ 10 files changed, 78 insertions(+), 48 deletions(-)
+
+diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c
+index 09433cc..d9ee2dc 100644
+--- a/src/settings/nm-settings.c
++++ b/src/settings/nm-settings.c
+@@ -550,6 +550,7 @@ find_plugin (GSList *list, const char *pname)
+ static gboolean
+ load_plugins (NMSettings *self, const char **plugins, GError **error)
+ {
++ NMSettingsPrivate *priv = NM_SETTINGS_GET_PRIVATE (self);
+ GSList *list = NULL;
+ const char **iter;
+ gboolean success = TRUE;
+@@ -559,7 +560,7 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
+ char *full_name, *path;
+ const char *pname = *iter;
+ GObject *obj;
+- GObject * (*factory_func) (void);
++ GObject * (*factory_func) (const char *);
+
+ /* strip leading spaces */
+ while (isblank (*pname))
+@@ -602,7 +603,7 @@ load_plugins (NMSettings *self, const char **plugins, GError **error)
+ break;
+ }
+
+- obj = (*factory_func) ();
++ obj = (*factory_func) (priv->config_file);
+ if (!obj || !NM_IS_SYSTEM_CONFIG_INTERFACE (obj)) {
+ g_set_error (error, 0, 0,
+ "Plugin '%s' returned invalid system config object.",
+@@ -1573,7 +1574,7 @@ nm_settings_new (const char *config_file,
+ }
+
+ /* Add the keyfile plugin last */
+- keyfile_plugin = nm_settings_keyfile_plugin_new ();
++ keyfile_plugin = nm_settings_keyfile_plugin_new (config_file);
+ g_assert (keyfile_plugin);
+ add_plugin (self, NM_SYSTEM_CONFIG_INTERFACE (keyfile_plugin));
+
+diff --git a/src/settings/nm-system-config-interface.h b/src/settings/nm-system-config-interface.h
+index 96a6406..bbe74d4 100644
+--- a/src/settings/nm-system-config-interface.h
++++ b/src/settings/nm-system-config-interface.h
+@@ -39,7 +39,7 @@ G_BEGIN_DECLS
+ /* Plugin's factory function that returns a GObject that implements
+ * NMSystemConfigInterface.
+ */
+-GObject * nm_system_config_factory (void);
++GObject * nm_system_config_factory (const char *config_file);
+
+ #define NM_TYPE_SYSTEM_CONFIG_INTERFACE (nm_system_config_interface_get_type ())
+ #define NM_SYSTEM_CONFIG_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SYSTEM_CONFIG_INTERFACE, NMSystemConfigInterface))
+diff --git a/src/settings/plugins/ifcfg-rh/plugin.c b/src/settings/plugins/ifcfg-rh/plugin.c
+index b4be4cb..39c323c 100644
+--- a/src/settings/plugins/ifcfg-rh/plugin.c
++++ b/src/settings/plugins/ifcfg-rh/plugin.c
+@@ -790,7 +790,7 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
+ }
+
+ G_MODULE_EXPORT GObject *
+-nm_system_config_factory (void)
++nm_system_config_factory (const char *config_file)
+ {
+ static SCPluginIfcfg *singleton = NULL;
+ SCPluginIfcfgPrivate *priv;
+diff --git a/src/settings/plugins/ifcfg-suse/plugin.c b/src/settings/plugins/ifcfg-suse/plugin.c
+index 78db56e..2ec90d8 100644
+--- a/src/settings/plugins/ifcfg-suse/plugin.c
++++ b/src/settings/plugins/ifcfg-suse/plugin.c
+@@ -18,7 +18,7 @@
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+- * (C) Copyright 2007 - 2009 Red Hat, Inc.
++ * (C) Copyright 2007 - 2011 Red Hat, Inc.
+ * (C) Copyright 2007 - 2008 Novell, Inc.
+ */
+
+@@ -309,7 +309,7 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
+ }
+
+ G_MODULE_EXPORT GObject *
+-nm_system_config_factory (void)
++nm_system_config_factory (const char *config_file)
+ {
+ static SCPluginIfcfg *singleton = NULL;
+
+diff --git a/src/settings/plugins/ifnet/net_parser.c b/src/settings/plugins/ifnet/net_parser.c
+index a48103d..29a1f34 100644
+--- a/src/settings/plugins/ifnet/net_parser.c
++++ b/src/settings/plugins/ifnet/net_parser.c
+@@ -22,6 +22,7 @@
+ #include <string.h>
+ #include <nm-system-config-interface.h>
+ #include <stdio.h>
++#include "plugin.h"
+ #include "net_parser.h"
+ #include "net_utils.h"
+
+@@ -106,7 +107,6 @@ ignore_connection_name (const char *name)
+ if (strlen (name) == 12 && is_hex (name))
+ result = TRUE;
+ return result;
+-
+ }
+
+ static gboolean
+@@ -195,26 +195,31 @@ destroy_connection_config (GHashTable * conn)
+ g_hash_table_destroy (conn);
+ }
+
+-// read settings from /etc/NetworkManager/nm-system-settings.conf
++/* Read settings from NetworkManager's config file */
+ const char *
+ ifnet_get_global_setting (const char *group, const char *key)
+ {
+ GError *error = NULL;
+ GKeyFile *keyfile = g_key_file_new ();
+ gchar *result = NULL;
++ const char *conf_file;
++
++ /* Get confing file name from plugin. */
++ conf_file = ifnet_plugin_get_conf_file ();
+
+ if (!g_key_file_load_from_file (keyfile,
+- IFNET_SYSTEM_SETTINGS_KEY_FILE,
++ conf_file,
+ G_KEY_FILE_NONE, &error)) {
+ PLUGIN_WARN (IFNET_PLUGIN_NAME,
+ "loading system config file (%s) caused error: (%d) %s",
+- IFNET_SYSTEM_SETTINGS_KEY_FILE,
++ conf_file,
+ error ? error->code : -1, error
+ && error->message ? error->message : "(unknown)");
+ } else {
+ result = g_key_file_get_string (keyfile, group, key, &error);
+ }
+ g_key_file_free (keyfile);
++
+ return result;
+ }
+
+diff --git a/src/settings/plugins/ifnet/plugin.c b/src/settings/plugins/ifnet/plugin.c
+index 5908368..8e66297 100644
+--- a/src/settings/plugins/ifnet/plugin.c
++++ b/src/settings/plugins/ifnet/plugin.c
+@@ -48,6 +48,7 @@
+ typedef struct {
+ GHashTable *config_connections;
+ gchar *hostname;
++ char *conf_file;
+ gboolean unmanaged_well_known;
+
+ GFileMonitor *hostname_monitor;
+@@ -494,6 +495,7 @@ dispose (GObject * object)
+ }
+
+ g_free (priv->hostname);
++ g_free (priv->conf_file);
+ ifnet_destroy ();
+ wpa_parser_destroy ();
+ G_OBJECT_CLASS (sc_plugin_ifnet_parent_class)->dispose (object);
+@@ -527,16 +529,37 @@ sc_plugin_ifnet_class_init (SCPluginIfnetClass * req_class)
+ NM_SYSTEM_CONFIG_INTERFACE_HOSTNAME);
+ }
+
++const char *
++ifnet_plugin_get_conf_file (void)
++{
++ SCPluginIfnet *ifnet_plugin;
++ SCPluginIfnetPrivate *priv;
++
++ /* Get config file name. Plugin's singleton has already been created
++ * with correct config file path, so the string passed here has no efect
++ * and we get the valid file name.
++ */
++ ifnet_plugin = SC_PLUGIN_IFNET (nm_system_config_factory ("fake string"));
++ priv = SC_PLUGIN_IFNET_GET_PRIVATE (ifnet_plugin);
++ g_object_unref (ifnet_plugin);
++
++ return priv->conf_file;
++}
++
+ G_MODULE_EXPORT GObject *
+-nm_system_config_factory (void)
++nm_system_config_factory (const char *config_file)
+ {
+ static SCPluginIfnet *singleton = NULL;
++ SCPluginIfnetPrivate *priv;
+
+- if (!singleton)
+- singleton
+- =
+- SC_PLUGIN_IFNET (g_object_new (SC_TYPE_PLUGIN_IFNET, NULL));
+- else
++ if (!singleton) {
++ singleton = SC_PLUGIN_IFNET (g_object_new (SC_TYPE_PLUGIN_IFNET, NULL));
++ if (singleton) {
++ priv = SC_PLUGIN_IFNET_GET_PRIVATE (singleton);
++ priv->conf_file = strdup (config_file);
++ }
++ } else
+ g_object_ref (singleton);
++
+ return G_OBJECT (singleton);
+ }
+diff --git a/src/settings/plugins/ifnet/plugin.h b/src/settings/plugins/ifnet/plugin.h
+index 83099b6..eecab15 100644
+--- a/src/settings/plugins/ifnet/plugin.h
++++ b/src/settings/plugins/ifnet/plugin.h
+@@ -43,5 +43,7 @@ struct _SCPluginIfnetClass {
+ GObjectClass parent;
+ };
+
++const char * ifnet_plugin_get_conf_file (void);
++
+ GType sc_plugin_ifnet_get_type (void);
+ #endif
+diff --git a/src/settings/plugins/ifupdown/plugin.c b/src/settings/plugins/ifupdown/plugin.c
+index 9679ede..c0c509a 100644
+--- a/src/settings/plugins/ifupdown/plugin.c
++++ b/src/settings/plugins/ifupdown/plugin.c
+@@ -19,7 +19,7 @@
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2007,2008 Canonical Ltd.
+- * (C) Copyright 2009 Red Hat, Inc.
++ * (C) Copyright 2009 - 2011 Red Hat, Inc.
+ */
+
+ #include <string.h>
+@@ -60,9 +60,6 @@
+ #define IFUPDOWN_PLUGIN_INFO "(C) 2008 Canonical Ltd. To report bugs please use the NetworkManager mailing list."
+ #define IFUPDOWN_SYSTEM_HOSTNAME_FILE "/etc/hostname"
+
+-#define IFUPDOWN_SYSTEM_SETTINGS_KEY_FILE SYSCONFDIR "/NetworkManager/NetworkManager.conf"
+-#define IFUPDOWN_OLD_SYSTEM_SETTINGS_KEY_FILE SYSCONFDIR "/NetworkManager/nm-system-settings.conf"
+-
+ #define IFUPDOWN_KEY_FILE_GROUP "ifupdown"
+ #define IFUPDOWN_KEY_FILE_KEY_MANAGED "managed"
+ #define IFUPDOWN_UNMANAGE_WELL_KNOWN_DEFAULT TRUE
+@@ -81,7 +78,7 @@ typedef struct {
+ GHashTable *well_known_interfaces;
+ GHashTable *well_known_ifaces;
+ gboolean unmanage_well_known;
+- const char *conf_file;
++ char *conf_file;
+
+ gulong inotify_event_id;
+ int inotify_system_hostname_wd;
+@@ -448,12 +445,7 @@ SCPluginIfupdown_init (NMSystemConfigInterface *config)
+ g_list_free (keys);
+ g_hash_table_destroy (auto_ifaces);
+
+- /* Find the config file */
+- if (g_file_test (IFUPDOWN_SYSTEM_SETTINGS_KEY_FILE, G_FILE_TEST_EXISTS))
+- priv->conf_file = IFUPDOWN_SYSTEM_SETTINGS_KEY_FILE;
+- else
+- priv->conf_file = IFUPDOWN_OLD_SYSTEM_SETTINGS_KEY_FILE;
+-
++ /* Read the config file to find out whether to manage interfaces */
+ keyfile = g_key_file_new ();
+ if (!g_key_file_load_from_file (keyfile,
+ priv->conf_file,
+@@ -706,20 +698,28 @@ GObject__dispose (GObject *object)
+ if (priv->well_known_interfaces)
+ g_hash_table_destroy(priv->well_known_interfaces);
+
++ g_free (priv->conf_file);
++
+ if (priv->client)
+ g_object_unref (priv->client);
+
++
+ G_OBJECT_CLASS (sc_plugin_ifupdown_parent_class)->dispose (object);
+ }
+
+ G_MODULE_EXPORT GObject *
+-nm_system_config_factory (void)
++nm_system_config_factory (const char *config_file)
+ {
+ static SCPluginIfupdown *singleton = NULL;
++ SCPluginIfupdownPrivate *priv;
+
+- if (!singleton)
++ if (!singleton) {
+ singleton = SC_PLUGIN_IFUPDOWN (g_object_new (SC_TYPE_PLUGIN_IFUPDOWN, NULL));
+- else
++ if (singleton) {
++ priv = SC_PLUGIN_IFUPDOWN_GET_PRIVATE (singleton);
++ priv->conf_file = strdup (config_file);
++ }
++ } else
+ g_object_ref (singleton);
+
+ return G_OBJECT (singleton);
+diff --git a/src/settings/plugins/keyfile/plugin.c b/src/settings/plugins/keyfile/plugin.c
+index af69c20..8d093df 100644
+--- a/src/settings/plugins/keyfile/plugin.c
++++ b/src/settings/plugins/keyfile/plugin.c
+@@ -42,9 +42,6 @@
+ #include "common.h"
+ #include "utils.h"
+
+-#define CONF_FILE SYSCONFDIR "/NetworkManager/NetworkManager.conf"
+-#define OLD_CONF_FILE SYSCONFDIR "/NetworkManager/nm-system-settings.conf"
+-
+ static char *plugin_get_hostname (SCPluginKeyfile *plugin);
+ static void system_config_interface_init (NMSystemConfigInterface *system_config_interface_class);
+
+@@ -60,7 +57,7 @@ typedef struct {
+ GFileMonitor *monitor;
+ guint monitor_id;
+
+- const char *conf_file;
++ char *conf_file;
+ GFileMonitor *conf_file_monitor;
+ guint conf_file_monitor_id;
+
+@@ -517,14 +514,6 @@ plugin_set_hostname (SCPluginKeyfile *plugin, const char *hostname)
+ static void
+ sc_plugin_keyfile_init (SCPluginKeyfile *plugin)
+ {
+- SCPluginKeyfilePrivate *priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (plugin);
+-
+- if (g_file_test (CONF_FILE, G_FILE_TEST_EXISTS))
+- priv->conf_file = CONF_FILE;
+- else
+- priv->conf_file = OLD_CONF_FILE;
+-
+- priv->hostname = plugin_get_hostname (plugin);
+ }
+
+ static void
+@@ -597,6 +586,7 @@ dispose (GObject *object)
+ }
+
+ g_free (priv->hostname);
++ g_free (priv->conf_file);
+
+ if (priv->hash)
+ g_hash_table_destroy (priv->hash);
+@@ -642,13 +632,22 @@ system_config_interface_init (NMSystemConfigInterface *system_config_interface_c
+ }
+
+ GObject *
+-nm_settings_keyfile_plugin_new (void)
++nm_settings_keyfile_plugin_new (const char *config_file)
+ {
+ static SCPluginKeyfile *singleton = NULL;
++ SCPluginKeyfilePrivate *priv;
+
+- if (!singleton)
++ if (!singleton) {
+ singleton = SC_PLUGIN_KEYFILE (g_object_new (SC_TYPE_PLUGIN_KEYFILE, NULL));
+- else
++ if (singleton) {
++ priv = SC_PLUGIN_KEYFILE_GET_PRIVATE (singleton);
++
++ priv->conf_file = strdup (config_file);
++
++ /* plugin_set_hostname() has to be called *after* priv->conf_file is set */
++ priv->hostname = plugin_get_hostname (singleton);
++ }
++ } else
+ g_object_ref (singleton);
+
+ return G_OBJECT (singleton);
+diff --git a/src/settings/plugins/keyfile/plugin.h b/src/settings/plugins/keyfile/plugin.h
+index af5147e..05d4e2b 100644
+--- a/src/settings/plugins/keyfile/plugin.h
++++ b/src/settings/plugins/keyfile/plugin.h
+@@ -16,7 +16,7 @@
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2008 Novell, Inc.
+- * Copyright (C) 2008 Red Hat, Inc.
++ * Copyright (C) 2008 - 2011 Red Hat, Inc.
+ */
+
+ #ifndef _PLUGIN_H_
+@@ -43,6 +43,6 @@ GType sc_plugin_keyfile_get_type (void);
+
+ GQuark keyfile_plugin_error_quark (void);
+
+-GObject *nm_settings_keyfile_plugin_new (void);
++GObject *nm_settings_keyfile_plugin_new (const char *config_file);
+
+ #endif /* _PLUGIN_H_ */
diff --git a/patches/NetworkManager-0.9.2.0/series b/patches/NetworkManager-0.9.2.0/series
new file mode 100644
index 000000000..2a933dbbe
--- /dev/null
+++ b/patches/NetworkManager-0.9.2.0/series
@@ -0,0 +1 @@
+0001-settings-pass-config-file-name-to-settings-plugins.patch
diff --git a/rules/networkmanager.in b/rules/networkmanager.in
index e29c5d562..ac895b71e 100644
--- a/rules/networkmanager.in
+++ b/rules/networkmanager.in
@@ -1,19 +1,36 @@
-## SECTION=shell_and_console
+## SECTION=networking
-config NETWORKMANAGER
+menuconfig NETWORKMANAGER
tristate
- depends on BROKEN
+ select DHCP
+ select DHCP_CLIENT
select WIRELESS
+ select UDEV
+ select UDEV_LIBGUDEV
select DBUS_GLIB
select LIBNL
select LIBUUID
- # FIXME: hal can be configured without policy-kit, but networkmanager depends on it
- select HAL
- select HAL_POLKIT
- prompt "networkmanager"
+ select WPA_SUPPLICANT
+ select GNUTLS
+ select HOST_INTLTOOL
+ prompt "networkmanager "
help
NetworkManager is a tool to automate network configuration as far as
possible. The project web site is here:
http://projects.gnome.org/NetworkManager/
+if NETWORKMANAGER
+
+config NETWORKMANAGER_STARTSCRIPT
+ bool
+ default y
+ prompt "install /etc/init.d/NetworkManager"
+
+config NETWORKMANAGER_SYSTEMD_UNIT
+ bool
+ default y
+ depends on SYSTEMD
+ prompt "install systemd unit files for Network Manager"
+
+endif
diff --git a/rules/networkmanager.make b/rules/networkmanager.make
index e7eec7a56..d1b72e5a9 100644
--- a/rules/networkmanager.make
+++ b/rules/networkmanager.make
@@ -1,6 +1,7 @@
# -*-makefile-*-
#
# Copyright (C) 2009 by Robert Schwebel <r.schwebel@pengutronix.de>
+# (C) 2012 by Jan Luebbe <j.luebbe@pengutronix.de>
#
# See CREDITS for details about who has contributed to this project.
#
@@ -16,57 +17,39 @@ PACKAGES-$(PTXCONF_NETWORKMANAGER) += networkmanager
#
# Paths and names
#
-NETWORKMANAGER_VERSION := 0.7.0
-NETWORKMANAGER_MD5 :=
+NETWORKMANAGER_VERSION := 0.9.2.0
+NETWORKMANAGER_MD5 := d7dce01e97758253bc4ed81d7b86045f
NETWORKMANAGER := NetworkManager-$(NETWORKMANAGER_VERSION)
-NETWORKMANAGER_SUFFIX := tar.gz
-NETWORKMANAGER_URL := http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.7/$(NETWORKMANAGER).$(NETWORKMANAGER_SUFFIX)
+NETWORKMANAGER_SUFFIX := tar.xz
+NETWORKMANAGER_URL := http://ftp.gnome.org/pub/GNOME/sources/NetworkManager/0.9/$(NETWORKMANAGER).$(NETWORKMANAGER_SUFFIX)
NETWORKMANAGER_SOURCE := $(SRCDIR)/$(NETWORKMANAGER).$(NETWORKMANAGER_SUFFIX)
NETWORKMANAGER_DIR := $(BUILDDIR)/$(NETWORKMANAGER)
# ----------------------------------------------------------------------------
-# Get
-# ----------------------------------------------------------------------------
-
-$(NETWORKMANAGER_SOURCE):
- @$(call targetinfo)
- @$(call get, NETWORKMANAGER)
-
-# ----------------------------------------------------------------------------
# Prepare
# ----------------------------------------------------------------------------
#
# autoconf
#
-NETWORKMANAGER_AUTOCONF := \
+NETWORKMANAGER_CONF_TOOL := autoconf
+NETWORKMANAGER_CONF_OPT := \
$(CROSS_AUTOCONF_USR) \
+ --disable-static \
--enable-shared \
- --enable-static \
+ --disable-nls \
+ --disable-rpath \
+ --disable-qt \
+ --disable-ppp \
+ --disable-wimax \
+ --disable-polkit \
--enable-more-warnings \
--disable-gtk-doc \
- --with-gnu-ld \
--without-docs \
+ --with-gnu-ld \
+ --with-crypto=gnutls \
--with-distro=debian
-# --with-tags[=TAGS] include additional configurations [automatic]
-# --with-distro=DISTRO Specify the Linux distribution to target: One of
-# redhat, suse, gentoo, debian, arch, slackware, paldo
-# or mandriva
-# --with-crypto=nss | gnutls
-# Cryptography library to use for certificate and key
-# operations
-# --with-dbus-sys-dir=DIR where D-BUS system.d directory is
-# --with-pppd-plugin-dir=DIR
-# path to the pppd plugins directory
-# --with-dhcp-client=dhcpcd|dhclient
-# path to the chosen dhcp client
-# --with-resolvconf=yes|no|path
-# Enable resolvconf support
-# --with-system-ca-path=/path/to/ssl/certs
-# path to system CA certificates
-# --with-html-dir=PATH path to installed docs
-
# ----------------------------------------------------------------------------
# Target-Install
# ----------------------------------------------------------------------------
@@ -77,10 +60,51 @@ $(STATEDIR)/networkmanager.targetinstall:
@$(call install_init, networkmanager)
@$(call install_fixup, networkmanager,PRIORITY,optional)
@$(call install_fixup, networkmanager,SECTION,base)
- @$(call install_fixup, networkmanager,AUTHOR,"Robert Schwebel <r.schwebel@pengutronix.de>")
+ @$(call install_fixup, networkmanager,AUTHOR,"Jan Luebbe <j.luebbe@pengutronix.de>")
@$(call install_fixup, networkmanager,DESCRIPTION,missing)
- @$(call install_copy, networkmanager, 0, 0, 0755, $(NETWORKMANAGER_DIR)/foobar, /dev/null)
+ @$(call install_alternative, networkmanager, 0, 0, 0644, /etc/NetworkManager/NetworkManager.conf)
+ @$(call install_copy, networkmanager, 0, 0, 0755, /etc/NetworkManager/dispatcher.d/)
+ @$(call install_copy, networkmanager, 0, 0, 0755, /etc/NetworkManager/system-connections/)
+
+# # unmanage NFS root devices
+ @$(call install_alternative, networkmanager, 0, 0, 0755, /lib/init/nm-unmanage.sh)
+
+ifdef PTXCONF_INITMETHOD_BBINIT
+ifdef PTXCONF_NETWORKMANAGER_STARTSCRIPT
+ @$(call install_alternative, networkmanager, 0, 0, 0755, /etc/init.d/NetworkManager)
+
+ifneq ($(call remove_quotes, $(PTXCONF_NETWORKMANAGER_BBINIT_LINK)),)
+ @$(call install_link, networkmanager, \
+ ../init.d/NetworkManager, \
+ /etc/rc.d/$(PTXCONF_NETWORKMANAGER_BBINIT_LINK))
+endif
+endif
+endif
+ifdef PTXCONF_NETWORKMANAGER_SYSTEMD_UNIT
+ @$(call install_alternative, networkmanager, 0, 0, 0644, \
+ /lib/systemd/system/NetworkManager.service)
+ @$(call install_link, networkmanager, ../NetworkManager.service, \
+ /lib/systemd/system/multi-user.target.wants/NetworkManager.service)
+ @$(call install_alternative, networkmanager, 0, 0, 0644, \
+ /lib/systemd/system/NetworkManager-unmanage.service)
+ @$(call install_link, networkmanager, ../NetworkManager-unmanage.service, \
+ /lib/systemd/system/NetworkManager.service.wants/NetworkManager-unmanage.service)
+endif
+
+ @$(call install_copy, networkmanager, 0, 0, 0755, -, /usr/sbin/NetworkManager)
+ @$(call install_copy, networkmanager, 0, 0, 0755, -, /usr/bin/nm-online)
+ @$(call install_copy, networkmanager, 0, 0, 0755, -, /usr/bin/nm-tool)
+ @$(call install_copy, networkmanager, 0, 0, 0755, -, /usr/bin/nmcli)
+
+ @$(call install_tree, networkmanager, 0, 0, -, /usr/libexec/)
+
+ @$(call install_lib, networkmanager, 0, 0, 0644, NetworkManager/libnm-settings-plugin-ifupdown)
+ @$(call install_lib, networkmanager, 0, 0, 0644, libnm-util)
+ @$(call install_lib, networkmanager, 0, 0, 0644, libnm-glib)
+
+ @$(call install_tree, networkmanager, 0, 0, -, /etc/dbus-1/system.d/)
+ @$(call install_tree, networkmanager, 0, 0, -, /usr/share/dbus-1/system-services/)
@$(call install_finish, networkmanager)