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

Jim Fehlig jfehlig at suse.com
Fri Mar 16 15:05:34 UTC 2012


Chunyan Liu wrote:
>
> 2012/3/15 Jim Fehlig <jfehlig at suse.com <mailto:jfehlig at suse.com>>
>
>
>     > +    /* Create socket connection to receive migration data */
>     > +    if (!uri_in) {
>     > +        hostname = virGetHostname(dconn);
>     > +        if (hostname == NULL)
>     > +            goto cleanup;
>     > +
>     > +        port = libxlFindFreeMigPort(driver,
>     LIBXL_MIGRATION_MIN_PORT);
>     >
>
>     I think you should reserve the port in libxlFindFreeMigPort(), similar
>     to libxlNextFreeVncPort().  In fact, you could probably generalize
>     libxlNextFreeVncPort(), e.g. libxlNextFreePort(virBitmapPtr
>     bitmap, int
>     start_port, int stop_port) and use it to find available VNC and
>     migration ports.
>
>
> There is some difference to handle Migration ports and VNC ports:
> VNC port always find a free port from VNC ports range and use it, but
> migration port could be pointed by user or if not pointed find a free
> port to use it. There are two places need to set bitmap maybe:
> 1. The port pointed by user could be a port in default migration ports
> range, we should set bitmap so that next time finding free port could
> avoid that port.

If the user is specifying the port, we should just use it and be done. 
That is how the VNC port is handled too.  If user has specified a vnc
port, then we just use it.  Otherwise, call libxlNextFreeVncPort to find
a free one.

> 2. No port pointed by user, then find a free migration port from
> default migration ports range, and set bitmap.
> Besides, with port pointed, we need to create socket and bind to the
> port too. libxlFindFreeVNCPort creates socket and binds port and set
> bitmap in the function, if FindFreeMigPort also does that, then to
> user pointed port, we need to do same work again.

libxlFindFreeVNCPort only binds to the port to see if it is in use.  If
not in use, it closes the socket, sets the corresponding bit in the
bitmap, and returns the port.  Caller then knows the port is free and
available for use, e.g. binding, listening, connecting, or whatever it
pleases to do with the port.

IMO, we could have

static int libxlNextFreePort(virtBitmapPtr bitmap, int startPort, int
numPorts)

which is functionally equivalent to libxlNextFreeVncPort(), but examines
startPort through startPort+numPorts.

Thanks,
Jim




More information about the libvir-list mailing list