* Description: Provides the interfaces of the libvirt library to handle
* qemu specific methods
*
- * Copyright (C) 2010, 2012 Red Hat, Inc.
+ * Copyright (C) 2010-2014 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
char *virDomainQemuAgentCommand(virDomainPtr domain, const char *cmd,
int timeout, unsigned int flags);
+/**
+ * virConnectDomainQemuMonitorEventCallback:
+ * @conn: the connection pointer
+ * @dom: the domain pointer
+ * @event: the name of the event
+ * @seconds: the qemu timestamp of the event: seconds since Epoch, or -1 if
+ * not available
+ * @micros: the qemu timestamp of the event: microseconds within the second
+ * @details: the JSON details of the event, if any were given
+ * @opaque: application specified data
+ *
+ * The callback signature to use when registering for a qemu monitor
+ * event with virConnectDomainQemuMonitorEventRegister().
+ */
+typedef void (*virConnectDomainQemuMonitorEventCallback)(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *event,
+ long long seconds,
+ unsigned int micros,
+ const char *details,
+ void *opaque);
+
+int virConnectDomainQemuMonitorEventRegister(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *event,
+ virConnectDomainQemuMonitorEventCallback cb,
+ void *opaque,
+ virFreeCallback freecb,
+ unsigned int flags);
+
+int virConnectDomainQemuMonitorEventDeregister(virConnectPtr conn,
+ int callbackID);
+
+
# ifdef __cplusplus
}
# endif
virDispatchError(conn);
return NULL;
}
+
+
+/**
+ * virConnectDomainQemuMonitorEventRegister:
+ * @conn: pointer to the connection
+ * @dom: pointer to the domain, or NULL
+ * @event: name of the event, or NULL
+ * @cb: callback to the function handling monitor events
+ * @opaque: opaque data to pass on to the callback
+ * @freecb: optional function to deallocate opaque when not used anymore
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * This API is QEMU specific, so it will only work with hypervisor
+ * connections to the QEMU driver.
+ *
+ * Adds a callback to receive notifications of arbitrary qemu monitor events
+ * occurring on a domain. Many qemu monitor events also result in a libvirt
+ * event which can be delivered via virConnectDomainEventRegisterAny(); this
+ * command is primarily for testing new qemu events that have not yet been
+ * given a libvirt counterpart event.
+ *
+ * If @dom is NULL, then events will be monitored for any domain. If @dom
+ * is non-NULL, then only the specific domain will be monitored.
+ *
+ * If @event is NULL, then all monitor events will be reported. If @event is
+ * non-NULL, then only the specific monitor event will be reported. @flags
+ * is currently unused, but in the future may support a flag for passing
+ * @event as a glob instead of a literal name to match a category of events.
+ *
+ * The virDomainPtr object handle passed into the callback upon delivery
+ * of an event is only valid for the duration of execution of the callback.
+ * If the callback wishes to keep the domain object after the callback returns,
+ * it shall take a reference to it, by calling virDomainRef().
+ * The reference can be released once the object is no longer required
+ * by calling virDomainFree().
+ *
+ * The return value from this method is a positive integer identifier
+ * for the callback. To unregister a callback, this callback ID should
+ * be passed to the virConnectDomainQemuMonitorEventDeregister() method.
+ *
+ * Returns a callback identifier on success, -1 on failure
+ */
+int
+virConnectDomainQemuMonitorEventRegister(virConnectPtr conn,
+ virDomainPtr dom,
+ const char *event,
+ virConnectDomainQemuMonitorEventCallback cb,
+ void *opaque,
+ virFreeCallback freecb,
+ unsigned int flags)
+{
+ VIR_DOMAIN_DEBUG(dom,
+ "conn=%p, event=%s, cb=%p, opaque=%p, freecb=%p, flags=%x",
+ conn, NULLSTR(event), cb, opaque, freecb, flags);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+ if (dom) {
+ virCheckDomainGoto(dom, error);
+ if (dom->conn != conn) {
+ virReportInvalidArg(dom,
+ _("domain '%s' in %s must match connection"),
+ dom->name, __FUNCTION__);
+ goto error;
+ }
+ }
+ virCheckNonNullArgGoto(cb, error);
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->driver && conn->driver->connectDomainQemuMonitorEventRegister) {
+ int ret;
+ ret = conn->driver->connectDomainQemuMonitorEventRegister(conn, dom, event, cb, opaque, freecb, flags);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+error:
+ virDispatchError(conn);
+ return -1;
+}
+
+
+/**
+ * virConnectDomainQemuMonitorEventDeregister:
+ * @conn: pointer to the connection
+ * @callbackID: the callback identifier
+ *
+ * Removes an event callback. The callbackID parameter should be the
+ * value obtained from a previous virConnectDomainQemuMonitorEventRegister()
+ * method.
+ *
+ * Returns 0 on success, -1 on failure
+ */
+int
+virConnectDomainQemuMonitorEventDeregister(virConnectPtr conn,
+ int callbackID)
+{
+ VIR_DEBUG("conn=%p, callbackID=%d", conn, callbackID);
+
+ virResetLastError();
+
+ virCheckConnectReturn(conn, -1);
+ virCheckNonNegativeArgGoto(callbackID, error);
+ virCheckReadOnlyGoto(conn->flags, error);
+
+ if (conn->driver && conn->driver->connectDomainQemuMonitorEventDeregister) {
+ int ret;
+ ret = conn->driver->connectDomainQemuMonitorEventDeregister(conn, callbackID);
+ if (ret < 0)
+ goto error;
+ return ret;
+ }
+
+ virReportUnsupportedError();
+error:
+ virDispatchError(conn);
+ return -1;
+}