qemu-storage-daemon: Add --chardev option
This adds a --chardev option to the storage daemon that works the same as the -chardev option of the system emulator. The syntax of the --chardev option is still considered unstable. We want to QAPIfy it and will potentially make changes to its syntax while converting it. However, we haven't decided yet on a design for the QAPIfication, so QemuOpts will have to do for now. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20200224143008.13362-14-kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
aa70683ded
commit
5e6911cf11
2
Makefile
2
Makefile
@ -589,7 +589,7 @@ qemu-img.o: qemu-img-cmds.h
|
||||
qemu-img$(EXESUF): qemu-img.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
|
||||
qemu-nbd$(EXESUF): qemu-nbd.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
|
||||
qemu-io$(EXESUF): qemu-io.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
|
||||
qemu-storage-daemon$(EXESUF): qemu-storage-daemon.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(storage-daemon-obj-y) $(COMMON_LDADDS)
|
||||
qemu-storage-daemon$(EXESUF): qemu-storage-daemon.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(chardev-obj-y) $(io-obj-y) $(qom-obj-y) $(storage-daemon-obj-y) $(COMMON_LDADDS)
|
||||
|
||||
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
#include "block/block.h"
|
||||
#include "block/nbd.h"
|
||||
#include "chardev/char.h"
|
||||
#include "crypto/init.h"
|
||||
|
||||
#include "qapi/error.h"
|
||||
@ -78,6 +79,9 @@ static void help(void)
|
||||
" [,driver specific parameters...]\n"
|
||||
" configure a block backend\n"
|
||||
"\n"
|
||||
" --chardev <options> configure a character device backend\n"
|
||||
" (see the qemu(1) man page for possible options)\n"
|
||||
"\n"
|
||||
" --export [type=]nbd,device=<node-name>[,name=<export-name>]\n"
|
||||
" [,writable=on|off][,bitmap=<name>]\n"
|
||||
" export the specified block node over NBD\n"
|
||||
@ -104,11 +108,14 @@ QEMU_HELP_BOTTOM "\n",
|
||||
|
||||
enum {
|
||||
OPTION_BLOCKDEV = 256,
|
||||
OPTION_CHARDEV,
|
||||
OPTION_EXPORT,
|
||||
OPTION_NBD_SERVER,
|
||||
OPTION_OBJECT,
|
||||
};
|
||||
|
||||
extern QemuOptsList qemu_chardev_opts;
|
||||
|
||||
static QemuOptsList qemu_object_opts = {
|
||||
.name = "object",
|
||||
.implied_opt_name = "qom-type",
|
||||
@ -135,6 +142,7 @@ static void process_options(int argc, char *argv[])
|
||||
|
||||
static const struct option long_options[] = {
|
||||
{"blockdev", required_argument, NULL, OPTION_BLOCKDEV},
|
||||
{"chardev", required_argument, NULL, OPTION_CHARDEV},
|
||||
{"export", required_argument, NULL, OPTION_EXPORT},
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"nbd-server", required_argument, NULL, OPTION_NBD_SERVER},
|
||||
@ -182,6 +190,22 @@ static void process_options(int argc, char *argv[])
|
||||
qapi_free_BlockdevOptions(options);
|
||||
break;
|
||||
}
|
||||
case OPTION_CHARDEV:
|
||||
{
|
||||
/* TODO This interface is not stable until we QAPIfy it */
|
||||
QemuOpts *opts = qemu_opts_parse_noisily(&qemu_chardev_opts,
|
||||
optarg, true);
|
||||
if (opts == NULL) {
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!qemu_chr_new_from_opts(opts, NULL, &error_fatal)) {
|
||||
/* No error, but NULL returned means help was printed */
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
qemu_opts_del(opts);
|
||||
break;
|
||||
}
|
||||
case OPTION_EXPORT:
|
||||
{
|
||||
Visitor *v;
|
||||
|
Loading…
Reference in New Issue
Block a user