+++ /dev/null
-#!/bin/bash
-
-# =============================================================================
-# Author: Marco Yuen
-# $Date$
-# $Revision$
-# $Author$
-# =============================================================================
-# README
-# ------
-# Make sure you have the rights to run SUDO. Otherwise, this script will not
-# work.
-# =============================================================================
-
-###############################################################################
-# Configurations
-###############################################################################
-
-# Directory where VDE and QEMU are installed
-# Only needed when not in path or when you want to override
-#VDEROOT="/usr/local/bin/"
-#QEMUROOT="/usr/local/bin/"
-
-# The network info for tun0 (private interface)
-PRIVATE_IP="10.0.2.1"
-PRIVATE_NETMASK="255.255.255.0"
-
-# The network info for tun1 (public interface)
-PUBLIC_IP="172.20.0.1"
-PUBLIC_NETMASK="255.255.0.0"
-
-# The default memory size
-MEGS="512"
-
-# The default #CPUS size
-CPUS="1"
-
-# By default do not specify the disk, cdrom, floppy, or boot
-DISK1=""
-DISK2=""
-DISK3=""
-DISK4=""
-CDROM=""
-FLOPPY=""
-BOOT=""
-
-# If VDE is off, use tap/tun by default. Otherwise use ``user''.
-MULTIHOMED="no"
-TYPE="vde"
-
-# Which QEMU executable to use
-#QEMUEXE="qemu-system_x86_64"
-QEMUEXE="qemu"
-
-
-
-###############################################################################
-# Functions
-# Please, DO NOT modify anything below this line, unless you know what you are
-# doing.
-###############################################################################
-
-NETWORK_SET=""
-function network_set {
- if [[ ! -z ${NETWORK_SET} ]]; then
- echo "Don't mix -u, -v, -t. Use only one"
- exit 1
- fi
-}
-
-function image_check {
- IMG=${1}
- if [[ ! -w ${IMG} ]]; then
- echo "The disk image '${IMG}' doesn't exist or not writtable"
- exit 1
- fi
-}
-
-function kill_or_start_vde {
- # For good measure, let's kill all the existing vde_switch(es)
- if [[ -S /tmp/private.ctl && -S /tmp/public.ctl ]]; then
- echo -n "Existing public and private switches found. Kill them?(yes or no) "
- read KILLTHEM
-
- if [[ ${KILLTHEM} == "yes" ]]; then
- create_switches
- elif [[ ${KILLTHEM} == "no" ]]; then
- echo "You are exposing weakness ..."
- fi
- else
- create_switches
- fi
-}
-
-function create_switches {
- sudo killall -9 vde_switch
- echo "Creating new sockets ..."
- # Create the private switch
- sudo ${VDEROOT}vde_switch -tap tun0 \
- -sock /tmp/private.ctl -daemon
- # Create the public switch
- sudo ${VDEROOT}vde_switch -tap tun1 \
- -sock /tmp/public.ctl -daemon
- # Correct the permissions
- sudo chmod 666 /tmp/private.ctl
- sudo chmod 666 /tmp/public.ctl
- # Setting up network info
- sudo ifconfig tun0 ${PRIVATE_IP} netmask ${PRIVATE_NETMASK}
- sudo ifconfig tun1 ${PUBLIC_IP} netmask ${PUBLIC_NETMASK}
- # Turn on ip forwarding and set up IPTABLE
- sudo sysctl -w net.ipv4.ip_forward=1
- # Disable IPTABLES first
- sudo /etc/init.d/iptables stop
- # XXX Define some rules.
- sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
- sudo /etc/init.d/iptables save
- sudo /etc/init.d/iptables start
-}
-
-###############################################################################
-# Main
-###############################################################################
-
-function usage() {
- echo `basename $0` "file"
- echo " start qemu with file as hard disk 0 image"
- echo "-b [a|c|d]"
- echo " Boot on floppy (a), hard disk (c) or CD-ROM (d). Hard disk boot is the default."
- echo "-c file"
- echo " Use file as CD-ROM image. You can use the host CD-ROM by using /dev/cdrom as filename."
- echo "-f file"
- echo " Use file as fda floppy disk image. You can use the host floppy by using /dev/fd0 as filename."
- echo "-m megs"
- echo " Set virtual RAM size to megs megabytes. Default is ${MEGS} MB."
- echo "-s #CPUS"
- echo " Set the number of CPUs. Default is ${CPUS} MB."
- echo "-n [user|tap|vde]"
- echo " vde == VDE based networking. (default = ON)"
- echo " tap == tun/tap networking. (default = OFF)"
- echo " user == user mode stack for networking. (default = OFF)"
- echo "-p mac"
- echo " Set the mac address of the nic to specified mac"
- echo "-l vmsnapshot"
- echo " load vm snapshot"
- echo "-o"
- echo " Multihome this machine"
- echo "-x"
- echo " serial console"
- echo "-h print help"
-}
-
-MAC="52:54:00:12:34:56"
-GRAPHIC=
-SNAPSHOT=
-while getopts "b:c:f:l:m:n:s:hp:ox" opt ; do
- case ${opt} in
- # Boot mode options
- b)
- BOOT=${OPTARG}
- ;;
- c)
- CDROM=${OPTARG}
- ;;
- f)
- FLOPPY=${OPTARG}
- ;;
- m)
- MEGS=${OPTARG}
- ;;
- s)
- CPUS=${OPTARG}
- ;;
- n)
- network_set
- [ "${TYPE}" != "${OPTARG}" ] && NETWORK_SET="yes"
- TYPE=${OPTARG}
- ;;
- o)
- MULTIHOMED="yes"
- ;;
- p)
- MAC=${OPTARG}
- ;;
- l)
- SNAPSHOT=${OPTARG}
- ;;
- x)
- GRAPHIC=-nographic
- ;;
- h)
- usage
- exit 0
- ;;
- ?)
- usage
- exit 1
- ;;
- esac
-done
-
-shift $(($OPTIND - 1))
-DISK1=$1
-if [ -z "$DISK1" ]; then
- usage
- exit 1
-fi
-image_check ${DISK1}
-
-shift
-DISK2=$1
-shift
-DISK3=$1
-shift
-DISK4=$1
-if [ ! -z "${CDROM}" -a ! -z "${DISK4}" ]; then
- echo "canot specify cdrom and 4th ide drive (${DISK4})"
- exit 1
-fi
-
-echo "Checking if the kqemu module is loaded ..."
-module=$(lsmod | grep kqemu | awk '{print $1}')
-
-if [[ ${module} == "" ]]; then
- echo "Loading kqemu module ... "
- #sudo modprobe kqemu
- [[ $? != 0 ]] && exit 1
- echo "kqemu loaded."
-elif [[ ${module} == "kqemu" ]]; then
- echo "kqemu already loaded. Continue ..."
-fi
-
-if [ ! -c /dev/kqemu ] ; then
- mknod /dev/kqemu c 250 0
- chmod 600 /dev/kqemu
-fi
-
-QEMU_CMD="${QEMUROOT}${QEMUEXE} ${GRAPHIC} -m ${MEGS} -smp ${CPUS}"
-[ ! -z "${SNAPSHOT}" ] && QEMU_CMD="${QEMU_CMD} -loadvm ${SNAPSHOT}"
-[ ! -z "${FLOPPY}" ] && QEMU_CMD="${QEMU_CMD} -fda ${FLOPPY}"
-[ ! -z "${CDROM}" ] && QEMU_CMD="${QEMU_CMD} -cdrom ${CDROM}"
-[ ! -z "${BOOT}" ] && QEMU_CMD="${QEMU_CMD} -boot ${BOOT}"
-
-[ ! -z "${DISK1}" ] && QEMU_CMD="${QEMU_CMD} -hda ${DISK1}"
-[ ! -z "${DISK2}" ] && QEMU_CMD="${QEMU_CMD} -hdb ${DISK2}"
-[ ! -z "${CDROM}" -a ! -z "${DISK3}" ] && QEMU_CMD="${QEMU_CMD} -hdd ${DISK3}"
-[ -z "${CDROM}" -a ! -z "${DISK3}" ] && QEMU_CMD="${QEMU_CMD} -hdc ${DISK3}"
-
-case ${TYPE} in
- vde)
- QEMU_CMD="${VDEROOT}vdeq ${QEMU_CMD}"
- echo "Running with VDE ..."
- kill_or_start_vde
- QEMU_CMD="${QEMU_CMD} -net nic,vlan=0,macaddr=${MAC}"
- QEMU_CMD="${QEMU_CMD} -net vde,vlan=0,sock=/tmp/private.ctl"
- if [ "${MULTIHOMED}" == "yes" ]; then
- QEMU_CMD="${QEMU_CMD} -net nic,vlan=1"
- QEMU_CMD="${QEMU_CMD} -net vde,vlan=1,sock=/tmp/public.ctl"
- fi
- ;;
- tap)
- echo "still have to fix code -- mef"
- exit 1
- ;;
- user)
- QEMU_CMD="${QEMU_CMD} -net nic -net user"
- ;;
- *)
- echo "invalid networking type"
- ;;
-esac
-
-# Executing frontend.
-echo ${QEMU_CMD}
-if [ -z "${GRAPHIC}" ]; then
- ${QEMU_CMD} &
-else
- ${QEMU_CMD}
-fi