[libvirt PATCH v6 08/30] nodedev: add ability to list defined mdevs

Jonathon Jongsma jjongsma at redhat.com
Fri Mar 26 16:48:04 UTC 2021


This adds an internal API to query for persistent mediated devices
that are defined by mdevctl. Upcoming commits will make use of this
information.

Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
---
 src/node_device/node_device_driver.c          | 18 +++++++++
 src/node_device/node_device_driver.h          |  3 ++
 .../mdevctl-list-defined.argv                 |  1 +
 tests/nodedevmdevctltest.c                    | 39 +++++++++++++++++++
 4 files changed, 61 insertions(+)
 create mode 100644 tests/nodedevmdevctldata/mdevctl-list-defined.argv

diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
index a646692870..6911fa36da 100644
--- a/src/node_device/node_device_driver.c
+++ b/src/node_device/node_device_driver.c
@@ -860,6 +860,24 @@ virMdevctlStop(virNodeDeviceDefPtr def, char **errmsg)
 }
 
 
+virCommand*
+nodeDeviceGetMdevctlListCommand(bool defined,
+                                char **output)
+{
+    virCommand *cmd = virCommandNewArgList(MDEVCTL,
+                                           "list",
+                                           "--dumpjson",
+                                           NULL);
+
+    if (defined)
+        virCommandAddArg(cmd, "--defined");
+
+    virCommandSetOutputBuffer(cmd, output);
+
+    return cmd;
+}
+
+
 static void mdevGenerateDeviceName(virNodeDeviceDef *dev)
 {
     nodeDeviceGenerateName(dev, "mdev", dev->caps->data.mdev.uuid, NULL);
diff --git a/src/node_device/node_device_driver.h b/src/node_device/node_device_driver.h
index f1c93f4b21..705d83f827 100644
--- a/src/node_device/node_device_driver.h
+++ b/src/node_device/node_device_driver.h
@@ -121,6 +121,9 @@ virCommandPtr
 nodeDeviceGetMdevctlStopCommand(const char *uuid,
                                 char **errmsg);
 
+virCommandPtr
+nodeDeviceGetMdevctlListCommand(bool defined, char **output);
+
 int
 nodeDeviceParseMdevctlJSON(const char *jsonstring,
                            virNodeDeviceDef ***devs);
diff --git a/tests/nodedevmdevctldata/mdevctl-list-defined.argv b/tests/nodedevmdevctldata/mdevctl-list-defined.argv
new file mode 100644
index 0000000000..72b5906e9e
--- /dev/null
+++ b/tests/nodedevmdevctldata/mdevctl-list-defined.argv
@@ -0,0 +1 @@
+$MDEVCTL_BINARY$ list --dumpjson --defined
diff --git a/tests/nodedevmdevctltest.c b/tests/nodedevmdevctltest.c
index 6c92d839d1..1ab4776a23 100644
--- a/tests/nodedevmdevctltest.c
+++ b/tests/nodedevmdevctltest.c
@@ -145,6 +145,40 @@ testMdevctlStop(const void *data)
     return ret;
 }
 
+static int
+testMdevctlListDefined(const void *data G_GNUC_UNUSED)
+{
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
+    const char *actualCmdline = NULL;
+    int ret = -1;
+    g_autoptr(virCommand) cmd = NULL;
+    g_autofree char *output = NULL;
+    g_autofree char *cmdlinefile =
+        g_strdup_printf("%s/nodedevmdevctldata/mdevctl-list-defined.argv",
+                        abs_srcdir);
+
+    cmd = nodeDeviceGetMdevctlListCommand(true, &output);
+
+    if (!cmd)
+        goto cleanup;
+
+    virCommandSetDryRun(&buf, NULL, NULL);
+    if (virCommandRun(cmd, NULL) < 0)
+        goto cleanup;
+
+    if (!(actualCmdline = virBufferCurrentContent(&buf)))
+        goto cleanup;
+
+    if (nodedevCompareToFile(actualCmdline, cmdlinefile) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    virBufferFreeAndReset(&buf);
+    virCommandSetDryRun(NULL, NULL, NULL);
+    return ret;
+}
 
 static int
 testMdevctlParse(const void *data)
@@ -328,6 +362,9 @@ mymain(void)
 #define DO_TEST_STOP(uuid) \
     DO_TEST_FULL("mdevctl stop " uuid, testMdevctlStop, uuid)
 
+#define DO_TEST_LIST_DEFINED() \
+    DO_TEST_FULL("mdevctl list --defined", testMdevctlListDefined, NULL)
+
 #define DO_TEST_PARSE_JSON(filename) \
     DO_TEST_FULL("parse mdevctl json " filename, testMdevctlParse, filename)
 
@@ -339,6 +376,8 @@ mymain(void)
     /* Test mdevctl stop command, pass an arbitrary uuid */
     DO_TEST_STOP("e2451f73-c95b-4124-b900-e008af37c576");
 
+    DO_TEST_LIST_DEFINED();
+
     DO_TEST_PARSE_JSON("mdevctl-list-multiple");
 
  done:
-- 
2.26.3




More information about the libvir-list mailing list