This patch adds a set of flags to be used with the virDomainOpenConsole
API call to specify if the user wishes to interrupt an existing console
session or just to try open a new one.
VIR_DOMAIN_CONSOLE_SAFE - specifies that the console connection should
be opened only if the hypervisor supports
mutually exclusive access to console devices
VIR_DOMAIN_CONSOLE_FORCE - specifies that the caller wishes to interrupt
existing session and force a creation of a
new one.
---
include/libvirt/libvirt.h.in | 12 ++++++++++++
src/libvirt.c | 18 ++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 798ab07..bafd4ea 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -3747,7 +3747,19 @@ int virNWFilterGetUUIDString (virNWFilterPtr
nwfilter,
char *buf);
char * virNWFilterGetXMLDesc (virNWFilterPtr nwfilter,
unsigned int flags);
+/**
+ * virDomainConsoleFlags
+ *
+ * Since 0.9.10
+ */
+typedef enum {
+ VIR_DOMAIN_CONSOLE_FORCE = (1 << 0), /* abort a (possibly) active console
+ connection to force a new
+ connection */
+ VIR_DOMAIN_CONSOLE_SAFE = (1 << 1), /* check if the console driver supports
+ safe console operations */
+} virDomainConsoleFlags;
int virDomainOpenConsole(virDomainPtr dom,
const char *devname,
diff --git a/src/libvirt.c b/src/libvirt.c
index 8035add..545f1e9 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -17717,7 +17717,7 @@ virDomainSnapshotFree(virDomainSnapshotPtr snapshot)
* @dom: a domain object
* @dev_name: the console, serial or parallel port device alias, or NULL
* @st: a stream to associate with the console
- * @flags: extra flags; not used yet, so callers should always pass 0
+ * @flags: bitwise-OR of virDomainConsoleFlags
*
* This opens the backend associated with a console, serial or
* parallel port device on a guest, if the backend is supported.
@@ -17726,7 +17726,21 @@ virDomainSnapshotFree(virDomainSnapshotPtr snapshot)
* 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
+ * By default, when @flags is 0, the open will fail if libvirt
+ * detects that the console is already in use by another client;
+ * passing VIR_DOMAIN_CONSOLE_FORCE will cause libvirt to forcefully
+ * remove the other client prior to opening this console.
+ *
+ * If flag VIR_DOMAIN_CONSOLE_SAFE the console is opened only in the
+ * case where the hypervisor driver supports safe (mutually exclusive)
+ * console handling.
+ *
+ * Older servers did not support either flag, and also did not forbid
+ * simultaneous clients on a console, with potentially confusing results.
+ * When passing @flags of 0 in order to support a wider range of server
+ * versions, it is up to the client to ensure mutual exclusion.
+ *
+ * Returns 0 if the console was opened, -1 on error
*/
int virDomainOpenConsole(virDomainPtr dom,
const char *dev_name,
--
1.7.3.4