diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 570cc5c931..b87fc869a6 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7846,6 +7846,9 @@ virDomainDiskSourceParse(xmlNodePtr node, if (virDomainStorageHostParse(node, &src->hosts, &src->nhosts) < 0) goto cleanup; + + if (virStorageSourceNetworkAssignDefaultPorts(src) < 0) + goto cleanup; break; case VIR_STORAGE_TYPE_VOLUME: if (virDomainDiskSourcePoolDefParse(node, &src->srcpool) < 0) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3198aef2c0..440a563166 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2617,7 +2617,7 @@ virStorageSourceIsBlockLocal; virStorageSourceIsEmpty; virStorageSourceIsLocalStorage; virStorageSourceIsRelative; -virStorageSourceNetworkDefaultPort; +virStorageSourceNetworkAssignDefaultPorts; virStorageSourceNewFromBacking; virStorageSourceNewFromBackingAbsolute; virStorageSourceParseRBDColonString; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 880b014ac6..702d267a12 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -477,15 +477,10 @@ qemuSafeSerialParamValue(const char *value) static int -qemuNetworkDriveGetPort(int protocol, - const char *port) +qemuNetworkDriveGetPort(const char *port) { int ret = 0; - if (!port && - !(port = virStorageSourceNetworkDefaultPort(protocol))) - return -1; - if (virStrToLong_i(port, NULL, 10, &ret) < 0 || ret < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("failed to parse port number '%s'"), @@ -912,8 +907,7 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src, goto cleanup; if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) { - if ((uri->port = qemuNetworkDriveGetPort(src->protocol, - src->hosts->port)) < 0) + if ((uri->port = qemuNetworkDriveGetPort(src->hosts->port)) < 0) goto cleanup; if (VIR_STRDUP(uri->scheme, diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 2d310afd99..2d0ff78120 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -3961,7 +3961,7 @@ virStorageSourceFindByNodeName(virStorageSourcePtr top, } -const char * +static const char * virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol) { switch (protocol) { @@ -4006,3 +4006,21 @@ virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol) return NULL; } + + +int +virStorageSourceNetworkAssignDefaultPorts(virStorageSourcePtr src) +{ + size_t i; + + for (i = 0; i < src->nhosts; i++) { + if (src->hosts[i].transport == VIR_STORAGE_NET_HOST_TRANS_TCP && + src->hosts[i].port == NULL) { + if (VIR_STRDUP(src->hosts[i].port, + virStorageSourceNetworkDefaultPort(src->protocol)) < 0) + return -1; + } + } + + return 0; +} diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h index 877c3af4dd..98992e04ad 100644 --- a/src/util/virstoragefile.h +++ b/src/util/virstoragefile.h @@ -406,7 +406,8 @@ virStorageSourceFindByNodeName(virStorageSourcePtr top, unsigned int *index) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -const char * -virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol); +int +virStorageSourceNetworkAssignDefaultPorts(virStorageSourcePtr src) + ATTRIBUTE_NONNULL(1); #endif /* __VIR_STORAGE_FILE_H__ */ diff --git a/tests/genericxml2xmlindata/generic-disk-network-http.xml b/tests/genericxml2xmlindata/generic-disk-network-http.xml index 51c779502c..ec4520c7b2 100644 --- a/tests/genericxml2xmlindata/generic-disk-network-http.xml +++ b/tests/genericxml2xmlindata/generic-disk-network-http.xml @@ -17,14 +17,14 @@ - + - + diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml index 66a84750a6..2c7c46b013 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-disk-drive-network-gluster.xml @@ -34,7 +34,7 @@ - +