qemu-option: move standard option definitions out of qemu-config.c
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
63fb259083
commit
4d4545743f
@ -980,9 +980,36 @@ static BlockDriver bdrv_iscsi = {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_iscsi_opts = {
|
||||||
|
.name = "iscsi",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "user",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "username for CHAP authentication to target",
|
||||||
|
},{
|
||||||
|
.name = "password",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "password for CHAP authentication to target",
|
||||||
|
},{
|
||||||
|
.name = "header-digest",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "HeaderDigest setting. "
|
||||||
|
"{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
|
||||||
|
},{
|
||||||
|
.name = "initiator-name",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Initiator iqn name to use when connecting",
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
static void iscsi_block_init(void)
|
static void iscsi_block_init(void)
|
||||||
{
|
{
|
||||||
bdrv_register(&bdrv_iscsi);
|
bdrv_register(&bdrv_iscsi);
|
||||||
|
qemu_add_opts(&qemu_iscsi_opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
block_init(iscsi_block_init);
|
block_init(iscsi_block_init);
|
||||||
|
118
blockdev.c
118
blockdev.c
@ -1427,3 +1427,121 @@ BlockJobInfoList *qmp_query_block_jobs(Error **errp)
|
|||||||
bdrv_iterate(do_qmp_query_block_jobs_one, &prev);
|
bdrv_iterate(do_qmp_query_block_jobs_one, &prev);
|
||||||
return dummy.next;
|
return dummy.next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QemuOptsList qemu_drive_opts = {
|
||||||
|
.name = "drive",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "bus",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "bus number",
|
||||||
|
},{
|
||||||
|
.name = "unit",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "unit number (i.e. lun for scsi)",
|
||||||
|
},{
|
||||||
|
.name = "if",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
|
||||||
|
},{
|
||||||
|
.name = "index",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "index number",
|
||||||
|
},{
|
||||||
|
.name = "cyls",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "number of cylinders (ide disk geometry)",
|
||||||
|
},{
|
||||||
|
.name = "heads",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "number of heads (ide disk geometry)",
|
||||||
|
},{
|
||||||
|
.name = "secs",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "number of sectors (ide disk geometry)",
|
||||||
|
},{
|
||||||
|
.name = "trans",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "chs translation (auto, lba. none)",
|
||||||
|
},{
|
||||||
|
.name = "media",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "media type (disk, cdrom)",
|
||||||
|
},{
|
||||||
|
.name = "snapshot",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "enable/disable snapshot mode",
|
||||||
|
},{
|
||||||
|
.name = "file",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "disk image",
|
||||||
|
},{
|
||||||
|
.name = "cache",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "host cache usage (none, writeback, writethrough, "
|
||||||
|
"directsync, unsafe)",
|
||||||
|
},{
|
||||||
|
.name = "aio",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "host AIO implementation (threads, native)",
|
||||||
|
},{
|
||||||
|
.name = "format",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "disk format (raw, qcow2, ...)",
|
||||||
|
},{
|
||||||
|
.name = "serial",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "disk serial number",
|
||||||
|
},{
|
||||||
|
.name = "rerror",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "read error action",
|
||||||
|
},{
|
||||||
|
.name = "werror",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "write error action",
|
||||||
|
},{
|
||||||
|
.name = "addr",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "pci address (virtio only)",
|
||||||
|
},{
|
||||||
|
.name = "readonly",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "open drive file as read-only",
|
||||||
|
},{
|
||||||
|
.name = "iops",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "limit total I/O operations per second",
|
||||||
|
},{
|
||||||
|
.name = "iops_rd",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "limit read operations per second",
|
||||||
|
},{
|
||||||
|
.name = "iops_wr",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "limit write operations per second",
|
||||||
|
},{
|
||||||
|
.name = "bps",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "limit total bytes per second",
|
||||||
|
},{
|
||||||
|
.name = "bps_rd",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "limit read bytes per second",
|
||||||
|
},{
|
||||||
|
.name = "bps_wr",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "limit write bytes per second",
|
||||||
|
},{
|
||||||
|
.name = "copy-on-read",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "copy read data from backing file into image file",
|
||||||
|
},{
|
||||||
|
.name = "boot",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "(deprecated, ignored)",
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
@ -7,3 +7,4 @@ extra-obj-y = qemu-fsdev-dummy.o
|
|||||||
else
|
else
|
||||||
common-obj-y = qemu-fsdev-dummy.o
|
common-obj-y = qemu-fsdev-dummy.o
|
||||||
endif
|
endif
|
||||||
|
common-obj-y += qemu-fsdev-opts.o
|
||||||
|
@ -20,10 +20,3 @@ int qemu_fsdev_add(QemuOpts *opts)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fsdev_register_config(void)
|
|
||||||
{
|
|
||||||
qemu_add_opts(&qemu_fsdev_opts);
|
|
||||||
qemu_add_opts(&qemu_virtfs_opts);
|
|
||||||
}
|
|
||||||
machine_init(fsdev_register_config);
|
|
||||||
|
85
fsdev/qemu-fsdev-opts.c
Normal file
85
fsdev/qemu-fsdev-opts.c
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* Virtio 9p
|
||||||
|
*
|
||||||
|
* This work is licensed under the terms of the GNU GPL, version 2 or
|
||||||
|
* later. See the COPYING file in the top-level directory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qemu/config-file.h"
|
||||||
|
#include "qemu/option.h"
|
||||||
|
#include "qemu/module.h"
|
||||||
|
|
||||||
|
static QemuOptsList qemu_fsdev_opts = {
|
||||||
|
.name = "fsdev",
|
||||||
|
.implied_opt_name = "fsdriver",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_fsdev_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "fsdriver",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "path",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "security_model",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "writeout",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "readonly",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
|
||||||
|
}, {
|
||||||
|
.name = "socket",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "sock_fd",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},
|
||||||
|
|
||||||
|
{ /*End of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_virtfs_opts = {
|
||||||
|
.name = "virtfs",
|
||||||
|
.implied_opt_name = "fsdriver",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_virtfs_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "fsdriver",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "path",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "mount_tag",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "security_model",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "writeout",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "readonly",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
}, {
|
||||||
|
.name = "socket",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "sock_fd",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},
|
||||||
|
|
||||||
|
{ /*End of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static void fsdev_register_config(void)
|
||||||
|
{
|
||||||
|
qemu_add_opts(&qemu_fsdev_opts);
|
||||||
|
qemu_add_opts(&qemu_virtfs_opts);
|
||||||
|
}
|
||||||
|
machine_init(fsdev_register_config);
|
@ -97,11 +97,3 @@ FsDriverEntry *get_fsdev_fsentry(char *id)
|
|||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fsdev_register_config(void)
|
|
||||||
{
|
|
||||||
qemu_add_opts(&qemu_fsdev_opts);
|
|
||||||
qemu_add_opts(&qemu_virtfs_opts);
|
|
||||||
}
|
|
||||||
machine_init(fsdev_register_config);
|
|
||||||
|
|
||||||
|
@ -615,3 +615,54 @@ void qdev_machine_init(void)
|
|||||||
qdev_get_peripheral_anon();
|
qdev_get_peripheral_anon();
|
||||||
qdev_get_peripheral();
|
qdev_get_peripheral();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QemuOptsList qemu_device_opts = {
|
||||||
|
.name = "device",
|
||||||
|
.implied_opt_name = "driver",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head),
|
||||||
|
.desc = {
|
||||||
|
/*
|
||||||
|
* no elements => accept any
|
||||||
|
* sanity checking will happen later
|
||||||
|
* when setting device properties
|
||||||
|
*/
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
QemuOptsList qemu_global_opts = {
|
||||||
|
.name = "global",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_global_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "driver",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "property",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "value",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
int qemu_global_option(const char *str)
|
||||||
|
{
|
||||||
|
char driver[64], property[64];
|
||||||
|
QemuOpts *opts;
|
||||||
|
int rc, offset;
|
||||||
|
|
||||||
|
rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset);
|
||||||
|
if (rc < 2 || str[offset] != '=') {
|
||||||
|
error_report("can't parse: \"%s\"", str);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
opts = qemu_opts_create_nofail(&qemu_global_opts);
|
||||||
|
qemu_opt_set(opts, "driver", driver);
|
||||||
|
qemu_opt_set(opts, "property", property);
|
||||||
|
qemu_opt_set(opts, "value", str+offset+1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -6,11 +6,6 @@
|
|||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
|
|
||||||
extern QemuOptsList qemu_fsdev_opts;
|
|
||||||
extern QemuOptsList qemu_virtfs_opts;
|
|
||||||
extern QemuOptsList qemu_spice_opts;
|
|
||||||
extern QemuOptsList qemu_sandbox_opts;
|
|
||||||
|
|
||||||
QemuOptsList *qemu_find_opts(const char *group);
|
QemuOptsList *qemu_find_opts(const char *group);
|
||||||
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
|
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp);
|
||||||
void qemu_add_opts(QemuOptsList *list);
|
void qemu_add_opts(QemuOptsList *list);
|
||||||
|
@ -183,4 +183,12 @@ char *get_boot_devices_list(uint32_t *size);
|
|||||||
|
|
||||||
bool usb_enabled(bool default_usb);
|
bool usb_enabled(bool default_usb);
|
||||||
|
|
||||||
|
extern QemuOptsList qemu_drive_opts;
|
||||||
|
extern QemuOptsList qemu_chardev_opts;
|
||||||
|
extern QemuOptsList qemu_device_opts;
|
||||||
|
extern QemuOptsList qemu_netdev_opts;
|
||||||
|
extern QemuOptsList qemu_net_opts;
|
||||||
|
extern QemuOptsList qemu_global_opts;
|
||||||
|
extern QemuOptsList qemu_mon_opts;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
22
monitor.c
22
monitor.c
@ -4790,3 +4790,25 @@ int monitor_read_block_device_key(Monitor *mon, const char *device,
|
|||||||
|
|
||||||
return monitor_read_bdrv_key_start(mon, bs, completion_cb, opaque);
|
return monitor_read_bdrv_key_start(mon, bs, completion_cb, opaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QemuOptsList qemu_mon_opts = {
|
||||||
|
.name = "mon",
|
||||||
|
.implied_opt_name = "chardev",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "mode",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "chardev",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "default",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "pretty",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
26
net/net.c
26
net/net.c
@ -1054,3 +1054,29 @@ unsigned compute_mcast_idx(const uint8_t *ep)
|
|||||||
}
|
}
|
||||||
return crc >> 26;
|
return crc >> 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QemuOptsList qemu_netdev_opts = {
|
||||||
|
.name = "netdev",
|
||||||
|
.implied_opt_name = "type",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_netdev_opts.head),
|
||||||
|
.desc = {
|
||||||
|
/*
|
||||||
|
* no elements => accept any params
|
||||||
|
* validation will happen later
|
||||||
|
*/
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
QemuOptsList qemu_net_opts = {
|
||||||
|
.name = "net",
|
||||||
|
.implied_opt_name = "type",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_net_opts.head),
|
||||||
|
.desc = {
|
||||||
|
/*
|
||||||
|
* no elements => accept any params
|
||||||
|
* validation will happen later
|
||||||
|
*/
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
72
qemu-char.c
72
qemu-char.c
@ -2924,3 +2924,75 @@ CharDriverState *qemu_char_get_next_serial(void)
|
|||||||
return serial_hds[next_serial++];
|
return serial_hds[next_serial++];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QemuOptsList qemu_chardev_opts = {
|
||||||
|
.name = "chardev",
|
||||||
|
.implied_opt_name = "backend",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "backend",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "path",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "host",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "port",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "localaddr",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "localport",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "to",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "ipv4",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "ipv6",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "wait",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "server",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "delay",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "telnet",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "width",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "height",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "cols",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "rows",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "mux",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "signal",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "name",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "debug",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
681
qemu-config.c
681
qemu-config.c
@ -5,667 +5,7 @@
|
|||||||
#include "hw/qdev.h"
|
#include "hw/qdev.h"
|
||||||
#include "qapi/error.h"
|
#include "qapi/error.h"
|
||||||
|
|
||||||
static QemuOptsList qemu_drive_opts = {
|
static QemuOptsList *vm_config_groups[32];
|
||||||
.name = "drive",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "bus",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "bus number",
|
|
||||||
},{
|
|
||||||
.name = "unit",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "unit number (i.e. lun for scsi)",
|
|
||||||
},{
|
|
||||||
.name = "if",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
|
|
||||||
},{
|
|
||||||
.name = "index",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "index number",
|
|
||||||
},{
|
|
||||||
.name = "cyls",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "number of cylinders (ide disk geometry)",
|
|
||||||
},{
|
|
||||||
.name = "heads",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "number of heads (ide disk geometry)",
|
|
||||||
},{
|
|
||||||
.name = "secs",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "number of sectors (ide disk geometry)",
|
|
||||||
},{
|
|
||||||
.name = "trans",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "chs translation (auto, lba. none)",
|
|
||||||
},{
|
|
||||||
.name = "media",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "media type (disk, cdrom)",
|
|
||||||
},{
|
|
||||||
.name = "snapshot",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "enable/disable snapshot mode",
|
|
||||||
},{
|
|
||||||
.name = "file",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "disk image",
|
|
||||||
},{
|
|
||||||
.name = "cache",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "host cache usage (none, writeback, writethrough, "
|
|
||||||
"directsync, unsafe)",
|
|
||||||
},{
|
|
||||||
.name = "aio",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "host AIO implementation (threads, native)",
|
|
||||||
},{
|
|
||||||
.name = "format",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "disk format (raw, qcow2, ...)",
|
|
||||||
},{
|
|
||||||
.name = "serial",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "disk serial number",
|
|
||||||
},{
|
|
||||||
.name = "rerror",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "read error action",
|
|
||||||
},{
|
|
||||||
.name = "werror",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "write error action",
|
|
||||||
},{
|
|
||||||
.name = "addr",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "pci address (virtio only)",
|
|
||||||
},{
|
|
||||||
.name = "readonly",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "open drive file as read-only",
|
|
||||||
},{
|
|
||||||
.name = "iops",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "limit total I/O operations per second",
|
|
||||||
},{
|
|
||||||
.name = "iops_rd",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "limit read operations per second",
|
|
||||||
},{
|
|
||||||
.name = "iops_wr",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "limit write operations per second",
|
|
||||||
},{
|
|
||||||
.name = "bps",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "limit total bytes per second",
|
|
||||||
},{
|
|
||||||
.name = "bps_rd",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "limit read bytes per second",
|
|
||||||
},{
|
|
||||||
.name = "bps_wr",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "limit write bytes per second",
|
|
||||||
},{
|
|
||||||
.name = "copy-on-read",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "copy read data from backing file into image file",
|
|
||||||
},{
|
|
||||||
.name = "boot",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "(deprecated, ignored)",
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_iscsi_opts = {
|
|
||||||
.name = "iscsi",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_iscsi_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "user",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "username for CHAP authentication to target",
|
|
||||||
},{
|
|
||||||
.name = "password",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "password for CHAP authentication to target",
|
|
||||||
},{
|
|
||||||
.name = "header-digest",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "HeaderDigest setting. "
|
|
||||||
"{CRC32C|CRC32C-NONE|NONE-CRC32C|NONE}",
|
|
||||||
},{
|
|
||||||
.name = "initiator-name",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Initiator iqn name to use when connecting",
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_chardev_opts = {
|
|
||||||
.name = "chardev",
|
|
||||||
.implied_opt_name = "backend",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "backend",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "path",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "host",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "port",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "localaddr",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "localport",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "to",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "ipv4",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "ipv6",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "wait",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "server",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "delay",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "telnet",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "width",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "height",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "cols",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "rows",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "mux",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "signal",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "name",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "debug",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
QemuOptsList qemu_fsdev_opts = {
|
|
||||||
.name = "fsdev",
|
|
||||||
.implied_opt_name = "fsdriver",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_fsdev_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "fsdriver",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "path",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "security_model",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "writeout",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "readonly",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
|
|
||||||
}, {
|
|
||||||
.name = "socket",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "sock_fd",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},
|
|
||||||
|
|
||||||
{ /*End of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
QemuOptsList qemu_virtfs_opts = {
|
|
||||||
.name = "virtfs",
|
|
||||||
.implied_opt_name = "fsdriver",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_virtfs_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "fsdriver",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "path",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "mount_tag",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "security_model",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "writeout",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "readonly",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
}, {
|
|
||||||
.name = "socket",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "sock_fd",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},
|
|
||||||
|
|
||||||
{ /*End of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_device_opts = {
|
|
||||||
.name = "device",
|
|
||||||
.implied_opt_name = "driver",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head),
|
|
||||||
.desc = {
|
|
||||||
/*
|
|
||||||
* no elements => accept any
|
|
||||||
* sanity checking will happen later
|
|
||||||
* when setting device properties
|
|
||||||
*/
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_netdev_opts = {
|
|
||||||
.name = "netdev",
|
|
||||||
.implied_opt_name = "type",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_netdev_opts.head),
|
|
||||||
.desc = {
|
|
||||||
/*
|
|
||||||
* no elements => accept any params
|
|
||||||
* validation will happen later
|
|
||||||
*/
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_net_opts = {
|
|
||||||
.name = "net",
|
|
||||||
.implied_opt_name = "type",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_net_opts.head),
|
|
||||||
.desc = {
|
|
||||||
/*
|
|
||||||
* no elements => accept any params
|
|
||||||
* validation will happen later
|
|
||||||
*/
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_rtc_opts = {
|
|
||||||
.name = "rtc",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "base",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "clock",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "driftfix",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_global_opts = {
|
|
||||||
.name = "global",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_global_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "driver",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "property",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "value",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
QemuOptsList qemu_sandbox_opts = {
|
|
||||||
.name = "sandbox",
|
|
||||||
.implied_opt_name = "enable",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "enable",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_mon_opts = {
|
|
||||||
.name = "mon",
|
|
||||||
.implied_opt_name = "chardev",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "mode",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "chardev",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "default",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "pretty",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_trace_opts = {
|
|
||||||
.name = "trace",
|
|
||||||
.implied_opt_name = "trace",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "events",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "file",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
QemuOptsList qemu_spice_opts = {
|
|
||||||
.name = "spice",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_spice_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "port",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "tls-port",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
},{
|
|
||||||
.name = "addr",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "ipv4",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "ipv6",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "password",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "disable-ticketing",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "disable-copy-paste",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "sasl",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "x509-dir",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "x509-key-file",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "x509-key-password",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "x509-cert-file",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "x509-cacert-file",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "x509-dh-key-file",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "tls-ciphers",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "tls-channel",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "plaintext-channel",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "image-compression",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "jpeg-wan-compression",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "zlib-glz-wan-compression",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "streaming-video",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},{
|
|
||||||
.name = "agent-mouse",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},{
|
|
||||||
.name = "playback-compression",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
}, {
|
|
||||||
.name = "seamless-migration",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
QemuOptsList qemu_option_rom_opts = {
|
|
||||||
.name = "option-rom",
|
|
||||||
.implied_opt_name = "romfile",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "bootindex",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
}, {
|
|
||||||
.name = "romfile",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_machine_opts = {
|
|
||||||
.name = "machine",
|
|
||||||
.implied_opt_name = "type",
|
|
||||||
.merge_lists = true,
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "type",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "emulated machine"
|
|
||||||
}, {
|
|
||||||
.name = "accel",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "accelerator list",
|
|
||||||
}, {
|
|
||||||
.name = "kernel_irqchip",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "use KVM in-kernel irqchip",
|
|
||||||
}, {
|
|
||||||
.name = "kvm_shadow_mem",
|
|
||||||
.type = QEMU_OPT_SIZE,
|
|
||||||
.help = "KVM shadow MMU size",
|
|
||||||
}, {
|
|
||||||
.name = "kernel",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux kernel image file",
|
|
||||||
}, {
|
|
||||||
.name = "initrd",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux initial ramdisk file",
|
|
||||||
}, {
|
|
||||||
.name = "append",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux kernel command line",
|
|
||||||
}, {
|
|
||||||
.name = "dtb",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Linux kernel device tree file",
|
|
||||||
}, {
|
|
||||||
.name = "dumpdtb",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Dump current dtb to a file and quit",
|
|
||||||
}, {
|
|
||||||
.name = "phandle_start",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "The first phandle ID we may generate dynamically",
|
|
||||||
}, {
|
|
||||||
.name = "dt_compatible",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Overrides the \"compatible\" property of the dt root node",
|
|
||||||
}, {
|
|
||||||
.name = "dump-guest-core",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "Include guest memory in a core dump",
|
|
||||||
}, {
|
|
||||||
.name = "mem-merge",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "enable/disable memory merge support",
|
|
||||||
},{
|
|
||||||
.name = "usb",
|
|
||||||
.type = QEMU_OPT_BOOL,
|
|
||||||
.help = "Set on/off to enable/disable usb",
|
|
||||||
}, {
|
|
||||||
.name = "nvram",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "Drive backing persistent NVRAM",
|
|
||||||
},
|
|
||||||
{ /* End of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
QemuOptsList qemu_boot_opts = {
|
|
||||||
.name = "boot-opts",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
|
|
||||||
.desc = {
|
|
||||||
/* the three names below are not used now */
|
|
||||||
{
|
|
||||||
.name = "order",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "once",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "menu",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
/* following are really used */
|
|
||||||
}, {
|
|
||||||
.name = "splash",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "splash-time",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
}, {
|
|
||||||
.name = "reboot-timeout",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
},
|
|
||||||
{ /*End of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_add_fd_opts = {
|
|
||||||
.name = "add-fd",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{
|
|
||||||
.name = "fd",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "file descriptor of which a duplicate is added to fd set",
|
|
||||||
},{
|
|
||||||
.name = "set",
|
|
||||||
.type = QEMU_OPT_NUMBER,
|
|
||||||
.help = "ID of the fd set to add fd to",
|
|
||||||
},{
|
|
||||||
.name = "opaque",
|
|
||||||
.type = QEMU_OPT_STRING,
|
|
||||||
.help = "free-form string used to describe fd",
|
|
||||||
},
|
|
||||||
{ /* end of list */ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList qemu_object_opts = {
|
|
||||||
.name = "object",
|
|
||||||
.implied_opt_name = "qom-type",
|
|
||||||
.head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
|
|
||||||
.desc = {
|
|
||||||
{ }
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList *vm_config_groups[32] = {
|
|
||||||
&qemu_drive_opts,
|
|
||||||
&qemu_chardev_opts,
|
|
||||||
&qemu_device_opts,
|
|
||||||
&qemu_netdev_opts,
|
|
||||||
&qemu_net_opts,
|
|
||||||
&qemu_rtc_opts,
|
|
||||||
&qemu_global_opts,
|
|
||||||
&qemu_mon_opts,
|
|
||||||
&qemu_trace_opts,
|
|
||||||
&qemu_option_rom_opts,
|
|
||||||
&qemu_machine_opts,
|
|
||||||
&qemu_boot_opts,
|
|
||||||
&qemu_iscsi_opts,
|
|
||||||
&qemu_sandbox_opts,
|
|
||||||
&qemu_add_fd_opts,
|
|
||||||
&qemu_object_opts,
|
|
||||||
NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
static QemuOptsList *find_list(QemuOptsList **lists, const char *group,
|
static QemuOptsList *find_list(QemuOptsList **lists, const char *group,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
@ -748,25 +88,6 @@ int qemu_set_option(const char *str)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int qemu_global_option(const char *str)
|
|
||||||
{
|
|
||||||
char driver[64], property[64];
|
|
||||||
QemuOpts *opts;
|
|
||||||
int rc, offset;
|
|
||||||
|
|
||||||
rc = sscanf(str, "%63[^.].%63[^=]%n", driver, property, &offset);
|
|
||||||
if (rc < 2 || str[offset] != '=') {
|
|
||||||
error_report("can't parse: \"%s\"", str);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
opts = qemu_opts_create_nofail(&qemu_global_opts);
|
|
||||||
qemu_opt_set(opts, "driver", driver);
|
|
||||||
qemu_opt_set(opts, "property", property);
|
|
||||||
qemu_opt_set(opts, "value", str+offset+1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ConfigWriteData {
|
struct ConfigWriteData {
|
||||||
QemuOptsList *list;
|
QemuOptsList *list;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
@ -417,6 +417,90 @@ static SpiceChannelList *qmp_query_spice_channels(void)
|
|||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuOptsList qemu_spice_opts = {
|
||||||
|
.name = "spice",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_spice_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "port",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "tls-port",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
},{
|
||||||
|
.name = "addr",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "ipv4",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "ipv6",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "password",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "disable-ticketing",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "disable-copy-paste",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "sasl",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "x509-dir",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "x509-key-file",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "x509-key-password",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "x509-cert-file",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "x509-cacert-file",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "x509-dh-key-file",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "tls-ciphers",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "tls-channel",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "plaintext-channel",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "image-compression",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "jpeg-wan-compression",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "zlib-glz-wan-compression",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "streaming-video",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "agent-mouse",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},{
|
||||||
|
.name = "playback-compression",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
}, {
|
||||||
|
.name = "seamless-migration",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
SpiceInfo *qmp_query_spice(Error **errp)
|
SpiceInfo *qmp_query_spice(Error **errp)
|
||||||
{
|
{
|
||||||
QemuOpts *opts = QTAILQ_FIRST(&qemu_spice_opts.head);
|
QemuOpts *opts = QTAILQ_FIRST(&qemu_spice_opts.head);
|
||||||
|
205
vl.c
205
vl.c
@ -299,6 +299,195 @@ static struct {
|
|||||||
{ .driver = "qxl-vga", .flag = &default_vga },
|
{ .driver = "qxl-vga", .flag = &default_vga },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_rtc_opts = {
|
||||||
|
.name = "rtc",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "base",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "clock",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "driftfix",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_sandbox_opts = {
|
||||||
|
.name = "sandbox",
|
||||||
|
.implied_opt_name = "enable",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "enable",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_trace_opts = {
|
||||||
|
.name = "trace",
|
||||||
|
.implied_opt_name = "trace",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_trace_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "events",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},{
|
||||||
|
.name = "file",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_option_rom_opts = {
|
||||||
|
.name = "option-rom",
|
||||||
|
.implied_opt_name = "romfile",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "bootindex",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
}, {
|
||||||
|
.name = "romfile",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_machine_opts = {
|
||||||
|
.name = "machine",
|
||||||
|
.implied_opt_name = "type",
|
||||||
|
.merge_lists = true,
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "type",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "emulated machine"
|
||||||
|
}, {
|
||||||
|
.name = "accel",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "accelerator list",
|
||||||
|
}, {
|
||||||
|
.name = "kernel_irqchip",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "use KVM in-kernel irqchip",
|
||||||
|
}, {
|
||||||
|
.name = "kvm_shadow_mem",
|
||||||
|
.type = QEMU_OPT_SIZE,
|
||||||
|
.help = "KVM shadow MMU size",
|
||||||
|
}, {
|
||||||
|
.name = "kernel",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Linux kernel image file",
|
||||||
|
}, {
|
||||||
|
.name = "initrd",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Linux initial ramdisk file",
|
||||||
|
}, {
|
||||||
|
.name = "append",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Linux kernel command line",
|
||||||
|
}, {
|
||||||
|
.name = "dtb",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Linux kernel device tree file",
|
||||||
|
}, {
|
||||||
|
.name = "dumpdtb",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Dump current dtb to a file and quit",
|
||||||
|
}, {
|
||||||
|
.name = "phandle_start",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "The first phandle ID we may generate dynamically",
|
||||||
|
}, {
|
||||||
|
.name = "dt_compatible",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "Overrides the \"compatible\" property of the dt root node",
|
||||||
|
}, {
|
||||||
|
.name = "dump-guest-core",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "Include guest memory in a core dump",
|
||||||
|
}, {
|
||||||
|
.name = "mem-merge",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "enable/disable memory merge support",
|
||||||
|
},{
|
||||||
|
.name = "usb",
|
||||||
|
.type = QEMU_OPT_BOOL,
|
||||||
|
.help = "Set on/off to enable/disable usb",
|
||||||
|
},
|
||||||
|
{ /* End of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_boot_opts = {
|
||||||
|
.name = "boot-opts",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
|
||||||
|
.desc = {
|
||||||
|
/* the three names below are not used now */
|
||||||
|
{
|
||||||
|
.name = "order",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "once",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "menu",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
/* following are really used */
|
||||||
|
}, {
|
||||||
|
.name = "splash",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "splash-time",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
}, {
|
||||||
|
.name = "reboot-timeout",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
},
|
||||||
|
{ /*End of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_add_fd_opts = {
|
||||||
|
.name = "add-fd",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{
|
||||||
|
.name = "fd",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "file descriptor of which a duplicate is added to fd set",
|
||||||
|
},{
|
||||||
|
.name = "set",
|
||||||
|
.type = QEMU_OPT_NUMBER,
|
||||||
|
.help = "ID of the fd set to add fd to",
|
||||||
|
},{
|
||||||
|
.name = "opaque",
|
||||||
|
.type = QEMU_OPT_STRING,
|
||||||
|
.help = "free-form string used to describe fd",
|
||||||
|
},
|
||||||
|
{ /* end of list */ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static QemuOptsList qemu_object_opts = {
|
||||||
|
.name = "object",
|
||||||
|
.implied_opt_name = "qom-type",
|
||||||
|
.head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
|
||||||
|
.desc = {
|
||||||
|
{ }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
const char *qemu_get_vm_name(void)
|
const char *qemu_get_vm_name(void)
|
||||||
{
|
{
|
||||||
return qemu_name;
|
return qemu_name;
|
||||||
@ -2566,6 +2755,22 @@ int main(int argc, char **argv, char **envp)
|
|||||||
|
|
||||||
module_call_init(MODULE_INIT_QOM);
|
module_call_init(MODULE_INIT_QOM);
|
||||||
|
|
||||||
|
qemu_add_opts(&qemu_drive_opts);
|
||||||
|
qemu_add_opts(&qemu_chardev_opts);
|
||||||
|
qemu_add_opts(&qemu_device_opts);
|
||||||
|
qemu_add_opts(&qemu_netdev_opts);
|
||||||
|
qemu_add_opts(&qemu_net_opts);
|
||||||
|
qemu_add_opts(&qemu_rtc_opts);
|
||||||
|
qemu_add_opts(&qemu_global_opts);
|
||||||
|
qemu_add_opts(&qemu_mon_opts);
|
||||||
|
qemu_add_opts(&qemu_trace_opts);
|
||||||
|
qemu_add_opts(&qemu_option_rom_opts);
|
||||||
|
qemu_add_opts(&qemu_machine_opts);
|
||||||
|
qemu_add_opts(&qemu_boot_opts);
|
||||||
|
qemu_add_opts(&qemu_sandbox_opts);
|
||||||
|
qemu_add_opts(&qemu_add_fd_opts);
|
||||||
|
qemu_add_opts(&qemu_object_opts);
|
||||||
|
|
||||||
runstate_init();
|
runstate_init();
|
||||||
|
|
||||||
init_clocks();
|
init_clocks();
|
||||||
|
Loading…
Reference in New Issue
Block a user