#!/bin/sh
#############################################################
# Copyright (C) 2005 Parallels Inc.  All Rights Reserved.
# Load all drivers
#############################################################

. /usr/lib/parallels/gettext.sh

export TEXTDOMAIN="parallels"

mainname="Parallels"
submname="Workstation"
mainver="2.1"

function modload() {
    modpath=$1
    modname=$2
    moddesc=$3
    moddev=$4
    insalt=$5

    eval_gettext "Loading \$mainname \$submname \$mainver \$moddesc ... "; echo

    if test "`cat /proc/modules | grep -e $modname`"; then
        eval_gettext " \$mainname \$submname \$maniver \$moddesc already loaded."; echo
    else
        if test ! -f $modpath; then
            eval_gettext " Error: \$moddesc module is not found in /usr/lib/parallels
 Perhaps installation or/and configuration was done incorrectly.
 Run \"parallels-config\" again."; echo
            exit -1
        else
            if test -z $insalt; then
                /sbin/insmod $modpath
            else
                /sbin/insmod $modpath rsalt=$insalt
            fi
                    
            err=$?
            if test $err -ne 0; then
                eval_gettext " Can not load \$moddesc module."; echo
                exit -1
            fi
        fi
    fi
    
    if test ! -e $moddev; then
        if test ! -c $moddev; then
            minor=`cat /proc/misc | grep $modname | awk '{ print $1 }'`
            if test ! -z $minor; then
                if test -e $moddev; then
                    rm -f $moddev
                fi
                mknod $moddev c 10 $minor 2> /dev/null
            fi
        fi
    fi
}

if test `id -u` -ne 0; then
    eval_gettext "You must be root to run this script.
Now \"su -c \$0\" command will be issued and you will be
prompted for root password."; echo
    su -c $0
    exit $?
fi

case `uname -s` in
    Linux)
        # generate salt
        salt=`head -c 16 /dev/urandom | hexdump -sb | awk '{ print $2$3$4$5$6$7$8$9 }'`
        # save salt
        echo $salt > /usr/lib/parallels/.random_salt
        chmod 400 /usr/lib/parallels/.random_salt
	
    	# load hypervisord
        modload "/usr/lib/parallels/drivers/hypervisor/hypervisor.o" "hypervisor" "hypervisor" "/dev/hypervisor"
	
        # load vm-main
        modload "/usr/lib/parallels/drivers/drv_main/vm-main.o" "vm[_|-]main" "vm-main" "/dev/vm-main" "$salt"

        # load vm-bridge
        modload "/usr/lib/parallels/drivers/drv_net/linux/vm-bridge.o" "vm[_|-]bridge" "vm-bridge" "/dev/vm-bridge"

        # load vmvirtualnic
        modload "/usr/lib/parallels/drivers/drv_virtualnic/vmvirtualnic.o" "vmvirtualnic" "vmvirtualnic"
        /usr/lib/parallels/autostart/prl_dhcpd -d vnic0

    ;;
    *)
        gettext "Error: Unknown operating system type."; echo
	exit -1
    ;;
esac
exit 0
