2006-03-15 Robert Love <rml@novell.com>

* src/dhcp-manager/nm-dhcp-manager.c: Do not start dhcdbd, but rely on
	  the system init scripts (or some other mechanism) starting it (or a
	  compatible DBUS service) before NetworkManager runs.  This means that
	  distributions might need to update their init scripts.  This fixes
	  possible races and is quite a bit cleaner.
	* initscript/SUSE/networkmanager.in: Update to start dhcdbd before
	  starting the NetworkManager daemon.


git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1607 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Robert Love 2006-03-15 15:32:37 +00:00 committed by Robert Love
parent f7b52f76db
commit c7e71729b7
3 changed files with 29 additions and 39 deletions

View file

@ -1,3 +1,14 @@
2006-03-15 Robert Love <rml@novell.com>
* src/dhcp-manager/nm-dhcp-manager.c: Do not start dhcdbd, but rely on
the system init scripts (or some other mechanism) starting it (or a
compatible DBUS service) before NetworkManager runs. This means that
distributions might need to update their init scripts. This fixes
possible races and is quite a bit cleaner.
* initscript/SUSE/networkmanager.in: Update to start dhcdbd before
starting the NetworkManager daemon.
2006-03-14 Robert Love <rml@novell.com>
* src/backends/NetworkManagerSuSE.c: Check that we have a valid AP

View file

@ -10,6 +10,9 @@
sbindir=@sbindir@
DHCDBD_BIN=${sinbidr}/dhcdbd
test -x $DHCDBD_BIN || exit 5
NETWORKMANAGER_BIN=${sbindir}/NetworkManager
test -x $NETWORKMANAGER_BIN || exit 5
@ -18,6 +21,12 @@ rc_reset
case "$1" in
start)
checkproc $DHCDBD_BIN
if [ $? != 0 ]; then
echo -n "Starting the DHCP DBUS Daemon"
startproc $DHCDBD_BIN --system
rc_status -v
fi
checkproc $NETWORKMANAGER_BIN
if [ $? = 0 ]; then
echo -n "NetworkManager already running"
@ -32,6 +41,8 @@ case "$1" in
echo -n "Shutting down the NetworkManager"
killproc -TERM $NETWORKMANAGER_BIN
rc_status -v
echo -n "Shutting down the DHCP DBUS Daemon"
killproc -TERM $DHCDBD_BIN
;;
restart)
$0 stop
@ -39,6 +50,9 @@ case "$1" in
rc_status
;;
status)
echo -n "Checking for the DHCP DBUS Daemon: "
checkproc $DHCDBD_BIN
rc_status -v
echo -n "Checking for the NetworkManager: "
checkproc $NETWORKMANAGER_BIN
rc_status -v

View file

@ -73,39 +73,6 @@ static gboolean state_is_down (guint8 state)
}
/*
* nm_dhcp_manager_exec_daemon
*
* Launch the DHCP daemon.
*
*/
static gboolean nm_dhcp_manager_exec_daemon (NMDHCPManager *manager)
{
GPtrArray *dhcp_argv;
GError *error = NULL;
GPid pid;
g_return_val_if_fail (manager != NULL, FALSE);
dhcp_argv = g_ptr_array_new ();
g_ptr_array_add (dhcp_argv, (gpointer) DHCDBD_BINARY_PATH);
g_ptr_array_add (dhcp_argv, (gpointer) "--system");
g_ptr_array_add (dhcp_argv, NULL);
if (!g_spawn_async ("/", (char **) dhcp_argv->pdata, NULL, 0, NULL, NULL, &pid, &error))
{
g_ptr_array_free (dhcp_argv, TRUE);
nm_warning ("Could not activate the DHCP daemon " DHCDBD_BINARY_PATH ". error: '%s'.", error->message);
g_error_free (error);
return FALSE;
}
g_ptr_array_free (dhcp_argv, TRUE);
nm_info ("Activated the DHCP daemon " DHCDBD_BINARY_PATH " with PID %d.", pid);
return TRUE;
}
NMDHCPManager * nm_dhcp_manager_new (NMData *data)
{
NMDHCPManager * manager;
@ -153,9 +120,8 @@ guint32 nm_dhcp_manager_get_state_for_device (NMDHCPManager *manager, NMDevice *
if (!manager->running)
{
if (nm_dhcp_manager_exec_daemon (manager) == FALSE)
return 0;
sleep (1);
nm_warning ("dhcdbd not running!");
return 0;
}
path = g_strdup_printf (DHCP_OBJECT_PATH"/%s", nm_device_get_iface (dev));
@ -235,9 +201,8 @@ gboolean nm_dhcp_manager_begin_transaction (NMDHCPManager *manager, NMActRequest
if (!manager->running)
{
if (nm_dhcp_manager_exec_daemon (manager) == FALSE)
return FALSE;
sleep (1);
nm_warning ("dhcdbd not running!");
return FALSE;
}
else
{