From owner-svn-src-all@FreeBSD.ORG Thu Oct 17 00:28:36 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id A7F38C3; Thu, 17 Oct 2013 00:28:36 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8475E24ED; Thu, 17 Oct 2013 00:28:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9H0SaP7084576; Thu, 17 Oct 2013 00:28:36 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9H0SZot084541; Thu, 17 Oct 2013 00:28:35 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <201310170028.r9H0SZot084541@svn.freebsd.org> From: Neel Natu Date: Thu, 17 Oct 2013 00:28:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r256657 - in head: share/examples/bhyve usr.sbin/bhyveload X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 17 Oct 2013 00:28:36 -0000 Author: neel Date: Thu Oct 17 00:28:35 2013 New Revision: 256657 URL: http://svnweb.freebsd.org/changeset/base/256657 Log: Add an option to bhyveload(8) that allows setting a loader environment variable from the command line. The option syntax is "-e ". It may be used multiple times to set multiple environment variables. Reviewed by: grehan Requested by: alfred Modified: head/share/examples/bhyve/vmrun.sh head/usr.sbin/bhyveload/bhyveload.8 head/usr.sbin/bhyveload/bhyveload.c Modified: head/share/examples/bhyve/vmrun.sh ============================================================================== --- head/share/examples/bhyve/vmrun.sh Thu Oct 17 00:07:21 2013 (r256656) +++ head/share/examples/bhyve/vmrun.sh Thu Oct 17 00:28:35 2013 (r256657) @@ -39,11 +39,12 @@ DEFAULT_VIRTIO_DISK="./diskdev" DEFAULT_ISOFILE="./release.iso" usage() { - echo "Usage: vmrun.sh [-hai][-g ][-m ][-d ][-I ][-t ] " + echo "Usage: vmrun.sh [-hai][-g ][-m ][-d ][-e ][-I ][-t ] " echo " -h: display this help message" echo " -a: force memory mapped local apic access" echo " -c: number of virtual cpus (default is ${DEFAULT_CPUS})" echo " -d: virtio diskdev file (default is ${DEFAULT_VIRTIO_DISK})" + echo " -e: set FreeBSD loader environment variable" echo " -g: listen for connection from kgdb at " echo " -i: force boot of the Installation CDROM image" echo " -I: Installation CDROM image location (default is ${DEFAULT_ISOFILE})" @@ -73,8 +74,9 @@ virtio_diskdev=${DEFAULT_VIRTIO_DISK} tapdev=${DEFAULT_TAPDEV} apic_opt="" gdbport=0 +env_opt="" -while getopts haic:g:I:m:d:t: c ; do +while getopts haic:e:g:I:m:d:t: c ; do case $c in h) usage @@ -85,6 +87,9 @@ while getopts haic:g:I:m:d:t: c ; do d) virtio_diskdev=${OPTARG} ;; + e) + env_opt="${env_opt} -e ${OPTARG}" + ;; g) gdbport=${OPTARG} ;; i) @@ -163,7 +168,7 @@ while [ 1 ]; do installer_opt="" fi - ${LOADER} -m ${memsize} -d ${BOOTDISK} ${vmname} + ${LOADER} -m ${memsize} -d ${BOOTDISK} ${env_opt} ${vmname} if [ $? -ne 0 ]; then break fi Modified: head/usr.sbin/bhyveload/bhyveload.8 ============================================================================== --- head/usr.sbin/bhyveload/bhyveload.8 Thu Oct 17 00:07:21 2013 (r256656) +++ head/usr.sbin/bhyveload/bhyveload.8 Thu Oct 17 00:28:35 2013 (r256657) @@ -38,6 +38,7 @@ guest inside a bhyve virtual machine .Op Fl m Ar mem-size .Op Fl d Ar disk-path .Op Fl h Ar host-path +.Op Fl e Ar name=value .Ar vmname .Sh DESCRIPTION .Nm @@ -91,6 +92,14 @@ is the pathname of the guest's boot disk The .Ar host-path is the directory at the top of the guest's boot filesystem. +.It Fl e Ar name=value +Set the FreeBSD loader environment variable +.Ar name +to +.Ar value . +.Pp +The option may be used more than once to set more than one environment +variable. .El .Sh EXAMPLES To create a virtual machine named Modified: head/usr.sbin/bhyveload/bhyveload.c ============================================================================== --- head/usr.sbin/bhyveload/bhyveload.c Thu Oct 17 00:07:21 2013 (r256656) +++ head/usr.sbin/bhyveload/bhyveload.c Thu Oct 17 00:28:35 2013 (r256657) @@ -60,6 +60,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -498,23 +499,37 @@ cb_getmem(void *arg, uint64_t *ret_lowme vm_get_memory_seg(ctx, 4 * GB, ret_highmem, NULL); } +struct env { + const char *str; /* name=value */ + SLIST_ENTRY(env) next; +}; + +static SLIST_HEAD(envhead, env) envhead; + +static void +addenv(const char *str) +{ + struct env *env; + + env = malloc(sizeof(struct env)); + env->str = str; + SLIST_INSERT_HEAD(&envhead, env, next); +} + static const char * cb_getenv(void *arg, int num) { - int max; + int i; + struct env *env; - static const char * var[] = { - "smbios.bios.vendor=BHYVE", - "boot_serial=1", - NULL - }; - - max = sizeof(var) / sizeof(var[0]); + i = 0; + SLIST_FOREACH(env, &envhead, next) { + if (i == num) + return (env->str); + i++; + } - if (num < max) - return (var[num]); - else - return (NULL); + return (NULL); } static struct loader_callbacks cb = { @@ -553,8 +568,8 @@ usage(void) { fprintf(stderr, - "usage: %s [-m mem-size][-d ] [-h ] " - "\n", progname); + "usage: %s [-m mem-size][-d ] [-h ] " + "[-e ] \n", progname); exit(1); } @@ -572,12 +587,16 @@ main(int argc, char** argv) mem_size = 256 * MB; disk_image = NULL; - while ((opt = getopt(argc, argv, "d:h:m:")) != -1) { + while ((opt = getopt(argc, argv, "d:e:h:m:")) != -1) { switch (opt) { case 'd': disk_image = optarg; break; + case 'e': + addenv(optarg); + break; + case 'h': host_base = optarg; break; @@ -638,5 +657,9 @@ main(int argc, char** argv) if (disk_image) { disk_fd = open(disk_image, O_RDONLY); } + + addenv("smbios.bios.vendor=BHYVE"); + addenv("boot_serial=1"); + func(&cb, NULL, USERBOOT_VERSION_3, disk_fd >= 0); }