From nobody Mon Feb 9 06:34:04 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1534176135559328.898870889068; Mon, 13 Aug 2018 09:02:15 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5B10EC04BE14; Mon, 13 Aug 2018 16:02:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 15584171B2; Mon, 13 Aug 2018 16:02:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id A35101800B6C; Mon, 13 Aug 2018 16:02:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w7DG1Ceh001632 for ; Mon, 13 Aug 2018 12:01:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id 921EE2166BA5; Mon, 13 Aug 2018 16:01:12 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2FC052166BA0 for ; Mon, 13 Aug 2018 16:01:12 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Mon, 13 Aug 2018 18:00:18 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCHv2 44/62] qemu: monitor: Add APIs for cdrom tray handling for -blockdev X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 13 Aug 2018 16:02:14 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" With blockdev we can use the full range of commands to manipulate the tray and the medium separately. Implement monitor code for this. Schema testing done in the qemumonitorjsontest allows us to verify that we generate the commands correctly. Signed-off-by: Peter Krempa --- src/qemu/qemu_monitor.c | 51 +++++++++++++++++++ src/qemu/qemu_monitor.h | 14 ++++++ src/qemu/qemu_monitor_json.c | 114 +++++++++++++++++++++++++++++++++++++++= ++++ src/qemu/qemu_monitor_json.h | 18 +++++++ tests/qemumonitorjsontest.c | 8 +++ 5 files changed, 205 insertions(+) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 49dc478f5b..0a29ad7502 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4336,6 +4336,57 @@ qemuMonitorBlockdevDel(qemuMonitorPtr mon, return qemuMonitorJSONBlockdevDel(mon, nodename); } +int +qemuMonitorBlockdevTrayOpen(qemuMonitorPtr mon, + const char *id, + bool force) +{ + VIR_DEBUG("id=3D%s force=3D%d", id, force); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONBlockdevTrayOpen(mon, id, force); +} + + +int +qemuMonitorBlockdevTrayClose(qemuMonitorPtr mon, + const char *id) +{ + VIR_DEBUG("id=3D%s", id); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONBlockdevTrayClose(mon, id); +} + + +int +qemuMonitorBlockdevMediumRemove(qemuMonitorPtr mon, + const char *id) +{ + VIR_DEBUG("id=3D%s", id); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONBlockdevMediumRemove(mon, id); +} + + + +int +qemuMonitorBlockdevMediumInsert(qemuMonitorPtr mon, + const char *id, + const char *nodename) +{ + VIR_DEBUG("id=3D%s nodename=3D%s", id, nodename); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONBlockdevMediumInsert(mon, id, nodename); +} + + char * qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon) { diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 70854497b2..649a925829 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1155,6 +1155,20 @@ int qemuMonitorBlockdevAdd(qemuMonitorPtr mon, int qemuMonitorBlockdevDel(qemuMonitorPtr mon, const char *nodename); +int qemuMonitorBlockdevTrayOpen(qemuMonitorPtr mon, + const char *id, + bool force); + +int qemuMonitorBlockdevTrayClose(qemuMonitorPtr mon, + const char *id); + +int qemuMonitorBlockdevMediumRemove(qemuMonitorPtr mon, + const char *id); + +int qemuMonitorBlockdevMediumInsert(qemuMonitorPtr mon, + const char *id, + const char *nodename); + char * qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 2b168d96c2..3351d405f3 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -8012,6 +8012,120 @@ qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon, return ret; } + +int +qemuMonitorJSONBlockdevTrayOpen(qemuMonitorPtr mon, + const char *id, + bool force) +{ + virJSONValuePtr cmd; + virJSONValuePtr reply =3D NULL; + int ret =3D -1; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("blockdev-open-tray", + "s:id", id, + "b:force", force, NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + virJSONValueFree(cmd); + virJSONValueFree(reply); + return ret; +} + + +int +qemuMonitorJSONBlockdevTrayClose(qemuMonitorPtr mon, + const char *id) +{ + virJSONValuePtr cmd; + virJSONValuePtr reply =3D NULL; + int ret =3D -1; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("blockdev-close-tray", + "s:id", id, NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + virJSONValueFree(cmd); + virJSONValueFree(reply); + return ret; +} + + +int +qemuMonitorJSONBlockdevMediumRemove(qemuMonitorPtr mon, + const char *id) +{ + virJSONValuePtr cmd; + virJSONValuePtr reply =3D NULL; + int ret =3D -1; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("blockdev-remove-medium", + "s:id", id, NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + virJSONValueFree(cmd); + virJSONValueFree(reply); + return ret; +} + + +int +qemuMonitorJSONBlockdevMediumInsert(qemuMonitorPtr mon, + const char *id, + const char *nodename) +{ + virJSONValuePtr cmd; + virJSONValuePtr reply =3D NULL; + int ret =3D -1; + + if (!(cmd =3D qemuMonitorJSONMakeCommand("blockdev-insert-medium", + "s:id", id, + "s:node-name", nodename, + NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + goto cleanup; + + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; + + ret =3D 0; + + cleanup: + virJSONValueFree(cmd); + virJSONValueFree(reply); + return ret; +} + + /** * The function is used to retrieve the measurement of a SEV guest. * The measurement is signature of the memory contents that was encrypted diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 19aebef5fb..3c5839db38 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -549,6 +549,24 @@ int qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon, const char *nodename) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); +int qemuMonitorJSONBlockdevTrayOpen(qemuMonitorPtr mon, + const char *id, + bool force) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + +int qemuMonitorJSONBlockdevTrayClose(qemuMonitorPtr mon, + const char *id) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + +int qemuMonitorJSONBlockdevMediumRemove(qemuMonitorPtr mon, + const char *id) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + +int qemuMonitorJSONBlockdevMediumInsert(qemuMonitorPtr mon, + const char *id, + const char *nodename) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); + int qemuMonitorJSONGetPRManagerInfo(qemuMonitorPtr mon, virHashTablePtr info) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 3da4d3076a..2859d3e82f 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -1352,6 +1352,10 @@ GEN_TEST_FUNC(qemuMonitorJSONOpenGraphics, "spice", = "spicefd", false) GEN_TEST_FUNC(qemuMonitorJSONNBDServerStart, "localhost", 12345, "test-ali= as") GEN_TEST_FUNC(qemuMonitorJSONNBDServerAdd, "vda", true) GEN_TEST_FUNC(qemuMonitorJSONDetachCharDev, "serial1") +GEN_TEST_FUNC(qemuMonitorJSONBlockdevTrayOpen, "foodev", true) +GEN_TEST_FUNC(qemuMonitorJSONBlockdevTrayClose, "foodev") +GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumRemove, "foodev") +GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumInsert, "foodev", "newnode") static bool testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct qemuMonitorQueryCp= usEntry *a, @@ -2992,6 +2996,10 @@ mymain(void) DO_TEST_GEN(qemuMonitorJSONNBDServerStart); DO_TEST_GEN(qemuMonitorJSONNBDServerAdd); DO_TEST_GEN(qemuMonitorJSONDetachCharDev); + DO_TEST_GEN(qemuMonitorJSONBlockdevTrayOpen); + DO_TEST_GEN(qemuMonitorJSONBlockdevTrayClose); + DO_TEST_GEN(qemuMonitorJSONBlockdevMediumRemove); + DO_TEST_GEN(qemuMonitorJSONBlockdevMediumInsert); DO_TEST(qemuMonitorJSONGetBalloonInfo); DO_TEST(qemuMonitorJSONGetBlockInfo); DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo); --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list