From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59804) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UwUce-0002Ov-VV for qemu-devel@nongnu.org; Tue, 09 Jul 2013 05:54:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UwUcc-0007ZR-4Y for qemu-devel@nongnu.org; Tue, 09 Jul 2013 05:54:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:64071) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UwUcb-0007ZC-RK for qemu-devel@nongnu.org; Tue, 09 Jul 2013 05:54:10 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r699s9OW004145 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 9 Jul 2013 05:54:09 -0400 From: Kevin Wolf Date: Tue, 9 Jul 2013 11:53:37 +0200 Message-Id: <1373363617-4723-12-git-send-email-kwolf@redhat.com> In-Reply-To: <1373363617-4723-1-git-send-email-kwolf@redhat.com> References: <1373363617-4723-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [RFC PATCH 11/11] [WIP] block: Implement 'blockdev-add' QMP command List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, armbru@redhat.com, stefanha@redhat.com, lcapitulino@redhat.com This is just a quick hack to test things Signed-off-by: Kevin Wolf --- blockdev.c | 32 ++++++++++++++++++++++++++++++++ qapi-schema.json | 29 +++++++++++++++++++++++++++++ qmp-commands.hx | 6 ++++++ 3 files changed, 67 insertions(+) diff --git a/blockdev.c b/blockdev.c index e71c4ee..e3a4fb8 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1741,6 +1741,38 @@ void qmp_block_job_complete(const char *device, Error **errp) block_job_complete(job, errp); } +#include "qapi-visit.h" +#include "qapi/qmp-output-visitor.h" + +void qmp_blockdev_add(BlockOptions *options, Error **errp) +{ + QString *str; + QmpOutputVisitor *ov = qmp_output_visitor_new(); + QObject *obj; + visit_type_BlockOptions(qmp_output_get_visitor(ov), + &options, NULL, errp); + obj = qmp_output_get_qobject(ov); + str = qobject_to_json_pretty(obj); + assert(str != NULL); + fprintf(stderr, "\n>>>>>>%s\n<<<<<<\n", qstring_get_str(str)); + qdict_flatten(obj); + str = qobject_to_json_pretty(obj); + fprintf(stderr, "\n----->%s\n<-----\n", qstring_get_str(str)); + + Error *local_err = NULL; + QemuOpts *opts = qemu_opts_from_qdict(&qemu_drive_opts, qobject_to_qdict(obj), &local_err); + if (error_is_set(&local_err)) { + qerror_report_err(local_err); + error_free(local_err); + } else { + drive_init(opts, IF_NONE); + } + + qobject_decref(obj); + qmp_output_visitor_cleanup(ov); + QDECREF(str); +} + static void do_qmp_query_block_jobs_one(void *opaque, BlockDriverState *bs) { BlockJobInfoList **prev = opaque; diff --git a/qapi-schema.json b/qapi-schema.json index a90aeb1..9f1cc8d 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3702,3 +3702,32 @@ '*cpuid-input-ecx': 'int', 'cpuid-register': 'X86CPURegister32', 'features': 'int' } } + + +{ 'type': 'BlockOptionsBase', + 'data': { 'driver': 'str', '*read-only': 'bool' } } + +{ 'type': 'BlockOptionsFile', + 'data': { 'filename': 'str' } } + +{ 'type': 'BlockOptionsRaw', + 'data': { 'file': 'BlockRef' } } + +{ 'type': 'BlockOptionsQcow2', + 'data': { '*lazy-refcounts': 'bool', 'file': 'BlockRef' } } + +{ 'union': 'BlockOptions', + 'base': 'BlockOptionsBase', + 'discriminator': 'driver', + 'data': { + 'file': 'BlockOptionsFile' + 'raw': 'BlockOptionsRaw' + 'qcow2': 'BlockOptionsQcow2' + } } + +{ 'union': 'BlockRef', + 'discriminator': {}, + 'data': { 'definition': 'BlockOptions' + 'reference': 'str' } } + +{ 'command': 'blockdev-add', 'data': { 'options': 'BlockOptions' } } diff --git a/qmp-commands.hx b/qmp-commands.hx index 362f0e1..fe32ae7 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -3043,3 +3043,9 @@ Example: <- { "return": {} } EQMP + + { + .name = "blockdev-add", + .args_type = "options:q", + .mhandler.cmd_new = qmp_marshal_input_blockdev_add, + }, -- 1.8.1.4