#! /bin/sh
#
# virtualbox: Starts the VirtualBox kernel module
#
# chkconfig: 35 30 60
# description: VirtualBox Linux kernel module
#
### BEGIN INIT INFO
# Provides:       vboxdrv
# Required-Start: $syslog
# Required-Stop:
# Default-Start:  3 5
# Default-Stop:
# Description:    VirtualBox Linux kernel module
# Should-Start:   dkms
### END INIT INFO

# Source function library.
. /etc/init.d/functions

DAEMON=virtualbox
PROGNAME=VBoxSVC

RETVAL=0

running() {
    /sbin/lsmod | grep -q vboxdrv[^_-]
}

start() {
    # Check if it is already running
    if ! running; then
	gprintf "Starting %s daemon: " "$DAEMON"
        if ! modprobe vboxdrv > /dev/null 2>&1; then
            failure "Loading vboxdrv module:"
	    return
        fi
    	if ! modprobe vboxnetflt > /dev/null 2>&1; then
            failure "Loading vboxnetflt module:"
	    return
    	fi
	touch /var/lock/subsys/$PROGNAME
	success
    fi
    echo
}

stop() {
    gprintf "Stopping %s daemon: " "$DAEMON"
    if running vboxdrv; then
        if running vboxnetflt; then
            if ! rmmod vboxnetflt 2>/dev/null; then
                failure "Remove module vboxnetflt:"
		return
            fi
        fi
        if ! rmmod vboxdrv 2>/dev/null; then
            failure "Remove module vboxdrv:"
	    return
        fi
    fi
    success
    echo
}

restart() {
    stop
    start
}

status() {
    if running; then
	STATUS="loaded"
    else
	STATUS="not loaded"
    fi
    gprintf "%s kernel module is %s\n" $DAEMON $STATUS
}

case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    restart)
	restart
	;;
    condrestart)
	if [ -f /var/lock/subsys/$PROGNAME ]; then
	    restart
	fi
        ;;
    status)
	status
	;;
    *)
	INITNAME=`basename $0`
	gprintf "Usage: %s {start|stop|restart|condrestart|status}\n" "$INITNAME"
	exit 1
	;;
esac
exit $RETVAL
