]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce virDomainOpenGraphicsFD API
authorJán Tomko <jtomko@redhat.com>
Mon, 25 Aug 2014 15:28:14 +0000 (17:28 +0200)
committerJán Tomko <jtomko@redhat.com>
Tue, 26 Aug 2014 16:55:30 +0000 (18:55 +0200)
Define the public API implementation and declare internal
driver prototype.

include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_public.syms

index 47ea695615d3c5de2cdbcc97403ee89ae5b91428..153b386f91942fab5b216de316bc748b4236a092 100644 (file)
@@ -5321,6 +5321,11 @@ int virDomainOpenGraphics(virDomainPtr dom,
                           int fd,
                           unsigned int flags);
 
+int virDomainOpenGraphicsFD(virDomainPtr dom,
+                            unsigned int idx,
+                            int *fd,
+                            unsigned int flags);
+
 int virDomainInjectNMI(virDomainPtr domain, unsigned int flags);
 
 int virDomainFSTrim(virDomainPtr dom,
index ba7c1fc7a438e2048124ac37baa29d8fa9d2a08c..39bf219ce5651dc434407300ef93bf934203a5ab 100644 (file)
@@ -887,6 +887,12 @@ typedef int
                             int fd,
                             unsigned int flags);
 
+typedef int
+(*virDrvDomainOpenGraphicsFD)(virDomainPtr dom,
+                              unsigned int idx,
+                              int *fd,
+                              unsigned int flags);
+
 typedef int
 (*virDrvDomainInjectNMI)(virDomainPtr dom,
                          unsigned int flags);
@@ -1369,6 +1375,7 @@ struct _virDriver {
     virDrvDomainOpenConsole domainOpenConsole;
     virDrvDomainOpenChannel domainOpenChannel;
     virDrvDomainOpenGraphics domainOpenGraphics;
+    virDrvDomainOpenGraphicsFD domainOpenGraphicsFD;
     virDrvDomainInjectNMI domainInjectNMI;
     virDrvDomainMigrateBegin3 domainMigrateBegin3;
     virDrvDomainMigratePrepare3 domainMigratePrepare3;
index 834926187d61fdc7500dbb7cdfb3726e1c7c2ec7..8fd0e460be22370724a66fd0d904db629e29c521 100644 (file)
@@ -20181,6 +20181,64 @@ virDomainOpenGraphics(virDomainPtr dom,
 }
 
 
+/**
+ * virDomainOpenGraphicsFD:
+ * @dom: pointer to domain object
+ * @idx: index of graphics config to open
+ * @fd: returned file descriptor
+ * @flags: bitwise-OR of virDomainOpenGraphicsFlags
+ *
+ * This will create a socket pair connected to the graphics backend of @dom.
+ * One socket will be returned as @fd.
+ * 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.
+ *
+ * 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
+virDomainOpenGraphicsFD(virDomainPtr dom,
+                        unsigned int idx,
+                        int *fd,
+                        unsigned int flags)
+{
+    VIR_DOMAIN_DEBUG(dom, "idx=%u, fd=%p, flags=%x",
+                     idx, fd, flags);
+
+    virResetLastError();
+
+    virCheckDomainReturn(dom, -1);
+    virCheckNonNullArgGoto(fd, error);
+
+    virCheckReadOnlyGoto(dom->conn->flags, error);
+
+    if (!VIR_DRV_SUPPORTS_FEATURE(dom->conn->driver, dom->conn,
+                                  VIR_DRV_FEATURE_FD_PASSING)) {
+        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
+                       _("fd passing is not supported by this connection"));
+        goto error;
+    }
+
+    if (dom->conn->driver->domainOpenGraphicsFD) {
+        int ret;
+        ret = dom->conn->driver->domainOpenGraphicsFD(dom, idx, fd, flags);
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virReportUnsupportedError();
+
+ error:
+    virDispatchError(dom->conn);
+    return -1;
+}
 /**
  * virConnectSetKeepAlive:
  * @conn: pointer to a hypervisor connection
index 9f4016a85fa88d7c08df6b6a9a74cc66f245bc5e..ce5aeebc35097d596ea810df030c7bd04acd2f20 100644 (file)
@@ -670,4 +670,9 @@ LIBVIRT_1.2.7 {
         virConnectGetDomainCapabilities;
 } LIBVIRT_1.2.6;
 
+LIBVIRT_1.2.8 {
+     global:
+         virDomainOpenGraphicsFD;
+} LIBVIRT_1.2.7;
+
 # .... define new API here using predicted next version number ....