mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-20 16:54:02 +00:00
Support for multiple disks and tap devices.
This allows you to give a bhyve instance multiple network devices and disk devices easily by specifying additional "-d " and "-t " options. Reviewed by: neel Sponsored by: Norse
This commit is contained in:
parent
a026dc3fcb
commit
3ab512ae80
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=267559
|
@ -78,8 +78,8 @@ isofile=${DEFAULT_ISOFILE}
|
||||||
memsize=${DEFAULT_MEMSIZE}
|
memsize=${DEFAULT_MEMSIZE}
|
||||||
console=${DEFAULT_CONSOLE}
|
console=${DEFAULT_CONSOLE}
|
||||||
cpus=${DEFAULT_CPUS}
|
cpus=${DEFAULT_CPUS}
|
||||||
virtio_diskdev=${DEFAULT_VIRTIO_DISK}
|
tap_total=0
|
||||||
tapdev=${DEFAULT_TAPDEV}
|
disk_total=0
|
||||||
apic_opt=""
|
apic_opt=""
|
||||||
gdbport=0
|
gdbport=0
|
||||||
loader_opt=""
|
loader_opt=""
|
||||||
|
@ -96,7 +96,8 @@ while getopts ac:C:d:e:g:hH:iI:m:t: c ; do
|
||||||
console=${OPTARG}
|
console=${OPTARG}
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
virtio_diskdev=${OPTARG}
|
eval "disk_dev${disk_total}=\"${OPTARG}\""
|
||||||
|
disk_total=$(($disk_total + 1))
|
||||||
;;
|
;;
|
||||||
e)
|
e)
|
||||||
loader_opt="${loader_opt} -e ${OPTARG}"
|
loader_opt="${loader_opt} -e ${OPTARG}"
|
||||||
|
@ -117,7 +118,8 @@ while getopts ac:C:d:e:g:hH:iI:m:t: c ; do
|
||||||
memsize=${OPTARG}
|
memsize=${OPTARG}
|
||||||
;;
|
;;
|
||||||
t)
|
t)
|
||||||
tapdev=${OPTARG}
|
eval "tap_dev${tap_total}=\"${OPTARG}\""
|
||||||
|
tap_total=$(($tap_total + 1))
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
usage
|
usage
|
||||||
|
@ -125,6 +127,16 @@ while getopts ac:C:d:e:g:hH:iI:m:t: c ; do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if [ $tap_total -eq 0 ] ; then
|
||||||
|
tap_total=1
|
||||||
|
tap_dev0="${DEFAULT_TAPDEV}"
|
||||||
|
fi
|
||||||
|
if [ $disk_total -eq 0 ] ; then
|
||||||
|
disk_total=1
|
||||||
|
disk_dev0="${DEFAULT_VIRTIO_DISK}"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
shift $((${OPTIND} - 1))
|
shift $((${OPTIND} - 1))
|
||||||
|
|
||||||
if [ $# -ne 1 ]; then
|
if [ $# -ne 1 ]; then
|
||||||
|
@ -136,25 +148,31 @@ if [ -n "${host_base}" ]; then
|
||||||
loader_opt="${loader_opt} -h ${host_base}"
|
loader_opt="${loader_opt} -h ${host_base}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create the virtio diskdev file if needed
|
make_and_check_diskdev()
|
||||||
if [ ! -f ${virtio_diskdev} ]; then
|
{
|
||||||
echo "virtio disk device file \"${virtio_diskdev}\" does not exist."
|
local virtio_diskdev="$1"
|
||||||
echo "Creating it ..."
|
# Create the virtio diskdev file if needed
|
||||||
truncate -s 8G ${virtio_diskdev} > /dev/null
|
if [ ! -f ${virtio_diskdev} ]; then
|
||||||
fi
|
echo "virtio disk device file \"${virtio_diskdev}\" does not exist."
|
||||||
|
echo "Creating it ..."
|
||||||
|
truncate -s 8G ${virtio_diskdev} > /dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -r ${virtio_diskdev} ]; then
|
if [ ! -r ${virtio_diskdev} ]; then
|
||||||
echo "virtio disk device file \"${virtio_diskdev}\" is not readable"
|
echo "virtio disk device file \"${virtio_diskdev}\" is not readable"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -w ${virtio_diskdev} ]; then
|
if [ ! -w ${virtio_diskdev} ]; then
|
||||||
echo "virtio disk device file \"${virtio_diskdev}\" is not writable"
|
echo "virtio disk device file \"${virtio_diskdev}\" is not writable"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
echo "Launching virtual machine \"$vmname\" ..."
|
echo "Launching virtual machine \"$vmname\" ..."
|
||||||
|
|
||||||
|
virtio_diskdev="$disk_dev0"
|
||||||
|
|
||||||
while [ 1 ]; do
|
while [ 1 ]; do
|
||||||
${BHYVECTL} --vm=${vmname} --destroy > /dev/null 2>&1
|
${BHYVECTL} --vm=${vmname} --destroy > /dev/null 2>&1
|
||||||
|
|
||||||
|
@ -189,12 +207,33 @@ while [ 1 ]; do
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Build up args for additional tap and disk devices now.
|
||||||
|
#
|
||||||
|
nextslot=2 # slot 0 is hostbridge, slot 1 is lpc
|
||||||
|
devargs="" # accumulate disk/tap args here
|
||||||
|
i=0
|
||||||
|
while [ $i -lt $tap_total ] ; do
|
||||||
|
eval "tapname=\$tap_dev${i}"
|
||||||
|
devargs="$devargs -s $nextslot:0,virtio-net,${tapname} "
|
||||||
|
nextslot=$(($nextslot + 1))
|
||||||
|
i=$(($i + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
i=0
|
||||||
|
while [ $i -lt $disk_total ] ; do
|
||||||
|
eval "disk=\$disk_dev${i}"
|
||||||
|
make_and_check_diskdev "${disk}"
|
||||||
|
devargs="$devargs -s $nextslot:0,virtio-blk,${disk} "
|
||||||
|
nextslot=$(($nextslot + 1))
|
||||||
|
i=$(($i + 1))
|
||||||
|
done
|
||||||
|
|
||||||
${FBSDRUN} -c ${cpus} -m ${memsize} ${apic_opt} -A -H -P \
|
${FBSDRUN} -c ${cpus} -m ${memsize} ${apic_opt} -A -H -P \
|
||||||
-g ${gdbport} \
|
-g ${gdbport} \
|
||||||
-s 0:0,hostbridge \
|
-s 0:0,hostbridge \
|
||||||
-s 1:0,lpc \
|
-s 1:0,lpc \
|
||||||
-s 2:0,virtio-net,${tapdev} \
|
${devargs} \
|
||||||
-s 3:0,virtio-blk,${virtio_diskdev} \
|
|
||||||
-l com1,${console} \
|
-l com1,${console} \
|
||||||
${installer_opt} \
|
${installer_opt} \
|
||||||
${vmname}
|
${vmname}
|
||||||
|
|
Loading…
Reference in a new issue