[libvirt] [PATCH 1/8] Introduce the virDomainOpenGraphics API

Daniel P. Berrange berrange at redhat.com
Tue Oct 25 12:23:19 UTC 2011


On Mon, Oct 24, 2011 at 02:56:36PM -0600, Eric Blake wrote:
> On 10/21/2011 06:55 AM, Daniel P. Berrange wrote:
> >From: "Daniel P. Berrange"<berrange at redhat.com>
> >
> >The virDomainOpenGraphics API allows a libvirt client to pass in
> >a file descriptor for an open socket pair, and get it connected
> >to the graphics display of the guest. This is limited to working
> >with local libvirt hypervisors conencted over a UNIX domain
> 
> s/conencted/connected/
> 
> >socket, since it will use UNIX FD passing
> >
> >* include/libvirt/libvirt.h.in: Define virDomainOpenGraphics
> >* src/driver.h: Define driver for virDomainOpenGraphics
> >* src/libvirt_public.syms, src/libvirt.c: Entry point for
> >   virDomainOpenGraphics
> >---
> >  include/libvirt/libvirt.h.in |    9 ++++++
> >  src/driver.h                 |    6 ++++
> >  src/libvirt.c                |   66 ++++++++++++++++++++++++++++++++++++++++++
> >  src/libvirt_public.syms      |    1 +
> >  4 files changed, 82 insertions(+), 0 deletions(-)
> >
> >+++ b/src/libvirt.c
> >@@ -16975,3 +16975,69 @@ error:
> >      virDispatchError(dom->conn);
> >      return -1;
> >  }
> >+
> >+
> >+/**
> >+ * virDomainOpenGraphics:
> >+ * @dom: pointer to domain object
> >+ * @fd: file descriptor to attach graphics to
> >+ * @idx: index of graphics config to open
> 
> Swap these two lines to match parameter order.
> 
> >+ * @flags: flags to control open operation
> >+ *
> >+ * This will attempt to connect the file descriptor @fd, to
> >+ * the graphics backend of @dom. If @dom has multiple graphics
> >+ * backends configured, then @idx will determine which one is
> >+ * opened, starting from @idx 0.
> >+ *
> >+ * To disable any authentication, pass the VIR_DOMAIN_OPEN_GRAPHICS_SKIPAUTH
> >+ * constant for @flags.
> >+ *
> >+ * The caller should use an anonymous socketpair to open
> >+ * @fd before invocation.
> >+ *
> >+ * This method can only be used when connected to a local
> >+ * libvirt hypervisor, over a UNIX domain socket. Attempts
> >+ * to use this method over a TCP connection will always fail
> >+ *
> >+ * Returns 0 on success, -1 on failure
> >+ */
> >+int virDomainOpenGraphics(virDomainPtr dom,
> >+                          unsigned int idx,
> >+                          int fd,
> >+                          unsigned int flags)
> >+{
> >+    VIR_DOMAIN_DEBUG(dom, "idx=%u, fd=%d, flags=%x",
> >+                     idx, fd, flags);
> >+
> >+    virResetLastError();
> >+
> >+    if (!VIR_IS_DOMAIN(dom)) {
> >+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
> >+        virDispatchError(NULL);
> >+        return -1;
> >+    }
> >+
> >+    if (fd<  0) {
> >+        virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> >+        goto error;
> >+    }
> 
> Should we also fstat() and validate that fd is a socket fd?

Ok, I guess we can.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list