]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: block: Use proper type for servers for VxHS disks
authorPeter Krempa <pkrempa@redhat.com>
Mon, 23 Oct 2017 16:02:28 +0000 (18:02 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 7 Nov 2017 13:43:12 +0000 (14:43 +0100)
Original implementation used 'SocketAddress' equivalent from qemu for
the disk server field, while qemu documentation specifies
'InetSocketAddress'. The backing store parser uses the correct parsing
function but the formatter used the incorrect one (and also with the
legacy mode enabled which was wrong).

src/qemu/qemu_block.c
tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-tlsx509-vxhs.args
tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-vxhs.args
tests/virstoragetest.c

index 0761f89913e3ca3d89df52f0c78e839617b837ae..96db1922690d000953555cbf40e4660b5663f2cd 100644 (file)
@@ -501,6 +501,40 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src,
 }
 
 
+/**
+ * qemuBlockStorageSourceBuildJSONInetSocketAddress
+ * @host: the virStorageNetHostDefPtr definition to build
+ *
+ * Formats @hosts into a json object conforming to the 'InetSocketAddress' type
+ * in qemu.
+ *
+ * Returns a virJSONValuePtr for a single server.
+ */
+static virJSONValuePtr
+qemuBlockStorageSourceBuildJSONInetSocketAddress(virStorageNetHostDefPtr host)
+{
+    virJSONValuePtr ret = NULL;
+    char *port = NULL;
+
+    if (host->transport != VIR_STORAGE_NET_HOST_TRANS_TCP) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("only TCP protocol can be converted to InetSocketAddress"));
+        return NULL;
+    }
+
+    if (virAsprintf(&port, "%u", host->port) < 0)
+        return NULL;
+
+    ignore_value(virJSONValueObjectCreate(&ret,
+                                          "s:host", host->name,
+                                          "s:port", port,
+                                          NULL));
+
+    VIR_FREE(port);
+    return ret;
+}
+
+
 static virJSONValuePtr
 qemuBlockStorageSourceGetGlusterProps(virStorageSourcePtr src)
 {
@@ -540,7 +574,7 @@ qemuBlockStorageSourceGetVxHSProps(virStorageSourcePtr src)
         return NULL;
     }
 
-    if (!(server = qemuBlockStorageSourceBuildJSONSocketAddress(src->hosts, true)))
+    if (!(server = qemuBlockStorageSourceBuildJSONInetSocketAddress(&src->hosts[0])))
         return NULL;
 
     /* VxHS disk specification example:
index a752724546e5dfdb2685e39fd5d2de38eff27be0..eaa8699a93c4aa61178150e56820b80fe83ae55b 100644 (file)
@@ -23,7 +23,7 @@ server,nowait \
 -object tls-creds-x509,id=objvirtio-disk0_tls0,dir=/etc/pki/libvirt-vxhs,\
 endpoint=client,verify-peer=yes \
 -drive file.driver=vxhs,file.tls-creds=objvirtio-disk0_tls0,\
-file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc251,file.server.type=tcp,\
+file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc251,\
 file.server.host=192.168.0.1,file.server.port=9999,format=raw,if=none,\
 id=drive-virtio-disk0,cache=none \
 -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
@@ -31,13 +31,13 @@ id=virtio-disk0 \
 -object tls-creds-x509,id=objvirtio-disk1_tls0,dir=/etc/pki/libvirt-vxhs,\
 endpoint=client,verify-peer=yes \
 -drive file.driver=vxhs,file.tls-creds=objvirtio-disk1_tls0,\
-file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc252,file.server.type=tcp,\
+file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc252,\
 file.server.host=192.168.0.2,file.server.port=9999,format=raw,if=none,\
 id=drive-virtio-disk1,cache=none \
 -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,\
 id=virtio-disk1 \
 -drive file.driver=vxhs,file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc253,\
-file.server.type=tcp,file.server.host=192.168.0.3,file.server.port=9999,\
-format=raw,if=none,id=drive-virtio-disk2,cache=none \
+file.server.host=192.168.0.3,file.server.port=9999,format=raw,if=none,\
+id=drive-virtio-disk2,cache=none \
 -device virtio-blk-pci,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,\
 id=virtio-disk2
index b62ace3de1d724e5ca08cb19436830a7133743a3..1747dc80fa419935610c6551e1c6f831196b65a2 100644 (file)
@@ -21,7 +21,7 @@ server,nowait \
 -boot c \
 -usb \
 -drive file.driver=vxhs,file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc251,\
-file.server.type=tcp,file.server.host=192.168.0.1,file.server.port=9999,\
-format=raw,if=none,id=drive-virtio-disk0,cache=none \
+file.server.host=192.168.0.1,file.server.port=9999,format=raw,if=none,\
+id=drive-virtio-disk0,cache=none \
 -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
 id=virtio-disk0
index cfcd8a79c13b18bb15a0b87324be425ee225e715..8a5ff078cf41ee10d645ec7baa0d2bdc5f04d551 100644 (file)
@@ -1601,8 +1601,7 @@ mymain(void)
                        "</source>\n");
     TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"vxhs\","
                                        "\"vdisk-id\":\"c6718f6b-0401-441d-a8c3-1f0064d75ee0\","
-                                       "\"server\": { \"type\":\"tcp\","
-                                                      "\"host\":\"example.com\","
+                                       "\"server\": {  \"host\":\"example.com\","
                                                       "\"port\":\"9999\""
                                                    "}"
                                       "}"