#!/bin/sh
#
# NetworkManager:   NetworkManager daemon
#
# chkconfig: - 13 90
# description:  This is a daemon for automatically switching network \
#               connections to the best available connection.
#
# processname: NetworkManager
# pidfile: /var/run/NetworkManager/NetworkManager.pid
#
### BEGIN INIT INFO
# Provides: network_manager
# Required-Start: $local_fs messagebus haldaemon
# Required-Stop: $local_fs messagebus haldaemon
# Default-Start:  3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop NetworkManager
# Description: NetworkManager is a tool for easily managing network connections
### END INIT INFO

# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1

# Source function library.
. /etc/init.d/functions
. shell-config

OLD_PIDFILE=/var/run/NetworkManager/NetworkManager.pid
PIDFILE=/var/run/NetworkManager.pid
LOCKFILE=/var/lock/subsys/NetworkManager
DBUS_SEND=/usr/bin/dbus-send
IFDOWN=/sbin/ifdown
RETVAL=0

interface_down()
{
    for i in /etc/net/ifaces/*; do
        local iface="${i##*/}"
        case "$iface" in
            default|unknown|lo) continue;;
        esac
        local nm_controlled="$(shell_config_get "$i/options" NM_CONTROLLED)"
        local disabled="$(shell_config_get "$i/options" DISABLED)"
        if [ -n "$nm_controlled" ] && is_yes "$nm_controlled"; then
            if [ -z "$disabled" ] || is_no "$disabled"; then
                [ -x "$IFDOWN" ] && action "Taking down $iface" "$IFDOWN $iface"
            fi
        fi
    done
}

nm_status()
{
    local pidfile="$PIDFILE"
    [ -s "$OLD_PIDFILE" ] && pidfile="$OLD_PIDFILE"

    status --pidfile "$pidfile" --expect-user root -- NetworkManager
    RETVAL=$?
}

start()
{
	action "Setting network parameters... " 'sysctl -e -p /etc/net/sysctl.conf >/dev/null 2>&1'
	start_daemon --lockfile "$LOCKFILE" --pidfile "$PIDFILE" --expect-user root -- NetworkManager --pid-file=$PIDFILE
	RETVAL=$?
	return $RETVAL
}

stop()
{
    local pidfile="$PIDFILE"
    [ -s "$OLD_PIDFILE" ] && pidfile="$OLD_PIDFILE"

	stop_daemon --pidfile "$pidfile" --lockfile "$LOCKFILE" --expect-user root --retry 4 -- NetworkManager
	RETVAL=$?
	killall nm-system-settings >/dev/null 2>&1
	killall nm-dispatcher.action >/dev/null 2>&1
	return $RETVAL
}

restart()
{
	stop
	start
}

nm_sleep()
{
	[ -x "$DBUS_SEND" ] &&
	action "Put NetworkManager to sleep" "$DBUS_SEND" --system \
						--dest=org.freedesktop.NetworkManager \
						--type=method_call \
						/org/freedesktop/NetworkManager \
						org.freedesktop.NetworkManager.sleep
}

nm_wake()
{
	[ -x "$DBUS_SEND" ] &&
	action "To wake NetworkManager" "$DBUS_SEND" --system \
						--dest=org.freedesktop.NetworkManager \
						--type=method_call \
						/org/freedesktop/NetworkManager \
						org.freedesktop.NetworkManager.wake
}

# See how we were called.
case "$1" in
	start)
        interface_down
		start
		;;
	stop)
		stop
		;;
	status)
        nm_status
		;;
	reload|restart)
		restart
		;;
	condstop)
		if [ -e "$LOCKFILE" ]; then
			stop
		fi
		;;
	condreload|condrestart)
		if [ -e "$LOCKFILE" ]; then
			restart
		fi
		;;
	sleep)
		nm_sleep
		;;
	wake)
		nm_wake
		;;
	*)
		msg_usage "${0##*/} {start|stop|reload|restart|condstop|condrestart|condreload|status|sleep|wake}"
		RETVAL=1
esac

exit $RETVAL
