]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: monitor: Support FD passing of sockets to 'qemuMonitorJSONNBDServerStart'
authorPeter Krempa <pkrempa@redhat.com>
Tue, 25 Mar 2025 16:32:23 +0000 (17:32 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 1 Apr 2025 14:18:29 +0000 (16:18 +0200)
Upcoming patches will extend the FD passing infrastructure to the backup
job so that users can pass an opened socket instead of qemu opening it
themself to bypass difficulities caused by containerizing libvirt.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/storage_source_conf.c
src/conf/storage_source_conf.h
src/qemu/qemu_monitor_json.c

index 9f285804068243e758399ae26d006453a915cf27..8a063be244c266aafe542e3761e47595618b0dac 100644 (file)
@@ -155,6 +155,7 @@ virStorageNetHostDefFree(size_t nhosts,
         g_free(hosts[i].name);
         g_free(hosts[i].socket);
         g_free(hosts[i].fdgroup);
+        g_free(hosts[i].qemu_fdname);
     }
 
     g_free(hosts);
index de7895e637a2b81c4e780895d0bae4cfef3772f7..ebddf28cd693702b3957914f54bf82d0774faaaa 100644 (file)
@@ -157,6 +157,7 @@ struct _virStorageNetHostDef {
     char *socket;  /* path to unix socket */
 
     char *fdgroup;
+    char *qemu_fdname; /* name used with 'getfd' to pass to qemu - internal */
 };
 
 
index 994cf53d9f066fbe57a8b062880c8d0861de78d8..34ed42b0043e9152270aa2f6b579ebc6555aff12 100644 (file)
@@ -6323,6 +6323,24 @@ qemuMonitorJSONBuildUnixSocketAddress(const char *path)
 }
 
 
+static virJSONValue *
+qemuMonitorJSONBuildFDSocketAddress(const char *name)
+{
+    g_autoptr(virJSONValue) addr = NULL;
+    g_autoptr(virJSONValue) data = NULL;
+
+    if (virJSONValueObjectAdd(&data, "s:str", name, NULL) < 0)
+        return NULL;
+
+    if (virJSONValueObjectAdd(&addr,
+                              "s:type", "fd",
+                              "a:data", &data, NULL) < 0)
+        return NULL;
+
+    return g_steal_pointer(&addr);
+}
+
+
 int
 qemuMonitorJSONNBDServerStart(qemuMonitor *mon,
                               const virStorageNetHostDef *server,
@@ -6341,8 +6359,10 @@ qemuMonitorJSONNBDServerStart(qemuMonitor *mon,
     case VIR_STORAGE_NET_HOST_TRANS_UNIX:
         addr = qemuMonitorJSONBuildUnixSocketAddress(server->socket);
         break;
-    case VIR_STORAGE_NET_HOST_TRANS_RDMA:
     case VIR_STORAGE_NET_HOST_TRANS_FD:
+        addr = qemuMonitorJSONBuildFDSocketAddress(server->qemu_fdname);
+        break;
+    case VIR_STORAGE_NET_HOST_TRANS_RDMA:
     case VIR_STORAGE_NET_HOST_TRANS_LAST:
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("invalid server address"));