Skip to content

Commit

Permalink
qemu-storage-daemon: Add --chardev option
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
kevmw committed Mar 6, 2020
1 parent aa70683 commit 5e6911c
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
24 changes: 24 additions & 0 deletions qemu-storage-daemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

#include "block/block.h"
#include "block/nbd.h"
#include "chardev/char.h"
#include "crypto/init.h"

#include "qapi/error.h"
Expand Down Expand Up @@ -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"
Expand All @@ -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",
Expand All @@ -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},
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 5e6911c

Please sign in to comment.