# $Id$
## @file
# Startup service for loading the kernel extensions and select the set of VBox
# binaries that matches the kernel architecture.
#
#
# Copyright (C) 2007-2015 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
# General Public License (GPL) as published by the Free Software
# Foundation, in version 2 as it comes in the "COPYING" file of the
# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
if false; then
else
# Fake the startup item functions we're using.
{
if [ "$1" != "-f" ]; then
echo "$@"
else
shift
echo "Fatal error: $@"
exit 1;
fi
}
{
"start")
exit $?;
;;
"stop")
exit $?;
;;
"restart")
exit $?;
;;
"launchd")
if RestartService; then
while true;
do
sleep 3600
done
fi
exit $?;
;;
**)
echo "Error: Unknown action '$1'"
exit 1;
esac
}
fi
{
VBOX_RC=0
VBOXDRV="VBoxDrv"
VBOXUSB="VBoxUSB"
#
# Check that all the directories exist first.
#
ConsoleMessage "Error: /Library/Application Support/VirtualBox/${VBOXDRV}.kext is missing"
VBOX_RC=1
fi
ConsoleMessage "Error: /Library/Application Support/VirtualBox/${VBOXUSB}.kext is missing"
VBOX_RC=1
fi
ConsoleMessage "Error: /Library/Application Support/VirtualBox/VBoxNetFlt.kext is missing"
VBOX_RC=1
fi
ConsoleMessage "Error: /Library/Application Support/VirtualBox/VBoxNetAdp.kext is missing"
VBOX_RC=1
fi
#
# Check that no drivers are currently running.
# (Try stop the service if this is the case.)
#
if kextstat -lb org.virtualbox.kext.VBoxDrv 2>&1 | grep -q org.virtualbox.kext.VBoxDrv; then
ConsoleMessage "Error: ${VBOXDRV}.kext is already loaded"
VBOX_RC=1
fi
if kextstat -lb org.virtualbox.kext.VBoxUSB 2>&1 | grep -q org.virtualbox.kext.VBoxUSB; then
ConsoleMessage "Error: ${VBOXUSB}.kext is already loaded"
VBOX_RC=1
fi
if kextstat -lb org.virtualbox.kext.VBoxNetFlt 2>&1 | grep -q org.virtualbox.kext.VBoxNetFlt; then
ConsoleMessage "Error: VBoxNetFlt.kext is already loaded"
VBOX_RC=1
fi
if kextstat -lb org.virtualbox.kext.VBoxNetAdp 2>&1 | grep -q org.virtualbox.kext.VBoxNetAdp; then
ConsoleMessage "Error: VBoxNetAdp.kext is already loaded"
VBOX_RC=1
fi
fi
#
# Load the drivers.
#
ConsoleMessage "Loading ${VBOXDRV}.kext"
ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/${VBOXDRV}.kext"
VBOX_RC=1
fi
ConsoleMessage "Loading ${VBOXUSB}.kext"
if ! kextload -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" "/Library/Application Support/VirtualBox/${VBOXUSB}.kext"; then
ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/${VBOXUSB}.kext"
VBOX_RC=1
fi
ConsoleMessage "Loading VBoxNetFlt.kext"
if ! kextload -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" "/Library/Application Support/VirtualBox/VBoxNetFlt.kext"; then
ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/VBoxNetFlt.kext"
VBOX_RC=1
fi
ConsoleMessage "Loading VBoxNetAdp.kext"
if ! kextload -d "/Library/Application Support/VirtualBox/${VBOXDRV}.kext" "/Library/Application Support/VirtualBox/VBoxNetAdp.kext"; then
ConsoleMessage "Error: Failed to load /Library/Application Support/VirtualBox/VBoxNetAdp.kext"
VBOX_RC=1
fi
# unload the drivers (ignoring failures)
fi
fi
#
# Set the error on failure.
#
exit $VBOX_RC
fi
}
{
VBOX_RC=0
VBOXDRV="VBoxDrv"
VBOXUSB="VBoxUSB"
if kextstat -lb org.virtualbox.kext.VBoxUSB 2>&1 | grep -q org.virtualbox.kext.VBoxUSB; then
ConsoleMessage "Unloading ${VBOXUSB}.kext"
if ! kextunload -m org.virtualbox.kext.VBoxUSB; then
ConsoleMessage "Error: Failed to unload VBoxUSB.kext"
VBOX_RC=1
fi
fi
if kextstat -lb org.virtualbox.kext.VBoxNetFlt 2>&1 | grep -q org.virtualbox.kext.VBoxNetFlt; then
ConsoleMessage "Unloading VBoxNetFlt.kext"
if ! kextunload -m org.virtualbox.kext.VBoxNetFlt; then
ConsoleMessage "Error: Failed to unload VBoxNetFlt.kext"
VBOX_RC=1
fi
fi
if kextstat -lb org.virtualbox.kext.VBoxNetAdp 2>&1 | grep -q org.virtualbox.kext.VBoxNetAdp; then
ConsoleMessage "Unloading VBoxNetAdp.kext"
if ! kextunload -m org.virtualbox.kext.VBoxNetAdp; then
ConsoleMessage "Error: Failed to unload VBoxNetAdp.kext"
VBOX_RC=1
fi
fi
# This must come last because of dependencies.
if kextstat -lb org.virtualbox.kext.VBoxDrv 2>&1 | grep -q org.virtualbox.kext.VBoxDrv; then
ConsoleMessage "Unloading ${VBOXDRV}.kext"
if ! kextunload -m org.virtualbox.kext.VBoxDrv; then
ConsoleMessage "Error: Failed to unload VBoxDrv.kext"
VBOX_RC=1
fi
fi
# Set the error on failure.
exit $VBOX_RC
fi
}
{
}
RunService "$1"