diff --git a/ChangeLog b/ChangeLog index c3296dfe76..a545f846ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Thu Jun 11 15:18:44 GMT 2009 Mark McLoughlin + + * src/qemu_conf.[ch]: make qemuParseHelpStr() available + to tests + + * tests/qemuhelptest.c, tests/qemuhelpdata/*: add tests + for 'qemu -help' parsing. + Thu Jun 11 15:17:12 GMT 2009 Mark McLoughlin * src/qemu_conf.c: detect newer qemu-kvm versions diff --git a/src/qemu_conf.c b/src/qemu_conf.c index 7f79bebd07..e84d245de3 100644 --- a/src/qemu_conf.c +++ b/src/qemu_conf.c @@ -489,11 +489,11 @@ static unsigned int qemudComputeCmdFlags(const char *help, #define SKIP_BLANKS(p) do { while ((*(p) == ' ') || (*(p) == '\t')) (p)++; } while (0) -static int qemudParseHelpStr(const char *help, - unsigned int *flags, - unsigned int *version, - unsigned int *is_kvm, - unsigned int *kvm_version) +int qemudParseHelpStr(const char *help, + unsigned int *flags, + unsigned int *version, + unsigned int *is_kvm, + unsigned int *kvm_version) { unsigned major, minor, micro; const char *p = help; diff --git a/src/qemu_conf.h b/src/qemu_conf.h index 1001e00ecf..b01fe485e2 100644 --- a/src/qemu_conf.h +++ b/src/qemu_conf.h @@ -125,6 +125,12 @@ int qemudExtractVersionInfo (const char *qemu, unsigned int *version, unsigned int *flags); +int qemudParseHelpStr (const char *str, + unsigned int *flags, + unsigned int *version, + unsigned int *is_kvm, + unsigned int *kvm_version); + int qemudBuildCommandLine (virConnectPtr conn, struct qemud_driver *driver, virDomainDefPtr def, diff --git a/tests/Makefile.am b/tests/Makefile.am index 621a0be885..3d98d69f30 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -61,7 +61,7 @@ noinst_PROGRAMS += xml2sexprtest sexpr2xmltest \ reconnect xmconfigtest xencapstest endif if WITH_QEMU -noinst_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest +noinst_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest endif if WITH_SECDRIVER_SELINUX @@ -119,7 +119,7 @@ endif endif if WITH_QEMU -TESTS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest +TESTS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest endif if WITH_SECDRIVER_SELINUX @@ -199,8 +199,11 @@ qemuargv2xmltest_SOURCES = \ qemuargv2xmltest.c testutilsqemu.c testutilsqemu.h \ testutils.c testutils.h qemuargv2xmltest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS) + +qemuhelptest_SOURCES = qemuhelptest.c testutils.c testutils.h +qemuhelptest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS) else -EXTRA_DIST += qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c testutilsqemu.c testutilsqemu.h +EXTRA_DIST += qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c qemuhelptest.c testutilsqemu.c testutilsqemu.h endif nodedevxml2xmltest_SOURCES = \ diff --git a/tests/qemuhelpdata/kvm-74 b/tests/qemuhelpdata/kvm-74 new file mode 100644 index 0000000000..f44932d14f --- /dev/null +++ b/tests/qemuhelpdata/kvm-74 @@ -0,0 +1,111 @@ +QEMU PC emulator version 0.9.1 (kvm-74), Copyright (c) 2003-2008 Fabrice Bellard +usage: qemu [options] [disk_image] + +'disk_image' is a raw hard image image for IDE hard disk 0 + +Standard options: +-M machine select emulated machine (-M ? for list) +-cpu cpu select CPU (-cpu ? for list) +-fda/-fdb file use 'file' as floppy disk 0/1 image +-hda/-hdb file use 'file' as IDE hard disk 0/1 image +-hdc/-hdd file use 'file' as IDE hard disk 2/3 image +-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) +-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] + [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] + [,cache=on|off][,format=f][,boot=on|off] + use 'file' as a drive image +-mtdblock file use 'file' as on-board Flash memory image +-sd file use 'file' as SecureDigital card image +-pflash file use 'file' as a parallel flash image +-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) +-snapshot write to temporary files instead of disk image files +-no-frame open SDL window without a frame and window decorations +-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt) +-no-quit disable SDL window close capability +-no-fd-bootchk disable boot signature checking for floppy disks +-m megs set virtual RAM size to megs MB [default=128] +-smp n set the number of CPUs to 'n' [default=1] +-nographic disable graphical output and redirect serial I/Os to console +-portrait rotate graphical output 90 deg left (only PXA LCD) +-k language use keyboard layout (for example "fr" for French) +-audio-help print list of audio drivers and their options +-soundhw c1,... enable audio support + and only specified sound cards (comma separated list) + use -soundhw ? to get the list of supported cards + use -soundhw all to enable all of them +-localtime set the real time clock to local time [default=utc] +-full-screen start in full screen +-win2k-hack use it when installing Windows 2000 to avoid a disk full bug +-usb enable the USB driver (will be the default soon) +-usbdevice name add the host or guest USB device 'name' +-name string set the name of the guest + +Network options: +-net nic[,vlan=n][,macaddr=addr][,model=type] + create a new Network Interface Card and connect it to VLAN 'n' +-net user[,vlan=n][,hostname=host] + connect the user mode network stack to VLAN 'n' and send + hostname 'host' to DHCP clients +-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile] + connect the host TAP network interface to VLAN 'n' and use the + network scripts 'file' (default=/etc/qemu-ifup) + and 'dfile' (default=/etc/qemu-ifdown); + use '[down]script=no' to disable script execution; + use 'fd=h' to connect to an already opened TAP interface +-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port] + connect the vlan 'n' to another VLAN using a socket connection +-net socket[,vlan=n][,fd=h][,mcast=maddr:port] + connect the vlan 'n' to multicast maddr and port +-net none use it alone to have zero network devices; if no -net option + is provided, the default is '-net nic -net user' + +-tftp dir allow tftp access to files in dir [-net user] +-bootp file advertise file in BOOTP replies +-smb dir allow SMB access to files in 'dir' [-net user] +-redir [tcp|udp]:host-port:[guest-host]:guest-port + redirect TCP or UDP connections from host to guest [-net user] + +Linux boot specific: +-kernel bzImage use 'bzImage' as kernel image +-append cmdline use 'cmdline' as kernel command line +-initrd file use 'file' as initial ram disk + +Debug/Expert options: +-monitor dev redirect the monitor to char device 'dev' +-serial dev redirect the serial port to char device 'dev' +-parallel dev redirect the parallel port to char device 'dev' +-pidfile file Write PID to 'file' +-S freeze CPU at startup (use 'c' to start execution) +-s wait gdb connection to port +-p port set gdb connection port [default=1234] +-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items) +-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS + translation (t=none or lba) (usually qemu can guess them) +-L path set the directory for the BIOS, VGA BIOS and keymaps +-no-kvm disable KVM hardware virtualization +-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC +-no-kvm-pit disable KVM kernel mode PIT +-std-vga simulate a standard VGA card with VESA Bochs Extensions + (default is CL-GD5446 PCI VGA) +-no-acpi disable ACPI +-no-reboot exit instead of rebooting +-no-shutdown stop before shutdown +-loadvm [tag|id] start right away with a saved state (loadvm in monitor) +-vnc display start a VNC server on display +-daemonize daemonize QEMU after initializing +-tdf inject timer interrupts that got lost +-kvm-shadow-memory megs set the amount of shadow pages to be allocated +-mem-path set the path to hugetlbfs/tmpfs mounted directory, also enables allocation of guest memory with huge pages +-option-rom rom load a file, rom, into the option ROM space +-clock force the use of the given methods for timer alarm. + To see what timers are available use -clock ? +-startdate select initial date of the clock +-icount [N|auto] + Enable virtual instruction counter with 2^N clock ticks per instruction + +During emulation, the following keys are useful: +ctrl-alt-f toggle full screen +ctrl-alt-n switch to virtual console 'n' +ctrl-alt toggle mouse and keyboard grab + +When using -nographic, press 'ctrl-a h' to get some help. diff --git a/tests/qemuhelpdata/kvm-86 b/tests/qemuhelpdata/kvm-86 new file mode 100644 index 0000000000..1687cab490 --- /dev/null +++ b/tests/qemuhelpdata/kvm-86 @@ -0,0 +1,170 @@ +QEMU PC emulator version 0.10.50 (qemu-kvm-devel-86), Copyright (c) 2003-2008 Fabrice Bellard +usage: qemu [options] [disk_image] + +'disk_image' is a raw hard image image for IDE hard disk 0 + +Standard options: +-h or -help display this help and exit +-version display version information and exit +-M machine select emulated machine (-M ? for list) +-cpu cpu select CPU (-cpu ? for list) +-smp n set the number of CPUs to 'n' [default=1] +-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node] +-fda/-fdb file use 'file' as floppy disk 0/1 image +-hda/-hdb file use 'file' as IDE hard disk 0/1 image +-hdc/-hdd file use 'file' as IDE hard disk 2/3 image +-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) +-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] + [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] + [,cache=writethrough|writeback|none][,format=f][,serial=s] + [,boot=on|off] + use 'file' as a drive image +-mtdblock file use 'file' as on-board Flash memory image +-sd file use 'file' as SecureDigital card image +-pflash file use 'file' as a parallel flash image +-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) +-snapshot write to temporary files instead of disk image files +-m megs set virtual RAM size to megs MB [default=128] +-k language use keyboard layout (for example 'fr' for French) +-audio-help print list of audio drivers and their options +-soundhw c1,... enable audio support + and only specified sound cards (comma separated list) + use -soundhw ? to get the list of supported cards + use -soundhw all to enable all of them +-usb enable the USB driver (will be the default soon) +-usbdevice name add the host or guest USB device 'name' +-name string set the name of the guest +-uuid %08x-%04x-%04x-%04x-%012x + specify machine UUID + +Display options: +-nographic disable graphical output and redirect serial I/Os to console +-no-frame open SDL window without a frame and window decorations +-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt) +-no-quit disable SDL window close capability +-sdl enable SDL +-portrait rotate graphical output 90 deg left (only PXA LCD) +-vga [std|cirrus|vmware|xenfb|none] + select video card type +-full-screen start in full screen +-vnc display start a VNC server on display + +i386 target only: +-win2k-hack use it when installing Windows 2000 to avoid a disk full bug +-rtc-td-hack use it to fix time drift in Windows ACPI HAL +-no-fd-bootchk disable boot signature checking for floppy disks +-no-acpi disable ACPI +-no-hpet disable HPET +-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...] + ACPI table description +-smbios file=binary + Load SMBIOS entry from binary file +-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d] + Specify SMBIOS type 0 fields +-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str] + [,uuid=uuid][,sku=str][,family=str] + Specify SMBIOS type 1 fields + +Network options: +-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str] + create a new Network Interface Card and connect it to VLAN 'n' +-net user[,vlan=n][,name=str][,hostname=host] + connect the user mode network stack to VLAN 'n' and send + hostname 'host' to DHCP clients +-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile] + connect the host TAP network interface to VLAN 'n' and use the + network scripts 'file' (default=/etc/qemu-ifup) + and 'dfile' (default=/etc/qemu-ifdown); + use '[down]script=no' to disable script execution; + use 'fd=h' to connect to an already opened TAP interface +-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port] + connect the vlan 'n' to another VLAN using a socket connection +-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port] + connect the vlan 'n' to multicast maddr and port +-net dump[,vlan=n][,file=f][,len=n] + dump traffic on vlan 'n' to file 'f' (max n bytes per packet) +-net none use it alone to have zero network devices; if no -net option + is provided, the default is '-net nic -net user' +-tftp dir allow tftp access to files in dir [-net user] +-bootp file advertise file in BOOTP replies +-smb dir allow SMB access to files in 'dir' [-net user] +-redir [tcp|udp]:host-port:[guest-host]:guest-port + redirect TCP or UDP connections from host to guest [-net user] + +-bt hci,null dumb bluetooth HCI - doesn't respond to commands +-bt hci,host[:id] + use host's HCI with the given name +-bt hci[,vlan=n] + emulate a standard HCI in virtual scatternet 'n' +-bt vhci[,vlan=n] + add host computer to virtual scatternet 'n' using VHCI +-bt device:dev[,vlan=n] + emulate a bluetooth device 'dev' in scatternet 'n' + +Linux boot specific: +-kernel bzImage use 'bzImage' as kernel image +-append cmdline use 'cmdline' as kernel command line +-initrd file use 'file' as initial ram disk + +Debug/Expert options: +-serial dev redirect the serial port to char device 'dev' +-parallel dev redirect the parallel port to char device 'dev' +-monitor dev redirect the monitor to char device 'dev' +-pidfile file write PID to 'file' +-singlestep always run in singlestep mode +-S freeze CPU at startup (use 'c' to start execution) +-gdb dev wait for gdb connection on 'dev' +-s shorthand for -gdb tcp::1234 +-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items) +-hdachs c,h,s[,t] + force hard disk 0 physical geometry and the optional BIOS + translation (t=none or lba) (usually qemu can guess them) +-L path set the directory for the BIOS, VGA BIOS and keymaps +-bios file set the filename for the BIOS +-no-reboot exit instead of rebooting +-no-shutdown stop before shutdown +-loadvm [tag|id] + start right away with a saved state (loadvm in monitor) +-daemonize daemonize QEMU after initializing +-option-rom rom load a file, rom, into the option ROM space +-clock force the use of the given methods for timer alarm. + To see what timers are available use -clock ? +-localtime set the real time clock to local time [default=utc] +-startdate select initial date of the clock +-icount [N|auto] + enable virtual instruction counter with 2^N clock ticks per + instruction +-watchdog i6300esb|ib700 + enable virtual hardware watchdog [default=none] +-watchdog-action reset|shutdown|poweroff|pause|debug|none + action when watchdog fires [default=reset] +-echr chr set terminal escape character instead of ctrl-a +-virtioconsole c + set virtio console +-show-cursor show cursor +-tb-size n set TB size +-incoming p prepare for incoming migration, listen on port p +-chroot dir Chroot to dir just before starting the VM. +-runas user Change to user id user just before starting the VM. +-no-kvm disable KVM hardware virtualization +-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC +-no-kvm-pit disable KVM kernel mode PIT +-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection +-pcidevice host=bus:dev.func[,dma=none][,name=string] + expose a PCI device to the guest OS. + dma=none: don't perform any dma translations (default is to use an iommu) + 'string' is used in log output. +-enable-nesting enable support for running a VM inside the VM (AMD only) +-nvram FILE provide ia64 nvram contents +-tdf enable guest time drift compensation +-kvm-shadow-memory MEGABYTES + allocate MEGABYTES for kvm mmu shadowing +-mempath FILE provide backing storage for guest RAM +-mem-prealloc preallocate guest memory (use with -mempath) + +During emulation, the following keys are useful: +ctrl-alt-f toggle full screen +ctrl-alt-n switch to virtual console 'n' +ctrl-alt toggle mouse and keyboard grab + +When using -nographic, press 'ctrl-a h' to get some help. diff --git a/tests/qemuhelpdata/qemu-0.10.5 b/tests/qemuhelpdata/qemu-0.10.5 new file mode 100644 index 0000000000..2a8363be52 --- /dev/null +++ b/tests/qemuhelpdata/qemu-0.10.5 @@ -0,0 +1,141 @@ +QEMU PC emulator version 0.10.5, Copyright (c) 2003-2008 Fabrice Bellard +usage: qemu [options] [disk_image] + +'disk_image' is a raw hard image image for IDE hard disk 0 + +Standard options: +-h or -help display this help and exit +-M machine select emulated machine (-M ? for list) +-cpu cpu select CPU (-cpu ? for list) +-smp n set the number of CPUs to 'n' [default=1] +-fda/-fdb file use 'file' as floppy disk 0/1 image +-hda/-hdb file use 'file' as IDE hard disk 0/1 image +-hdc/-hdd file use 'file' as IDE hard disk 2/3 image +-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) +-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] + [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] + [,cache=writethrough|writeback|none][,format=f][,serial=s] + use 'file' as a drive image +-mtdblock file use 'file' as on-board Flash memory image +-sd file use 'file' as SecureDigital card image +-pflash file use 'file' as a parallel flash image +-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) +-snapshot write to temporary files instead of disk image files +-m megs set virtual RAM size to megs MB [default=128] +-k language use keyboard layout (for example "fr" for French) +-audio-help print list of audio drivers and their options +-soundhw c1,... enable audio support + and only specified sound cards (comma separated list) + use -soundhw ? to get the list of supported cards + use -soundhw all to enable all of them +-usb enable the USB driver (will be the default soon) +-usbdevice name add the host or guest USB device 'name' +-name string set the name of the guest +-uuid %08x-%04x-%04x-%04x-%012x + specify machine UUID + +Display options: +-nographic disable graphical output and redirect serial I/Os to console +-curses use a curses/ncurses interface instead of SDL +-no-frame open SDL window without a frame and window decorations +-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt) +-no-quit disable SDL window close capability +-sdl enable SDL +-portrait rotate graphical output 90 deg left (only PXA LCD) +-vga [std|cirrus|vmware|none] + select video card type +-full-screen start in full screen +-vnc display start a VNC server on display + +Network options: +-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str] + create a new Network Interface Card and connect it to VLAN 'n' +-net user[,vlan=n][,name=str][,hostname=host] + connect the user mode network stack to VLAN 'n' and send + hostname 'host' to DHCP clients +-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile] + connect the host TAP network interface to VLAN 'n' and use the + network scripts 'file' (default=/etc/qemu-ifup) + and 'dfile' (default=/etc/qemu-ifdown); + use '[down]script=no' to disable script execution; + use 'fd=h' to connect to an already opened TAP interface +-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port] + connect the vlan 'n' to another VLAN using a socket connection +-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port] + connect the vlan 'n' to multicast maddr and port +-net none use it alone to have zero network devices; if no -net option + is provided, the default is '-net nic -net user' +-tftp dir allow tftp access to files in dir [-net user] +-bootp file advertise file in BOOTP replies +-smb dir allow SMB access to files in 'dir' [-net user] +-redir [tcp|udp]:host-port:[guest-host]:guest-port + redirect TCP or UDP connections from host to guest [-net user] + +-bt hci,null dumb bluetooth HCI - doesn't respond to commands +-bt hci,host[:id] + use host's HCI with the given name +-bt hci[,vlan=n] + emulate a standard HCI in virtual scatternet 'n' +-bt vhci[,vlan=n] + add host computer to virtual scatternet 'n' using VHCI +-bt device:dev[,vlan=n] + emulate a bluetooth device 'dev' in scatternet 'n' + + +i386 target only: +-win2k-hack use it when installing Windows 2000 to avoid a disk full bug +-rtc-td-hack use it to fix time drift in Windows ACPI HAL +-no-fd-bootchk disable boot signature checking for floppy disks +-no-acpi disable ACPI +-no-hpet disable HPET +-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...] + ACPI table description +Linux boot specific: +-kernel bzImage use 'bzImage' as kernel image +-append cmdline use 'cmdline' as kernel command line +-initrd file use 'file' as initial ram disk + +Debug/Expert options: +-serial dev redirect the serial port to char device 'dev' +-parallel dev redirect the parallel port to char device 'dev' +-monitor dev redirect the monitor to char device 'dev' +-pidfile file write PID to 'file' +-S freeze CPU at startup (use 'c' to start execution) +-s wait gdb connection to port +-p port set gdb connection port [default=1234] +-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items) +-hdachs c,h,s[,t] + force hard disk 0 physical geometry and the optional BIOS + translation (t=none or lba) (usually qemu can guess them) +-L path set the directory for the BIOS, VGA BIOS and keymaps +-bios file set the filename for the BIOS +-kernel-kqemu enable KQEMU full virtualization (default is user mode only) +-no-kqemu disable KQEMU kernel module usage +-enable-kvm enable KVM full virtualization support +-no-reboot exit instead of rebooting +-no-shutdown stop before shutdown +-loadvm [tag|id] + start right away with a saved state (loadvm in monitor) +-daemonize daemonize QEMU after initializing +-option-rom rom load a file, rom, into the option ROM space +-clock force the use of the given methods for timer alarm. + To see what timers are available use -clock ? +-localtime set the real time clock to local time [default=utc] +-startdate select initial date of the clock +-icount [N|auto] + enable virtual instruction counter with 2^N clock ticks per instruction +-echr chr set terminal escape character instead of ctrl-a +-virtioconsole c + set virtio console +-show-cursor show cursor +-tb-size n set TB size +-incoming p prepare for incoming migration, listen on port p +-chroot dir Chroot to dir just before starting the VM. +-runas user Change to user id user just before starting the VM. + +During emulation, the following keys are useful: +ctrl-alt-f toggle full screen +ctrl-alt-n switch to virtual console 'n' +ctrl-alt toggle mouse and keyboard grab + +When using -nographic, press 'ctrl-a h' to get some help. diff --git a/tests/qemuhelpdata/qemu-0.9.1 b/tests/qemuhelpdata/qemu-0.9.1 new file mode 100644 index 0000000000..0eaeaece3d --- /dev/null +++ b/tests/qemuhelpdata/qemu-0.9.1 @@ -0,0 +1,102 @@ +QEMU PC emulator version 0.9.1, Copyright (c) 2003-2008 Fabrice Bellard +usage: qemu [options] [disk_image] + +'disk_image' is a raw hard image image for IDE hard disk 0 + +Standard options: +-M machine select emulated machine (-M ? for list) +-cpu cpu select CPU (-cpu ? for list) +-fda/-fdb file use 'file' as floppy disk 0/1 image +-hda/-hdb file use 'file' as IDE hard disk 0/1 image +-hdc/-hdd file use 'file' as IDE hard disk 2/3 image +-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) +-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][index=i] + [,cyls=c,heads=h,secs=s[,trans=t]][snapshot=on|off] [,cache=on|off] + use 'file' as a drive image +-mtdblock file use 'file' as on-board Flash memory image +-sd file use 'file' as SecureDigital card image +-pflash file use 'file' as a parallel flash image +-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) +-snapshot write to temporary files instead of disk image files +-no-frame open SDL window without a frame and window decorations +-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt) +-no-quit disable SDL window close capability +-no-fd-bootchk disable boot signature checking for floppy disks +-m megs set virtual RAM size to megs MB [default=128] +-smp n set the number of CPUs to 'n' [default=1] +-nographic disable graphical output and redirect serial I/Os to console +-portrait rotate graphical output 90 deg left (only PXA LCD) +-k language use keyboard layout (for example "fr" for French) +-audio-help print list of audio drivers and their options +-soundhw c1,... enable audio support + and only specified sound cards (comma separated list) + use -soundhw ? to get the list of supported cards + use -soundhw all to enable all of them +-localtime set the real time clock to local time [default=utc] +-full-screen start in full screen +-win2k-hack use it when installing Windows 2000 to avoid a disk full bug +-usb enable the USB driver (will be the default soon) +-usbdevice name add the host or guest USB device 'name' +-name string set the name of the guest + +Network options: +-net nic[,vlan=n][,macaddr=addr][,model=type] + create a new Network Interface Card and connect it to VLAN 'n' +-net user[,vlan=n][,hostname=host] + connect the user mode network stack to VLAN 'n' and send + hostname 'host' to DHCP clients +-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile] + connect the host TAP network interface to VLAN 'n' and use the + network scripts 'file' (default=/etc/qemu-ifup) + and 'dfile' (default=/etc/qemu-ifdown); + use '[down]script=no' to disable script execution; + use 'fd=h' to connect to an already opened TAP interface +-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port] + connect the vlan 'n' to another VLAN using a socket connection +-net socket[,vlan=n][,fd=h][,mcast=maddr:port] + connect the vlan 'n' to multicast maddr and port +-net none use it alone to have zero network devices; if no -net option + is provided, the default is '-net nic -net user' + +-tftp dir allow tftp access to files in dir [-net user] +-bootp file advertise file in BOOTP replies +-smb dir allow SMB access to files in 'dir' [-net user] +-redir [tcp|udp]:host-port:[guest-host]:guest-port + redirect TCP or UDP connections from host to guest [-net user] + +Linux boot specific: +-kernel bzImage use 'bzImage' as kernel image +-append cmdline use 'cmdline' as kernel command line +-initrd file use 'file' as initial ram disk + +Debug/Expert options: +-monitor dev redirect the monitor to char device 'dev' +-serial dev redirect the serial port to char device 'dev' +-parallel dev redirect the parallel port to char device 'dev' +-pidfile file Write PID to 'file' +-S freeze CPU at startup (use 'c' to start execution) +-s wait gdb connection to port +-p port set gdb connection port [default=1234] +-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items) +-hdachs c,h,s[,t] force hard disk 0 physical geometry and the optional BIOS + translation (t=none or lba) (usually qemu can guess them) +-L path set the directory for the BIOS, VGA BIOS and keymaps +-kernel-kqemu enable KQEMU full virtualization (default is user mode only) +-no-kqemu disable KQEMU kernel module usage +-std-vga simulate a standard VGA card with VESA Bochs Extensions + (default is CL-GD5446 PCI VGA) +-no-acpi disable ACPI +-no-reboot exit instead of rebooting +-loadvm file start right away with a saved state (loadvm in monitor) +-vnc display start a VNC server on display +-daemonize daemonize QEMU after initializing +-option-rom rom load a file, rom, into the option ROM space +-clock force the use of the given methods for timer alarm. + To see what timers are available use -clock help + +During emulation, the following keys are useful: +ctrl-alt-f toggle full screen +ctrl-alt-n switch to virtual console 'n' +ctrl-alt toggle mouse and keyboard grab + +When using -nographic, press 'ctrl-a h' to get some help. diff --git a/tests/qemuhelpdata/qemu-kvm-0.10.5 b/tests/qemuhelpdata/qemu-kvm-0.10.5 new file mode 100644 index 0000000000..29d6f83f07 --- /dev/null +++ b/tests/qemuhelpdata/qemu-kvm-0.10.5 @@ -0,0 +1,155 @@ +QEMU PC emulator version 0.10.5 (qemu-kvm-0.10.5), Copyright (c) 2003-2008 Fabrice Bellard +usage: qemu [options] [disk_image] + +'disk_image' is a raw hard image image for IDE hard disk 0 + +Standard options: +-h or -help display this help and exit +-M machine select emulated machine (-M ? for list) +-cpu cpu select CPU (-cpu ? for list) +-smp n set the number of CPUs to 'n' [default=1] +-fda/-fdb file use 'file' as floppy disk 0/1 image +-hda/-hdb file use 'file' as IDE hard disk 0/1 image +-hdc/-hdd file use 'file' as IDE hard disk 2/3 image +-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master) +-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] + [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] + [,cache=writethrough|writeback|none][,format=f][,serial=s] + [,boot=on|off] + use 'file' as a drive image +-mtdblock file use 'file' as on-board Flash memory image +-sd file use 'file' as SecureDigital card image +-pflash file use 'file' as a parallel flash image +-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) +-snapshot write to temporary files instead of disk image files +-m megs set virtual RAM size to megs MB [default=128] +-k language use keyboard layout (for example "fr" for French) +-audio-help print list of audio drivers and their options +-soundhw c1,... enable audio support + and only specified sound cards (comma separated list) + use -soundhw ? to get the list of supported cards + use -soundhw all to enable all of them +-usb enable the USB driver (will be the default soon) +-usbdevice name add the host or guest USB device 'name' +-name string set the name of the guest +-uuid %08x-%04x-%04x-%04x-%012x + specify machine UUID + +Display options: +-nographic disable graphical output and redirect serial I/Os to console +-no-frame open SDL window without a frame and window decorations +-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt) +-no-quit disable SDL window close capability +-sdl enable SDL +-portrait rotate graphical output 90 deg left (only PXA LCD) +-vga [std|cirrus|vmware|none] + select video card type +-full-screen start in full screen +-vnc display start a VNC server on display +-name string set the name of the guest +-uuid %08x-%04x-%04x-%04x-%012x specify machine UUID + +Network options: +-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str] + create a new Network Interface Card and connect it to VLAN 'n' +-net user[,vlan=n][,name=str][,hostname=host] + connect the user mode network stack to VLAN 'n' and send + hostname 'host' to DHCP clients +-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile] + connect the host TAP network interface to VLAN 'n' and use the + network scripts 'file' (default=/etc/qemu-ifup) + and 'dfile' (default=/etc/qemu-ifdown); + use '[down]script=no' to disable script execution; + use 'fd=h' to connect to an already opened TAP interface +-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port] + connect the vlan 'n' to another VLAN using a socket connection +-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port] + connect the vlan 'n' to multicast maddr and port +-net none use it alone to have zero network devices; if no -net option + is provided, the default is '-net nic -net user' +-tftp dir allow tftp access to files in dir [-net user] +-bootp file advertise file in BOOTP replies +-smb dir allow SMB access to files in 'dir' [-net user] +-redir [tcp|udp]:host-port:[guest-host]:guest-port + redirect TCP or UDP connections from host to guest [-net user] + +-bt hci,null dumb bluetooth HCI - doesn't respond to commands +-bt hci,host[:id] + use host's HCI with the given name +-bt hci[,vlan=n] + emulate a standard HCI in virtual scatternet 'n' +-bt vhci[,vlan=n] + add host computer to virtual scatternet 'n' using VHCI +-bt device:dev[,vlan=n] + emulate a bluetooth device 'dev' in scatternet 'n' + + +i386 target only: +-win2k-hack use it when installing Windows 2000 to avoid a disk full bug +-rtc-td-hack use it to fix time drift in Windows ACPI HAL +-no-fd-bootchk disable boot signature checking for floppy disks +-no-acpi disable ACPI +-no-hpet disable HPET +-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...] + ACPI table description +Linux boot specific: +-kernel bzImage use 'bzImage' as kernel image +-append cmdline use 'cmdline' as kernel command line +-initrd file use 'file' as initial ram disk + +Debug/Expert options: +-serial dev redirect the serial port to char device 'dev' +-parallel dev redirect the parallel port to char device 'dev' +-monitor dev redirect the monitor to char device 'dev' +-pidfile file write PID to 'file' +-S freeze CPU at startup (use 'c' to start execution) +-s wait gdb connection to port +-p port set gdb connection port [default=1234] +-d item1,... output log to /tmp/qemu.log (use -d ? for a list of log items) +-hdachs c,h,s[,t] + force hard disk 0 physical geometry and the optional BIOS + translation (t=none or lba) (usually qemu can guess them) +-L path set the directory for the BIOS, VGA BIOS and keymaps +-bios file set the filename for the BIOS +-no-kvm disable KVM hardware virtualization +-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC +-no-kvm-pit disable KVM kernel mode PIT +-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection +-enable-nesting enable support for running a VM inside the VM (AMD only) +-pcidevice host=bus:dev.func[,dma=none][,name=string] + expose a PCI device to the guest OS. + dma=none: don't perform any dma translations (default is to use an iommu) + 'string' is used in log output. +-no-reboot exit instead of rebooting +-no-shutdown stop before shutdown +-loadvm [tag|id] + start right away with a saved state (loadvm in monitor) +-daemonize daemonize QEMU after initializing +-tdf inject timer interrupts that got lost +-kvm-shadow-memory megs set the amount of shadow pages to be allocated +-mem-path set the path to hugetlbfs/tmpfs mounted directory, also + enables allocation of guest memory with huge pages +-mem-prealloc toggles preallocation of -mem-path backed physical memory + at startup. Default is enabled. +-option-rom rom load a file, rom, into the option ROM space +-clock force the use of the given methods for timer alarm. + To see what timers are available use -clock ? +-localtime set the real time clock to local time [default=utc] +-startdate select initial date of the clock +-icount [N|auto] + enable virtual instruction counter with 2^N clock ticks per instruction +-echr chr set terminal escape character instead of ctrl-a +-virtioconsole c + set virtio console +-show-cursor show cursor +-tb-size n set TB size +-incoming p prepare for incoming migration, listen on port p +-chroot dir Chroot to dir just before starting the VM. +-runas user Change to user id user just before starting the VM. + +During emulation, the following keys are useful: +ctrl-alt-f toggle full screen +ctrl-alt-n switch to virtual console 'n' +ctrl-alt toggle mouse and keyboard grab + +When using -nographic, press 'ctrl-a h' to get some help. diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c new file mode 100644 index 0000000000..836010ff40 --- /dev/null +++ b/tests/qemuhelptest.c @@ -0,0 +1,107 @@ +#include + +#ifdef WITH_QEMU + +#include +#include + +#include "testutils.h" +#include "qemu_conf.h" + +#define MAX_HELP_OUTPUT_SIZE 1024*64 + +struct testInfo { + const char *name; + unsigned flags; + unsigned version; + unsigned is_kvm; + unsigned kvm_version; +}; + +static char *progname; +static char *abs_srcdir; + +static int testHelpStrParsing(const void *data) +{ + const struct testInfo *info = data; + char path[PATH_MAX]; + char helpStr[MAX_HELP_OUTPUT_SIZE]; + char *help = &(helpStr[0]); + unsigned flags, version, is_kvm, kvm_version; + + snprintf(path, PATH_MAX, "%s/qemuhelpdata/%s", abs_srcdir, info->name); + + if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0) + return -1; + + if (qemudParseHelpStr(help, &flags, &version, &is_kvm, &kvm_version) == -1) + return -1; + + if (flags != info->flags) { + fprintf(stderr, "Computed flags do not match: got 0x%x, expected 0x%x\n", + flags, info->flags); + return -1; + } + + if (version != info->version) { + fprintf(stderr, "Parsed versions do not match: got %u, expected %u\n", + version, info->version); + return -1; + } + + if (is_kvm != info->is_kvm) { + fprintf(stderr, "Parsed is_kvm flag does not match: got %u, expected %u\n", + is_kvm, info->is_kvm); + return -1; + } + + if (kvm_version != kvm_version) { + fprintf(stderr, "Parsed KVM versions do not match: got %u, expected %u\n", + version, kvm_version); + return -1; + } + + return 0; +} + +static int +mymain(int argc, char **argv) +{ + int ret = 0; + char cwd[PATH_MAX]; + + progname = argv[0]; + + if (argc > 1) { + fprintf(stderr, "Usage: %s\n", progname); + return (EXIT_FAILURE); + } + + abs_srcdir = getenv("abs_srcdir"); + if (!abs_srcdir) + abs_srcdir = getcwd(cwd, sizeof(cwd)); + +#define DO_TEST(name, flags, version, is_kvm, kvm_version) \ + do { \ + const struct testInfo info = { name, flags, version, is_kvm, kvm_version }; \ + if (virtTestRun("QEMU Help String Parsing " name, \ + 1, testHelpStrParsing, &info) < 0) \ + ret = -1; \ + } while (0) + + DO_TEST("qemu-0.9.1", 0x002f, 9001, 0, 0); + DO_TEST("kvm-74", 0x233e, 9001, 1, 74); + DO_TEST("qemu-0.10.5", 0x1c6f, 10005, 0, 0); + DO_TEST("qemu-kvm-0.10.5", 0x3d7e, 10005, 1, 0); + DO_TEST("kvm-86", 0x3d7e, 10050, 1, 0); + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIRT_TEST_MAIN(mymain) + +#else + +int main (void) { return (77); /* means 'test skipped' for automake */ } + +#endif /* WITH_QEMU */