From nobody Tue May 7 05:53:26 2024 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 1526992590593408.9582104395645; Tue, 22 May 2018 05:36:30 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D3FC330C1171; Tue, 22 May 2018 12:36:28 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 391DF60F81; Tue, 22 May 2018 12:36:28 +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 50B274CAA0; Tue, 22 May 2018 12:36:27 +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 w4MCa1To013677 for ; Tue, 22 May 2018 08:36:01 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3B078215CDAC; Tue, 22 May 2018 12:36:01 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id B66A6215CDA7; Tue, 22 May 2018 12:36:00 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:41 +0200 Message-Id: <4bdb7fc1be1225d2be18a36bc19626631f352535.1526992488.git.pkrempa@redhat.com> 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 Cc: Peter Krempa Subject: [libvirt] [PATCH 1/8] qemu: monitor: Drop fallback to text monitor for 'inject-nmi' command 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Tue, 22 May 2018 12:36:29 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The QMP version was added in qemu commit ab49ab5c488237f3656689 which is included in v1.1. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor_json.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 6dcded9369..530a5b9de2 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4396,14 +4396,8 @@ int qemuMonitorJSONInjectNMI(qemuMonitorPtr mon) if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) goto cleanup; - if (qemuMonitorJSONHasError(reply, "CommandNotFound")) { - VIR_DEBUG("inject-nmi command not found, trying HMP"); - if (qemuMonitorTextInjectNMI(mon) < 0) - goto cleanup; - } else { - if (qemuMonitorJSONCheckError(cmd, reply) < 0) - goto cleanup; - } + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; ret =3D 0; cleanup: --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992570328102.0845631447462; Tue, 22 May 2018 05:36:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3F97E8E8E0; Tue, 22 May 2018 12:36:08 +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 2676C60BE7; Tue, 22 May 2018 12:36:07 +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 8E0DE1801241; Tue, 22 May 2018 12:36:04 +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 w4MCa267013683 for ; Tue, 22 May 2018 08:36:02 -0400 Received: by smtp.corp.redhat.com (Postfix) id EF04A215CDAC; Tue, 22 May 2018 12:36:01 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76227215CDA7; Tue, 22 May 2018 12:36:01 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:42 +0200 Message-Id: <681b25b1881ea5154639d886daa75493c40c44eb.1526992488.git.pkrempa@redhat.com> 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 Cc: Peter Krempa Subject: [libvirt] [PATCH 2/8] qemu: monitor: Drop fallback to text monitor for 'send-key' command 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 22 May 2018 12:36:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" The QMP version was added in qemu commit e4c8f004c55d9da3eae3e14 which is included in v1.3. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor_json.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 530a5b9de2..7ddecbc907 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4458,14 +4458,8 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon, if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) goto cleanup; - if (qemuMonitorJSONHasError(reply, "CommandNotFound")) { - VIR_DEBUG("send-key command not found, trying HMP"); - if (qemuMonitorTextSendKey(mon, holdtime, keycodes, nkeycodes) < 0) - goto cleanup; - } else { - if (qemuMonitorJSONCheckError(cmd, reply) < 0) - goto cleanup; - } + if (qemuMonitorJSONCheckError(cmd, reply) < 0) + goto cleanup; ret =3D 0; cleanup: --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992590959820.5371536958254; Tue, 22 May 2018 05:36:30 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F1B853147B00; Tue, 22 May 2018 12:36:28 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 601A15E7D2; Tue, 22 May 2018 12:36:28 +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 679054CAA7; Tue, 22 May 2018 12:36:27 +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 w4MCa2hj013692 for ; Tue, 22 May 2018 08:36:02 -0400 Received: by smtp.corp.redhat.com (Postfix) id AE846215CDAA; Tue, 22 May 2018 12:36:02 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 360EF215CDA7; Tue, 22 May 2018 12:36:02 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:43 +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 Cc: Peter Krempa Subject: [libvirt] [PATCH 3/8] qemu: monitor: Remove unused qemuMonitor(Add|Remove)HostNetwork 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 22 May 2018 12:36:29 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" There are no callers for these. Remove them and the monitor implementations. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 66 ----------------------------------------= ---- src/qemu/qemu_monitor.h | 12 -------- src/qemu/qemu_monitor_text.c | 54 ------------------------------------ src/qemu/qemu_monitor_text.h | 7 ----- 4 files changed, 139 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index f21bf7000d..3e87bf5a4a 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2944,72 +2944,6 @@ qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, i= nt fd) } -int -qemuMonitorAddHostNetwork(qemuMonitorPtr mon, - const char *netstr, - int *tapfd, char **tapfdName, int tapfdSize, - int *vhostfd, char **vhostfdName, int vhostfdSiz= e) -{ - int ret =3D -1; - size_t i =3D 0, j =3D 0; - - VIR_DEBUG("netstr=3D%s tapfd=3D%p tapfdName=3D%p tapfdSize=3D%d " - "vhostfd=3D%p vhostfdName=3D%p vhostfdSize=3D%d", - netstr, tapfd, tapfdName, tapfdSize, - vhostfd, vhostfdName, vhostfdSize); - - QEMU_CHECK_MONITOR(mon); - - for (i =3D 0; i < tapfdSize; i++) { - if (qemuMonitorSendFileHandle(mon, tapfdName[i], tapfd[i]) < 0) - goto cleanup; - } - for (j =3D 0; j < vhostfdSize; j++) { - if (qemuMonitorSendFileHandle(mon, vhostfdName[j], vhostfd[j]) < 0) - goto cleanup; - } - - if (mon->json) - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("JSON monitor should be using AddNetdev")); - else - ret =3D qemuMonitorTextAddHostNetwork(mon, netstr); - - cleanup: - if (ret < 0) { - while (i--) { - if (qemuMonitorCloseFileHandle(mon, tapfdName[i]) < 0) - VIR_WARN("failed to close device handle '%s'", tapfdName[i= ]); - } - while (j--) { - if (qemuMonitorCloseFileHandle(mon, vhostfdName[j]) < 0) - VIR_WARN("failed to close device handle '%s'", vhostfdName= [j]); - } - } - - return ret; -} - - -int -qemuMonitorRemoveHostNetwork(qemuMonitorPtr mon, - int vlan, - const char *netname) -{ - VIR_DEBUG("netname=3D%s", netname); - - QEMU_CHECK_MONITOR(mon); - - if (mon->json) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("JSON monitor should be using RemoveNetdev")); - return -1; - } - - return qemuMonitorTextRemoveHostNetwork(mon, vlan, netname); -} - - int qemuMonitorAddNetdev(qemuMonitorPtr mon, const char *netdevstr, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 6cba37c281..b3aeb83cf0 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -771,18 +771,6 @@ int qemuMonitorCloseFileHandle(qemuMonitorPtr mon, const char *fdname); int qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, int fd); -/* XXX do we really want to hardcode 'netstr' as the - * sendable item here - */ -int qemuMonitorAddHostNetwork(qemuMonitorPtr mon, - const char *netstr, - int *tapfd, char **tapfdName, int tapfdSize, - int *vhostfd, char **vhostfdName, int vhostf= dSize); - -int qemuMonitorRemoveHostNetwork(qemuMonitorPtr mon, - int vlan, - const char *netname); - int qemuMonitorAddNetdev(qemuMonitorPtr mon, const char *netdevstr, int *tapfd, char **tapfdName, int tapfdSize, diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 7c34ca5b07..58d695ea22 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -1650,60 +1650,6 @@ int qemuMonitorTextCloseFileHandle(qemuMonitorPtr mo= n, } -int qemuMonitorTextAddHostNetwork(qemuMonitorPtr mon, - const char *netstr) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "host_net_add %s", netstr) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (STRNEQ(reply, "")) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unable to add host net: %s"), - reply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextRemoveHostNetwork(qemuMonitorPtr mon, - int vlan, - const char *netname) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "host_net_remove %d %s", vlan, netname) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* XXX error messages here ? */ - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - int qemuMonitorTextAddNetdev(qemuMonitorPtr mon, const char *netdevstr) { diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index d57bdbc55f..a9cdce5f61 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -126,13 +126,6 @@ int qemuMonitorTextSendFileHandle(qemuMonitorPtr mon, int qemuMonitorTextCloseFileHandle(qemuMonitorPtr mon, const char *fdname); -int qemuMonitorTextAddHostNetwork(qemuMonitorPtr mon, - const char *netstr); - -int qemuMonitorTextRemoveHostNetwork(qemuMonitorPtr mon, - int vlan, - const char *netname); - int qemuMonitorTextAddNetdev(qemuMonitorPtr mon, const char *netdevstr); --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992570800101.30552151089762; Tue, 22 May 2018 05:36:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D9837A4E7F; Tue, 22 May 2018 12:36:08 +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 6ADA55D70A; Tue, 22 May 2018 12:36:08 +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 5B6E3180B5B2; Tue, 22 May 2018 12:36:07 +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 w4MCa3q3013699 for ; Tue, 22 May 2018 08:36:03 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8C140215CDAA; Tue, 22 May 2018 12:36:03 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id E9F8E215CDA7; Tue, 22 May 2018 12:36:02 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:44 +0200 Message-Id: <0593fdb499ae46e984642832a574be831209fb76.1526992488.git.pkrempa@redhat.com> 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 Cc: Peter Krempa Subject: [libvirt] [PATCH 4/8] qemu: monitor: Drop QEMU_CHECK_MONITOR_JSON... macros 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.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 22 May 2018 12:36:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Monitor is now JSON only. Drop the old cruft. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 138 ++++++++++++++++++++++----------------------= ---- 1 file changed, 63 insertions(+), 75 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 3e87bf5a4a..9d665928d6 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -119,46 +119,34 @@ struct _qemuMonitor { /** * QEMU_CHECK_MONITOR_FULL: * @mon: monitor pointer variable to check, evaluated multiple times, no p= arentheses - * @force_json: force JSON monitor, true or false * @exit: statement that is used to exit the function * * This macro checks that the monitor is valid for given operation and exi= ts * the function if not. The macro also adds a debug statement regarding the * monitor. */ -#define QEMU_CHECK_MONITOR_FULL(mon, force_json, exit) \ +#define QEMU_CHECK_MONITOR_FULL(mon, exit) \ do { \ if (!mon) { \ virReportError(VIR_ERR_INVALID_ARG, "%s", \ _("monitor must not be NULL")); \ exit; \ } \ - VIR_DEBUG("mon:%p vm:%p json:%d fd:%d", \ - mon, mon->vm, mon->json, mon->fd); \ - if (force_json && !mon->json) { \ - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", \ - _("JSON monitor is required")); \ - exit; \ - } \ + VIR_DEBUG("mon:%p vm:%p fd:%d", \ + mon, mon->vm, mon->fd); \ } while (0) /* Check monitor and return NULL on error */ #define QEMU_CHECK_MONITOR_NULL(mon) \ - QEMU_CHECK_MONITOR_FULL(mon, false, return NULL) -#define QEMU_CHECK_MONITOR_JSON_NULL(mon) \ - QEMU_CHECK_MONITOR_FULL(mon, true, return NULL) + QEMU_CHECK_MONITOR_FULL(mon, return NULL) /* Check monitor and return -1 on error */ #define QEMU_CHECK_MONITOR(mon) \ - QEMU_CHECK_MONITOR_FULL(mon, false, return -1) -#define QEMU_CHECK_MONITOR_JSON(mon) \ - QEMU_CHECK_MONITOR_FULL(mon, true, return -1) + QEMU_CHECK_MONITOR_FULL(mon, return -1) /* Check monitor and jump to the provided label */ #define QEMU_CHECK_MONITOR_GOTO(mon, label) \ - QEMU_CHECK_MONITOR_FULL(mon, false, goto label) -#define QEMU_CHECK_MONITOR_JSON_GOTO(mon, label) \ - QEMU_CHECK_MONITOR_FULL(mon, true, goto label) + QEMU_CHECK_MONITOR_FULL(mon, goto label) static virClassPtr qemuMonitorClass; static void qemuMonitorDispose(void *obj); @@ -2280,7 +2268,7 @@ qemuMonitorGetBlockInfo(qemuMonitorPtr mon) virJSONValuePtr qemuMonitorQueryBlockstats(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON_NULL(mon); + QEMU_CHECK_MONITOR_NULL(mon); return qemuMonitorJSONQueryBlockstats(mon); } @@ -2345,7 +2333,7 @@ qemuMonitorBlockStatsUpdateCapacity(qemuMonitorPtr mo= n, { VIR_DEBUG("stats=3D%p, backing=3D%d", stats, backingChain); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONBlockStatsUpdateCapacity(mon, stats, backingChai= n); } @@ -2602,7 +2590,7 @@ qemuMonitorGetMigrationCacheSize(qemuMonitorPtr mon, { VIR_DEBUG("cacheSize=3D%p", cacheSize); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetMigrationCacheSize(mon, cacheSize); } @@ -2614,7 +2602,7 @@ qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon, { VIR_DEBUG("cacheSize=3D%llu", cacheSize); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONSetMigrationCacheSize(mon, cacheSize); } @@ -2635,7 +2623,7 @@ int qemuMonitorGetMigrationParams(qemuMonitorPtr mon, virJSONValuePtr *params) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetMigrationParams(mon, params); } @@ -2655,7 +2643,7 @@ int qemuMonitorSetMigrationParams(qemuMonitorPtr mon, virJSONValuePtr params) { - QEMU_CHECK_MONITOR_JSON_GOTO(mon, error); + QEMU_CHECK_MONITOR_GOTO(mon, error); return qemuMonitorJSONSetMigrationParams(mon, params); @@ -2755,7 +2743,7 @@ int qemuMonitorQueryDump(qemuMonitorPtr mon, qemuMonitorDumpStatsPtr stats) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONQueryDump(mon, stats); } @@ -2789,7 +2777,7 @@ qemuMonitorDumpToFd(qemuMonitorPtr mon, int ret; VIR_DEBUG("fd=3D%d dumpformat=3D%s", fd, dumpformat); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); if (qemuMonitorSendFileHandle(mon, "dump", fd) < 0) return -1; @@ -2899,7 +2887,7 @@ qemuMonitorAddFd(qemuMonitorPtr mon, int fdset, int f= d, const char *name) { VIR_DEBUG("fdset=3D%d, fd=3D%d, name=3D%s", fdset, fd, NULLSTR(name)); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); if (fd < 0 || fdset < 0) { virReportError(VIR_ERR_INVALID_ARG, "%s", @@ -2931,7 +2919,7 @@ qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, in= t fd) error =3D virSaveLastError(); - QEMU_CHECK_MONITOR_JSON_GOTO(mon, cleanup); + QEMU_CHECK_MONITOR_GOTO(mon, cleanup); ret =3D qemuMonitorJSONRemoveFd(mon, fdset, fd); @@ -3011,7 +2999,7 @@ qemuMonitorQueryRxFilter(qemuMonitorPtr mon, const ch= ar *alias, { VIR_DEBUG("alias=3D%s filter=3D%p", alias, filter); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONQueryRxFilter(mon, alias, filter); } @@ -3143,7 +3131,7 @@ int qemuMonitorAddDeviceArgs(qemuMonitorPtr mon, virJSONValuePtr args) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONAddDeviceArgs(mon, args); } @@ -3167,7 +3155,7 @@ qemuMonitorAddObject(qemuMonitorPtr mon, { VIR_DEBUG("type=3D%s objalias=3D%s props=3D%p", type, objalias, props); - QEMU_CHECK_MONITOR_JSON_GOTO(mon, error); + QEMU_CHECK_MONITOR_GOTO(mon, error); return qemuMonitorJSONAddObject(mon, type, objalias, props); @@ -3183,7 +3171,7 @@ qemuMonitorDelObject(qemuMonitorPtr mon, { VIR_DEBUG("objalias=3D%s", objalias); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONDelObject(mon, objalias); } @@ -3270,7 +3258,7 @@ qemuMonitorDiskSnapshot(qemuMonitorPtr mon, virJSONVa= luePtr actions, VIR_DEBUG("actions=3D%p, device=3D%s, file=3D%s, format=3D%s, reuse=3D= %d", actions, device, file, format, reuse); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONDiskSnapshot(mon, actions, device, file, format,= reuse); } @@ -3289,7 +3277,7 @@ qemuMonitorDriveMirror(qemuMonitorPtr mon, device, file, NULLSTR(format), bandwidth, granularity, buf_size, flags); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONDriveMirror(mon, device, file, format, bandwidth, granularity, buf_size, flags); @@ -3302,7 +3290,7 @@ qemuMonitorTransaction(qemuMonitorPtr mon, virJSONVal= uePtr *actions) { VIR_DEBUG("actions=3D%p", *actions); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONTransaction(mon, actions); } @@ -3318,7 +3306,7 @@ qemuMonitorBlockCommit(qemuMonitorPtr mon, const char= *device, VIR_DEBUG("device=3D%s, top=3D%s, base=3D%s, backingName=3D%s, bandwid= th=3D%llu", device, top, base, NULLSTR(backingName), bandwidth); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONBlockCommit(mon, device, top, base, backingName, bandwidth); @@ -3344,7 +3332,7 @@ qemuMonitorDiskNameLookup(qemuMonitorPtr mon, virStorageSourcePtr top, virStorageSourcePtr target) { - QEMU_CHECK_MONITOR_JSON_NULL(mon); + QEMU_CHECK_MONITOR_NULL(mon); return qemuMonitorJSONDiskNameLookup(mon, device, top, target); } @@ -3357,7 +3345,7 @@ qemuMonitorDrivePivot(qemuMonitorPtr mon, { VIR_DEBUG("device=3D%s", device); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONDrivePivot(mon, device); } @@ -3437,7 +3425,7 @@ qemuMonitorBlockStream(qemuMonitorPtr mon, VIR_DEBUG("device=3D%s, base=3D%s, backingName=3D%s, bandwidth=3D%lluB= ", device, NULLSTR(base), NULLSTR(backingName), bandwidth); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONBlockStream(mon, device, base, backingName, band= width); } @@ -3449,7 +3437,7 @@ qemuMonitorBlockJobCancel(qemuMonitorPtr mon, { VIR_DEBUG("device=3D%s", device); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONBlockJobCancel(mon, device); } @@ -3462,7 +3450,7 @@ qemuMonitorBlockJobSetSpeed(qemuMonitorPtr mon, { VIR_DEBUG("device=3D%s, bandwidth=3D%lluB", device, bandwidth); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONBlockJobSetSpeed(mon, device, bandwidth); } @@ -3471,7 +3459,7 @@ qemuMonitorBlockJobSetSpeed(qemuMonitorPtr mon, virHashTablePtr qemuMonitorGetAllBlockJobInfo(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON_NULL(mon); + QEMU_CHECK_MONITOR_NULL(mon); return qemuMonitorJSONGetAllBlockJobInfo(mon); } @@ -3631,7 +3619,7 @@ qemuMonitorOpenGraphics(qemuMonitorPtr mon, int qemuMonitorSystemWakeup(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONSystemWakeup(mon); } @@ -3647,7 +3635,7 @@ qemuMonitorGetVersion(qemuMonitorPtr mon, VIR_DEBUG("major=3D%p minor=3D%p micro=3D%p package=3D%p", major, minor, micro, package); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetVersion(mon, major, minor, micro, package); } @@ -3659,7 +3647,7 @@ qemuMonitorGetMachines(qemuMonitorPtr mon, { VIR_DEBUG("machines=3D%p", machines); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetMachines(mon, machines); } @@ -3682,7 +3670,7 @@ qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon, { VIR_DEBUG("cpus=3D%p", cpus); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetCPUDefinitions(mon, cpus); } @@ -3710,7 +3698,7 @@ qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon, VIR_DEBUG("type=3D%d model_name=3D%s migratable=3D%d", type, model_name, migratable); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetCPUModelExpansion(mon, type, model_name, migratable, model_info); @@ -3795,7 +3783,7 @@ qemuMonitorGetCommands(qemuMonitorPtr mon, { VIR_DEBUG("commands=3D%p", commands); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetCommands(mon, commands); } @@ -3807,7 +3795,7 @@ qemuMonitorGetEvents(qemuMonitorPtr mon, { VIR_DEBUG("events=3D%p", events); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetEvents(mon, events); } @@ -3823,7 +3811,7 @@ qemuMonitorGetCommandLineOptionParameters(qemuMonitor= Ptr mon, { VIR_DEBUG("option=3D%s params=3D%p", option, params); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetCommandLineOptionParameters(mon, option, params, found); @@ -3837,7 +3825,7 @@ qemuMonitorGetKVMState(qemuMonitorPtr mon, { VIR_DEBUG("enabled=3D%p present=3D%p", enabled, present); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetKVMState(mon, enabled, present); } @@ -3849,7 +3837,7 @@ qemuMonitorGetObjectTypes(qemuMonitorPtr mon, { VIR_DEBUG("types=3D%p", types); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetObjectTypes(mon, types); } @@ -3862,7 +3850,7 @@ qemuMonitorGetDeviceProps(qemuMonitorPtr mon, { VIR_DEBUG("device=3D%s props=3D%p", device, props); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetDeviceProps(mon, device, props); } @@ -3875,7 +3863,7 @@ qemuMonitorGetObjectProps(qemuMonitorPtr mon, { VIR_DEBUG("object=3D%s props=3D%p", object, props); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetObjectProps(mon, object, props); } @@ -3884,7 +3872,7 @@ qemuMonitorGetObjectProps(qemuMonitorPtr mon, char * qemuMonitorGetTargetArch(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON_NULL(mon); + QEMU_CHECK_MONITOR_NULL(mon); return qemuMonitorJSONGetTargetArch(mon); } @@ -3918,7 +3906,7 @@ int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon, virJSONValuePtr caps) { - QEMU_CHECK_MONITOR_JSON_GOTO(mon, error); + QEMU_CHECK_MONITOR_GOTO(mon, error); return qemuMonitorJSONSetMigrationCapabilities(mon, caps); @@ -3939,7 +3927,7 @@ int qemuMonitorGetGICCapabilities(qemuMonitorPtr mon, virGICCapability **capabilities) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetGICCapabilities(mon, capabilities); } @@ -3953,7 +3941,7 @@ qemuMonitorNBDServerStart(qemuMonitorPtr mon, { VIR_DEBUG("host=3D%s port=3D%u tls_alias=3D%s", host, port, NULLSTR(tl= s_alias)); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONNBDServerStart(mon, host, port, tls_alias); } @@ -3966,7 +3954,7 @@ qemuMonitorNBDServerAdd(qemuMonitorPtr mon, { VIR_DEBUG("deviceID=3D%s", deviceID); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONNBDServerAdd(mon, deviceID, writable); } @@ -3975,7 +3963,7 @@ qemuMonitorNBDServerAdd(qemuMonitorPtr mon, int qemuMonitorNBDServerStop(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONNBDServerStop(mon); } @@ -3987,7 +3975,7 @@ qemuMonitorGetTPMModels(qemuMonitorPtr mon, { VIR_DEBUG("tpmmodels=3D%p", tpmmodels); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetTPMModels(mon, tpmmodels); } @@ -3999,7 +3987,7 @@ qemuMonitorGetTPMTypes(qemuMonitorPtr mon, { VIR_DEBUG("tpmtypes=3D%p", tpmtypes); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetTPMTypes(mon, tpmtypes); } @@ -4012,7 +4000,7 @@ qemuMonitorAttachCharDev(qemuMonitorPtr mon, { VIR_DEBUG("chrID=3D%s chr=3D%p", chrID, chr); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONAttachCharDev(mon, chrID, chr); } @@ -4024,7 +4012,7 @@ qemuMonitorDetachCharDev(qemuMonitorPtr mon, { VIR_DEBUG("chrID=3D%s", chrID); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONDetachCharDev(mon, chrID); } @@ -4036,7 +4024,7 @@ qemuMonitorGetDeviceAliases(qemuMonitorPtr mon, { VIR_DEBUG("aliases=3D%p", aliases); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetDeviceAliases(mon, aliases); } @@ -4112,7 +4100,7 @@ qemuMonitorGetGuestCPU(qemuMonitorPtr mon, VIR_DEBUG("arch=3D%s data=3D%p disabled=3D%p", virArchToString(arch), data, disabled); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); *data =3D NULL; if (disabled) @@ -4137,7 +4125,7 @@ qemuMonitorGetGuestCPU(qemuMonitorPtr mon, int qemuMonitorRTCResetReinjection(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONRTCResetReinjection(mon); } @@ -4217,7 +4205,7 @@ qemuMonitorMigrateIncoming(qemuMonitorPtr mon, { VIR_DEBUG("uri=3D%s", uri); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONMigrateIncoming(mon, uri); } @@ -4226,7 +4214,7 @@ qemuMonitorMigrateIncoming(qemuMonitorPtr mon, int qemuMonitorMigrateStartPostCopy(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONMigrateStartPostCopy(mon); } @@ -4238,7 +4226,7 @@ qemuMonitorMigrateContinue(qemuMonitorPtr mon, { VIR_DEBUG("status=3D%s", qemuMonitorMigrationStatusTypeToString(status= )); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONMigrateContinue(mon, status); } @@ -4248,7 +4236,7 @@ int qemuMonitorGetRTCTime(qemuMonitorPtr mon, struct tm *tm) { - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONGetRTCTime(mon, tm); } @@ -4257,7 +4245,7 @@ qemuMonitorGetRTCTime(qemuMonitorPtr mon, virJSONValuePtr qemuMonitorQueryQMPSchema(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON_NULL(mon); + QEMU_CHECK_MONITOR_NULL(mon); return qemuMonitorJSONQueryQMPSchema(mon); } @@ -4270,7 +4258,7 @@ qemuMonitorSetBlockThreshold(qemuMonitorPtr mon, { VIR_DEBUG("node=3D'%s', threshold=3D%llu", nodename, threshold); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONSetBlockThreshold(mon, nodename, threshold); } @@ -4279,7 +4267,7 @@ qemuMonitorSetBlockThreshold(qemuMonitorPtr mon, virJSONValuePtr qemuMonitorQueryNamedBlockNodes(qemuMonitorPtr mon) { - QEMU_CHECK_MONITOR_JSON_NULL(mon); + QEMU_CHECK_MONITOR_NULL(mon); return qemuMonitorJSONQueryNamedBlockNodes(mon); } @@ -4342,7 +4330,7 @@ qemuMonitorSetWatchdogAction(qemuMonitorPtr mon, { VIR_DEBUG("watchdogAction=3D%s", action); - QEMU_CHECK_MONITOR_JSON(mon); + QEMU_CHECK_MONITOR(mon); return qemuMonitorJSONSetWatchdogAction(mon, action); } --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992602860593.798590804158; Tue, 22 May 2018 05:36:42 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9B4CA11B790; Tue, 22 May 2018 12:36:40 +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 157D52B6F2; Tue, 22 May 2018 12:36:40 +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 BF090180B5B2; Tue, 22 May 2018 12:36:38 +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 w4MCa4Dg013704 for ; Tue, 22 May 2018 08:36:04 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4BE53215CDAC; Tue, 22 May 2018 12:36:04 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id C7BA6215CDA7; Tue, 22 May 2018 12:36:03 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:45 +0200 Message-Id: <4bc0bacc81bf5a09a051d0b1e477126ba676c5e4.1526992488.git.pkrempa@redhat.com> 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 Cc: Peter Krempa Subject: [libvirt] [PATCH 5/8] qemu: monitor: Drop JSON versions of savevm/delvm/loadv 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.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 22 May 2018 12:36:42 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" qemu did not QAPIfy these and the design and name will most probably change. The replacements will not be compatible. Drop the JSON stubs and annotate that there won't be a replacement. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 18 ++++++------------ src/qemu/qemu_monitor_json.c | 21 --------------------- src/qemu/qemu_monitor_json.h | 4 ---- 3 files changed, 6 insertions(+), 37 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 9d665928d6..e07d578fa8 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3213,10 +3213,8 @@ qemuMonitorCreateSnapshot(qemuMonitorPtr mon, const = char *name) QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONCreateSnapshot(mon, name); - else - return qemuMonitorTextCreateSnapshot(mon, name); + /* there won't ever be a direct QMP replacement for this function */ + return qemuMonitorTextCreateSnapshot(mon, name); } int @@ -3226,10 +3224,8 @@ qemuMonitorLoadSnapshot(qemuMonitorPtr mon, const ch= ar *name) QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONLoadSnapshot(mon, name); - else - return qemuMonitorTextLoadSnapshot(mon, name); + /* there won't ever be a direct QMP replacement for this function */ + return qemuMonitorTextLoadSnapshot(mon, name); } @@ -3240,10 +3236,8 @@ qemuMonitorDeleteSnapshot(qemuMonitorPtr mon, const = char *name) QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONDeleteSnapshot(mon, name); - else - return qemuMonitorTextDeleteSnapshot(mon, name); + /* there won't ever be a direct QMP replacement for this function */ + return qemuMonitorTextDeleteSnapshot(mon, name); } diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 7ddecbc907..42afa6201f 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -4062,27 +4062,6 @@ int qemuMonitorJSONSetDrivePassphrase(qemuMonitorPtr= mon, return ret; } -int qemuMonitorJSONCreateSnapshot(qemuMonitorPtr mon, const char *name) -{ - /* XXX Update to use QMP, if QMP ever adds support for savevm */ - VIR_DEBUG("savevm command not found, trying HMP"); - return qemuMonitorTextCreateSnapshot(mon, name); -} - -int qemuMonitorJSONLoadSnapshot(qemuMonitorPtr mon, const char *name) -{ - /* XXX Update to use QMP, if QMP ever adds support for loadvm */ - VIR_DEBUG("loadvm command not found, trying HMP"); - return qemuMonitorTextLoadSnapshot(mon, name); -} - -int qemuMonitorJSONDeleteSnapshot(qemuMonitorPtr mon, const char *name) -{ - /* XXX Update to use QMP, if QMP ever adds support for delvm */ - VIR_DEBUG("delvm command not found, trying HMP"); - return qemuMonitorTextDeleteSnapshot(mon, name); -} - int qemuMonitorJSONDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions, const char *device, const char *file, diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 8461932cac..8a9c214c82 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -241,10 +241,6 @@ int qemuMonitorJSONSetDrivePassphrase(qemuMonitorPtr m= on, const char *alias, const char *passphrase); -int qemuMonitorJSONCreateSnapshot(qemuMonitorPtr mon, const char *name); -int qemuMonitorJSONLoadSnapshot(qemuMonitorPtr mon, const char *name); -int qemuMonitorJSONDeleteSnapshot(qemuMonitorPtr mon, const char *name); - int qemuMonitorJSONDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions, const char *device, --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992602693734.8748854732545; Tue, 22 May 2018 05:36:42 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2F2396A570; Tue, 22 May 2018 12:36:41 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 896CA6017F; Tue, 22 May 2018 12:36:40 +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 9AB234CAA0; Tue, 22 May 2018 12:36:39 +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 w4MCa5Dx013716 for ; Tue, 22 May 2018 08:36:05 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0B4ED215CDAC; Tue, 22 May 2018 12:36:05 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 87088215CDA7; Tue, 22 May 2018 12:36:04 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:46 +0200 Message-Id: <69bf9b7363c51ba0063967fb0b8dd80b0e9e0416.1526992488.git.pkrempa@redhat.com> 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 Cc: Peter Krempa Subject: [libvirt] [PATCH 6/8] tests: Drop qemumonitortest 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 22 May 2018 12:36:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" No need to test the old stuff which will not be used any more. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- tests/Makefile.am | 11 +-- tests/qemumonitortest.c | 203 --------------------------------------------= ---- 2 files changed, 2 insertions(+), 212 deletions(-) delete mode 100644 tests/qemumonitortest.c diff --git a/tests/Makefile.am b/tests/Makefile.am index ac92190845..1ce3dbb50f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -282,7 +282,7 @@ endif WITH_LIBXL if WITH_QEMU test_programs +=3D qemuxml2argvtest qemuxml2xmltest \ qemuargv2xmltest domainsnapshotxml2xmltest \ - qemumonitortest qemumonitorjsontest qemuhotplugtest \ + qemumonitorjsontest qemuhotplugtest \ qemuagenttest qemucapabilitiestest qemucaps2xmltest \ qemumemlocktest \ qemucommandutiltest \ @@ -590,13 +590,6 @@ qemuargv2xmltest_SOURCES =3D \ testutils.c testutils.h qemuargv2xmltest_LDADD =3D $(qemu_LDADDS) $(LDADDS) -qemumonitortest_SOURCES =3D \ - qemumonitortest.c \ - testutils.c testutils.h \ - testutilsqemu.c testutilsqemu.h -qemumonitortest_LDADD =3D libqemumonitortestutils.la \ - $(qemu_LDADDS) $(LDADDS) - qemumonitorjsontest_SOURCES =3D \ qemumonitorjsontest.c \ testutils.c testutils.h \ @@ -691,7 +684,7 @@ qemumigparamstest_LDADD =3D libqemumonitortestutils.la \ else ! WITH_QEMU EXTRA_DIST +=3D qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c \ domainsnapshotxml2xmltest.c \ - qemumonitortest.c testutilsqemu.c testutilsqemu.h \ + testutilsqemu.c testutilsqemu.h \ testutilsqemuschema.c testutilsqemuschema.h \ qemumonitorjsontest.c qemuhotplugtest.c \ qemuagenttest.c qemucapabilitiestest.c \ diff --git a/tests/qemumonitortest.c b/tests/qemumonitortest.c deleted file mode 100644 index 0231ce083e..0000000000 --- a/tests/qemumonitortest.c +++ /dev/null @@ -1,203 +0,0 @@ -#include - -#include -#include -#include -#include - -#include "testutils.h" - -#ifdef WITH_QEMU - -# include "internal.h" -# include "viralloc.h" -# include "qemu/qemu_monitor.h" -# include "qemu/qemu_monitor_text.h" -# include "qemumonitortestutils.h" -# include "testutilsqemu.h" - -# define VIR_FROM_THIS VIR_FROM_NONE - -struct testEscapeString -{ - const char *unescaped; - const char *escaped; -}; - -static struct testEscapeString escapeStrings[] =3D { - { "", "" }, - { " ", " " }, - { "\\", "\\\\" }, - { "\n", "\\n" }, - { "\r", "\\r" }, - { "\"", "\\\"" }, - { "\"\"\"\\\\\n\r\\\\\n\r\"\"\"", "\\\"\\\"\\\"\\\\\\\\\\n\\r\\\\\\\\\= \n\\r\\\"\\\"\\\"" }, - { "drive_add dummy file=3Dfoo\\", "drive_add dummy file=3Dfoo\\\\" }, - { "block info", "block info" }, - { "set_password \":\\\"\"", "set_password \\\":\\\\\\\"\\\"" }, -}; - -static int testEscapeArg(const void *data ATTRIBUTE_UNUSED) -{ - size_t i; - char *escaped =3D NULL; - for (i =3D 0; i < ARRAY_CARDINALITY(escapeStrings); ++i) { - escaped =3D qemuMonitorEscapeArg(escapeStrings[i].unescaped); - if (!escaped) { - VIR_TEST_DEBUG("\nUnescaped string [%s]\n", - escapeStrings[i].unescaped); - VIR_TEST_DEBUG("Expect result [%s]\n", - escapeStrings[i].escaped); - VIR_TEST_DEBUG("Actual result [(null)]\n"); - return -1; - } - if (STRNEQ(escapeStrings[i].escaped, escaped)) { - virTestDifference(stderr, escapeStrings[i].escaped, escaped); - VIR_FREE(escaped); - return -1; - } - VIR_FREE(escaped); - } - - return 0; -} - -static int testUnescapeArg(const void *data ATTRIBUTE_UNUSED) -{ - size_t i; - char *unescaped =3D NULL; - for (i =3D 0; i < ARRAY_CARDINALITY(escapeStrings); ++i) { - unescaped =3D qemuMonitorUnescapeArg(escapeStrings[i].escaped); - if (!unescaped) { - VIR_TEST_DEBUG("\nEscaped string [%s]\n", - escapeStrings[i].escaped); - VIR_TEST_DEBUG("Expect result [%s]\n", - escapeStrings[i].unescaped); - VIR_TEST_DEBUG("Actual result [(null)]\n"); - return -1; - } - if (STRNEQ(escapeStrings[i].unescaped, unescaped)) { - virTestDifference(stderr, escapeStrings[i].unescaped, unescape= d); - VIR_FREE(unescaped); - return -1; - } - VIR_FREE(unescaped); - } - - return 0; -} - -struct blockInfoData { - const char *dev; - qemuBlockStats data; -}; - -static const struct blockInfoData testBlockInfoData[] =3D -{ -/* NAME, rd_req, rd_bytes, wr_req, wr_bytes, rd_total_time, wr_total_time, - * flush_req, flush_total_time, capacity, physical, wr_highest_offset, - * wr_highest_offset_valid*/ - {"vda", {11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, false}}, - {"vdb", {21, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, false}}, - {"vdc", {31, 32, 33, -1, 35, 36, 37, 38, 0, 0, 0, false}}, - {"vdd", {-1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, false}}, - {"vde", {41, 42, 43, 44, 45, 46, 47, 48, 0, 0, 0, false}} -}; - -static const char testBlockInfoReply[] =3D -"(qemu) info blockstats\r\n" -"vda: rd_operations=3D11 rd_bytes=3D12 wr_operations=3D13 wr_bytes=3D14 rd= _total_time_ns=3D15 wr_total_time_ns=3D16 flush_operations=3D17 flush_total= _time_ns=3D18\n" -"vdb: rd_total_time_ns=3D25 wr_total_time_ns=3D26 flush_operations=3D27 fl= ush_total_time_ns=3D28 rd_operations=3D21 rd_bytes=3D22 wr_operations=3D23 = wr_bytes=3D24 \n" -"drive-vdc: rd_operations=3D31 rd_bytes=3D32 wr_operations=3D33 rd_total_t= ime_ns=3D35 wr_total_time_ns=3D36 flush_operations=3D37 flush_total_time_ns= =3D38\n" -"vdd: \n" -"vde: rd_operations=3D41 rd_bytes=3D42 wr_operations=3D43 wr_bytes=3D44 rd= _total_time_ns=3D45 wr_total_time_ns=3D46 flush_operations=3D47 flush_total= _time_ns=3D48\n" -"(qemu) "; - -static int -testMonitorTextBlockInfo(const void *opaque) -{ - virDomainXMLOptionPtr xmlopt =3D (virDomainXMLOptionPtr) opaque; - qemuMonitorTestPtr test =3D qemuMonitorTestNewSimple(false, xmlopt); - virHashTablePtr blockstats =3D NULL; - size_t i; - int ret =3D -1; - - if (!test) - return -1; - - if (!(blockstats =3D virHashCreate(10, virHashValueFree))) - goto cleanup; - - if (qemuMonitorTestAddItem(test, "info", testBlockInfoReply) < 0) - goto cleanup; - - if (qemuMonitorTextGetAllBlockStatsInfo(qemuMonitorTestGetMonitor(test= ), - blockstats) < 0) - goto cleanup; - - for (i =3D 0; i < ARRAY_CARDINALITY(testBlockInfoData); i++) { - qemuBlockStatsPtr entry; - - if (!(entry =3D virHashLookup(blockstats, testBlockInfoData[i].dev= ))) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "device '%s' was not found in text block stats = reply", - testBlockInfoData[i].dev); - goto cleanup; - } - - if (memcmp(entry, &testBlockInfoData[i].data, sizeof(qemuBlockStat= s)) !=3D 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "block stats for device '%s' differ", - testBlockInfoData[i].dev); - goto cleanup; - } - } - - ret =3D 0; - - cleanup: - qemuMonitorTestFree(test); - virHashFree(blockstats); - return ret; -} - - -static int -mymain(void) -{ - virQEMUDriver driver; - int result =3D 0; - - if (virThreadInitialize() < 0 || - qemuTestDriverInit(&driver) < 0) - return EXIT_FAILURE; - - virEventRegisterDefaultImpl(); - -# define DO_TEST(_name) \ - do { \ - if (virTestRun("qemu monitor "#_name, test##_name, \ - driver.xmlopt) < 0) { \ - result =3D -1; \ - } \ - } while (0) - - DO_TEST(EscapeArg); - DO_TEST(UnescapeArg); - DO_TEST(MonitorTextBlockInfo); - - qemuTestDriverFree(&driver); - - return result =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; -} - -VIR_TEST_MAIN(mymain) - -#else - -int main(void) -{ - return EXIT_AM_SKIP; -} - -#endif /* WITH_QEMU */ --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992594739582.2084164739642; Tue, 22 May 2018 05:36:34 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D3FB4C0BD123; Tue, 22 May 2018 12:36:32 +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 656AF5DD89; Tue, 22 May 2018 12:36:32 +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 7E0B2180B5B2; Tue, 22 May 2018 12:36:31 +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 w4MCa5CI013723 for ; Tue, 22 May 2018 08:36:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id DCC11215CDAA; Tue, 22 May 2018 12:36:05 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 46FDF215CDA7; Tue, 22 May 2018 12:36:05 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:47 +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 Cc: Peter Krempa Subject: [libvirt] [PATCH 7/8] qemu: monitor: Drop calls to text monitor impl where possible 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 22 May 2018 12:36:33 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Drop all conditional calls which have JSON variants, now that we guarantee JSON monitor. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor.c | 297 +++++++++++---------------------------------= ---- 1 file changed, 69 insertions(+), 228 deletions(-) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index e07d578fa8..ac1fbddb91 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -430,15 +430,9 @@ qemuMonitorIOProcess(qemuMonitorPtr mon) PROBE_QUIET(QEMU_MONITOR_IO_PROCESS, "mon=3D%p buf=3D%s len=3D%zu", mon, mon->buffer, mon->bufferOffset); - if (mon->json) - len =3D qemuMonitorJSONIOProcess(mon, - mon->buffer, mon->bufferOffset, - msg); - else - len =3D qemuMonitorTextIOProcess(mon, - mon->buffer, mon->bufferOffset, - msg); - + len =3D qemuMonitorJSONIOProcess(mon, + mon->buffer, mon->bufferOffset, + msg); if (len < 0) return -1; @@ -1264,19 +1258,15 @@ qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) { - /* hack to avoid complicating each call to text monitor functions = */ - json_cmd =3D qemuMonitorUnescapeArg(cmd); - if (!json_cmd) { - VIR_DEBUG("Could not unescape command: %s", cmd); - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Unable to unescape command")); - goto cleanup; - } - ret =3D qemuMonitorJSONHumanCommandWithFd(mon, json_cmd, scm_fd, r= eply); - } else { - ret =3D qemuMonitorTextCommandWithFd(mon, cmd, scm_fd, reply); + /* hack to avoid complicating each call to text monitor functions */ + json_cmd =3D qemuMonitorUnescapeArg(cmd); + if (!json_cmd) { + VIR_DEBUG("Could not unescape command: %s", cmd); + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Unable to unescape command")); + goto cleanup; } + ret =3D qemuMonitorJSONHumanCommandWithFd(mon, json_cmd, scm_fd, reply= ); cleanup: VIR_FREE(json_cmd); @@ -1683,10 +1673,7 @@ qemuMonitorStartCPUs(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONStartCPUs(mon); - else - return qemuMonitorTextStartCPUs(mon); + return qemuMonitorJSONStartCPUs(mon); } @@ -1695,10 +1682,7 @@ qemuMonitorStopCPUs(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONStopCPUs(mon); - else - return qemuMonitorTextStopCPUs(mon); + return qemuMonitorJSONStopCPUs(mon); } @@ -1719,10 +1703,7 @@ qemuMonitorGetStatus(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONGetStatus(mon, running, reason); - else - return qemuMonitorTextGetStatus(mon, running, reason); + return qemuMonitorJSONGetStatus(mon, running, reason); } @@ -1731,10 +1712,7 @@ qemuMonitorSystemPowerdown(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSystemPowerdown(mon); - else - return qemuMonitorTextSystemPowerdown(mon); + return qemuMonitorJSONSystemPowerdown(mon); } @@ -1743,10 +1721,7 @@ qemuMonitorSystemReset(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSystemReset(mon); - else - return qemuMonitorTextSystemReset(mon); + return qemuMonitorJSONSystemReset(mon); } @@ -2011,11 +1986,8 @@ qemuMonitorGetCPUInfo(qemuMonitorPtr mon, (qemuMonitorJSONGetHotpluggableCPUs(mon, &hotplugcpus, &nhotplugcp= us)) < 0) goto cleanup; - if (mon->json) - rc =3D qemuMonitorJSONQueryCPUs(mon, &cpuentries, &ncpuentries, ho= tplug, - fast); - else - rc =3D qemuMonitorTextQueryCPUs(mon, &cpuentries, &ncpuentries); + rc =3D qemuMonitorJSONQueryCPUs(mon, &cpuentries, &ncpuentries, hotplu= g, + fast); if (rc < 0) { if (!hotplug && rc =3D=3D -2) { @@ -2066,11 +2038,8 @@ qemuMonitorGetCpuHalted(qemuMonitorPtr mon, QEMU_CHECK_MONITOR_NULL(mon); - if (mon->json) - rc =3D qemuMonitorJSONQueryCPUs(mon, &cpuentries, &ncpuentries, fa= lse, - fast); - else - rc =3D qemuMonitorTextQueryCPUs(mon, &cpuentries, &ncpuentries); + rc =3D qemuMonitorJSONQueryCPUs(mon, &cpuentries, &ncpuentries, false, + fast); if (rc < 0) goto cleanup; @@ -2098,10 +2067,7 @@ qemuMonitorSetLink(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSetLink(mon, name, state); - else - return qemuMonitorTextSetLink(mon, name, state); + return qemuMonitorJSONSetLink(mon, name, state); } @@ -2111,10 +2077,7 @@ qemuMonitorGetVirtType(qemuMonitorPtr mon, { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONGetVirtType(mon, virtType); - else - return qemuMonitorTextGetVirtType(mon, virtType); + return qemuMonitorJSONGetVirtType(mon, virtType); } @@ -2128,10 +2091,7 @@ qemuMonitorGetBalloonInfo(qemuMonitorPtr mon, { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONGetBalloonInfo(mon, currmem); - else - return qemuMonitorTextGetBalloonInfo(mon, currmem); + return qemuMonitorJSONGetBalloonInfo(mon, currmem); } @@ -2145,13 +2105,9 @@ qemuMonitorGetMemoryStats(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) { - qemuMonitorInitBalloonObjectPath(mon, balloon); - return qemuMonitorJSONGetMemoryStats(mon, mon->balloonpath, - stats, nr_stats); - } else { - return qemuMonitorTextGetMemoryStats(mon, stats, nr_stats); - } + qemuMonitorInitBalloonObjectPath(mon, balloon); + return qemuMonitorJSONGetMemoryStats(mon, mon->balloonpath, + stats, nr_stats); } @@ -2245,10 +2201,7 @@ qemuMonitorGetBlockInfo(qemuMonitorPtr mon) if (!(table =3D virHashCreate(32, qemuDomainDiskInfoFree))) return NULL; - if (mon->json) - ret =3D qemuMonitorJSONGetBlockInfo(mon, table); - else - ret =3D qemuMonitorTextGetBlockInfo(mon, table); + ret =3D qemuMonitorJSONGetBlockInfo(mon, table); if (ret < 0) { virHashFree(table); @@ -2299,19 +2252,8 @@ qemuMonitorGetAllBlockStatsInfo(qemuMonitorPtr mon, if (!(*ret_stats =3D virHashCreate(10, virHashValueFree))) goto error; - if (mon->json) { - ret =3D qemuMonitorJSONGetAllBlockStatsInfo(mon, *ret_stats, - backingChain); - } else { - if (backingChain) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", - _("text monitor doesn't support block stats fo= r " - "backing chain members")); - goto error; - } - - ret =3D qemuMonitorTextGetAllBlockStatsInfo(mon, *ret_stats); - } + ret =3D qemuMonitorJSONGetAllBlockStatsInfo(mon, *ret_stats, + backingChain); if (ret < 0) goto error; @@ -2348,10 +2290,7 @@ qemuMonitorBlockResize(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONBlockResize(mon, device, size); - else - return qemuMonitorTextBlockResize(mon, device, size); + return qemuMonitorJSONBlockResize(mon, device, size); } @@ -2366,10 +2305,7 @@ qemuMonitorSetVNCPassword(qemuMonitorPtr mon, if (!password) password =3D ""; - if (mon->json) - return qemuMonitorJSONSetVNCPassword(mon, password); - else - return qemuMonitorTextSetVNCPassword(mon, password); + return qemuMonitorJSONSetVNCPassword(mon, password); } @@ -2413,10 +2349,7 @@ qemuMonitorSetPassword(qemuMonitorPtr mon, if (!action_if_connected) action_if_connected =3D "keep"; - if (mon->json) - return qemuMonitorJSONSetPassword(mon, protocol, password, action_= if_connected); - else - return qemuMonitorTextSetPassword(mon, protocol, password, action_= if_connected); + return qemuMonitorJSONSetPassword(mon, protocol, password, action_if_c= onnected); } @@ -2437,10 +2370,7 @@ qemuMonitorExpirePassword(qemuMonitorPtr mon, if (!expire_time) expire_time =3D "now"; - if (mon->json) - return qemuMonitorJSONExpirePassword(mon, protocol, expire_time); - else - return qemuMonitorTextExpirePassword(mon, protocol, expire_time); + return qemuMonitorJSONExpirePassword(mon, protocol, expire_time); } @@ -2456,10 +2386,7 @@ qemuMonitorSetBalloon(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSetBalloon(mon, newmem); - else - return qemuMonitorTextSetBalloon(mon, newmem); + return qemuMonitorJSONSetBalloon(mon, newmem); } @@ -2473,10 +2400,7 @@ qemuMonitorSetCPU(qemuMonitorPtr mon, int cpu, bool = online) QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSetCPU(mon, cpu, online); - else - return qemuMonitorTextSetCPU(mon, cpu, online); + return qemuMonitorJSONSetCPU(mon, cpu, online); } @@ -2489,10 +2413,7 @@ qemuMonitorEjectMedia(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONEjectMedia(mon, dev_name, force); - else - return qemuMonitorTextEjectMedia(mon, dev_name, force); + return qemuMonitorJSONEjectMedia(mon, dev_name, force); } @@ -2506,10 +2427,7 @@ qemuMonitorChangeMedia(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONChangeMedia(mon, dev_name, newmedia, format); - else - return qemuMonitorTextChangeMedia(mon, dev_name, newmedia, format); + return qemuMonitorJSONChangeMedia(mon, dev_name, newmedia, format); } @@ -2523,10 +2441,7 @@ qemuMonitorSaveVirtualMemory(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSaveVirtualMemory(mon, offset, length, path); - else - return qemuMonitorTextSaveVirtualMemory(mon, offset, length, path); + return qemuMonitorJSONSaveVirtualMemory(mon, offset, length, path); } @@ -2540,10 +2455,7 @@ qemuMonitorSavePhysicalMemory(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSavePhysicalMemory(mon, offset, length, path= ); - else - return qemuMonitorTextSavePhysicalMemory(mon, offset, length, path= ); + return qemuMonitorJSONSavePhysicalMemory(mon, offset, length, path); } @@ -2562,10 +2474,7 @@ qemuMonitorSetMigrationSpeed(qemuMonitorPtr mon, return -1; } - if (mon->json) - return qemuMonitorJSONSetMigrationSpeed(mon, bandwidth); - else - return qemuMonitorTextSetMigrationSpeed(mon, bandwidth); + return qemuMonitorJSONSetMigrationSpeed(mon, bandwidth); } @@ -2577,10 +2486,7 @@ qemuMonitorSetMigrationDowntime(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSetMigrationDowntime(mon, downtime); - else - return qemuMonitorTextSetMigrationDowntime(mon, downtime); + return qemuMonitorJSONSetMigrationDowntime(mon, downtime); } @@ -2663,10 +2569,7 @@ qemuMonitorGetMigrationStats(qemuMonitorPtr mon, if (error) *error =3D NULL; - if (mon->json) - return qemuMonitorJSONGetMigrationStats(mon, stats, error); - else - return qemuMonitorTextGetMigrationStats(mon, stats); + return qemuMonitorJSONGetMigrationStats(mon, stats, error); } @@ -2683,10 +2586,7 @@ qemuMonitorMigrateToFd(qemuMonitorPtr mon, if (qemuMonitorSendFileHandle(mon, "migrate", fd) < 0) return -1; - if (mon->json) - ret =3D qemuMonitorJSONMigrate(mon, flags, "fd:migrate"); - else - ret =3D qemuMonitorTextMigrate(mon, flags, "fd:migrate"); + ret =3D qemuMonitorJSONMigrate(mon, flags, "fd:migrate"); if (ret < 0) { if (qemuMonitorCloseFileHandle(mon, "migrate") < 0) @@ -2717,10 +2617,7 @@ qemuMonitorMigrateToHost(qemuMonitorPtr mon, return -1; } - if (mon->json) - ret =3D qemuMonitorJSONMigrate(mon, flags, uri); - else - ret =3D qemuMonitorTextMigrate(mon, flags, uri); + ret =3D qemuMonitorJSONMigrate(mon, flags, uri); VIR_FREE(uri); return ret; @@ -2732,10 +2629,7 @@ qemuMonitorMigrateCancel(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONMigrateCancel(mon); - else - return qemuMonitorTextMigrateCancel(mon); + return qemuMonitorJSONMigrateCancel(mon); } @@ -2806,20 +2700,12 @@ qemuMonitorGraphicsRelocate(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONGraphicsRelocate(mon, - type, - hostname, - port, - tlsPort, - tlsSubject); - else - return qemuMonitorTextGraphicsRelocate(mon, - type, - hostname, - port, - tlsPort, - tlsSubject); + return qemuMonitorJSONGraphicsRelocate(mon, + type, + hostname, + port, + tlsPort, + tlsSubject); } @@ -2845,10 +2731,7 @@ qemuMonitorSendFileHandle(qemuMonitorPtr mon, return -1; } - if (mon->json) - return qemuMonitorJSONSendFileHandle(mon, fdname, fd); - else - return qemuMonitorTextSendFileHandle(mon, fdname, fd); + return qemuMonitorJSONSendFileHandle(mon, fdname, fd); } @@ -2865,10 +2748,7 @@ qemuMonitorCloseFileHandle(qemuMonitorPtr mon, QEMU_CHECK_MONITOR_GOTO(mon, cleanup); - if (mon->json) - ret =3D qemuMonitorJSONCloseFileHandle(mon, fdname); - else - ret =3D qemuMonitorTextCloseFileHandle(mon, fdname); + ret =3D qemuMonitorJSONCloseFileHandle(mon, fdname); cleanup: if (error) { @@ -2957,10 +2837,7 @@ qemuMonitorAddNetdev(qemuMonitorPtr mon, goto cleanup; } - if (mon->json) - ret =3D qemuMonitorJSONAddNetdev(mon, netdevstr); - else - ret =3D qemuMonitorTextAddNetdev(mon, netdevstr); + ret =3D qemuMonitorJSONAddNetdev(mon, netdevstr); cleanup: if (ret < 0) { @@ -2986,10 +2863,7 @@ qemuMonitorRemoveNetdev(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONRemoveNetdev(mon, alias); - else - return qemuMonitorTextRemoveNetdev(mon, alias); + return qemuMonitorJSONRemoveNetdev(mon, alias); } @@ -3030,10 +2904,7 @@ qemuMonitorGetChardevInfo(qemuMonitorPtr mon, if (!(info =3D virHashCreate(10, qemuMonitorChardevInfoFree))) goto error; - if (mon->json) - ret =3D qemuMonitorJSONGetChardevInfo(mon, info); - else - ret =3D qemuMonitorTextGetChardevInfo(mon, info); + ret =3D qemuMonitorJSONGetChardevInfo(mon, info); if (ret < 0) goto error; @@ -3076,10 +2947,7 @@ qemuMonitorDelDevice(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONDelDevice(mon, devalias); - else - return qemuMonitorTextDelDevice(mon, devalias); + return qemuMonitorJSONDelDevice(mon, devalias); } @@ -3097,10 +2965,7 @@ qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon, if (fd >=3D 0 && qemuMonitorSendFileHandle(mon, fdname, fd) < 0) return -1; - if (mon->json) - ret =3D qemuMonitorJSONAddDevice(mon, devicestr); - else - ret =3D qemuMonitorTextAddDevice(mon, devicestr); + ret =3D qemuMonitorJSONAddDevice(mon, devicestr); if (ret < 0 && fd >=3D 0) { if (qemuMonitorCloseFileHandle(mon, fdname) < 0) @@ -3199,10 +3064,7 @@ qemuMonitorSetDrivePassphrase(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSetDrivePassphrase(mon, alias, passphrase); - else - return qemuMonitorTextSetDrivePassphrase(mon, alias, passphrase); + return qemuMonitorJSONSetDrivePassphrase(mon, alias, passphrase); } @@ -3355,10 +3217,7 @@ qemuMonitorArbitraryCommand(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONArbitraryCommand(mon, cmd, reply, hmp); - else - return qemuMonitorTextArbitraryCommand(mon, cmd, reply); + return qemuMonitorJSONArbitraryCommand(mon, cmd, reply, hmp); } @@ -3367,10 +3226,7 @@ qemuMonitorInjectNMI(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONInjectNMI(mon); - else - return qemuMonitorTextInjectNMI(mon); + return qemuMonitorJSONInjectNMI(mon); } @@ -3384,10 +3240,7 @@ qemuMonitorSendKey(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSendKey(mon, holdtime, keycodes, nkeycodes); - else - return qemuMonitorTextSendKey(mon, holdtime, keycodes, nkeycodes); + return qemuMonitorJSONSendKey(mon, holdtime, keycodes, nkeycodes); } @@ -3401,10 +3254,7 @@ qemuMonitorScreendump(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONScreendump(mon, device, head, file); - else - return qemuMonitorTextScreendump(mon, file); + return qemuMonitorJSONScreendump(mon, device, head, file); } @@ -3499,13 +3349,10 @@ qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONSetBlockIoThrottle(mon, device, info, - supportMaxOptions, - supportGroupNameOption, - supportMaxLengthOptions); - else - return qemuMonitorTextSetBlockIoThrottle(mon, device, info); + return qemuMonitorJSONSetBlockIoThrottle(mon, device, info, + supportMaxOptions, + supportGroupNameOption, + supportMaxLengthOptions); } @@ -3518,10 +3365,7 @@ qemuMonitorGetBlockIoThrottle(qemuMonitorPtr mon, QEMU_CHECK_MONITOR(mon); - if (mon->json) - return qemuMonitorJSONGetBlockIoThrottle(mon, device, reply); - else - return qemuMonitorTextGetBlockIoThrottle(mon, device, reply); + return qemuMonitorJSONGetBlockIoThrottle(mon, device, reply); } @@ -3596,10 +3440,7 @@ qemuMonitorOpenGraphics(qemuMonitorPtr mon, if (qemuMonitorSendFileHandle(mon, fdname, fd) < 0) return -1; - if (mon->json) - ret =3D qemuMonitorJSONOpenGraphics(mon, protocol, fdname, skipaut= h); - else - ret =3D qemuMonitorTextOpenGraphics(mon, protocol, fdname, skipaut= h); + ret =3D qemuMonitorJSONOpenGraphics(mon, protocol, fdname, skipauth); if (ret < 0) { if (qemuMonitorCloseFileHandle(mon, fdname) < 0) --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 05:53:26 2024 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 1526992620027931.5937756153129; Tue, 22 May 2018 05:37:00 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D30D368D35; Tue, 22 May 2018 12:36:56 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 184F7300173E; Tue, 22 May 2018 12:36:56 +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 7EE1F4CAA8; Tue, 22 May 2018 12:36:55 +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 w4MCa6np013728 for ; Tue, 22 May 2018 08:36:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id BC8E0215CDAA; Tue, 22 May 2018 12:36:06 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 24476215CDA7; Tue, 22 May 2018 12:36:06 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 22 May 2018 14:35:48 +0200 Message-Id: <1a020c1d5480453c276d37c9a1e1bd8b38b545bc.1526992488.git.pkrempa@redhat.com> 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 Cc: Peter Krempa Subject: [libvirt] [PATCH 8/8] qemu: monitor: Remove dead code from text monitor 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.84 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 22 May 2018 12:36:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Remove all unused functions and cleanup headers. Signed-off-by: Peter Krempa Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_monitor_text.c | 2112 --------------------------------------= ---- src/qemu/qemu_monitor_text.h | 143 --- 2 files changed, 2255 deletions(-) diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 58d695ea22..90a58cd86b 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -23,1127 +23,18 @@ #include -#include -#include -#include -#include -#include #include #include "qemu_monitor_text.h" -#include "qemu_alias.h" -#include "c-ctype.h" -#include "c-strcasestr.h" #include "viralloc.h" #include "virlog.h" -#include "driver.h" -#include "datatypes.h" #include "virerror.h" -#include "virbuffer.h" -#include "virprobe.h" #include "virstring.h" -#ifdef WITH_DTRACE_PROBES -# include "libvirt_qemu_probes.h" -#endif - #define VIR_FROM_THIS VIR_FROM_QEMU VIR_LOG_INIT("qemu.qemu_monitor_text"); -#define DEBUG_IO 0 - -/* Return -1 for error, 0 for success */ -typedef int qemuMonitorExtraPromptHandler(qemuMonitorPtr mon, - const char *buf, - const char *prompt, - void *data); - - -/* When connecting to a monitor, QEMU will print a greeting like - * - * QEMU 0.11.0 monitor - type 'help' for more information - * - * Don't expect the version number bit to be stable :-) - */ -#define GREETING_PREFIX "QEMU " -#define GREETING_POSTFIX "type 'help' for more information\r\n(qemu) " -#define BASIC_PROMPT "(qemu) " -#define PASSWORD_PROMPT "Password:" -#define DISK_ENCRYPTION_PREFIX "(" -#define DISK_ENCRYPTION_POSTFIX ") is encrypted." -#define LINE_ENDING "\r\n" - -int qemuMonitorTextIOProcess(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - const char *data, - size_t len ATTRIBUTE_UNUSED, - qemuMonitorMessagePtr msg) -{ - int used =3D 0; - - /* Check for & discard greeting */ - if (STRPREFIX(data, GREETING_PREFIX)) { - const char *offset =3D strstr(data, GREETING_POSTFIX); - - /* We see the greeting prefix, but not postfix, so pretend we've - not consumed anything. We'll restart when more data arrives. */ - if (!offset) { -#if DEBUG_IO - VIR_DEBUG("Partial greeting seen, getting out & waiting for mo= re"); -#endif - return 0; - } - - used =3D offset - data + strlen(GREETING_POSTFIX); - -#if DEBUG_IO - VIR_DEBUG("Discarded monitor greeting"); -#endif - } - - /* Don't print raw data in debug because its full of control chars */ - /*VIR_DEBUG("Process data %d byts of data [%s]", len - used, data + us= ed);*/ -#if DEBUG_IO - VIR_DEBUG("Process data %d byts of data", (int)(len - used)); -#endif - - /* Look for a non-zero reply followed by prompt */ - if (msg && !msg->finished) { - char *start =3D NULL; - char *end =3D NULL; - char *skip; - - /* If we're here, we've already sent the command. We now - * strip the trailing '\r' because it makes the matching - * code that follows a little easier ie we can just strstr() - * for the original command - */ - if (msg->txLength > 0) { - char *tmp; - if ((tmp =3D strchr(msg->txBuffer, '\r'))) - *tmp =3D '\0'; - } - - /* QEMU echos the command back to us, full of control - * character junk that we don't want. We have to skip - * over this junk by looking for the first complete - * repetition of our command. Then we can look for - * the prompt that is supposed to follow - * - * NB, we can't optimize by immediately looking for - * LINE_ENDING, because QEMU 0.10 has bad problems - * when initially connecting where it might write a - * prompt in the wrong place. So we must not look - * for LINE_ENDING, or BASIC_PROMPT until we've - * seen our original command echod. - */ - skip =3D strstr(data + used, msg->txBuffer); - - /* After the junk we should have a line ending... */ - if (skip) - start =3D strstr(skip + strlen(msg->txBuffer), LINE_ENDING); - - /* ... then our command reply data, following by a (qemu) prompt */ - if (start) { - char *passwd; - start +=3D strlen(LINE_ENDING); - - /* We might get a prompt for a password before the (qemu) prom= pt */ - passwd =3D strstr(start, PASSWORD_PROMPT); - if (passwd) { -#if DEBUG_IO - VIR_DEBUG("Seen a password prompt [%s]", data + used); -#endif - if (msg->passwordHandler) { - size_t i; - /* Try and handle the prompt. The handler is required - * to report a normal libvirt error */ - if (msg->passwordHandler(mon, msg, - start, - passwd - start + strlen(PASSW= ORD_PROMPT), - msg->passwordOpaque) < 0) - return -1; - - /* Blank out the password prompt so we don't re-trigger - * if we have to go back to sleep for more I/O */ - for (i =3D 0; i < strlen(PASSWORD_PROMPT); i++) - start[i] =3D ' '; - - /* Handled, so skip forward over password prompt */ - start =3D passwd; - } else { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Password request seen, but no handle= r available")); - return -1; - } - } - - end =3D strstr(start, BASIC_PROMPT); - } - - if (start && end) { - int want =3D end - start; - /* Annoyingly some commands may not have any reply data - * at all upon success, but since we've detected the - * BASIC_PROMPT we can reasonably reliably cope */ - if (want) { - if (VIR_REALLOC_N(msg->rxBuffer, - msg->rxLength + want + 1) < 0) - return -1; - memcpy(msg->rxBuffer + msg->rxLength, start, want); - msg->rxLength +=3D want; - msg->rxBuffer[msg->rxLength] =3D '\0'; -#if DEBUG_IO - VIR_DEBUG("Finished %d byte reply [%s]", want, msg->rxBuff= er); - } else { - VIR_DEBUG("Finished 0 byte reply"); -#endif - } - PROBE(QEMU_MONITOR_RECV_REPLY, - "mon=3D%p reply=3D%s", - mon, msg->rxBuffer); - msg->finished =3D 1; - used +=3D end - (data + used); - used +=3D strlen(BASIC_PROMPT); - } - } - -#if DEBUG_IO - VIR_DEBUG("Total used %d", used); -#endif - return used; -} - -static int -qemuMonitorTextCommandWithHandler(qemuMonitorPtr mon, - const char *cmd, - qemuMonitorPasswordHandler passwordHandl= er, - void *passwordOpaque, - int scm_fd, - char **reply) -{ - int ret; - qemuMonitorMessage msg; - - *reply =3D NULL; - - memset(&msg, 0, sizeof(msg)); - - if (virAsprintf(&msg.txBuffer, "%s\r", cmd) < 0) - return -1; - msg.txLength =3D strlen(msg.txBuffer); - msg.txFD =3D scm_fd; - msg.passwordHandler =3D passwordHandler; - msg.passwordOpaque =3D passwordOpaque; - - VIR_DEBUG("Send command '%s' for write with FD %d", cmd, scm_fd); - - ret =3D qemuMonitorSend(mon, &msg); - - VIR_DEBUG("Receive command reply ret=3D%d rxLength=3D%d rxBuffer=3D'%s= '", - ret, msg.rxLength, msg.rxBuffer); - - /* Just in case buffer had some passwords in */ - memset(msg.txBuffer, 0, msg.txLength); - VIR_FREE(msg.txBuffer); - - if (ret >=3D 0) { - /* To make life safer for callers, already ensure there's at least= an empty string */ - if (msg.rxBuffer) { - *reply =3D msg.rxBuffer; - } else { - if (VIR_STRDUP(*reply, "") < 0) - return -1; - } - } - - return ret; -} - -int -qemuMonitorTextCommandWithFd(qemuMonitorPtr mon, - const char *cmd, - int scm_fd, - char **reply) -{ - return qemuMonitorTextCommandWithHandler(mon, cmd, NULL, NULL, - scm_fd, reply); -} - -/* Check monitor output for evidence that the command was not recognized. - * For 'info' commands, qemu returns help text. For other commands, qemu - * returns 'unknown command:'. - */ -static int -qemuMonitorTextCommandNotFound(const char *cmd, const char *reply) -{ - if (STRPREFIX(cmd, "info ")) { - if (strstr(reply, "info version")) - return 1; - } else { - if (strstr(reply, "unknown command:")) - return 1; - } - - return 0; -} - -static int -qemuMonitorSendDiskPassphrase(qemuMonitorPtr mon, - qemuMonitorMessagePtr msg, - const char *data, - size_t len ATTRIBUTE_UNUSED, - void *opaque ATTRIBUTE_UNUSED) -{ - char *path; - char *passphrase =3D NULL; - size_t passphrase_len =3D 0; - int res; - const char *pathStart; - const char *pathEnd; - - /* - * For disk passwords: - * - * ide0-hd0 (/path/to/volume) is encrypted. - * Password: - * - */ - pathStart =3D strstr(data, DISK_ENCRYPTION_PREFIX); - pathEnd =3D strstr(data, DISK_ENCRYPTION_POSTFIX); - if (!pathStart || !pathEnd || pathStart >=3D pathEnd) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Unable to extract disk path from %s"), - data); - return -1; - } - - /* Extra the path */ - pathStart +=3D strlen(DISK_ENCRYPTION_PREFIX); - if (VIR_STRNDUP(path, pathStart, pathEnd - pathStart) < 0) - return -1; - - /* Fetch the disk password if possible */ - res =3D qemuMonitorGetDiskSecret(mon, - path, - &passphrase, - &passphrase_len); - VIR_FREE(path); - if (res < 0) - return -1; - - /* Enlarge transmit buffer to allow for the extra data - * to be sent back */ - if (VIR_REALLOC_N(msg->txBuffer, - msg->txLength + passphrase_len + 1 + 1) < 0) { - memset(passphrase, 0, passphrase_len); - VIR_FREE(passphrase); - return -1; - } - - /* Queue the password for sending */ - memcpy(msg->txBuffer + msg->txLength, - passphrase, passphrase_len); - msg->txLength +=3D passphrase_len; - msg->txBuffer[msg->txLength] =3D '\r'; - msg->txLength++; - msg->txBuffer[msg->txLength] =3D '\0'; - - memset(passphrase, 0, passphrase_len); - VIR_FREE(passphrase); - - return 0; -} - -int -qemuMonitorTextStartCPUs(qemuMonitorPtr mon) -{ - char *reply; - - if (qemuMonitorTextCommandWithHandler(mon, "cont", - qemuMonitorSendDiskPassphrase, - NULL, - -1, &reply) < 0) - return -1; - - VIR_FREE(reply); - return 0; -} - - -int -qemuMonitorTextStopCPUs(qemuMonitorPtr mon) -{ - char *info; - int ret; - - ret =3D qemuMonitorHMPCommand(mon, "stop", &info); - VIR_FREE(info); - return ret; -} - - -int -qemuMonitorTextGetStatus(qemuMonitorPtr mon, - bool *running, - virDomainPausedReason *reason) -{ - char *reply; - int ret =3D -1; - - if (reason) - *reason =3D VIR_DOMAIN_PAUSED_UNKNOWN; - - if (qemuMonitorHMPCommand(mon, "info status", &reply) < 0) - return -1; - - if (strstr(reply, "running")) { - *running =3D true; - } else if (strstr(reply, "paused")) { - char *status; - - if ((status =3D strchr(reply, '('))) { - char *end =3D strchr(status, ')'); - if (end) - *end =3D '\0'; - else - status =3D NULL; - } - if (!status) - VIR_DEBUG("info status was missing status details"); - else if (reason) - *reason =3D qemuMonitorVMStatusToPausedReason(status); - *running =3D false; - } else { - virReportError(VIR_ERR_OPERATION_FAILED, - _("unexpected reply from info status: %s"), reply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextSystemPowerdown(qemuMonitorPtr mon) -{ - char *info; - int ret; - - ret =3D qemuMonitorHMPCommand(mon, "system_powerdown", &info); - - VIR_FREE(info); - return ret; -} - -int -qemuMonitorTextSetLink(qemuMonitorPtr mon, - const char *name, - virDomainNetInterfaceLinkState state) -{ - char *info =3D NULL; - char *cmd =3D NULL; - const char *st_str =3D NULL; - - /* determine state */ - if (state =3D=3D VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DOWN) - st_str =3D "off"; - else - st_str =3D "on"; - - if (virAsprintf(&cmd, "set_link %s %s", name, st_str) < 0) - goto error; - if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) - goto error; - - /* check if set_link command is supported */ - if (strstr(info, "\nunknown ")) { - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, - "%s", - _("\'set_link\' not supported by this qemu")); - goto error; - } - - /* check if qemu didn't reject device name */ - if (strstr(info, "\nDevice ")) { - virReportError(VIR_ERR_OPERATION_FAILED, - "%s", _("device name rejected")); - goto error; - } - - VIR_FREE(info); - VIR_FREE(cmd); - return 0; - - error: - VIR_FREE(info); - VIR_FREE(cmd); - - return -1; -} - -int qemuMonitorTextSystemReset(qemuMonitorPtr mon) -{ - char *info; - int ret; - - ret =3D qemuMonitorHMPCommand(mon, "system_reset", &info); - - VIR_FREE(info); - return ret; -} - - -int -qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, - struct qemuMonitorQueryCpusEntry **entries, - size_t *nentries) -{ - char *qemucpus =3D NULL; - char *line; - struct qemuMonitorQueryCpusEntry *cpus =3D NULL; - size_t ncpus =3D 0; - struct qemuMonitorQueryCpusEntry cpu =3D {0}; - int ret =3D -2; /* -2 denotes a non-fatal error to get the data */ - - if (qemuMonitorHMPCommand(mon, "info cpus", &qemucpus) < 0) - return -1; - - /* - * This is the gross format we're about to parse :-{ - * - * (qemu) info cpus - * * CPU #0: pc=3D0x00000000000f0c4a thread_id=3D30019 - * CPU #1: pc=3D0x00000000fffffff0 thread_id=3D30020 - * CPU #2: pc=3D0x00000000fffffff0 (halted) thread_id=3D30021 - * - */ - line =3D qemucpus; - do { - char *offset =3D NULL; - char *end =3D NULL; - int cpuid =3D -1; - int tid =3D 0; - - /* extract cpu number */ - if ((offset =3D strstr(line, "#")) =3D=3D NULL) - goto cleanup; - - if (virStrToLong_i(offset + strlen("#"), &end, 10, &cpuid) < 0) - goto cleanup; - if (end =3D=3D NULL || *end !=3D ':') - goto cleanup; - - /* Extract host Thread ID */ - if ((offset =3D strstr(line, "thread_id=3D")) =3D=3D NULL) - goto cleanup; - - if (virStrToLong_i(offset + strlen("thread_id=3D"), &end, 10, &tid= ) < 0) - goto cleanup; - if (end =3D=3D NULL || !c_isspace(*end)) - goto cleanup; - - cpu.qemu_id =3D cpuid; - cpu.tid =3D tid; - - if (VIR_APPEND_ELEMENT_COPY(cpus, ncpus, cpu) < 0) { - ret =3D -1; - goto cleanup; - } - - VIR_DEBUG("tid=3D%d", tid); - - /* Skip to next data line */ - line =3D strchr(offset, '\r'); - if (line =3D=3D NULL) - line =3D strchr(offset, '\n'); - } while (line !=3D NULL); - - VIR_STEAL_PTR(*entries, cpus); - *nentries =3D ncpus; - ret =3D 0; - - cleanup: - qemuMonitorQueryCpusFree(cpus, ncpus); - VIR_FREE(qemucpus); - return ret; -} - - -int qemuMonitorTextGetVirtType(qemuMonitorPtr mon, - virDomainVirtType *virtType) -{ - char *reply =3D NULL; - - *virtType =3D VIR_DOMAIN_VIRT_QEMU; - - if (qemuMonitorHMPCommand(mon, "info kvm", &reply) < 0) - return -1; - - if (strstr(reply, "enabled")) - *virtType =3D VIR_DOMAIN_VIRT_KVM; - - VIR_FREE(reply); - return 0; -} - - -static int parseMemoryStat(char **text, unsigned int tag, - const char *search, virDomainMemoryStatPtr msta= t) -{ - char *dummy; - unsigned long long value; - - if (STRPREFIX(*text, search)) { - *text +=3D strlen(search); - if (virStrToLong_ull(*text, &dummy, 10, &value)) { - VIR_DEBUG("error reading %s: %s", search, *text); - return 0; - } - - switch (tag) { - /* Convert megabytes to kilobytes for libvirt */ - case VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON: - value <<=3D 10; - break; - /* Convert bytes to kilobytes for libvirt */ - case VIR_DOMAIN_MEMORY_STAT_SWAP_IN: - case VIR_DOMAIN_MEMORY_STAT_SWAP_OUT: - case VIR_DOMAIN_MEMORY_STAT_UNUSED: - case VIR_DOMAIN_MEMORY_STAT_AVAILABLE: - value >>=3D 10; - } - mstat->tag =3D tag; - mstat->val =3D value; - return 1; - } - return 0; -} - -/* The reply from the 'info balloon' command may contain additional memory - * statistics in the form: 'actual=3D [,=3D]*' - */ -static int qemuMonitorParseBalloonInfo(char *text, - virDomainMemoryStatPtr stats, - unsigned int nr_stats) -{ - char *p =3D text; - unsigned int nr_stats_found =3D 0; - - /* Since "actual=3D" always comes first in the returned string, - * and sometime we only care about the value of "actual", such - * as qemuMonitorGetBalloonInfo, we parse it outside of the - * loop. - */ - if (parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON, - "actual=3D", &stats[nr_stats_found]) =3D=3D 1) { - nr_stats_found++; - } - - while (*p && nr_stats_found < nr_stats) { - if (parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_SWAP_IN, - ",mem_swapped_in=3D", &stats[nr_stats_found]) = || - parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_SWAP_OUT, - ",mem_swapped_out=3D", &stats[nr_stats_found])= || - parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_MAJOR_FAULT, - ",major_page_faults=3D", &stats[nr_stats_found= ]) || - parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_MINOR_FAULT, - ",minor_page_faults=3D", &stats[nr_stats_found= ]) || - parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_UNUSED, - ",free_mem=3D", &stats[nr_stats_found]) || - parseMemoryStat(&p, VIR_DOMAIN_MEMORY_STAT_AVAILABLE, - ",total_mem=3D", &stats[nr_stats_found])) - nr_stats_found++; - - /* Skip to the next label. When *p is ',' the last match attempt - * failed so try to match the next ','. - */ - if (*p =3D=3D ',') - p++; - p =3D strchr(p, ','); - if (!p) break; - } - return nr_stats_found; -} - - -/* The reply from QEMU contains 'ballon: actual=3D421' where value is in M= B */ -#define BALLOON_PREFIX "balloon: " - -int -qemuMonitorTextGetBalloonInfo(qemuMonitorPtr mon, - unsigned long long *currmem) -{ - char *reply =3D NULL; - int ret =3D -1; - char *offset; - - if (qemuMonitorHMPCommand(mon, "info balloon", &reply) < 0) - return -1; - - if ((offset =3D strstr(reply, BALLOON_PREFIX)) !=3D NULL) { - offset +=3D strlen(BALLOON_PREFIX); - virDomainMemoryStatStruct stats[1]; - - if (qemuMonitorParseBalloonInfo(offset, stats, 1) =3D=3D 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected balloon information '%s'"), reply= ); - goto cleanup; - } - - if (stats[0].tag !=3D VIR_DOMAIN_MEMORY_STAT_ACTUAL_BALLOON) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected balloon information '%s'"), reply= ); - goto cleanup; - } - - *currmem =3D stats[0].val; - ret =3D 1; - } else { - /* We don't raise an error here, since its to be expected that - * many QEMU's don't support ballooning - */ - ret =3D 0; - } - - cleanup: - VIR_FREE(reply); - return ret; -} - -int qemuMonitorTextGetMemoryStats(qemuMonitorPtr mon, - virDomainMemoryStatPtr stats, - unsigned int nr_stats) -{ - char *reply =3D NULL; - int ret =3D 0; - char *offset; - - if (qemuMonitorHMPCommand(mon, "info balloon", &reply) < 0) - return -1; - - if ((offset =3D strstr(reply, BALLOON_PREFIX)) !=3D NULL) { - offset +=3D strlen(BALLOON_PREFIX); - ret =3D qemuMonitorParseBalloonInfo(offset, stats, nr_stats); - } - - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextGetBlockInfo(qemuMonitorPtr mon, - virHashTablePtr table) -{ - struct qemuDomainDiskInfo *info =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - char *dummy; - char *p, *eol; - char *dev; - int tmp; - - if (qemuMonitorHMPCommand(mon, "info block", &reply) < 0) - goto cleanup; - - if (strstr(reply, "\ninfo ")) { - virReportError(VIR_ERR_OPERATION_INVALID, - "%s", - _("info block not supported by this qemu")); - goto cleanup; - } - - /* The output looks like this: - * drive-ide0-0-0: removable=3D0 file=3D ro=3D0 drv=3Draw encryp= ted=3D0 - * drive-ide0-1-0: removable=3D1 locked=3D0 file=3D ro=3D1 drv= =3Draw encrypted=3D0 - */ - p =3D reply; - - while (*p) { - p =3D (char *)qemuAliasDiskDriveSkipPrefix(p); - - eol =3D strchr(p, '\n'); - if (!eol) - eol =3D p + strlen(p) - 1; - - dev =3D p; - p =3D strchr(p, ':'); - if (p && p < eol && *(p + 1) =3D=3D ' ') { - if (VIR_ALLOC(info) < 0) - goto cleanup; - - *p =3D '\0'; - p +=3D 2; - - while (p < eol) { - if (STRPREFIX(p, "removable=3D")) { - p +=3D strlen("removable=3D"); - if (virStrToLong_i(p, &dummy, 10, &tmp) =3D=3D -1) - VIR_DEBUG("error reading removable: %s", p); - else - info->removable =3D (tmp !=3D 0); - } else if (STRPREFIX(p, "locked=3D")) { - p +=3D strlen("locked=3D"); - if (virStrToLong_i(p, &dummy, 10, &tmp) =3D=3D -1) - VIR_DEBUG("error reading locked: %s", p); - else - info->locked =3D (tmp !=3D 0); - } else if (STRPREFIX(p, "tray-open=3D")) { - p +=3D strlen("tray-open=3D"); - if (virStrToLong_i(p, &dummy, 10, &tmp) =3D=3D -1) - VIR_DEBUG("error reading tray-open: %s", p); - else - info->tray_open =3D (tmp !=3D 0); - } else if (STRPREFIX(p, "io-status=3D")) { - char *end; - char c; - - p +=3D strlen("io-status=3D"); - end =3D strchr(p, ' '); - if (!end || end > eol) - end =3D eol; - - c =3D *end; - *end =3D '\0'; - info->io_status =3D qemuMonitorBlockIOStatusToError(p); - *end =3D c; - if (info->io_status < 0) - goto cleanup; - } else { - /* ignore because we don't parse all options */ - } - - /* skip to next label */ - p =3D strchr(p, ' '); - if (!p) - break; - p++; - } - - if (virHashAddEntry(table, dev, info) < 0) - goto cleanup; - else - info =3D NULL; - } - - /* skip to the next line */ - p =3D eol + 1; - } - - ret =3D 0; - - cleanup: - VIR_FREE(info); - VIR_FREE(reply); - return ret; -} - - -int -qemuMonitorTextGetAllBlockStatsInfo(qemuMonitorPtr mon, - virHashTablePtr hash) -{ - qemuBlockStatsPtr stats =3D NULL; - char *info =3D NULL; - const char *dev_name; - char **lines =3D NULL; - char **values =3D NULL; - char *line; - char *value; - char *key; - size_t i; - size_t j; - int ret =3D -1; - int nstats; - int maxstats =3D 0; - - if (qemuMonitorHMPCommand(mon, "info blockstats", &info) < 0) - goto cleanup; - - /* If the command isn't supported then qemu prints the supported info - * commands, so the output starts "info ". Since this is unlikely to = be - * the name of a block device, we can use this to detect if qemu suppo= rts - * the command. */ - if (strstr(info, "\ninfo ")) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("'info blockstats' not supported by this qemu")); - goto cleanup; - } - - /* The output format for both qemu & KVM is: - * blockdevice: rd_bytes=3D% wr_bytes=3D% rd_operations=3D% wr_opera= tions=3D% - * (repeated for each block device) - * where '%' is a 64 bit number. - */ - if (!(lines =3D virStringSplit(info, "\n", 0))) - goto cleanup; - - for (i =3D 0; lines[i] && *lines[i]; i++) { - line =3D lines[i]; - - if (VIR_ALLOC(stats) < 0) - goto cleanup; - - /* set the entries to -1, the JSON monitor enforces them, but it w= ould - * be overly complex to achieve this here */ - stats->rd_req =3D -1; - stats->rd_bytes =3D -1; - stats->wr_req =3D -1; - stats->wr_bytes =3D -1; - stats->rd_total_times =3D -1; - stats->wr_total_times =3D -1; - stats->flush_req =3D -1; - stats->flush_total_times =3D -1; - - /* extract device name and make sure that it's followed by - * a colon and space */ - dev_name =3D line; - if (!(line =3D strchr(line, ':')) || line[1] !=3D ' ') { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("info blockstats reply was malformed")); - goto cleanup; - } - - *line =3D '\0'; - line +=3D 2; - - dev_name =3D qemuAliasDiskDriveSkipPrefix(dev_name); - - if (!(values =3D virStringSplit(line, " ", 0))) - goto cleanup; - - nstats =3D 0; - - for (j =3D 0; values[j] && *values[j]; j++) { - key =3D values[j]; - - if (!(value =3D strchr(key, '=3D'))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("info blockstats entry was malformed")); - goto cleanup; - } - - *value =3D '\0'; - value++; - -#define QEMU_MONITOR_TEXT_READ_BLOCK_STAT(NAME, VAR) \ - if (STREQ(key, NAME)) { \ - nstats++; \ - if (virStrToLong_ll(value, NULL, 10, &VAR) < 0) { \ - virReportError(VIR_ERR_INTERNAL_ERROR, \ - _("'info blockstats' contains malformed= " \ - "parameter '%s' value '%s'"), NAME, v= alue);\ - goto cleanup; \ - } \ - continue; \ - } - - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("rd_bytes", stats->rd_bytes); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("wr_bytes", stats->wr_bytes); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("rd_operations", stats->rd_r= eq); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("wr_operations", stats->wr_r= eq); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("rd_total_time_ns", stats->r= d_total_times); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("wr_total_time_ns", stats->w= r_total_times); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("flush_operations", stats->f= lush_req); - QEMU_MONITOR_TEXT_READ_BLOCK_STAT("flush_total_time_ns", stats= ->flush_total_times); -#undef QEMU_MONITOR_TEXT_READ_BLOCK_STAT - - /* log if we get statistic element different from the above */ - VIR_DEBUG("unknown block stat field '%s'", key); - } - - if (nstats > maxstats) - maxstats =3D nstats; - - if (virHashAddEntry(hash, dev_name, stats) < 0) - goto cleanup; - stats =3D NULL; - - virStringListFree(values); - values =3D NULL; - } - - ret =3D maxstats; - - cleanup: - virStringListFree(lines); - virStringListFree(values); - VIR_FREE(stats); - VIR_FREE(info); - return ret; -} - -/* Return 0 on success, -1 on failure, or -2 if not supported. Size - * is in bytes. */ -int qemuMonitorTextBlockResize(qemuMonitorPtr mon, - const char *device, - unsigned long long size) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "block_resize %s %lluB", device, size) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (strstr(reply, "unknown command:")) { - ret =3D -2; - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - -static int -qemuMonitorSendVNCPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - qemuMonitorMessagePtr msg, - const char *data ATTRIBUTE_UNUSED, - size_t len ATTRIBUTE_UNUSED, - void *opaque) -{ - char *passphrase =3D opaque; - size_t passphrase_len =3D strlen(passphrase); - - /* Enlarge transmit buffer to allow for the extra data - * to be sent back */ - if (VIR_REALLOC_N(msg->txBuffer, - msg->txLength + passphrase_len + 1 + 1) < 0) - return -1; - - /* Queue the password for sending */ - memcpy(msg->txBuffer + msg->txLength, - passphrase, passphrase_len); - msg->txLength +=3D passphrase_len; - msg->txBuffer[msg->txLength] =3D '\r'; - msg->txLength++; - msg->txBuffer[msg->txLength] =3D '\0'; - - return 0; -} - -int qemuMonitorTextSetVNCPassword(qemuMonitorPtr mon, - const char *password) -{ - char *info =3D NULL; - - if (qemuMonitorTextCommandWithHandler(mon, "change vnc password", - qemuMonitorSendVNCPassphrase, - (char *)password, - -1, &info) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("setting VNC password failed")); - return -1; - } - VIR_FREE(info); - return 0; -} - -/* Returns -1 on error, -2 if not supported */ -int qemuMonitorTextSetPassword(qemuMonitorPtr mon, - const char *protocol, - const char *password, - const char *action_if_connected) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "set_password %s \"%s\" %s", - protocol, password, action_if_connected) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (strstr(reply, "unknown command:")) { - ret =3D -2; - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - return ret; -} - -/* Returns -1 on error, -2 if not supported */ -int qemuMonitorTextExpirePassword(qemuMonitorPtr mon, - const char *protocol, - const char *expire_time) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "expire_password %s %s", - protocol, expire_time) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (strstr(reply, "unknown command:")) { - ret =3D -2; - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - return ret; -} - - -int -qemuMonitorTextSetBalloon(qemuMonitorPtr mon, - unsigned long long newmem) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - /* - * 'newmem' is in KB, QEMU monitor works in MB, and we all wish - * we just worked in bytes with unsigned long long everywhere. - */ - if (virAsprintf(&cmd, "balloon %llu", VIR_DIV_UP(newmem, 1024)) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) { - VIR_FREE(cmd); - return -1; - } - VIR_FREE(cmd); - - /* If the command failed qemu prints: 'unknown command' - * No message is printed on success it seems */ - if (strstr(reply, "unknown command:")) { - /* Don't set error - it is expected memory balloon fails on many q= emu */ - ret =3D 0; - } else { - ret =3D 1; - } - - VIR_FREE(reply); - return ret; -} - - int qemuMonitorTextSetCPU(qemuMonitorPtr mon, int cpu, bool online) { char *cmd; @@ -1174,696 +65,6 @@ int qemuMonitorTextSetCPU(qemuMonitorPtr mon, int cpu= , bool online) } -/** - * Run HMP command to eject a media from ejectable device. - * - * Returns: - * -1 on error - * 0 on success - */ -int qemuMonitorTextEjectMedia(qemuMonitorPtr mon, - const char *dev_name, - bool force) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "eject %s%s", force ? "-f " : "", dev_name) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* If the command failed qemu prints: - * device not found, device is locked ... - * No message is printed on success it seems */ - if (c_strcasestr(reply, "device ")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("could not eject media on %s: %s"), dev_name, rep= ly); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - return ret; -} - - -int qemuMonitorTextChangeMedia(qemuMonitorPtr mon, - const char *dev_name, - const char *newmedia, - const char *format ATTRIBUTE_UNUSED) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - char *safepath =3D NULL; - int ret =3D -1; - - if (!(safepath =3D qemuMonitorEscapeArg(newmedia))) - goto cleanup; - - if (virAsprintf(&cmd, "change %s \"%s\"", dev_name, safepath) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* If the command failed qemu prints: - * device not found, device is locked ... - * No message is printed on success it seems */ - if (c_strcasestr(reply, "device ")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("could not change media on %s: %s"), dev_name, re= ply); - goto cleanup; - } - - /* Could not open message indicates bad filename */ - if (strstr(reply, "Could not open ")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("could not change media on %s: %s"), dev_name, re= ply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - VIR_FREE(safepath); - return ret; -} - -static int qemuMonitorTextSaveMemory(qemuMonitorPtr mon, - const char *cmdtype, - unsigned long long offset, - size_t length, - const char *path) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - char *safepath =3D NULL; - int ret =3D -1; - - if (!(safepath =3D qemuMonitorEscapeArg(path))) - goto cleanup; - - if (virAsprintf(&cmd, "%s %llu %zi \"%s\"", cmdtype, offset, length, s= afepath) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* XXX what is printed on failure ? */ - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - VIR_FREE(safepath); - return ret; -} - - -int qemuMonitorTextSaveVirtualMemory(qemuMonitorPtr mon, - unsigned long long offset, - size_t length, - const char *path) -{ - return qemuMonitorTextSaveMemory(mon, "memsave", offset, length, path); -} - -int qemuMonitorTextSavePhysicalMemory(qemuMonitorPtr mon, - unsigned long long offset, - size_t length, - const char *path) -{ - return qemuMonitorTextSaveMemory(mon, "pmemsave", offset, length, path= ); -} - - -int qemuMonitorTextSetMigrationSpeed(qemuMonitorPtr mon, - unsigned long bandwidth) -{ - char *cmd =3D NULL; - char *info =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "migrate_set_speed %lum", bandwidth) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: - VIR_FREE(info); - VIR_FREE(cmd); - return ret; -} - - -int qemuMonitorTextSetMigrationDowntime(qemuMonitorPtr mon, - unsigned long long downtime) -{ - char *cmd =3D NULL; - char *info =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "migrate_set_downtime %llums", downtime) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: - VIR_FREE(info); - VIR_FREE(cmd); - return ret; -} - - -#define MIGRATION_PREFIX "Migration status: " -#define MIGRATION_TRANSFER_PREFIX "transferred ram: " -#define MIGRATION_REMAINING_PREFIX "remaining ram: " -#define MIGRATION_TOTAL_PREFIX "total ram: " -#define MIGRATION_DISK_TRANSFER_PREFIX "transferred disk: " -#define MIGRATION_DISK_REMAINING_PREFIX "remaining disk: " -#define MIGRATION_DISK_TOTAL_PREFIX "total disk: " - -int qemuMonitorTextGetMigrationStats(qemuMonitorPtr mon, - qemuMonitorMigrationStatsPtr stats) -{ - char *reply; - char *tmp; - char *end; - int ret =3D -1; - - memset(stats, 0, sizeof(*stats)); - - if (qemuMonitorHMPCommand(mon, "info migrate", &reply) < 0) - return -1; - - if ((tmp =3D strstr(reply, MIGRATION_PREFIX)) !=3D NULL) { - tmp +=3D strlen(MIGRATION_PREFIX); - end =3D strchr(tmp, '\r'); - if (end =3D=3D NULL) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected migration status in %s"), reply); - goto cleanup; - } - *end =3D '\0'; - - stats->status =3D qemuMonitorMigrationStatusTypeFromString(tmp); - if (stats->status < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected migration status in %s"), reply); - goto cleanup; - } - - if (stats->status =3D=3D QEMU_MONITOR_MIGRATION_STATUS_ACTIVE) { - tmp =3D end + 1; - - if (!(tmp =3D strstr(tmp, MIGRATION_TRANSFER_PREFIX))) - goto done; - tmp +=3D strlen(MIGRATION_TRANSFER_PREFIX); - - if (virStrToLong_ull(tmp, &end, 10, - &stats->ram_transferred) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse migration data transferred " - "statistic %s"), tmp); - goto cleanup; - } - stats->ram_transferred *=3D 1024; - tmp =3D end; - - if (!(tmp =3D strstr(tmp, MIGRATION_REMAINING_PREFIX))) - goto done; - tmp +=3D strlen(MIGRATION_REMAINING_PREFIX); - - if (virStrToLong_ull(tmp, &end, 10, &stats->ram_remaining) < 0= ) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse migration data remaining " - "statistic %s"), tmp); - goto cleanup; - } - stats->ram_remaining *=3D 1024; - tmp =3D end; - - if (!(tmp =3D strstr(tmp, MIGRATION_TOTAL_PREFIX))) - goto done; - tmp +=3D strlen(MIGRATION_TOTAL_PREFIX); - - if (virStrToLong_ull(tmp, &end, 10, &stats->ram_total) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse migration data total " - "statistic %s"), tmp); - goto cleanup; - } - stats->ram_total *=3D 1024; - tmp =3D end; - - /* - * Check for Optional Disk Migration stats - */ - if (!(tmp =3D strstr(tmp, MIGRATION_DISK_TRANSFER_PREFIX))) - goto done; - tmp +=3D strlen(MIGRATION_DISK_TRANSFER_PREFIX); - - if (virStrToLong_ull(tmp, &end, 10, - &stats->disk_transferred) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse disk migration data " - "transferred statistic %s"), tmp); - goto cleanup; - } - stats->disk_transferred *=3D 1024; - tmp =3D end; - - if (!(tmp =3D strstr(tmp, MIGRATION_DISK_REMAINING_PREFIX))) - goto done; - tmp +=3D strlen(MIGRATION_DISK_REMAINING_PREFIX); - - if (virStrToLong_ull(tmp, &end, 10, &stats->disk_remaining) < = 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse disk migration data remaini= ng " - "statistic %s"), tmp); - goto cleanup; - } - stats->disk_remaining *=3D 1024; - tmp =3D end; - - if (!(tmp =3D strstr(tmp, MIGRATION_DISK_TOTAL_PREFIX))) - goto done; - tmp +=3D strlen(MIGRATION_DISK_TOTAL_PREFIX); - - if (virStrToLong_ull(tmp, &end, 10, &stats->disk_total) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("cannot parse disk migration data total " - "statistic %s"), tmp); - goto cleanup; - } - stats->disk_total *=3D 1024; - } - } - - done: - ret =3D 0; - - cleanup: - VIR_FREE(reply); - if (ret < 0) - memset(stats, 0, sizeof(*stats)); - return ret; -} - - -int qemuMonitorTextMigrate(qemuMonitorPtr mon, - unsigned int flags, - const char *dest) -{ - char *cmd =3D NULL; - char *info =3D NULL; - int ret =3D -1; - char *safedest =3D qemuMonitorEscapeArg(dest); - virBuffer extra =3D VIR_BUFFER_INITIALIZER; - char *extrastr =3D NULL; - - if (!safedest) - return -1; - - if (flags & QEMU_MONITOR_MIGRATE_BACKGROUND) - virBufferAddLit(&extra, " -d"); - if (flags & QEMU_MONITOR_MIGRATE_NON_SHARED_DISK) - virBufferAddLit(&extra, " -b"); - if (flags & QEMU_MONITOR_MIGRATE_NON_SHARED_INC) - virBufferAddLit(&extra, " -i"); - if (virBufferCheckError(&extra) < 0) - goto cleanup; - - extrastr =3D virBufferContentAndReset(&extra); - if (virAsprintf(&cmd, "migrate %s\"%s\"", extrastr ? extrastr : "", - safedest) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) - goto cleanup; - - /* Now check for "fail" in the output string */ - if (strstr(info, "fail") !=3D NULL) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("migration to '%s' failed: %s"), dest, info); - goto cleanup; - } - /* If the command isn't supported then qemu prints: - * unknown command: migrate" */ - if (strstr(info, "unknown command:")) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("migration to '%s' not supported by this qemu: %s= "), dest, info); - goto cleanup; - } - - - ret =3D 0; - - cleanup: - VIR_FREE(extrastr); - VIR_FREE(safedest); - VIR_FREE(info); - VIR_FREE(cmd); - return ret; -} - -int qemuMonitorTextMigrateCancel(qemuMonitorPtr mon) -{ - char *info =3D NULL; - int ret; - - ret =3D qemuMonitorHMPCommand(mon, "migrate_cancel", &info); - - VIR_FREE(info); - return ret; -} - - -int qemuMonitorTextGraphicsRelocate(qemuMonitorPtr mon, - int type, - const char *hostname, - int port, - int tlsPort, - const char *tlsSubject) -{ - char *cmd; - char *info =3D NULL; - - if (virAsprintf(&cmd, "client_migrate_info %s %s %d %d %s", - type =3D=3D VIR_DOMAIN_GRAPHICS_TYPE_SPICE ? "spice" := "vnc", - hostname, port, tlsPort, tlsSubject ? tlsSubject : "")= < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &info) < 0) { - VIR_FREE(cmd); - return -1; - } - VIR_FREE(cmd); - VIR_FREE(info); - - return 0; -} - - -int qemuMonitorTextSendFileHandle(qemuMonitorPtr mon, - const char *fdname, - int fd) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "getfd %s", fdname) < 0) - return -1; - - if (qemuMonitorHMPCommandWithFd(mon, cmd, fd, &reply) < 0) - goto cleanup; - - /* If the command isn't supported then qemu prints: - * unknown command: getfd" */ - if (strstr(reply, "unknown command:")) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("qemu does not support sending of file handles: %= s"), - reply); - goto cleanup; - } - - if (STRNEQ(reply, "")) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unable to send file handle '%s': %s"), - fdname, reply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextCloseFileHandle(qemuMonitorPtr mon, - const char *fdname) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "closefd %s", fdname) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* If the command isn't supported then qemu prints: - * unknown command: getfd" */ - if (strstr(reply, "unknown command:")) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("qemu does not support closing of file handles: %= s"), - reply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextAddNetdev(qemuMonitorPtr mon, - const char *netdevstr) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "netdev_add %s", netdevstr) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* XXX error messages here ? */ - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -int qemuMonitorTextRemoveNetdev(qemuMonitorPtr mon, - const char *alias) -{ - char *cmd; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "netdev_del %s", alias) < 0) - return -1; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* XXX error messages here ? */ - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - - -/* Parse the output of "info chardev" and return a hash of pty paths. - * - * Output is: - * foo: filename=3Dpty:/dev/pts/7 - * monitor: filename=3Dstdio - * serial0: filename=3Dvc - * parallel0: filename=3Dvc - * - * Non-pty lines are ignored. In the above example, key is 'foo', value is - * '/dev/pty/7'. The hash will contain only a single value. - */ - -int qemuMonitorTextGetChardevInfo(qemuMonitorPtr mon, - virHashTablePtr info) -{ - char *reply =3D NULL; - qemuMonitorChardevInfoPtr entry =3D NULL; - int ret =3D -1; - - if (qemuMonitorHMPCommand(mon, "info chardev", &reply) < 0) - return -1; - - char *pos; /* The current start of searching = */ - char *next =3D reply; /* The start of the next line */ - char *eol; /* The character which ends the current l= ine */ - char *end =3D reply + strlen(reply); /* The end of the reply string */ - - while (next) { - pos =3D next; - - /* Split the output into lines */ - eol =3D memchr(pos, '\n', end - pos); - if (eol =3D=3D NULL) { - eol =3D end; - next =3D NULL; - } else { - next =3D eol + 1; - } - - /* Ignore all whitespace immediately before eol */ - while (eol > pos && c_isspace(*(eol-1))) - eol -=3D 1; - - /* Look for 'filename=3Dpty:' */ -#define NEEDLE "filename=3Dpty:" - char *needle =3D memmem(pos, eol - pos, NEEDLE, strlen(NEEDLE)); - - /* If it's not there we can ignore this line */ - if (!needle) - continue; - - /* id is everything from the beginning of the line to the ':' - * find ':' and turn it into a terminator */ - char *colon =3D memchr(pos, ':', needle - pos); - if (colon =3D=3D NULL) - continue; - *colon =3D '\0'; - char *id =3D pos; - - /* Path is everything after needle to the end of the line */ - *eol =3D '\0'; - - if (VIR_ALLOC(entry) < 0) - goto cleanup; - - if (VIR_STRDUP(entry->ptyPath, needle + strlen(NEEDLE)) < 0) - goto cleanup; - - if (virHashAddEntry(info, id, entry) < 0) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("failed to save chardev path '%s'"), - entry->ptyPath); - VIR_FREE(entry->ptyPath); - goto cleanup; - } - - entry =3D NULL; -#undef NEEDLE - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(entry); - return ret; -} - - -int qemuMonitorTextDelDevice(qemuMonitorPtr mon, - const char *devalias) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - char *safedev; - int ret =3D -1; - - if (!(safedev =3D qemuMonitorEscapeArg(devalias))) - goto cleanup; - - if (virAsprintf(&cmd, "device_del %s", safedev) < 0) - goto cleanup; - - VIR_DEBUG("TextDelDevice devalias=3D%s", devalias); - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (STRNEQ(reply, "")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("detaching %s device failed: %s"), devalias, repl= y); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - VIR_FREE(safedev); - return ret; -} - - -int qemuMonitorTextAddDevice(qemuMonitorPtr mon, - const char *devicestr) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - char *safedev; - int ret =3D -1; - - if (!(safedev =3D qemuMonitorEscapeArg(devicestr))) - goto cleanup; - - if (virAsprintf(&cmd, "device_add %s", safedev) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - /* If the host device is hotpluged first time, qemu will output - * husb: using %s file-system with %s if the command succeeds. - */ - if (STRPREFIX(reply, "husb: using")) { - ret =3D 0; - goto cleanup; - } - - /* Otherwise, if the command succeeds, no output is sent. So - * any non-empty string shows an error */ - if (STRNEQ(reply, "")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("adding %s device failed: %s"), devicestr, reply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - VIR_FREE(safedev); - return ret; -} - - int qemuMonitorTextAddDrive(qemuMonitorPtr mon, const char *drivestr) { @@ -1965,45 +166,6 @@ int qemuMonitorTextDriveDel(qemuMonitorPtr mon, return ret; } -int qemuMonitorTextSetDrivePassphrase(qemuMonitorPtr mon, - const char *alias, - const char *passphrase) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - char *safe_str; - - safe_str =3D qemuMonitorEscapeArg(passphrase); - if (!safe_str) - return -1; - - if (virAsprintf(&cmd, "block_passwd %s \"%s\"", alias, safe_str) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (strstr(reply, "unknown command:")) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("setting disk password is not supported")); - goto cleanup; - } else if (strstr(reply, "The entered password is invalid")) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("the disk password is incorrect")); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - VIR_FREE(safe_str); - return ret; -} - - int qemuMonitorTextCreateSnapshot(qemuMonitorPtr mon, const char *name) @@ -2124,277 +286,3 @@ int qemuMonitorTextDeleteSnapshot(qemuMonitorPtr mon= , const char *name) VIR_FREE(reply); return ret; } - - -int qemuMonitorTextArbitraryCommand(qemuMonitorPtr mon, const char *cmd, - char **reply) -{ - char *safecmd =3D NULL; - int ret; - - if (!(safecmd =3D qemuMonitorEscapeArg(cmd))) - return -1; - - ret =3D qemuMonitorHMPCommand(mon, safecmd, reply); - - VIR_FREE(safecmd); - - return ret; -} - -int qemuMonitorTextInjectNMI(qemuMonitorPtr mon) -{ - char *reply =3D NULL; - - if (qemuMonitorHMPCommand(mon, "inject-nmi", &reply) < 0) - return -1; - - if (strstr(reply, "unknown command") !=3D NULL) { - VIR_FREE(reply); - - /* fallback to 'nmi' if qemu has not supported "inject-nmi" yet. */ - if (qemuMonitorHMPCommand(mon, "nmi 0", &reply) < 0) - return -1; - } - - VIR_FREE(reply); - return 0; -} - -int qemuMonitorTextSendKey(qemuMonitorPtr mon, - unsigned int holdtime, - unsigned int *keycodes, - unsigned int nkeycodes) -{ - size_t i; - virBuffer buf =3D VIR_BUFFER_INITIALIZER; - char *cmd, *reply =3D NULL; - int ret =3D -1; - - if (nkeycodes > VIR_DOMAIN_SEND_KEY_MAX_KEYS || nkeycodes =3D=3D 0) - return -1; - - virBufferAddLit(&buf, "sendkey "); - for (i =3D 0; i < nkeycodes; i++) { - if (keycodes[i] > 0xffff) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("keycode %zu is invalid: 0x%X"), - i, keycodes[i]); - virBufferFreeAndReset(&buf); - return -1; - } - - if (i) - virBufferAddChar(&buf, '-'); - virBufferAsprintf(&buf, "0x%02X", keycodes[i]); - } - - if (holdtime) - virBufferAsprintf(&buf, " %u", holdtime); - - if (virBufferCheckError(&buf) < 0) - return -1; - - cmd =3D virBufferContentAndReset(&buf); - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (STRNEQ(reply, "")) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("failed to send key '%s'"), reply); - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(reply); - return ret; -} - -/* Returns -1 on error, -2 if not supported */ -int qemuMonitorTextScreendump(qemuMonitorPtr mon, const char *file) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "screendump %s", file) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (strstr(reply, "unknown command:")) { - ret =3D -2; - goto cleanup; - } - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - return ret; -} - - -int qemuMonitorTextOpenGraphics(qemuMonitorPtr mon, - const char *protocol, - const char *fdname, - bool skipauth) -{ - char *cmd =3D NULL; - char *reply =3D NULL; - int ret =3D -1; - - if (virAsprintf(&cmd, "add_client %s %s %d", protocol, fdname, skipaut= h ? 0 : 1) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &reply) < 0) - goto cleanup; - - if (STRNEQ(reply, "")) - goto cleanup; - - ret =3D 0; - - cleanup: - VIR_FREE(reply); - VIR_FREE(cmd); - return ret; -} - - -int qemuMonitorTextSetBlockIoThrottle(qemuMonitorPtr mon, - const char *device, - virDomainBlockIoTuneInfoPtr info) -{ - char *cmd =3D NULL; - char *result =3D NULL; - int ret =3D -1; - const char *cmd_name =3D NULL; - - /* For the not specified fields, 0 by default */ - cmd_name =3D "block_set_io_throttle"; - if (virAsprintf(&cmd, "%s %s %llu %llu %llu %llu %llu %llu", cmd_name, - device, info->total_bytes_sec, info->read_bytes_sec, - info->write_bytes_sec, info->total_iops_sec, - info->read_iops_sec, info->write_iops_sec) < 0) - goto cleanup; - - if (qemuMonitorHMPCommand(mon, cmd, &result) < 0) - goto cleanup; - - if (qemuMonitorTextCommandNotFound(cmd_name, result)) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("Command '%s' is not found"), cmd_name); - goto cleanup; - } - ret =3D 0; - - cleanup: - VIR_FREE(cmd); - VIR_FREE(result); - return ret; -} - -static int -qemuMonitorTextParseBlockIoThrottle(const char *result, - const char *device, - virDomainBlockIoTuneInfoPtr reply) -{ - char *dummy =3D NULL; - int ret =3D -1; - const char *p, *eol; - int devnamelen =3D strlen(device); - - p =3D result; - - while (*p) { - if (STREQLEN(p, device, devnamelen) && - p[devnamelen] =3D=3D ':' && p[devnamelen+1] =3D=3D ' ') { - - eol =3D strchr(p, '\n'); - if (!eol) - eol =3D p + strlen(p); - - p +=3D devnamelen + 2; /* Skip to first label. */ - - while (*p) { - if (STRPREFIX(p, "bps=3D")) { - p +=3D strlen("bps=3D"); - if (virStrToLong_ull(p, &dummy, 10, &reply->total_byte= s_sec) =3D=3D -1) - VIR_DEBUG("error reading total_bytes_sec: %s", p); - } else if (STRPREFIX(p, "bps_rd=3D")) { - p +=3D strlen("bps_rd=3D"); - if (virStrToLong_ull(p, &dummy, 10, &reply->read_bytes= _sec) =3D=3D -1) - VIR_DEBUG("error reading read_bytes_sec: %s", p); - } else if (STRPREFIX(p, "bps_wr=3D")) { - p +=3D strlen("bps_wr=3D"); - if (virStrToLong_ull(p, &dummy, 10, &reply->write_byte= s_sec) =3D=3D -1) - VIR_DEBUG("error reading write_bytes_sec: %s", p); - } else if (STRPREFIX(p, "iops=3D")) { - p +=3D strlen("iops=3D"); - if (virStrToLong_ull(p, &dummy, 10, &reply->total_iops= _sec) =3D=3D -1) - VIR_DEBUG("error reading total_iops_sec: %s", p); - } else if (STRPREFIX(p, "iops_rd=3D")) { - p +=3D strlen("iops_rd=3D"); - if (virStrToLong_ull(p, &dummy, 10, &reply->read_iops_= sec) =3D=3D -1) - VIR_DEBUG("error reading read_iops_sec: %s", p); - } else if (STRPREFIX(p, "iops_wr=3D")) { - p +=3D strlen("iops_wr=3D"); - if (virStrToLong_ull(p, &dummy, 10, &reply->write_iops= _sec) =3D=3D -1) - VIR_DEBUG("error reading write_iops_sec: %s", p); - } else { - VIR_DEBUG(" unknown block info %s", p); - } - - /* Skip to next label. */ - p =3D strchr(p, ' '); - if (!p || p >=3D eol) - break; - p++; - } - ret =3D 0; - goto cleanup; - } - - /* Skip to next line. */ - p =3D strchr(p, '\n'); - if (!p) - break; - p++; - } - - virReportError(VIR_ERR_INVALID_ARG, - _("No info for device '%s'"), device); - - cleanup: - return ret; -} - -int qemuMonitorTextGetBlockIoThrottle(qemuMonitorPtr mon, - const char *device, - virDomainBlockIoTuneInfoPtr reply) -{ - char *result =3D NULL; - int ret =3D -1; - const char *cmd_name =3D "info block"; - - if (qemuMonitorHMPCommand(mon, cmd_name, &result) < 0) - goto cleanup; - - if (qemuMonitorTextCommandNotFound(cmd_name, result)) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("Command '%s' is not found"), cmd_name); - goto cleanup; - } - - ret =3D qemuMonitorTextParseBlockIoThrottle(result, device, reply); - - cleanup: - VIR_FREE(result); - return ret; -} diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index a9cdce5f61..5cb5dba441 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -29,159 +29,16 @@ # include "qemu_monitor.h" -int qemuMonitorTextIOProcess(qemuMonitorPtr mon, - const char *data, - size_t len, - qemuMonitorMessagePtr msg); - -int qemuMonitorTextCommandWithFd(qemuMonitorPtr mon, - const char *cmd, - int scm_fd, - char **reply); - -int qemuMonitorTextStartCPUs(qemuMonitorPtr mon); -int qemuMonitorTextStopCPUs(qemuMonitorPtr mon); -int qemuMonitorTextGetStatus(qemuMonitorPtr mon, - bool *running, - virDomainPausedReason *reason); - -int qemuMonitorTextSystemPowerdown(qemuMonitorPtr mon); -int qemuMonitorTextSystemReset(qemuMonitorPtr mon); - -int qemuMonitorTextQueryCPUs(qemuMonitorPtr mon, - struct qemuMonitorQueryCpusEntry **entries, - size_t *nentries); -int qemuMonitorTextGetVirtType(qemuMonitorPtr mon, - virDomainVirtType *virtType); -int qemuMonitorTextGetBalloonInfo(qemuMonitorPtr mon, - unsigned long long *currmem); -int qemuMonitorTextGetMemoryStats(qemuMonitorPtr mon, - virDomainMemoryStatPtr stats, - unsigned int nr_stats); -int qemuMonitorTextGetBlockInfo(qemuMonitorPtr mon, - virHashTablePtr table); - -int qemuMonitorTextGetAllBlockStatsInfo(qemuMonitorPtr mon, - virHashTablePtr hash); -int qemuMonitorTextBlockResize(qemuMonitorPtr mon, - const char *device, - unsigned long long size); -int qemuMonitorTextSetVNCPassword(qemuMonitorPtr mon, - const char *password); -int qemuMonitorTextSetPassword(qemuMonitorPtr mon, - const char *protocol, - const char *password, - const char *action_if_connected); -int qemuMonitorTextExpirePassword(qemuMonitorPtr mon, - const char *protocol, - const char *expire_time); -int qemuMonitorTextSetBalloon(qemuMonitorPtr mon, - unsigned long long newmem); int qemuMonitorTextSetCPU(qemuMonitorPtr mon, int cpu, bool online); -int qemuMonitorTextEjectMedia(qemuMonitorPtr mon, - const char *dev_name, - bool force); -int qemuMonitorTextChangeMedia(qemuMonitorPtr mon, - const char *dev_name, - const char *newmedia, - const char *format); - - -int qemuMonitorTextSaveVirtualMemory(qemuMonitorPtr mon, - unsigned long long offset, - size_t length, - const char *path); -int qemuMonitorTextSavePhysicalMemory(qemuMonitorPtr mon, - unsigned long long offset, - size_t length, - const char *path); - -int qemuMonitorTextSetMigrationSpeed(qemuMonitorPtr mon, - unsigned long bandwidth); - -int qemuMonitorTextSetMigrationDowntime(qemuMonitorPtr mon, - unsigned long long downtime); - -int qemuMonitorTextGetMigrationStats(qemuMonitorPtr mon, - qemuMonitorMigrationStatsPtr stats); - -int qemuMonitorTextMigrate(qemuMonitorPtr mon, - unsigned int flags, - const char *uri); - -int qemuMonitorTextMigrateCancel(qemuMonitorPtr mon); - -int qemuMonitorTextGraphicsRelocate(qemuMonitorPtr mon, - int type, - const char *hostname, - int port, - int tlsPort, - const char *tlsSubject); - -int qemuMonitorTextSendFileHandle(qemuMonitorPtr mon, - const char *fdname, - int fd); - -int qemuMonitorTextCloseFileHandle(qemuMonitorPtr mon, - const char *fdname); - -int qemuMonitorTextAddNetdev(qemuMonitorPtr mon, - const char *netdevstr); - -int qemuMonitorTextRemoveNetdev(qemuMonitorPtr mon, - const char *alias); - -int qemuMonitorTextGetChardevInfo(qemuMonitorPtr mon, - virHashTablePtr info); - -int qemuMonitorTextAddDevice(qemuMonitorPtr mon, - const char *devicestr); - -int qemuMonitorTextDelDevice(qemuMonitorPtr mon, - const char *devalias); - int qemuMonitorTextAddDrive(qemuMonitorPtr mon, const char *drivestr); int qemuMonitorTextDriveDel(qemuMonitorPtr mon, const char *drivestr); -int qemuMonitorTextSetDrivePassphrase(qemuMonitorPtr mon, - const char *alias, - const char *passphrase); - int qemuMonitorTextCreateSnapshot(qemuMonitorPtr mon, const char *name); int qemuMonitorTextLoadSnapshot(qemuMonitorPtr mon, const char *name); int qemuMonitorTextDeleteSnapshot(qemuMonitorPtr mon, const char *name); -int qemuMonitorTextArbitraryCommand(qemuMonitorPtr mon, const char *cmd, - char **reply); - -int qemuMonitorTextInjectNMI(qemuMonitorPtr mon); - -int qemuMonitorTextSendKey(qemuMonitorPtr mon, - unsigned int holdtime, - unsigned int *keycodes, - unsigned int nkeycodes); - -int qemuMonitorTextScreendump(qemuMonitorPtr mon, const char *file); - -int qemuMonitorTextSetLink(qemuMonitorPtr mon, - const char *name, - virDomainNetInterfaceLinkState state); - -int qemuMonitorTextOpenGraphics(qemuMonitorPtr mon, - const char *protocol, - const char *fdname, - bool skipauth); - -int qemuMonitorTextSetBlockIoThrottle(qemuMonitorPtr mon, - const char *device, - virDomainBlockIoTuneInfoPtr info); - -int qemuMonitorTextGetBlockIoThrottle(qemuMonitorPtr mon, - const char *device, - virDomainBlockIoTuneInfoPtr reply); - #endif /* QEMU_MONITOR_TEXT_H */ --=20 2.16.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list