From: Peter Krempa <pkrempa(a)redhat.com>
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(a)redhat.com>
---
src/conf/storage_source_conf.c | 1 +
src/conf/storage_source_conf.h | 1 +
src/qemu/qemu_monitor_json.c | 22 +++++++++++++++++++++-
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/conf/storage_source_conf.c b/src/conf/storage_source_conf.c
index 9f28580406..8a063be244 100644
--- a/src/conf/storage_source_conf.c
+++ b/src/conf/storage_source_conf.c
@@ -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);
diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h
index de7895e637..ebddf28cd6 100644
--- a/src/conf/storage_source_conf.h
+++ b/src/conf/storage_source_conf.h
@@ -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 */
};
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 994cf53d9f..34ed42b004 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -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"));
--
2.49.0