def->server = g_new0(virStorageNetHostDef, 1);
- if (virDomainStorageNetworkParseHost(node, def->server) < 0)
+ if (virDomainStorageNetworkParseHost(node, def->server, false) < 0)
return NULL;
if (def->server->transport == VIR_STORAGE_NET_HOST_TRANS_RDMA) {
int
virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
- virStorageNetHostDef *host)
+ virStorageNetHostDef *host,
+ bool allow_fd)
{
g_autofree char *socket = NULL;
}
break;
+ case VIR_STORAGE_NET_HOST_TRANS_FD:
+ if (!allow_fd) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("transport 'fd' is now allowed"));
+ return -1;
+ }
+
+ if (socket) {
+ virReportError(VIR_ERR_XML_ERROR,
+ _("transport '%1$s' does not support socket attribute"),
+ virStorageNetHostTransportTypeToString(host->transport));
+ return -1;
+ }
+
+ if (!(host->fdgroup = virXMLPropStringRequired(hostnode, "fdgroup")))
+ return -1;
+
+ break;
+
case VIR_STORAGE_NET_HOST_TRANS_LAST:
break;
}
*nhosts = nhostnodes;
for (i = 0; i < nhostnodes; i++) {
- if (virDomainStorageNetworkParseHost(hostnodes[i], *hosts + i) < 0)
+ if (virDomainStorageNetworkParseHost(hostnodes[i], *hosts + i, false) < 0)
return -1;
}
void virDomainDiskInsert(virDomainDef *def, virDomainDiskDef *disk);
int virDomainStorageNetworkParseHost(xmlNodePtr hostnode,
- virStorageNetHostDef *host);
+ virStorageNetHostDef *host,
+ bool allow_fd);
int virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt,
virDomainDiskDef *def,
const virDomainDef *vmdef);
"tcp",
"unix",
"rdma",
+ "fd",
);
VIR_FREE(def->name);
VIR_FREE(def->socket);
+ VIR_FREE(def->fdgroup);
}
VIR_STORAGE_NET_HOST_TRANS_TCP,
VIR_STORAGE_NET_HOST_TRANS_UNIX,
VIR_STORAGE_NET_HOST_TRANS_RDMA,
+ VIR_STORAGE_NET_HOST_TRANS_FD,
VIR_STORAGE_NET_HOST_TRANS_LAST
} virStorageNetHostTransport;
unsigned int port;
virStorageNetHostTransport transport;
char *socket; /* path to unix socket */
+
+ char *fdgroup;
};
break;
case VIR_STORAGE_NET_HOST_TRANS_RDMA:
+ case VIR_STORAGE_NET_HOST_TRANS_FD:
case VIR_STORAGE_NET_HOST_TRANS_LAST:
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("unexpected transport in <domainbackup>"));
break;
case VIR_STORAGE_NET_HOST_TRANS_RDMA:
+ case VIR_STORAGE_NET_HOST_TRANS_FD:
case VIR_STORAGE_NET_HOST_TRANS_LAST:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("transport protocol '%1$s' is not yet supported"),
addr = qemuMonitorJSONBuildUnixSocketAddress(server->socket);
break;
case VIR_STORAGE_NET_HOST_TRANS_RDMA:
+ case VIR_STORAGE_NET_HOST_TRANS_FD:
case VIR_STORAGE_NET_HOST_TRANS_LAST:
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("invalid server address"));
hoststr = host->socket;
break;
+ case VIR_STORAGE_NET_HOST_TRANS_FD:
case VIR_STORAGE_NET_HOST_TRANS_LAST:
break;
}