On 11/19/2014 03:23 AM, Peter Krempa wrote:
As qemu is now able to notify us about change of the channel state
used
for communication with the guest agent we now can more precisely track
the state of the guest agent.
To allow notifying management apps this patch implements a new event
that will be triggered on changes of the guest agent state.
---
Actually, after seeing patch 11, I think this event is too narrow. You
are only reporting if the guest agent on org.qemu.guest_agent.0 changes
state. But a user can provide more than one channel, and the
VSERPORT_CHANGE event works for every channel. I think we need to
broaden the definition of the event to allow the event on EVERY virtio
channel, and include the name of _which_ channel had the event, so that
someone using any other channel can also tell if their custom code in
the guest is properly connecting to that channel.
+/**
+ * virConnectDomainEventAgentLifecycleCallback:
+ * @conn: connection object
+ * @dom: domain on which the event occurred
+ * @state: new state of the guest agent, one of
virConnectDomainEventAgentLifecycleState
+ * @reason: reason for state change; currently only 0 is passed denoting change
+ * in the guest agent socket state
+ * @opaque: application specified data
+ *
+ * This callback occurs when libvirt detects a change in the state of a guest
+ * agent.
+ *
+ * The callback signature to use when registering for an event of type
+ * VIR_DOMAIN_EVENT_ID_AGENT_LIFECYCLE with virConnectDomainEventRegisterAny()
+ */
+typedef void (*virConnectDomainEventAgentLifecycleCallback)(virConnectPtr conn,
+ virDomainPtr dom,
+ int state,
+ int reason,
+ void *opaque);
Thus, I think this signature needs an additional const char *channel
name, which provides the name of which agent channel is changing.
+++ b/src/remote/remote_protocol.x
@@ -3108,6 +3108,14 @@ struct remote_connect_get_all_domain_stats_args {
unsigned int flags;
};
+struct remote_domain_event_callback_agent_lifecycle_msg {
+ int callbackID;
+ remote_nonnull_domain dom;
+
+ int state;
+ int reason;
+};
Similarly, you'll need a remote_nonnull_string as the channel name as
part of this RPC call.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org