mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
conf: split network host structs to util/
Continuing the refactoring of host-side storage descriptions out of conf/domain_conf and into util/virstoragefile, this patch focuses on details about a host name/port/transport as used by a network storage volume. * src/conf/domain_conf.h (virDomainDiskProtocolTransport) (virDomainDiskHostDef, virDomainDiskHostDefClear) (virDomainDiskHostDefFree, virDomainDiskHostDefCopy): Move... * src/util/virstoragefile.h (virStorageNetHostTransport) (virStorageNetHostDef, virStorageNetHostDefClear) (virStorageNetHostDefFree, virStorageNetHostDefCopy): ...here, with better names. * src/util/virstoragefile.c (virStorageNetHostDefClear) (virStorageNetHostDefFree, virStorageNetHostDefCopy): Moved from... * src/conf/domain_conf.c (virDomainDiskHostDefClear) (virDomainDiskHostDefFree, virDomainDiskHostDefCopy): ...here. (virDomainDiskSourceDefClear, virDomainDiskSourceDefParse) (virDomainDiskSourceDefFormatInternal): Adjust callers. * src/conf/snapshot_conf.h (_virDomainSnapshotDiskDef): Likewise. * src/conf/snapshot_conf.c (virDomainSnapshotDiskDefClear): Likewise. * src/qemu/qemu_command.c (qemuAddRBDHost) (qemuParseDriveURIString, qemuParseNBDString) (qemuBuildNetworkDriveURI, qemuParseCommandLineDisk) (qemuParseCommandLine, qemuGetDriveSourceString): Likewise. * src/qemu/qemu_command.h: Likewise. * src/qemu/qemu_conf.c (qemuAddISCSIPoolSourceHost) (qemuTranslateDiskSourcePool): Likewise. * src/qemu/qemu_driver.c (qemuDomainSnapshotCreateSingleDiskActive) (qemuDomainSnapshotUndoSingleDiskActive): Likewise. * src/storage/storage_backend_gluster.c (virStorageFileBackendGlusterInit): Likewise. * src/storage/storage_driver.c (virStorageFileFree) (virStorageFileInitInternal): Likewise. * src/storage/storage_driver.h (_virStorageFile): Likewise. * src/libvirt_private.syms (domain_conf.h): Move symbols... (virstoragefile.h): ...as appropriate. Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
3e92938656
commit
52fb53119a
@ -276,11 +276,6 @@ VIR_ENUM_IMPL(virDomainDiskProtocol, VIR_DOMAIN_DISK_PROTOCOL_LAST,
|
||||
"ftps",
|
||||
"tftp")
|
||||
|
||||
VIR_ENUM_IMPL(virDomainDiskProtocolTransport, VIR_DOMAIN_DISK_PROTO_TRANS_LAST,
|
||||
"tcp",
|
||||
"unix",
|
||||
"rdma")
|
||||
|
||||
VIR_ENUM_IMPL(virDomainDiskSecretType, VIR_DOMAIN_DISK_SECRET_TYPE_LAST,
|
||||
"none",
|
||||
"uuid",
|
||||
@ -1245,7 +1240,7 @@ virDomainDiskSourceDefClear(virDomainDiskSourceDefPtr def)
|
||||
VIR_FREE(def->seclabels);
|
||||
}
|
||||
|
||||
virDomainDiskHostDefFree(def->nhosts, def->hosts);
|
||||
virStorageNetHostDefFree(def->nhosts, def->hosts);
|
||||
virDomainDiskAuthClear(def);
|
||||
}
|
||||
|
||||
@ -1282,67 +1277,6 @@ virDomainDiskAuthClear(virDomainDiskSourceDefPtr def)
|
||||
}
|
||||
|
||||
|
||||
void virDomainDiskHostDefClear(virDomainDiskHostDefPtr def)
|
||||
{
|
||||
if (!def)
|
||||
return;
|
||||
|
||||
VIR_FREE(def->name);
|
||||
VIR_FREE(def->port);
|
||||
VIR_FREE(def->socket);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
virDomainDiskHostDefFree(size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (!hosts)
|
||||
return;
|
||||
|
||||
for (i = 0; i < nhosts; i++)
|
||||
virDomainDiskHostDefClear(&hosts[i]);
|
||||
|
||||
VIR_FREE(hosts);
|
||||
}
|
||||
|
||||
|
||||
virDomainDiskHostDefPtr
|
||||
virDomainDiskHostDefCopy(size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts)
|
||||
{
|
||||
virDomainDiskHostDefPtr ret = NULL;
|
||||
size_t i;
|
||||
|
||||
if (VIR_ALLOC_N(ret, nhosts) < 0)
|
||||
goto error;
|
||||
|
||||
for (i = 0; i < nhosts; i++) {
|
||||
virDomainDiskHostDefPtr src = &hosts[i];
|
||||
virDomainDiskHostDefPtr dst = &ret[i];
|
||||
|
||||
dst->transport = src->transport;
|
||||
|
||||
if (VIR_STRDUP(dst->name, src->name) < 0)
|
||||
goto error;
|
||||
|
||||
if (VIR_STRDUP(dst->port, src->port) < 0)
|
||||
goto error;
|
||||
|
||||
if (VIR_STRDUP(dst->socket, src->socket) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
error:
|
||||
virDomainDiskHostDefFree(nhosts, ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
virDomainDiskGetType(virDomainDiskDefPtr def)
|
||||
{
|
||||
@ -5102,12 +5036,12 @@ virDomainDiskSourceDefParse(xmlNodePtr node,
|
||||
char **source,
|
||||
int *proto,
|
||||
size_t *nhosts,
|
||||
virDomainDiskHostDefPtr *hosts,
|
||||
virStorageNetHostDefPtr *hosts,
|
||||
virDomainDiskSourcePoolDefPtr *srcpool)
|
||||
{
|
||||
char *protocol = NULL;
|
||||
char *transport = NULL;
|
||||
virDomainDiskHostDef host;
|
||||
virStorageNetHostDef host;
|
||||
xmlNodePtr child;
|
||||
int ret = -1;
|
||||
|
||||
@ -5148,11 +5082,11 @@ virDomainDiskSourceDefParse(xmlNodePtr node,
|
||||
if (child->type == XML_ELEMENT_NODE &&
|
||||
xmlStrEqual(child->name, BAD_CAST "host")) {
|
||||
|
||||
host.transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP;
|
||||
host.transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||
|
||||
/* transport can be tcp (default), unix or rdma. */
|
||||
if ((transport = virXMLPropString(child, "transport"))) {
|
||||
host.transport = virDomainDiskProtocolTransportTypeFromString(transport);
|
||||
host.transport = virStorageNetHostTransportTypeFromString(transport);
|
||||
if (host.transport < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("unknown protocol transport type '%s'"),
|
||||
@ -5163,14 +5097,14 @@ virDomainDiskSourceDefParse(xmlNodePtr node,
|
||||
|
||||
host.socket = virXMLPropString(child, "socket");
|
||||
|
||||
if (host.transport == VIR_DOMAIN_DISK_PROTO_TRANS_UNIX &&
|
||||
if (host.transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
||||
host.socket == NULL) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("missing socket for unix transport"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (host.transport != VIR_DOMAIN_DISK_PROTO_TRANS_UNIX &&
|
||||
if (host.transport != VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
||||
host.socket != NULL) {
|
||||
virReportError(VIR_ERR_XML_ERROR,
|
||||
_("transport '%s' does not support "
|
||||
@ -5181,7 +5115,7 @@ virDomainDiskSourceDefParse(xmlNodePtr node,
|
||||
|
||||
VIR_FREE(transport);
|
||||
|
||||
if (host.transport != VIR_DOMAIN_DISK_PROTO_TRANS_UNIX) {
|
||||
if (host.transport != VIR_STORAGE_NET_HOST_TRANS_UNIX) {
|
||||
if (!(host.name = virXMLPropString(child, "name"))) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("missing name for host"));
|
||||
@ -5217,7 +5151,7 @@ virDomainDiskSourceDefParse(xmlNodePtr node,
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
virDomainDiskHostDefClear(&host);
|
||||
virStorageNetHostDefClear(&host);
|
||||
VIR_FREE(protocol);
|
||||
VIR_FREE(transport);
|
||||
return ret;
|
||||
@ -14843,7 +14777,7 @@ virDomainDiskSourceDefFormatInternal(virBufferPtr buf,
|
||||
int policy,
|
||||
int protocol,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts,
|
||||
virStorageNetHostDefPtr hosts,
|
||||
size_t nseclabels,
|
||||
virSecurityDeviceLabelDefPtr *seclabels,
|
||||
virDomainDiskSourcePoolDefPtr srcpool,
|
||||
@ -14897,7 +14831,7 @@ virDomainDiskSourceDefFormatInternal(virBufferPtr buf,
|
||||
|
||||
if (hosts[n].transport)
|
||||
virBufferAsprintf(buf, " transport='%s'",
|
||||
virDomainDiskProtocolTransportTypeToString(hosts[n].transport));
|
||||
virStorageNetHostTransportTypeToString(hosts[n].transport));
|
||||
|
||||
virBufferEscapeString(buf, " socket='%s'", hosts[n].socket);
|
||||
|
||||
|
@ -533,14 +533,6 @@ enum virDomainDiskProtocol {
|
||||
VIR_DOMAIN_DISK_PROTOCOL_LAST
|
||||
};
|
||||
|
||||
enum virDomainDiskProtocolTransport {
|
||||
VIR_DOMAIN_DISK_PROTO_TRANS_TCP,
|
||||
VIR_DOMAIN_DISK_PROTO_TRANS_UNIX,
|
||||
VIR_DOMAIN_DISK_PROTO_TRANS_RDMA,
|
||||
|
||||
VIR_DOMAIN_DISK_PROTO_TRANS_LAST
|
||||
};
|
||||
|
||||
enum virDomainDiskTray {
|
||||
VIR_DOMAIN_DISK_TRAY_CLOSED,
|
||||
VIR_DOMAIN_DISK_TRAY_OPEN,
|
||||
@ -557,15 +549,6 @@ enum virDomainDiskGeometryTrans {
|
||||
VIR_DOMAIN_DISK_TRANS_LAST
|
||||
};
|
||||
|
||||
typedef struct _virDomainDiskHostDef virDomainDiskHostDef;
|
||||
typedef virDomainDiskHostDef *virDomainDiskHostDefPtr;
|
||||
struct _virDomainDiskHostDef {
|
||||
char *name;
|
||||
char *port;
|
||||
int transport; /* enum virDomainDiskProtocolTransport */
|
||||
char *socket; /* path to unix socket */
|
||||
};
|
||||
|
||||
enum virDomainDiskIo {
|
||||
VIR_DOMAIN_DISK_IO_DEFAULT,
|
||||
VIR_DOMAIN_DISK_IO_NATIVE,
|
||||
@ -684,7 +667,7 @@ struct _virDomainDiskSourceDef {
|
||||
char *path;
|
||||
int protocol; /* enum virDomainDiskProtocol */
|
||||
size_t nhosts;
|
||||
virDomainDiskHostDefPtr hosts;
|
||||
virStorageNetHostDefPtr hosts;
|
||||
virDomainDiskSourcePoolDefPtr srcpool;
|
||||
struct {
|
||||
char *username;
|
||||
@ -2232,10 +2215,6 @@ void virDomainInputDefFree(virDomainInputDefPtr def);
|
||||
void virDomainDiskDefFree(virDomainDiskDefPtr def);
|
||||
void virDomainLeaseDefFree(virDomainLeaseDefPtr def);
|
||||
void virDomainDiskAuthClear(virDomainDiskSourceDefPtr def);
|
||||
void virDomainDiskHostDefClear(virDomainDiskHostDefPtr def);
|
||||
void virDomainDiskHostDefFree(size_t nhosts, virDomainDiskHostDefPtr hosts);
|
||||
virDomainDiskHostDefPtr virDomainDiskHostDefCopy(size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts);
|
||||
int virDomainDiskGetType(virDomainDiskDefPtr def);
|
||||
void virDomainDiskSetType(virDomainDiskDefPtr def, int type);
|
||||
int virDomainDiskGetActualType(virDomainDiskDefPtr def);
|
||||
@ -2388,7 +2367,7 @@ int virDomainDiskSourceDefFormatInternal(virBufferPtr buf,
|
||||
int policy,
|
||||
int protocol,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts,
|
||||
virStorageNetHostDefPtr hosts,
|
||||
size_t nseclabels,
|
||||
virSecurityDeviceLabelDefPtr *seclabels,
|
||||
virDomainDiskSourcePoolDefPtr srcpool,
|
||||
@ -2444,7 +2423,7 @@ int virDomainDiskSourceDefParse(xmlNodePtr node,
|
||||
char **source,
|
||||
int *proto,
|
||||
size_t *nhosts,
|
||||
virDomainDiskHostDefPtr *hosts,
|
||||
virStorageNetHostDefPtr *hosts,
|
||||
virDomainDiskSourcePoolDefPtr *srcpool);
|
||||
|
||||
bool virDomainHasDiskMirror(virDomainObjPtr vm);
|
||||
@ -2664,7 +2643,6 @@ VIR_ENUM_DECL(virDomainDiskBus)
|
||||
VIR_ENUM_DECL(virDomainDiskCache)
|
||||
VIR_ENUM_DECL(virDomainDiskErrorPolicy)
|
||||
VIR_ENUM_DECL(virDomainDiskProtocol)
|
||||
VIR_ENUM_DECL(virDomainDiskProtocolTransport)
|
||||
VIR_ENUM_DECL(virDomainDiskIo)
|
||||
VIR_ENUM_DECL(virDomainDiskSecretType)
|
||||
VIR_ENUM_DECL(virDomainDeviceSGIO)
|
||||
|
@ -84,9 +84,8 @@ virDomainSnapshotDiskDefClear(virDomainSnapshotDiskDefPtr disk)
|
||||
{
|
||||
VIR_FREE(disk->name);
|
||||
VIR_FREE(disk->file);
|
||||
while (disk->nhosts)
|
||||
virDomainDiskHostDefClear(&disk->hosts[--disk->nhosts]);
|
||||
VIR_FREE(disk->hosts);
|
||||
virStorageNetHostDefFree(disk->nhosts, disk->hosts);
|
||||
disk->nhosts = 0;
|
||||
}
|
||||
|
||||
void virDomainSnapshotDefFree(virDomainSnapshotDefPtr def)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* snapshot_conf.h: domain snapshot XML processing
|
||||
*
|
||||
* Copyright (C) 2006-2013 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2008 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -56,7 +56,7 @@ struct _virDomainSnapshotDiskDef {
|
||||
int format; /* enum virStorageFileFormat */
|
||||
int protocol; /* network source protocol */
|
||||
size_t nhosts; /* network source hosts count */
|
||||
virDomainDiskHostDefPtr hosts; /* network source hosts */
|
||||
virStorageNetHostDefPtr hosts; /* network source hosts */
|
||||
};
|
||||
|
||||
/* Stores the complete snapshot metadata */
|
||||
|
@ -203,17 +203,12 @@ virDomainDiskGetDriver;
|
||||
virDomainDiskGetFormat;
|
||||
virDomainDiskGetSource;
|
||||
virDomainDiskGetType;
|
||||
virDomainDiskHostDefClear;
|
||||
virDomainDiskHostDefCopy;
|
||||
virDomainDiskHostDefFree;
|
||||
virDomainDiskIndexByName;
|
||||
virDomainDiskInsert;
|
||||
virDomainDiskInsertPreAlloced;
|
||||
virDomainDiskIoTypeFromString;
|
||||
virDomainDiskIoTypeToString;
|
||||
virDomainDiskPathByName;
|
||||
virDomainDiskProtocolTransportTypeFromString;
|
||||
virDomainDiskProtocolTransportTypeToString;
|
||||
virDomainDiskProtocolTypeToString;
|
||||
virDomainDiskRemove;
|
||||
virDomainDiskRemoveByName;
|
||||
@ -1842,6 +1837,11 @@ virStorageFileIsSharedFSType;
|
||||
virStorageFileProbeFormat;
|
||||
virStorageFileProbeFormatFromBuf;
|
||||
virStorageFileResize;
|
||||
virStorageNetHostDefClear;
|
||||
virStorageNetHostDefCopy;
|
||||
virStorageNetHostDefFree;
|
||||
virStorageNetHostTransportTypeFromString;
|
||||
virStorageNetHostTransportTypeToString;
|
||||
|
||||
|
||||
# util/virstring.h
|
||||
|
@ -3285,7 +3285,7 @@ static int qemuAddRBDHost(virDomainDiskDefPtr disk, char *hostport)
|
||||
if (!disk->src.hosts[disk->src.nhosts-1].name)
|
||||
goto error;
|
||||
|
||||
disk->src.hosts[disk->src.nhosts-1].transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP;
|
||||
disk->src.hosts[disk->src.nhosts-1].transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||
disk->src.hosts[disk->src.nhosts-1].socket = NULL;
|
||||
|
||||
return 0;
|
||||
@ -3388,9 +3388,9 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
|
||||
}
|
||||
|
||||
if (!transp) {
|
||||
def->src.hosts->transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP;
|
||||
def->src.hosts->transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||
} else {
|
||||
def->src.hosts->transport = virDomainDiskProtocolTransportTypeFromString(transp);
|
||||
def->src.hosts->transport = virStorageNetHostTransportTypeFromString(transp);
|
||||
if (def->src.hosts->transport < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Invalid %s transport type '%s'"), scheme, transp);
|
||||
@ -3399,7 +3399,7 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
|
||||
}
|
||||
def->src.nhosts = 0; /* set to 1 once everything succeeds */
|
||||
|
||||
if (def->src.hosts->transport != VIR_DOMAIN_DISK_PROTO_TRANS_UNIX) {
|
||||
if (def->src.hosts->transport != VIR_STORAGE_NET_HOST_TRANS_UNIX) {
|
||||
if (VIR_STRDUP(def->src.hosts->name, uri->server) < 0)
|
||||
goto error;
|
||||
|
||||
@ -3447,7 +3447,7 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
|
||||
return ret;
|
||||
|
||||
error:
|
||||
virDomainDiskHostDefClear(def->src.hosts);
|
||||
virStorageNetHostDefClear(def->src.hosts);
|
||||
VIR_FREE(def->src.hosts);
|
||||
goto cleanup;
|
||||
}
|
||||
@ -3492,7 +3492,7 @@ qemuParseISCSIString(virDomainDiskDefPtr def)
|
||||
static int
|
||||
qemuParseNBDString(virDomainDiskDefPtr disk)
|
||||
{
|
||||
virDomainDiskHostDefPtr h = NULL;
|
||||
virStorageNetHostDefPtr h = NULL;
|
||||
char *host, *port;
|
||||
char *src;
|
||||
|
||||
@ -3513,7 +3513,7 @@ qemuParseNBDString(virDomainDiskDefPtr disk)
|
||||
if (src)
|
||||
*src++ = '\0';
|
||||
|
||||
h->transport = VIR_DOMAIN_DISK_PROTO_TRANS_UNIX;
|
||||
h->transport = VIR_STORAGE_NET_HOST_TRANS_UNIX;
|
||||
if (VIR_STRDUP(h->socket, host + strlen("unix:")) < 0)
|
||||
goto error;
|
||||
} else {
|
||||
@ -3550,7 +3550,7 @@ qemuParseNBDString(virDomainDiskDefPtr disk)
|
||||
return 0;
|
||||
|
||||
error:
|
||||
virDomainDiskHostDefClear(h);
|
||||
virStorageNetHostDefClear(h);
|
||||
VIR_FREE(h);
|
||||
return -1;
|
||||
}
|
||||
@ -3615,7 +3615,7 @@ char *
|
||||
qemuBuildNetworkDriveURI(int protocol,
|
||||
const char *src,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts,
|
||||
virStorageNetHostDefPtr hosts,
|
||||
const char *username,
|
||||
const char *secret)
|
||||
{
|
||||
@ -3634,23 +3634,23 @@ qemuBuildNetworkDriveURI(int protocol,
|
||||
}
|
||||
|
||||
if (!((hosts->name && strchr(hosts->name, ':')) ||
|
||||
(hosts->transport == VIR_DOMAIN_DISK_PROTO_TRANS_TCP &&
|
||||
(hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP &&
|
||||
!hosts->name) ||
|
||||
(hosts->transport == VIR_DOMAIN_DISK_PROTO_TRANS_UNIX &&
|
||||
(hosts->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX &&
|
||||
hosts->socket &&
|
||||
hosts->socket[0] != '/'))) {
|
||||
|
||||
virBufferAddLit(&buf, "nbd:");
|
||||
|
||||
switch (hosts->transport) {
|
||||
case VIR_DOMAIN_DISK_PROTO_TRANS_TCP:
|
||||
case VIR_STORAGE_NET_HOST_TRANS_TCP:
|
||||
virBufferStrcat(&buf, hosts->name, NULL);
|
||||
virBufferAsprintf(&buf, ":%s",
|
||||
hosts->port ? hosts->port :
|
||||
QEMU_DEFAULT_NBD_PORT);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_DISK_PROTO_TRANS_UNIX:
|
||||
case VIR_STORAGE_NET_HOST_TRANS_UNIX:
|
||||
if (!hosts->socket) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("socket attribute required for "
|
||||
@ -3664,7 +3664,7 @@ qemuBuildNetworkDriveURI(int protocol,
|
||||
default:
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("nbd does not support transport '%s'"),
|
||||
virDomainDiskProtocolTransportTypeToString(hosts->transport));
|
||||
virStorageNetHostTransportTypeToString(hosts->transport));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -3699,14 +3699,14 @@ qemuBuildNetworkDriveURI(int protocol,
|
||||
if (VIR_ALLOC(uri) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (hosts->transport == VIR_DOMAIN_DISK_PROTO_TRANS_TCP) {
|
||||
if (hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
|
||||
if (VIR_STRDUP(uri->scheme,
|
||||
virDomainDiskProtocolTypeToString(protocol)) < 0)
|
||||
goto cleanup;
|
||||
} else {
|
||||
if (virAsprintf(&uri->scheme, "%s+%s",
|
||||
virDomainDiskProtocolTypeToString(protocol),
|
||||
virDomainDiskProtocolTransportTypeToString(hosts->transport)) < 0)
|
||||
virStorageNetHostTransportTypeToString(hosts->transport)) < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -3826,7 +3826,7 @@ qemuGetDriveSourceString(int type,
|
||||
const char *src,
|
||||
int protocol,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts,
|
||||
virStorageNetHostDefPtr hosts,
|
||||
const char *username,
|
||||
const char *secret,
|
||||
char **path)
|
||||
@ -10274,7 +10274,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
|
||||
def->src.hosts->name = def->src.path;
|
||||
if (VIR_STRDUP(def->src.hosts->port, port) < 0)
|
||||
goto error;
|
||||
def->src.hosts->transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP;
|
||||
def->src.hosts->transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||
def->src.hosts->socket = NULL;
|
||||
if (VIR_STRDUP(def->src.path, vdi) < 0)
|
||||
goto error;
|
||||
@ -12070,7 +12070,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
|
||||
VIR_FREE(hosts);
|
||||
goto error;
|
||||
}
|
||||
first_rbd_disk->src.hosts[first_rbd_disk->src.nhosts].transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP;
|
||||
first_rbd_disk->src.hosts[first_rbd_disk->src.nhosts].transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||
first_rbd_disk->src.hosts[first_rbd_disk->src.nhosts].socket = NULL;
|
||||
|
||||
first_rbd_disk->src.nhosts++;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* qemu_command.h: QEMU command generation
|
||||
*
|
||||
* Copyright (C) 2006-2013 Red Hat, Inc.
|
||||
* Copyright (C) 2006-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2006 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -185,7 +185,7 @@ char * qemuBuildRedirdevDevStr(virDomainDefPtr def,
|
||||
char *qemuBuildNetworkDriveURI(int proto,
|
||||
const char *src,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts,
|
||||
virStorageNetHostDefPtr hosts,
|
||||
const char *username,
|
||||
const char *secret);
|
||||
|
||||
@ -318,7 +318,7 @@ int qemuGetDriveSourceString(int type,
|
||||
const char *src,
|
||||
int protocol,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts,
|
||||
virStorageNetHostDefPtr hosts,
|
||||
const char *username,
|
||||
const char *secret,
|
||||
char **path);
|
||||
|
@ -1192,7 +1192,7 @@ qemuAddISCSIPoolSourceHost(virDomainDiskDefPtr def,
|
||||
/* Storage pool have not supported these 2 attributes yet,
|
||||
* use the defaults.
|
||||
*/
|
||||
def->src.hosts[0].transport = VIR_DOMAIN_DISK_PROTO_TRANS_TCP;
|
||||
def->src.hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_TCP;
|
||||
def->src.hosts[0].socket = NULL;
|
||||
|
||||
def->src.protocol = VIR_DOMAIN_DISK_PROTOCOL_ISCSI;
|
||||
@ -1309,7 +1309,7 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
|
||||
}
|
||||
|
||||
VIR_FREE(def->src.path);
|
||||
virDomainDiskHostDefFree(def->src.nhosts, def->src.hosts);
|
||||
virStorageNetHostDefFree(def->src.nhosts, def->src.hosts);
|
||||
virDomainDiskAuthClear(&def->src);
|
||||
|
||||
switch ((enum virStoragePoolType) pooldef->type) {
|
||||
|
@ -12748,8 +12748,8 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
|
||||
char *device = NULL;
|
||||
char *source = NULL;
|
||||
char *newsource = NULL;
|
||||
virDomainDiskHostDefPtr newhosts = NULL;
|
||||
virDomainDiskHostDefPtr persistHosts = NULL;
|
||||
virStorageNetHostDefPtr newhosts = NULL;
|
||||
virStorageNetHostDefPtr persistHosts = NULL;
|
||||
int format = snap->format;
|
||||
const char *formatStr = NULL;
|
||||
char *persistSource = NULL;
|
||||
@ -12815,11 +12815,11 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
|
||||
case VIR_DOMAIN_DISK_TYPE_NETWORK:
|
||||
switch (snap->protocol) {
|
||||
case VIR_DOMAIN_DISK_PROTOCOL_GLUSTER:
|
||||
if (!(newhosts = virDomainDiskHostDefCopy(snap->nhosts, snap->hosts)))
|
||||
if (!(newhosts = virStorageNetHostDefCopy(snap->nhosts, snap->hosts)))
|
||||
goto cleanup;
|
||||
|
||||
if (persistDisk &&
|
||||
!(persistHosts = virDomainDiskHostDefCopy(snap->nhosts, snap->hosts)))
|
||||
!(persistHosts = virStorageNetHostDefCopy(snap->nhosts, snap->hosts)))
|
||||
goto cleanup;
|
||||
|
||||
break;
|
||||
@ -12870,7 +12870,7 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
|
||||
need_unlink = false;
|
||||
|
||||
VIR_FREE(disk->src.path);
|
||||
virDomainDiskHostDefFree(disk->src.nhosts, disk->src.hosts);
|
||||
virStorageNetHostDefFree(disk->src.nhosts, disk->src.hosts);
|
||||
|
||||
disk->src.path = newsource;
|
||||
disk->src.format = format;
|
||||
@ -12884,7 +12884,7 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
|
||||
|
||||
if (persistDisk) {
|
||||
VIR_FREE(persistDisk->src.path);
|
||||
virDomainDiskHostDefFree(persistDisk->src.nhosts,
|
||||
virStorageNetHostDefFree(persistDisk->src.nhosts,
|
||||
persistDisk->src.hosts);
|
||||
|
||||
persistDisk->src.path = persistSource;
|
||||
@ -12906,8 +12906,8 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
|
||||
VIR_FREE(source);
|
||||
VIR_FREE(newsource);
|
||||
VIR_FREE(persistSource);
|
||||
virDomainDiskHostDefFree(snap->nhosts, newhosts);
|
||||
virDomainDiskHostDefFree(snap->nhosts, persistHosts);
|
||||
virStorageNetHostDefFree(snap->nhosts, newhosts);
|
||||
virStorageNetHostDefFree(snap->nhosts, persistHosts);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -12947,9 +12947,9 @@ qemuDomainSnapshotUndoSingleDiskActive(virQEMUDriverPtr driver,
|
||||
disk->src.format = origdisk->src.format;
|
||||
disk->src.type = origdisk->src.type;
|
||||
disk->src.protocol = origdisk->src.protocol;
|
||||
virDomainDiskHostDefFree(disk->src.nhosts, disk->src.hosts);
|
||||
virStorageNetHostDefFree(disk->src.nhosts, disk->src.hosts);
|
||||
disk->src.nhosts = origdisk->src.nhosts;
|
||||
disk->src.hosts = virDomainDiskHostDefCopy(origdisk->src.nhosts,
|
||||
disk->src.hosts = virStorageNetHostDefCopy(origdisk->src.nhosts,
|
||||
origdisk->src.hosts);
|
||||
if (persistDisk) {
|
||||
VIR_FREE(persistDisk->src.path);
|
||||
@ -12958,10 +12958,10 @@ qemuDomainSnapshotUndoSingleDiskActive(virQEMUDriverPtr driver,
|
||||
persistDisk->src.format = origdisk->src.format;
|
||||
persistDisk->src.type = origdisk->src.type;
|
||||
persistDisk->src.protocol = origdisk->src.protocol;
|
||||
virDomainDiskHostDefFree(persistDisk->src.nhosts,
|
||||
virStorageNetHostDefFree(persistDisk->src.nhosts,
|
||||
persistDisk->src.hosts);
|
||||
persistDisk->src.nhosts = origdisk->src.nhosts;
|
||||
persistDisk->src.hosts = virDomainDiskHostDefCopy(origdisk->src.nhosts,
|
||||
persistDisk->src.hosts = virStorageNetHostDefCopy(origdisk->src.nhosts,
|
||||
origdisk->src.hosts);
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* storage_backend_gluster.c: storage backend for Gluster handling
|
||||
*
|
||||
* Copyright (C) 2013 Red Hat, Inc.
|
||||
* Copyright (C) 2013-2014 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@ -566,7 +566,7 @@ static int
|
||||
virStorageFileBackendGlusterInit(virStorageFilePtr file)
|
||||
{
|
||||
virStorageFileBackendGlusterPrivPtr priv = NULL;
|
||||
virDomainDiskHostDefPtr host = &(file->hosts[0]);
|
||||
virStorageNetHostDefPtr host = &(file->hosts[0]);
|
||||
const char *hostname = host->name;
|
||||
int port = 0;
|
||||
|
||||
@ -597,7 +597,7 @@ virStorageFileBackendGlusterInit(virStorageFilePtr file)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (host->transport == VIR_DOMAIN_DISK_PROTO_TRANS_UNIX)
|
||||
if (host->transport == VIR_STORAGE_NET_HOST_TRANS_UNIX)
|
||||
hostname = host->socket;
|
||||
|
||||
|
||||
@ -607,7 +607,7 @@ virStorageFileBackendGlusterInit(virStorageFilePtr file)
|
||||
}
|
||||
|
||||
if (glfs_set_volfile_server(priv->vol,
|
||||
virDomainDiskProtocolTransportTypeToString(host->transport),
|
||||
virStorageNetHostTransportTypeToString(host->transport),
|
||||
hostname, port) < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("failed to set gluster volfile server '%s'"),
|
||||
|
@ -2742,7 +2742,7 @@ virStorageFileFree(virStorageFilePtr file)
|
||||
file->backend->backendDeinit(file);
|
||||
|
||||
VIR_FREE(file->path);
|
||||
virDomainDiskHostDefFree(file->nhosts, file->hosts);
|
||||
virStorageNetHostDefFree(file->nhosts, file->hosts);
|
||||
VIR_FREE(file);
|
||||
}
|
||||
|
||||
@ -2752,7 +2752,7 @@ virStorageFileInitInternal(int type,
|
||||
const char *path,
|
||||
int protocol,
|
||||
size_t nhosts,
|
||||
virDomainDiskHostDefPtr hosts)
|
||||
virStorageNetHostDefPtr hosts)
|
||||
{
|
||||
virStorageFilePtr file = NULL;
|
||||
|
||||
@ -2766,7 +2766,7 @@ virStorageFileInitInternal(int type,
|
||||
if (VIR_STRDUP(file->path, path) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(file->hosts = virDomainDiskHostDefCopy(nhosts, hosts)))
|
||||
if (!(file->hosts = virStorageNetHostDefCopy(nhosts, hosts)))
|
||||
goto error;
|
||||
|
||||
if (!(file->backend = virStorageFileBackendForType(file->type,
|
||||
@ -2781,7 +2781,7 @@ virStorageFileInitInternal(int type,
|
||||
|
||||
error:
|
||||
VIR_FREE(file->path);
|
||||
virDomainDiskHostDefFree(file->nhosts, file->hosts);
|
||||
virStorageNetHostDefFree(file->nhosts, file->hosts);
|
||||
VIR_FREE(file);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ struct _virStorageFile {
|
||||
int protocol;
|
||||
|
||||
size_t nhosts;
|
||||
virDomainDiskHostDefPtr hosts;
|
||||
virStorageNetHostDefPtr hosts;
|
||||
};
|
||||
|
||||
virStorageFilePtr
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* virstoragefile.c: file utility functions for FS storage backend
|
||||
*
|
||||
* Copyright (C) 2007-2013 Red Hat, Inc.
|
||||
* Copyright (C) 2007-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2007-2008 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -66,6 +66,13 @@ VIR_ENUM_IMPL(virStorageFileFeature,
|
||||
"lazy_refcounts",
|
||||
)
|
||||
|
||||
|
||||
VIR_ENUM_IMPL(virStorageNetHostTransport, VIR_STORAGE_NET_HOST_TRANS_LAST,
|
||||
"tcp",
|
||||
"unix",
|
||||
"rdma")
|
||||
|
||||
|
||||
enum lv_endian {
|
||||
LV_LITTLE_ENDIAN = 1, /* 1234 */
|
||||
LV_BIG_ENDIAN /* 4321 */
|
||||
@ -1556,3 +1563,65 @@ virStorageFileChainLookup(virStorageFileMetadataPtr chain, const char *start,
|
||||
*meta = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
virStorageNetHostDefClear(virStorageNetHostDefPtr def)
|
||||
{
|
||||
if (!def)
|
||||
return;
|
||||
|
||||
VIR_FREE(def->name);
|
||||
VIR_FREE(def->port);
|
||||
VIR_FREE(def->socket);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
virStorageNetHostDefFree(size_t nhosts,
|
||||
virStorageNetHostDefPtr hosts)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (!hosts)
|
||||
return;
|
||||
|
||||
for (i = 0; i < nhosts; i++)
|
||||
virStorageNetHostDefClear(&hosts[i]);
|
||||
|
||||
VIR_FREE(hosts);
|
||||
}
|
||||
|
||||
|
||||
virStorageNetHostDefPtr
|
||||
virStorageNetHostDefCopy(size_t nhosts,
|
||||
virStorageNetHostDefPtr hosts)
|
||||
{
|
||||
virStorageNetHostDefPtr ret = NULL;
|
||||
size_t i;
|
||||
|
||||
if (VIR_ALLOC_N(ret, nhosts) < 0)
|
||||
goto error;
|
||||
|
||||
for (i = 0; i < nhosts; i++) {
|
||||
virStorageNetHostDefPtr src = &hosts[i];
|
||||
virStorageNetHostDefPtr dst = &ret[i];
|
||||
|
||||
dst->transport = src->transport;
|
||||
|
||||
if (VIR_STRDUP(dst->name, src->name) < 0)
|
||||
goto error;
|
||||
|
||||
if (VIR_STRDUP(dst->port, src->port) < 0)
|
||||
goto error;
|
||||
|
||||
if (VIR_STRDUP(dst->socket, src->socket) < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
error:
|
||||
virStorageNetHostDefFree(nhosts, ret);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* virstoragefile.h: file utility functions for FS storage backend
|
||||
*
|
||||
* Copyright (C) 2007-2009, 2012-2013 Red Hat, Inc.
|
||||
* Copyright (C) 2007-2009, 2012-2014 Red Hat, Inc.
|
||||
* Copyright (C) 2007-2008 Daniel P. Berrange
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -83,6 +83,28 @@ struct _virStorageFileMetadata {
|
||||
char *compat;
|
||||
};
|
||||
|
||||
|
||||
/* Information related to network storage */
|
||||
enum virStorageNetHostTransport {
|
||||
VIR_STORAGE_NET_HOST_TRANS_TCP,
|
||||
VIR_STORAGE_NET_HOST_TRANS_UNIX,
|
||||
VIR_STORAGE_NET_HOST_TRANS_RDMA,
|
||||
|
||||
VIR_STORAGE_NET_HOST_TRANS_LAST
|
||||
};
|
||||
|
||||
VIR_ENUM_DECL(virStorageNetHostTransport)
|
||||
|
||||
typedef struct _virStorageNetHostDef virStorageNetHostDef;
|
||||
typedef virStorageNetHostDef *virStorageNetHostDefPtr;
|
||||
struct _virStorageNetHostDef {
|
||||
char *name;
|
||||
char *port;
|
||||
int transport; /* enum virStorageNetHostTransport */
|
||||
char *socket; /* path to unix socket */
|
||||
};
|
||||
|
||||
|
||||
# ifndef DEV_BSIZE
|
||||
# define DEV_BSIZE 512
|
||||
# endif
|
||||
@ -138,4 +160,10 @@ int virStorageFileGetLVMKey(const char *path,
|
||||
int virStorageFileGetSCSIKey(const char *path,
|
||||
char **key);
|
||||
|
||||
void virStorageNetHostDefClear(virStorageNetHostDefPtr def);
|
||||
void virStorageNetHostDefFree(size_t nhosts, virStorageNetHostDefPtr hosts);
|
||||
virStorageNetHostDefPtr virStorageNetHostDefCopy(size_t nhosts,
|
||||
virStorageNetHostDefPtr hosts);
|
||||
|
||||
|
||||
#endif /* __VIR_STORAGE_FILE_H__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user