]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: Implement support for virDomainQemuMonitorCommandWithFiles
authorPeter Krempa <pkrempa@redhat.com>
Fri, 28 Jan 2022 08:24:03 +0000 (09:24 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 1 Mar 2022 12:29:49 +0000 (13:29 +0100)
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
docs/manpages/virsh.rst
tools/virsh-domain.c

index 00d21a19d83ef5b1df781443f5575d56072c9ea2..d2e65285335473c246d5525d09cc3b947f65e295 100644 (file)
@@ -7897,7 +7897,8 @@ qemu-monitor-command
 
 ::
 
-   qemu-monitor-command domain { [--hmp] | [--pretty] [--return-value] } command...
+   qemu-monitor-command domain { [--hmp] | [--pretty] [--return-value] }
+       [--pass-fds N,M,...] command...
 
 Send an arbitrary monitor command *command* to domain *domain* through the
 QEMU monitor.  The results of the command will be printed on stdout.
@@ -7930,6 +7931,9 @@ extracted rather than passing through the full reply from QEMU.
 If *--hmp* is passed, the command is considered to be a human monitor command
 and libvirt will automatically convert it into QMP and convert the result back.
 
+If *--pass-fds* is specified, the argument is a comma separated list
+of open file descriptors which should be passed on to qemu along with the
+command.
 
 qemu-agent-command
 ------------------
index 75079343f019d278e20a60305b1ad2dac697cae9..2e21219d635aa1edab3da75c18ef31ebb0c82c56 100644 (file)
@@ -9721,6 +9721,11 @@ static const vshCmdOptDef opts_qemu_monitor_command[] = {
      .type = VSH_OT_BOOL,
      .help = N_("extract the value of the 'return' key from the returned string")
     },
+    {.name = "pass-fds",
+     .type = VSH_OT_STRING,
+     .completer = virshCompleteEmpty,
+     .help = N_("pass file descriptors N,M,... along with the command")
+    },
     {.name = "cmd",
      .type = VSH_OT_ARGV,
      .flags = VSH_OFLAG_REQ,
@@ -9819,6 +9824,8 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
     bool returnval = vshCommandOptBool(cmd, "return-value");
     virJSONValue *formatjson;
     g_autofree char *jsonstr = NULL;
+    g_autofree int *fds = NULL;
+    size_t nfds = 0;
 
     VSH_EXCLUSIVE_OPTIONS("hmp", "pretty");
     VSH_EXCLUSIVE_OPTIONS("hmp", "return-value");
@@ -9838,9 +9845,19 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
         return NULL;
     }
 
-    if (virDomainQemuMonitorCommand(dom, monitor_cmd, &result, flags) < 0)
+    if (virshFetchPassFdsList(ctl, cmd, &nfds, &fds) < 0)
         return false;
 
+    if (fds) {
+        if (virDomainQemuMonitorCommandWithFiles(dom, monitor_cmd, nfds, fds,
+                                                 NULL, NULL,
+                                                 &result, flags) < 0)
+            return false;
+    } else {
+        if (virDomainQemuMonitorCommand(dom, monitor_cmd, &result, flags) < 0)
+            return false;
+    }
+
     if (returnval || pretty) {
         resultjson = virJSONValueFromString(result);