[libvirt] [PATCH 06/13] qemu: support URI syntax for NBD

Osier Yang jyang at redhat.com
Mon Mar 11 10:09:24 UTC 2013


On 2013年02月26日 01:44, Paolo Bonzini wrote:
> QEMU 1.3 and newer support an alternative URI-based syntax to specify
> the location of an NBD server.  Libvirt can keep on using the old
> syntax in general, but only the URI syntax supports IPv6 addresses.
>
> The URI syntax also supports relative paths to Unix sockets.  These
> should never be used but aren't explicitly blocked either by the parser,
> so support it just in case.
>
> The URI syntax is intentionally compatible with Gluster's, and the
> code can be reused.
>
> Signed-off-by: Paolo Bonzini<pbonzini at redhat.com>
> ---
>   src/qemu/qemu_command.c                            | 97 +++++++++++++++-------
>   tests/qemuargv2xmltest.c                           |  2 +
>   ...ml2argv-disk-drive-network-nbd-ipv6-export.args |  5 ++
>   ...xml2argv-disk-drive-network-nbd-ipv6-export.xml | 33 ++++++++
>   .../qemuxml2argv-disk-drive-network-nbd-ipv6.args  |  5 ++
>   .../qemuxml2argv-disk-drive-network-nbd-ipv6.xml   | 33 ++++++++
>   tests/qemuxml2argvtest.c                           |  4 +
>   tests/qemuxml2xmltest.c                            |  2 +
>   8 files changed, 153 insertions(+), 28 deletions(-)
>   create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6-export.args
>   create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6-export.xml
>   create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6.args
>   create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-drive-network-nbd-ipv6.xml
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 89cd065..733d3bf 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -2050,35 +2050,36 @@ no_memory:
>   }
>
>   static int
> -qemuParseGlusterString(virDomainDiskDefPtr def)
> +qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
> +                        const char *scheme)
>   {
>       int ret = -1;
>       char *transp = NULL;
>       char *sock = NULL;
>       char *volimg = NULL;
> -    virURIPtr uri = NULL;
> -
> -    if (!(uri = virURIParse(def->src))) {
> -        return -1;
> -    }
>
>       if (VIR_ALLOC(def->hosts)<  0)
>           goto no_memory;
>
> -    if (STREQ(uri->scheme, "gluster")) {
> +    transp = strchr(uri->scheme, '+');
> +    if (transp)
> +        *transp++ = 0;
> +
> +    if (!STREQ(uri->scheme, scheme)) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR,
> +                       _("Invalid transport/scheme '%s'"), uri->scheme);
> +        goto error;
> +    }

How about uri->scheme is "gluster", and scheme is "nbd"? The error
doesn't reflect the truth then.

Except this and the coding style, all looks good.

Osier




More information about the libvir-list mailing list