#! /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

prog="virtualbox"
PROGNAME=VBoxSVC

RETVAL=0

running() {
    grep -q "^$1 " /proc/modules
}

start() {
    # Check if it is already running
    if ! running vboxdrv; then
	echo -n $"Starting $prog: "
        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
    	if ! modprobe vboxnetadp > /dev/null 2>&1; then
            failure "Loading vboxnetadp module:"
	    return
    	fi
	touch /var/lock/subsys/$PROGNAME
	success
    fi
    echo
}

stop() {
    echo -n "Stopping $prog: "
    if running vboxdrv; then
        if running vboxnetflt; then
            if ! rmmod vboxnetflt 2>/dev/null; then
                failure "Remove module vboxnetflt:"
		return
            fi
        fi
        if running vboxnetadp; then
            if ! rmmod vboxnetadp 2>/dev/null; then
                failure "Remove module vboxnetadp:"
		return
            fi
        fi
        if ! rmmod vboxdrv 2>/dev/null; then
            failure "Remove module vboxdrv:"
	    return
        fi
    fi
    success
    echo
}

restart() {
    stop
    start
}

status() {
    echo -n $"$prog kernel module is "
    if running vboxdrv; then
	STATUS="loaded"
    else
	STATUS="not loaded"
    fi
    echo "$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`
	echo $"Usage: $0 {start|stop|restart|condrestart|status}"
	exit 1
	;;
esac
exit $RETVAL
