On 31.08.2015 05:13, Lin Ma wrote: > Format & Output more detailed information about networked source > > e.g: The output without the patch: > $ virsh domblklist $DOMAIN --details > Type Device Target Source > ------------------------------------------------ > network disk vda test-pool/image > network disk vdb iqn.2015-08.org.example:sn01/0 > network disk vdc /image.raw > network disk vdd - > network disk vde - > network disk vdf image1 > network disk vdg test-volume/image.raw > > The output with the patch: > $ virsh domblklist $DOMAIN --details > Type Device Target Source > ------------------------------------------------ > network disk vda rbd://monitor1.example.org:6321/test-pool/image > network disk vdb iscsi://192.168.124.200:3260/iqn.2015-08.org.example:sn01/0 > network disk vdc http://192.168.124.200:80/image.raw > network disk vdd nbd+unix:///var/run/nbdsock > network disk vde nbd://192.168.124.200:12345 > network disk vdf sheepdog://192.168.124.200:6000/image1 > network disk vdg gluster://192.168.124.200/test-volume/image.raw > > Signed-off-by: Lin Ma <lma@xxxxxxxx> > --- > tools/virsh-domain-monitor.c | 60 ++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 55 insertions(+), 5 deletions(-) > > diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c > index 340a8e2..9188b42 100644 > --- a/tools/virsh-domain-monitor.c > +++ b/tools/virsh-domain-monitor.c > @@ -518,6 +518,12 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) > for (i = 0; i < ndisks; i++) { > char *type = NULL; > char *device = NULL; > + char *protocol = NULL; > + char *transport = NULL; > + char *host_name = NULL; > + char *host_port = NULL; > + char *socket = NULL; > + char *name = NULL; > char *target; > char *source; > > @@ -541,11 +547,55 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd) > VIR_FREE(device); > goto cleanup; > } > - source = virXPathString("string(./source/@file" > - "|./source/@dev" > - "|./source/@dir" > - "|./source/@name" > - "|./source/@volume)", ctxt); > + if (type && STREQ(type, "network")) { > + protocol = virXPathString("string(./source/@protocol)", ctxt); > + name = virXPathString("string(./source/@name)", ctxt); > + transport = virXPathString("string(./source/host/@transport)", ctxt); > + socket = virXPathString("string(./source/host/@socket)", ctxt); > + host_name = virXPathString("string(./source/host/@name)", ctxt); > + host_port = virXPathString("string(./source/host/@port)", ctxt); > + if (VIR_STRDUP(source, protocol) < 0) > + goto cleanup; > + VIR_FREE(protocol); > + if(transport) { > + if(virAsprintf(&source, "%s+%s", source, transport) < 0) This will leak the original @source. I think we need to use virBuffer for this ... > + goto cleanup; Moreover, if one of these virAsprintf()-s fails, the rest of strings is leaked. > + VIR_FREE(transport); > + } > + if(virAsprintf(&source, "%s://", source) < 0) > + goto cleanup; > + if(host_name) { > + if(virAsprintf(&source, "%s%s", source, host_name) < 0) > + goto cleanup; > + VIR_FREE(host_name); > + if(host_port) { > + if(virAsprintf(&source, "%s:%s", source, host_port) < 0) > + goto cleanup; > + VIR_FREE(host_port); > + } > + } > + if(name) { > + if(!STRPREFIX(name, "/")) > + if(virAsprintf(&source, "%s/", source) < 0) > + goto cleanup; > + if(virAsprintf(&source, "%s%s", source, name) < 0) > + goto cleanup; > + VIR_FREE(name); > + } else if(socket) { > + if(!STRPREFIX(socket, "/")) > + if(virAsprintf(&source, "%s/", source) < 0) > + goto cleanup; > + if(virAsprintf(&source, "%s%s", source, socket) < 0) > + goto cleanup; > + VIR_FREE(socket); > + } > + } else { > + source = virXPathString("string(./source/@file" > + "|./source/@dev" > + "|./source/@dir" > + "|./source/@name" > + "|./source/@volume)", ctxt); > + } > if (details) { > vshPrint(ctl, "%-10s %-10s %-10s %s\n", type, device, > target, source ? source : "-"); > Let me respin the patches: https://www.redhat.com/archives/libvir-list/2015-September/msg00053.html Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list