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@xxxxxxxxxx> --- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list