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(a)redhat.com>
---
src/conf/domain_conf.c | 88 +++++------------------------------
src/conf/domain_conf.h | 28 ++---------
src/conf/snapshot_conf.c | 5 +-
src/conf/snapshot_conf.h | 4 +-
src/libvirt_private.syms | 10 ++--
src/qemu/qemu_command.c | 38 +++++++--------
src/qemu/qemu_command.h | 6 +--
src/qemu/qemu_conf.c | 4 +-
src/qemu/qemu_driver.c | 24 +++++-----
src/storage/storage_backend_gluster.c | 8 ++--
src/storage/storage_driver.c | 8 ++--
src/storage/storage_driver.h | 2 +-
src/util/virstoragefile.c | 71 +++++++++++++++++++++++++++-
src/util/virstoragefile.h | 30 +++++++++++-
14 files changed, 167 insertions(+), 159 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 66eeaa9..159a9c3 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -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);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index a249208..cbf2dca 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -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)
diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
index ccce46c..9f4ea7f 100644
--- a/src/conf/snapshot_conf.c
+++ b/src/conf/snapshot_conf.c
@@ -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)
diff --git a/src/conf/snapshot_conf.h b/src/conf/snapshot_conf.h
index 59c6d92..fc73438 100644
--- a/src/conf/snapshot_conf.h
+++ b/src/conf/snapshot_conf.h
@@ -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 */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 74b8a7e..64c63ff 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -203,17 +203,12 @@ virDomainDiskGetDriver;
virDomainDiskGetFormat;
virDomainDiskGetSource;
virDomainDiskGetType;
-virDomainDiskHostDefClear;
-virDomainDiskHostDefCopy;
-virDomainDiskHostDefFree;
virDomainDiskIndexByName;
virDomainDiskInsert;
virDomainDiskInsertPreAlloced;
virDomainDiskIoTypeFromString;
virDomainDiskIoTypeToString;
virDomainDiskPathByName;
-virDomainDiskProtocolTransportTypeFromString;
-virDomainDiskProtocolTransportTypeToString;
virDomainDiskProtocolTypeToString;
virDomainDiskRemove;
virDomainDiskRemoveByName;
@@ -1841,6 +1836,11 @@ virStorageFileIsSharedFSType;
virStorageFileProbeFormat;
virStorageFileProbeFormatFromBuf;
virStorageFileResize;
+virStorageNetHostDefClear;
+virStorageNetHostDefCopy;
+virStorageNetHostDefFree;
+virStorageNetHostTransportTypeFromString;
+virStorageNetHostTransportTypeToString;
# util/virstring.h
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9a314bf..c43a0f7 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -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++;
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index 50dc4a0..ea3ff8b 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -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);
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index dc9b3ae..78ab02a 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -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) {
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index b032441..60dbb7f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -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);
}
diff --git a/src/storage/storage_backend_gluster.c
b/src/storage/storage_backend_gluster.c
index 9a6180e..84c5fe2 100644
--- a/src/storage/storage_backend_gluster.c
+++ b/src/storage/storage_backend_gluster.c
@@ -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
@@ -509,7 +509,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;
@@ -540,7 +540,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;
@@ -550,7 +550,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'"),
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 70a122d..cdb8536 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -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;
}
diff --git a/src/storage/storage_driver.h b/src/storage/storage_driver.h
index 993bba5..886a4d5 100644
--- a/src/storage/storage_driver.h
+++ b/src/storage/storage_driver.h
@@ -42,7 +42,7 @@ struct _virStorageFile {
int protocol;
size_t nhosts;
- virDomainDiskHostDefPtr hosts;
+ virStorageNetHostDefPtr hosts;
};
virStorageFilePtr
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index c7384d1..320473d 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -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;
+}
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index 7bd2fe0..7b8a7f7 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -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__ */
--
1.8.5.3