[libvirt] [PATCH 02/11] Introduce a virDomainOpenConsole API

Daniel Veillard veillard at redhat.com
Wed Nov 3 11:01:59 UTC 2010


On Tue, Nov 02, 2010 at 05:49:06PM +0000, Daniel P. Berrange wrote:
> To enable virsh console (or equivalent) to be used remotely
> it is necessary to provide remote access to the /dev/pts/XXX
> pseudo-TTY associated with the console/serial/parallel device
> in the guest. The virStream API provide a bi-directional I/O
> stream capability that can be used for this purpose. This
> patch thus introduces a virDomainOpenConsole API that uses
> the stream APIs.
> 
> * src/libvirt.c, src/libvirt_public.syms,
>   include/libvirt/libvirt.h.in, src/driver.h: Define the
>   new virDomainOpenConsole API
> * src/esx/esx_driver.c, src/lxc/lxc_driver.c,
>   src/opennebula/one_driver.c, src/openvz/openvz_driver.c,
>   src/phyp/phyp_driver.c, src/qemu/qemu_driver.c,
>   src/remote/remote_driver.c, src/test/test_driver.c,
>   src/uml/uml_driver.c, src/vbox/vbox_tmpl.c,
>   src/xen/xen_driver.c, src/xenapi/xenapi_driver.c: Stub
>   API entry point
> ---
>  include/libvirt/libvirt.h.in |    6 ++++
>  src/driver.h                 |    6 ++++
>  src/esx/esx_driver.c         |    1 +
>  src/libvirt.c                |   53 ++++++++++++++++++++++++++++++++++++++++++
>  src/libvirt_public.syms      |    5 ++++
>  src/lxc/lxc_driver.c         |    1 +
>  src/opennebula/one_driver.c  |    1 +
>  src/openvz/openvz_driver.c   |    1 +
>  src/phyp/phyp_driver.c       |    1 +
>  src/qemu/qemu_driver.c       |    1 +
>  src/remote/remote_driver.c   |    1 +
>  src/test/test_driver.c       |    1 +
>  src/uml/uml_driver.c         |    1 +
>  src/vbox/vbox_tmpl.c         |    1 +
>  src/xen/xen_driver.c         |    1 +
>  src/xenapi/xenapi_driver.c   |    1 +
>  16 files changed, 82 insertions(+), 0 deletions(-)
> 
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index 81db3a2..cc82e5c 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -2400,6 +2400,12 @@ int                     virNWFilterGetUUIDString (virNWFilterPtr nwfilter,
>  char *                  virNWFilterGetXMLDesc    (virNWFilterPtr nwfilter,
>                                                    int flags);
>  
> +
> +int virDomainOpenConsole(virDomainPtr dom,
> +                         const char *devname,
> +                         virStreamPtr st,
> +                         unsigned int flags);
> +

  Okay, looks fine !


> +/**
> + * virDomainOpenConsole:
> + * @domain: a domain object

  should be @dom: to get API extraction right

> + * @devname: the console, serial or parallel port device alias, or NULL
> + * @st: a stream to associate with the console
> + * @flags: unused, pass 0
> + *
> + * This opens the backend associated with a console, serial or
> + * parallel port device on a guest, if the backend is supported.
> + * If the @devname is omitted, then the first console or serial
> + * device is opened. The console is associated with the passed
> + * in @st stream, which should have been opened in non-blocking
> + * mode for bi-directional I/O.
> + *
> + * returns 0 if the console was opened, -1 on error
> + */
> +int virDomainOpenConsole(virDomainPtr dom,
> +                         const char *devname,
> +                         virStreamPtr st,
> +                         unsigned int flags)
> +{
> +    virConnectPtr conn;
> +    DEBUG("dom=%p devname=%s, st=%p flags=%u", dom, NULLSTR(devname), st, flags);
> +
> +    virResetLastError();
> +
> +    if (!VIR_IS_DOMAIN(dom)) {
> +        virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
> +        virDispatchError(NULL);
> +        return -1;
> +    }
> +
> +    conn = dom->conn;
> +    if (conn->flags & VIR_CONNECT_RO) {
> +        virLibDomainError(dom, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
> +        goto error;
> +    }
> +
> +    if (conn->driver->domainOpenConsole) {
> +        int ret;
> +        ret = conn->driver->domainOpenConsole(dom, devname, st, flags);
> +        if (ret < 0)
> +            goto error;
> +        return ret;
> +    }
> +
> +    virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
> +
> +error:
> +    virDispatchError(conn);
> +    return -1;
> +}
> diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
> index a8091b1..4ef4c5a 100644
> --- a/src/libvirt_public.syms
> +++ b/src/libvirt_public.syms
> @@ -413,4 +413,9 @@ LIBVIRT_0.8.5 {
>          virDomainSetVcpusFlags;
>  } LIBVIRT_0.8.2;
>  
> +LIBVIRT_0.8.6 {
> +    global:
> +        virDomainOpenConsole;
> +} LIBVIRT_0.8.5;
> +

  ACK, but just fix that minor comment first

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list