]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce a virDomainOpenConsole API
authorDaniel P. Berrange <berrange@redhat.com>
Fri, 23 Jul 2010 12:34:31 +0000 (13:34 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 11 Nov 2010 16:02:41 +0000 (16:02 +0000)
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

16 files changed:
include/libvirt/libvirt.h.in
src/driver.h
src/esx/esx_driver.c
src/libvirt.c
src/libvirt_public.syms
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

index 5c782709034e432ed8c8f88af4f88d9c38d7659a..98c5281d6f28e227b71d536a83fc1081ba398334 100644 (file)
@@ -2402,6 +2402,12 @@ int                     virNWFilterGetUUIDString (virNWFilterPtr nwfilter,
 char *                  virNWFilterGetXMLDesc    (virNWFilterPtr nwfilter,
                                                   int flags);
 
+
+int virDomainOpenConsole(virDomainPtr dom,
+                         const char *devname,
+                         virStreamPtr st,
+                         unsigned int flags);
+
 #ifdef __cplusplus
 }
 #endif
index 79a96c17e1d9833e03352955b3e497a312539283..6417ee98f3d2432db9e68ebec05d6134c2a6676a 100644 (file)
@@ -480,6 +480,11 @@ typedef int
     (*virDrvQemuDomainMonitorCommand)(virDomainPtr domain, const char *cmd,
                                       char **result, unsigned int flags);
 
+typedef int
+    (*virDrvDomainOpenConsole)(virDomainPtr dom,
+                               const char *devname,
+                               virStreamPtr st,
+                               unsigned int flags);
 
 
 /**
@@ -598,6 +603,7 @@ struct _virDriver {
     virDrvQemuDomainMonitorCommand qemuDomainMonitorCommand;
     virDrvDomainSetMemoryParameters domainSetMemoryParameters;
     virDrvDomainGetMemoryParameters domainGetMemoryParameters;
+    virDrvDomainOpenConsole domainOpenConsole;
 };
 
 typedef int
index 059111531b988b1fbb32613f168c2bf92f7a89ec..0ace38e2c62df24c485f589e742180d0b1dfac62 100644 (file)
@@ -4382,6 +4382,7 @@ static virDriver esxDriver = {
     NULL,                            /* qemuDomainMonitorCommand */
     esxDomainSetMemoryParameters,    /* domainSetMemoryParameters */
     esxDomainGetMemoryParameters,    /* domainGetMemoryParameters */
+    NULL,                            /* domainOpenConsole */
 };
 
 
index 2ffb2d93ff3eff1582fc1d07dd73948ad4614efd..3c8bf30a3df71ff7f7552d966b831a6e96b71894 100644 (file)
@@ -13114,3 +13114,56 @@ virDomainSnapshotFree(virDomainSnapshotPtr snapshot)
     }
     return 0;
 }
+
+/**
+ * virDomainOpenConsole:
+ * @dom: a domain object
+ * @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;
+}
index a8091b18e9408c93d4a971f4de47f414c825344b..4ef4c5a2c6bee280a5851e88a822c797913379f7 100644 (file)
@@ -413,4 +413,9 @@ LIBVIRT_0.8.5 {
         virDomainSetVcpusFlags;
 } LIBVIRT_0.8.2;
 
+LIBVIRT_0.8.6 {
+    global:
+        virDomainOpenConsole;
+} LIBVIRT_0.8.5;
+
 # .... define new API here using predicted next version number ....
index 2616c43f6df0dd1cd65090a49621c8c6c2a15dcb..24450e526bff73537a68551fba511cf81a240334 100644 (file)
@@ -2836,6 +2836,7 @@ static virDriver lxcDriver = {
     NULL, /* qemuDomainMonitorCommand */
     lxcDomainSetMemoryParameters, /* domainSetMemoryParameters */
     lxcDomainGetMemoryParameters, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 static virStateDriver lxcStateDriver = {
index 199fca3486db8c9786dfe1c5e72deb9470df2d9d..43a2847f34a0cd905b6026e45db485a553d1b118 100644 (file)
@@ -822,6 +822,7 @@ static virDriver oneDriver = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParameters */
     NULL, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 static virStateDriver oneStateDriver = {
index 2893f6982cf0a2a4a47d36524bb60f9f54c223b9..d5bd0ab16f9e7396c5ddfc170ca23e934283373c 100644 (file)
@@ -1691,6 +1691,7 @@ static virDriver openvzDriver = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParameters */
     NULL, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 int openvzRegister(void) {
index c1252dd0e4ebcb037e0fe4f78687cb689c8a8224..a685bd17de04ae53caa593ff1667783788692979 100644 (file)
@@ -4045,6 +4045,7 @@ static virDriver phypDriver = {
     NULL,                       /* qemuMonitorCommand */
     NULL,                       /* domainSetMemoryParameters */
     NULL,                       /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 static virStorageDriver phypStorageDriver = {
index bed208fac527ddac371243cdbb8b7aed87c5df95..6afc4b3551efd5cc9e2d4e395817348d98a75db6 100644 (file)
@@ -13428,6 +13428,7 @@ static virDriver qemuDriver = {
     qemuDomainMonitorCommand, /* qemuDomainMonitorCommand */
     qemuDomainSetMemoryParameters, /* domainSetMemoryParameters */
     qemuDomainGetMemoryParameters, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 
index 9e589bbecc85c13ba449f07e0bf1974324820e30..93d539c818616d1c212f1bb2413c2a788dd307f0 100644 (file)
@@ -10691,6 +10691,7 @@ static virDriver remote_driver = {
     remoteQemuDomainMonitorCommand, /* qemuDomainMonitorCommand */
     remoteDomainSetMemoryParameters, /* domainSetMemoryParameters */
     remoteDomainGetMemoryParameters, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 static virNetworkDriver network_driver = {
index e74e8d117c860877d6c2d0c03f8993b5f9ace1fc..5693d7adba402e4297239aa04c75935ddce6f3aa 100644 (file)
@@ -5443,6 +5443,7 @@ static virDriver testDriver = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParameters */
     NULL, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 static virNetworkDriver testNetworkDriver = {
index 348f2994a2a11e161a94f63d10ff50719a0d1759..d90db934aec517e1a1d5f79b8aa820c1a7390dc4 100644 (file)
@@ -2200,6 +2200,7 @@ static virDriver umlDriver = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParamters */
     NULL, /* domainGetMemoryParamters */
+    NULL, /* domainOpenConsole */
 };
 
 static int
index ddbca97dfb6a6ff1792a4fa9c7ba97c6b530121d..78f945cefca84059e86b3e1283295d7a738c0722 100644 (file)
@@ -8464,6 +8464,7 @@ virDriver NAME(Driver) = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParameters */
     NULL, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 virNetworkDriver NAME(NetworkDriver) = {
index f126f0da9d560e77c173ef3f66c7cd90457868fd..1c2e732a34ea79efd0943ae61fe9f7603a4aa784 100644 (file)
@@ -2035,6 +2035,7 @@ static virDriver xenUnifiedDriver = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParameters */
     NULL, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 /**
index 5ccdede3052e4af6a710d88d0d1b5cfdbf1f34bc..03b0a6aa3e6ca4e0ee52a760d483f2c9ff109ab2 100644 (file)
@@ -1869,6 +1869,7 @@ static virDriver xenapiDriver = {
     NULL, /* qemuDomainMonitorCommand */
     NULL, /* domainSetMemoryParameters */
     NULL, /* domainGetMemoryParameters */
+    NULL, /* domainOpenConsole */
 };
 
 /**