On 01/23/2012 07:48 AM, Michal Privoznik wrote:
There is now a standard QEMU guest agent that can be installed
and given a virtio serial channel
<channel type='unix'>
<source mode='bind'
path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
<target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>
You also need to update docs/formatdomain.html.in to include this
specific example. May I propose that you squash in this:
diff --git i/docs/formatdomain.html.in w/docs/formatdomain.html.in
index de9b480..6667bed 100644
--- i/docs/formatdomain.html.in
+++ w/docs/formatdomain.html.in
@@ -3017,6 +3017,10 @@ qemu-kvm -net nic,model=? /dev/null
<channel type='pty'>
<target type='virtio'
name='arbitrary.virtio.serial.port.name'/>
</channel>
+ <channel type='unix'>
+ <source mode='bind'
path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
+ <target type='virtio'
name='org.qemu.guest_agent.0'/>
+ </channel>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
</channel>
@@ -3045,7 +3049,11 @@ qemu-kvm -net nic,model=? /dev/null
optional element <code>address</code> can tie the channel to a
particular <code>type='virtio-serial'</code>
controller, <a href="#elementsAddress">documented
above</a>.
- <span class="since">Since 0.7.7</span></dd>
+ With qemu, if <code>name</code> is
"org.qemu.guest_agent.0",
+ then libvirt can interact with a guest agent installed in the
+ guest, for actions such as guest shutdown or file system quiescing.
+ <span class="since">Since 0.7.7, guest agent interaction
+ since 0.9.10</span></dd>
<dt><code>spicevmc</code></dt>
<dd>Paravirtualized SPICE channel. The domain must also have a
I think the RNG already covers the addition, though, so we are good
there, and that means that we can get by without any tests/ additions
(we already have tests for virtio <channel> parsing), although it
wouldn't hurt if you wanted to add some tests.
+struct _qemuAgent {
+ virMutex lock; /* also used to protect fd */
+ virCond notify;
+
+ int refs;
+
+ int fd;
+ int watch;
+
+ bool connectPending;
+
+ virDomainObjPtr vm;
+
+ qemuAgentCallbacksPtr cb;
+
+ /* If there's a command being processed this will be
+ * non-NULL */
+ qemuAgentMessagePtr msg;
+
+ /* Buffer incoming data ready for Text/QMP monitor
+ * code to process & find message boundaries */
s,Text/QMP,Agent,
+ switch (config->type) {
+ case VIR_DOMAIN_CHR_TYPE_UNIX:
+ mon->fd = qemuAgentOpenUnix(config->data.nix.path, vm->pid,
+ &mon->connectPending);
+ break;
+
+ case VIR_DOMAIN_CHR_TYPE_PTY:
+ mon->fd = qemuAgentOpenPty(config->data.file.path);
+ break;
Do we really want to support <channel type='pty'> for agent interaction,
or just mandate that the guest agent must use <channel type='unix'>? I
guess we support both for the monitor as well, in case we ever use
qemu-attach to convert a running guest that used a pty monitor into a
libvirt-managed guest.
ACK with above fixes included.
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org