Re: [libvirt] [PATCH v2 5/6] qemu_monitor: Introduce qemuMonitorJSONGetPRManagerInfo

2018-07-10 Thread Peter Krempa
On Thu, Jul 05, 2018 at 09:44:37 +0200, Michal Privoznik wrote:
> This function fetches status of all pr-managers. So far, qemu
> reports only a single attribute "connected" but that fits our
> needs.
> 
> Signed-off-by: Michal Privoznik 
> ---
>  src/qemu/qemu_monitor.c  | 25 +
>  src/qemu/qemu_monitor.h  |  9 +
>  src/qemu/qemu_monitor_json.c | 83 
> 
>  src/qemu/qemu_monitor_json.h |  4 +++
>  4 files changed, 121 insertions(+)

[...]

> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 03c94cd88b..291a505d5d 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -8065,3 +8065,86 @@ qemuMonitorJSONGetSEVMeasurement(qemuMonitorPtr mon)
>  virJSONValueFree(reply);
>  return measurement;
>  }
> +
> +
> +/*
> + * Example return data
> + *
> + * "return": [
> + *   { "connected": true, "id": "pr-helper0" }
> + *  ]}

You are missing the opening curly bracket, so you need to drop the
closing one too

> + *
> + */
> +static int
> +qemuMonitorJSONExtractPRManagerInfo(virJSONValuePtr reply,
> +virHashTablePtr info)
> +{
> +qemuMonitorPRManagerInfoPtr entry = NULL;
> +virJSONValuePtr data;
> +int ret = -1;
> +size_t i;
> +
> +data = virJSONValueObjectGetArray(reply, "return");
> +
> +for (i = 0; i < virJSONValueArraySize(data); i++) {
> +virJSONValuePtr prManager = virJSONValueArrayGet(data, i);
> +const char *alias;
> +
> +if (!prManager)
> +goto malformed;

This should be impossible.

> +
> +if (!(alias = virJSONValueObjectGetString(prManager, "id")))
> +goto malformed;
> +
> +if (VIR_ALLOC(entry) < 0)
> +goto cleanup;
> +
> +if (virJSONValueObjectGetBoolean(prManager,
> + "connected",
> + >connected) < 0) {
> +goto malformed;
> +}
> +
> +if (virHashAddEntry(info, alias, entry) < 0)
> +goto cleanup;
> +
> +entry = NULL;
> +}
> +
> +ret = 0;
> + cleanup:
> +VIR_FREE(entry);
> +return ret;
> +
> + malformed:
> +virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +   _("malformed prManager reply"));
> +goto cleanup;
> +}

ACK


signature.asc
Description: PGP signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v2 5/6] qemu_monitor: Introduce qemuMonitorJSONGetPRManagerInfo

2018-07-05 Thread Michal Privoznik
This function fetches status of all pr-managers. So far, qemu
reports only a single attribute "connected" but that fits our
needs.

Signed-off-by: Michal Privoznik 
---
 src/qemu/qemu_monitor.c  | 25 +
 src/qemu/qemu_monitor.h  |  9 +
 src/qemu/qemu_monitor_json.c | 83 
 src/qemu/qemu_monitor_json.h |  4 +++
 4 files changed, 121 insertions(+)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index ca95f6f94a..3514e9f8a1 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -4335,3 +4335,28 @@ qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon)
 
 return qemuMonitorJSONGetSEVMeasurement(mon);
 }
+
+
+int
+qemuMonitorGetPRManagerInfo(qemuMonitorPtr mon,
+virHashTablePtr *retinfo)
+{
+int ret = -1;
+virHashTablePtr info = NULL;
+
+*retinfo = NULL;
+
+QEMU_CHECK_MONITOR(mon);
+
+if (!(info = virHashCreate(10, virHashValueFree)))
+goto cleanup;
+
+if (qemuMonitorJSONGetPRManagerInfo(mon, info) < 0)
+goto cleanup;
+
+VIR_STEAL_PTR(*retinfo, info);
+ret = 0;
+ cleanup:
+virHashFree(info);
+return ret;
+}
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index f1ea0bc541..e588d73678 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -1156,4 +1156,13 @@ int qemuMonitorBlockdevDel(qemuMonitorPtr mon,
 char *
 qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon);
 
+typedef struct _qemuMonitorPRManagerInfo qemuMonitorPRManagerInfo;
+typedef qemuMonitorPRManagerInfo *qemuMonitorPRManagerInfoPtr;
+struct _qemuMonitorPRManagerInfo {
+bool connected;
+};
+
+int qemuMonitorGetPRManagerInfo(qemuMonitorPtr mon,
+virHashTablePtr *retinfo);
+
 #endif /* QEMU_MONITOR_H */
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 03c94cd88b..291a505d5d 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -8065,3 +8065,86 @@ qemuMonitorJSONGetSEVMeasurement(qemuMonitorPtr mon)
 virJSONValueFree(reply);
 return measurement;
 }
+
+
+/*
+ * Example return data
+ *
+ * "return": [
+ *   { "connected": true, "id": "pr-helper0" }
+ *  ]}
+ *
+ */
+static int
+qemuMonitorJSONExtractPRManagerInfo(virJSONValuePtr reply,
+virHashTablePtr info)
+{
+qemuMonitorPRManagerInfoPtr entry = NULL;
+virJSONValuePtr data;
+int ret = -1;
+size_t i;
+
+data = virJSONValueObjectGetArray(reply, "return");
+
+for (i = 0; i < virJSONValueArraySize(data); i++) {
+virJSONValuePtr prManager = virJSONValueArrayGet(data, i);
+const char *alias;
+
+if (!prManager)
+goto malformed;
+
+if (!(alias = virJSONValueObjectGetString(prManager, "id")))
+goto malformed;
+
+if (VIR_ALLOC(entry) < 0)
+goto cleanup;
+
+if (virJSONValueObjectGetBoolean(prManager,
+ "connected",
+ >connected) < 0) {
+goto malformed;
+}
+
+if (virHashAddEntry(info, alias, entry) < 0)
+goto cleanup;
+
+entry = NULL;
+}
+
+ret = 0;
+ cleanup:
+VIR_FREE(entry);
+return ret;
+
+ malformed:
+virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+   _("malformed prManager reply"));
+goto cleanup;
+}
+
+
+int
+qemuMonitorJSONGetPRManagerInfo(qemuMonitorPtr mon,
+virHashTablePtr info)
+{
+int ret = -1;
+virJSONValuePtr cmd;
+virJSONValuePtr reply = NULL;
+
+if (!(cmd = qemuMonitorJSONMakeCommand("query-pr-managers",
+   NULL)))
+return -1;
+
+if (qemuMonitorJSONCommand(mon, cmd, ) < 0)
+goto cleanup;
+
+if (qemuMonitorJSONCheckReply(cmd, reply, VIR_JSON_TYPE_ARRAY) < 0)
+goto cleanup;
+
+ret = qemuMonitorJSONExtractPRManagerInfo(reply, info);
+ cleanup:
+virJSONValueFree(cmd);
+virJSONValueFree(reply);
+return ret;
+
+}
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index 6bc0dd3ad2..66536ceb97 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -550,4 +550,8 @@ int qemuMonitorJSONBlockdevDel(qemuMonitorPtr mon,
const char *nodename)
 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
+int qemuMonitorJSONGetPRManagerInfo(qemuMonitorPtr mon,
+virHashTablePtr info)
+ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
 #endif /* QEMU_MONITOR_JSON_H */
-- 
2.16.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list