On Tue, May 31, 2011 at 11:52:12PM +0200, Matthias Bolte wrote:
virsh version does basically this
hvType = virConnectGetType(...)
virGetVersion(..., hvType, ...)
[...]
Assuming a remote connection virConnectGetType calls the remote driver
that returns the type of the underlying driver on the server side, for
example QEMU. Then virGetVersion compares hvType to a set of strings
that depend on configure options and returns LIBVIR_VERSION_NUMBER in
most cases. Now this fails in case libvirt on the client side is just
compiled with the remote driver enabled and the server side has the
actual driver such as the QEMU driver. It just happens to work when
the actual driver is compiled in on client and server side. But that's
not the case here.
freebsd# ./tools/virsh -c qemu+tcp://192.168.178.22/system version
Compiled against library: libvir 0.9.2
error: failed to get the library version
error: this function is not supported by the connection driver: virGetVersion
This is not FreeBSD specific, happens on Windows as well due to the
similar drivers configuration. The problem is that virConnectGetType
returns QEMU, but virGetVersion on the client side only accepts Remote
as hvType due to all other drivers being disabled on the client side.
I'm not sure how to fix this properly, does anyone have some idea?
The virGetVersion method is just broken by design. The only parameter that
is useful is the 'libVer' parameter, 'type' and 'typeVer' should
both be
left to NULL and ignored. Even the impl of that method shows how braindead
it is, since every conditional line there just returns the hardcoded value
LIBVIR_VERSION_NUMBER, except the remote driver which for inexpicable
reasons returns REMOTE_PROTOCOL_VERSION, or Xen which returns HV_VERSION.
I say remove all that conditional stuff, ignore 'type' and always set
'typeVer' to LIBVIR_VERSION_NUMBER
To get the hypervisor version the virConnectGetVersion method should be
used instead if wanting the HV version.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|