[libvirt] [PATCH] Add migration APIs for libxl driver

Chunyan Liu cyliu at suse.com
Tue Mar 27 03:10:32 UTC 2012


2012/3/19 Daniel P. Berrange <berrange at redhat.com>

> On Fri, Mar 09, 2012 at 06:55:55PM +0800, Chunyan Liu wrote:
> > diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> > index d5fa64a..5dc29a0 100644
> > --- a/src/libxl/libxl_driver.c
> > +++ b/src/libxl/libxl_driver.c
> > +static int doParseURI(const char *uri, char **p_hostname, int *p_port)
> > +{
> > +    char *p, *hostname;
> > +    int port_nr = 0;
> > +
> > +    if (uri == NULL)
> > +        return -1;
> > +
> > +    /* URI passed is a string "hostname[:port]" */
> > +    if ((p = strrchr(uri, ':')) != NULL) { /* "hostname:port" */
> > +        int n;
> > +
> > +        if (virStrToLong_i(p+1, NULL, 10, &port_nr) < 0) {
> > +            libxlError(VIR_ERR_INVALID_ARG,
> > +                        _("Invalid port number"));
> > +            return -1;
> > +        }
> > +
> > +        /* Get the hostname. */
> > +        n = p - uri; /* n = Length of hostname in bytes. */
> > +        if (n <= 0) {
> > +            libxlError(VIR_ERR_INVALID_ARG,
> > +                       _("Hostname must be specified in the URI"));
> > +            return -1;
> > +        }
> > +
> > +        if (virAsprintf(&hostname, "%s", uri) < 0) {
> > +            virReportOOMError();
> > +            return -1;
> > +        }
> > +
> > +        hostname[n] = '\0';
> > +    }
> > +    else {/* "hostname" (or IP address) */
> > +        if (virAsprintf(&hostname, "%s", uri) < 0) {
> > +            virReportOOMError();
> > +            return -1;
> > +        }
> > +    }
> > +    *p_hostname = hostname;
> > +    *p_port = port_nr;
> > +    return 0;
> > +}
>
> Lets not re-invent URI parsing code with wierd special cases for
> base hostnames. Please just use virURIParse, since there is no
> compatibility issue here.
>

virURIParse can only parse full URI format like xenmigr://destIP:port,
cannot handle simple URI like destIP:port correctly. Both xen_driver and
qemu_driver have extra code like in doParseURI to handle the simple URI
case.
For libxl driver, currently use syntax: virsh migrate domU xen+ssh://destIP
destIP[:port], so to parse hostname and port, need extra code to handle
that but not virURIParse. And since there are several places that need to
parse "port", so I extract the code to function doParseURI.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120327/493ed135/attachment-0001.htm>


More information about the libvir-list mailing list