On 02/10/2015 04:35 AM, Luyao Huang wrote:
> https://bugzilla.redhat.com/show_bug.cgi?id=1191016
>
> We try to get the IP address in /domain/devices/graphics/@listen, howerver
> for the network type listen address donnot have this parameter, it will
> show the address in the /domain/devices/graphics/listen/@address, running
> XML like this:
>
>  <graphics type='spice' port='5901' autoport='yes' keymap='en-us'>
>   <listen type='network' address='192.168.122.1' network='default'/>
>  </graphics>
>
> This patch will try to get the IP address in this path
> /domain/devices/graphics/listen/@address

That will work when the libvirtd being connected to is 0.9.4 or later,
but earlier versions of libvirt don't have the <listen> subelement;
instead they just have a 'listen' attribute directly inside <graphics>
that contains the address. All newer versions of libvirt are supposed to
populate that from <listen>[0] for backward compatibility.

The real bug here is that the listen attribute in <graphics> isn't being
filled in in the case of type='network' when the domain is active. On
the other hand, fixing the problem there would leave it unfixed for
cases where the client is a new libvirt but the server is running
libvirt between 0.9.4 and 1.2.12. So I think what is needed is for your
patch to check @listen, and if nothing is found there, *then* check
listen/@address. I attached a patch to this mail that I propose
squashing into your patch before pushing. Let me know if it behaves
properly and looks correct.

Beyond that, the server side should still be fixed. I just sent a patch
that does that:

https://www.redhat.com/archives/libvir-list/2015-February/msg00332.html

Between the two patches, we will have fixed the problem for all versions
of server, as long as the client is new enough.

>From 5f8800d93375ee67dd94bf50a87ed75f44ca2b19 Mon Sep 17 00:00:00 2001
From: Laine Stump <la...@laine.org>
Date: Tue, 10 Feb 2015 13:32:33 -0500
Subject: [PATCH] virsh: check listen attribute *and* listen subelement in
 domdisplay

This should be squashed into Luyao Huang's patch fixing the output of
virsh domdisplay. Without it, virsh would fail when connecting to a
libvirtd older than 0.9.4.
---
 tools/virsh-domain.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 4a9b574..20bafbe 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -1,7 +1,7 @@
 /*
  * virsh-domain.c: Commands to manage domain
  *
- * Copyright (C) 2005, 2007-2014 Red Hat, Inc.
+ * Copyright (C) 2005, 2007-2015 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
@@ -10081,7 +10081,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
             continue;
 
         /* Create our XPATH lookup for the current display's address */
-        if (virAsprintf(&xpath, xpath_fmt, scheme[iter], "listen/@address") < 0)
+        if (virAsprintf(&xpath, xpath_fmt, scheme[iter], "@listen") < 0)
             goto cleanup;
 
         /* Attempt to get the listening addr if set for the current
@@ -10089,6 +10089,22 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
         listen_addr = virXPathString(xpath, ctxt);
         VIR_FREE(xpath);
 
+        if (!listen_addr) {
+            /* The subelement address - <listen address='xyz'/> -
+             * *should* have been automatically backfilled into its
+             * parent <graphics listen='xyz'> (which we just tried to
+             * retrieve into listen_addr above) but in some cases it
+             * isn't, so we also do an explicit check for the
+             * subelement (which, by the way, doesn't exist on libvirt
+             * < 0.9.4, so we really do need to check both places)
+             */
+            if (virAsprintf(&xpath, xpath_fmt, scheme[iter], "listen/@address") < 0)
+                goto cleanup;
+
+            listen_addr = virXPathString(xpath, ctxt);
+            VIR_FREE(xpath);
+        }
+
         /* We can query this info for all the graphics types since we'll
          * get nothing for the unsupported ones (just rdp for now).
          * Also the parameter '--include-password' was already taken
-- 
2.1.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to