[libvirt] [PATCH v2 8/9] admin: Introduce virAdmConnectGetLibVersion
Martin Kletzander
mkletzan at redhat.com
Tue Nov 3 20:21:50 UTC 2015
On Fri, Oct 16, 2015 at 08:12:25PM +0200, Erik Skultety wrote:
>Introduce a new API to get libvirt version. It is worth noting, that
>libvirt-admin and libvirt share the same version number. Unfortunately,
>our existing API isn't generic enough to be used with virAdmConnectPtr
>as well. Also this patch wires up this API to the virt-admin client
>as a generic cmdVersion command.
>---
> daemon/admin_server.c | 9 ++++++
> include/libvirt/libvirt-admin.h | 3 ++
> po/POTFILES.in | 1 +
> src/admin/admin_protocol.x | 11 ++++++-
> src/admin_protocol-structs | 4 +++
> src/libvirt-admin.c | 31 +++++++++++++++++++
> src/libvirt_admin_private.syms | 1 +
> src/libvirt_admin_public.syms | 1 +
> src/rpc/gendispatch.pl | 11 +++++--
> tools/virt-admin.c | 67 +++++++++++++++++++++++++++++++++++++++++
> 10 files changed, 135 insertions(+), 4 deletions(-)
>
>diff --git a/daemon/admin_server.c b/daemon/admin_server.c
>index 712a44b..189091e 100644
>--- a/daemon/admin_server.c
>+++ b/daemon/admin_server.c
>@@ -114,4 +114,13 @@ adminDispatchConnectClose(virNetServerPtr server ATTRIBUTE_UNUSED,
> return 0;
> }
>
>+static int
>+adminConnectGetLibVersion(virNetDaemonPtr dmn ATTRIBUTE_UNUSED,
>+ unsigned long long *libVer)
>+{
>+ if (libVer)
>+ *libVer = LIBVIR_VERSION_NUMBER;
>+ return 0;
>+}
>+
> #include "admin_dispatch.h"
>diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h
>index 1688201..d76b1bd 100644
>--- a/include/libvirt/libvirt-admin.h
>+++ b/include/libvirt/libvirt-admin.h
>@@ -56,6 +56,9 @@ int virAdmConnectIsAlive(virAdmConnectPtr conn);
>
> char * virAdmConnectGetURI(virAdmConnectPtr conn);
>
>+int virAdmConnectGetLibVersion(virAdmConnectPtr conn,
>+ unsigned long long *libVer);
>+
> /**
> * virAdmConnectCloseFunc:
> * @conn: virAdmConnect connection
>diff --git a/po/POTFILES.in b/po/POTFILES.in
>index d0840f4..e165a08 100644
>--- a/po/POTFILES.in
>+++ b/po/POTFILES.in
>@@ -1,3 +1,4 @@
>+daemon/admin_dispatch.h
> daemon/admin_server.c
> daemon/libvirtd-config.c
> daemon/libvirtd.c
>diff --git a/src/admin/admin_protocol.x b/src/admin/admin_protocol.x
>index d0ca1a3..878983d 100644
>--- a/src/admin/admin_protocol.x
>+++ b/src/admin/admin_protocol.x
>@@ -41,6 +41,10 @@ struct admin_connect_open_args {
> unsigned int flags;
> };
>
>+struct admin_connect_get_lib_version_ret {
>+ unsigned hyper libVer;
>+};
>+
> /* Define the program number, protocol version and procedure numbers here. */
> const ADMIN_PROGRAM = 0x06900690;
> const ADMIN_PROTOCOL_VERSION = 1;
>@@ -71,5 +75,10 @@ enum admin_procedure {
> /**
> * @generate: none
> */
>- ADMIN_PROC_CONNECT_CLOSE = 2
>+ ADMIN_PROC_CONNECT_CLOSE = 2,
>+
>+ /**
>+ * @generate: both
>+ */
>+ ADMIN_PROC_CONNECT_GET_LIB_VERSION = 3
> };
>diff --git a/src/admin_protocol-structs b/src/admin_protocol-structs
>index 3ac31fa..809379b 100644
>--- a/src/admin_protocol-structs
>+++ b/src/admin_protocol-structs
>@@ -2,7 +2,11 @@
> struct admin_connect_open_args {
> u_int flags;
> };
>+struct admin_connect_get_lib_version_ret {
>+ uint64_t libVer;
>+};
> enum admin_procedure {
> ADMIN_PROC_CONNECT_OPEN = 1,
> ADMIN_PROC_CONNECT_CLOSE = 2,
>+ ADMIN_PROC_CONNECT_GET_LIB_VERSION = 3,
> };
>diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c
>index 2a38e09..666d39e 100644
>--- a/src/libvirt-admin.c
>+++ b/src/libvirt-admin.c
>@@ -488,3 +488,34 @@ int virAdmConnectUnregisterCloseCallback(virAdmConnectPtr conn,
> virDispatchError(NULL);
> return -1;
> }
>+
>+/**
>+ * virAdmConnectGetLibVersion:
>+ * @conn: pointer to an active admin connection
>+ * @libVer: stores the current remote libvirt version number
>+ *
>+ * Retrieves the remote side libvirt version used by the daemon. Format
>+ * returned in @libVer is of a following pattern:
>+ * major * 1,000,000 + minor * 1,000 + release.
>+ *
>+ * Returns 0 on success, -1 on failure and @libVer follows this format:
>+ */
>+int virAdmConnectGetLibVersion(virAdmConnectPtr conn,
>+ unsigned long long *libVer)
>+{
>+ VIR_DEBUG("conn=%p, libVir=%p", conn, libVer);
>+
>+ virResetLastError();
>+
>+ virCheckAdmConnectReturn(conn, -1);
>+ virCheckNonNullArgReturn(libVer, -1);
>+
>+ if (remoteAdminConnectGetLibVersion(conn, libVer) < 0)
>+ goto error;
>+
>+ return 0;
>+
>+ error:
>+ virDispatchError(NULL);
>+ return -1;
>+}
>diff --git a/src/libvirt_admin_private.syms b/src/libvirt_admin_private.syms
>index 401cd4e..85380dc 100644
>--- a/src/libvirt_admin_private.syms
>+++ b/src/libvirt_admin_private.syms
>@@ -6,6 +6,7 @@
> #
>
> # admin/admin_protocol.x
>+xdr_admin_connect_get_lib_version_ret;
> xdr_admin_connect_open_args;
>
> # Let emacs know we want case-insensitive sorting
>diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms
>index df01837..303b110 100644
>--- a/src/libvirt_admin_public.syms
>+++ b/src/libvirt_admin_public.syms
>@@ -17,6 +17,7 @@ LIBVIRT_ADMIN_1.3.0 {
> virAdmConnectRef;
> virAdmConnectIsAlive;
> virAdmConnectGetURI;
>+ virAdmConnectGetLibVersion;
> virAdmConnectRegisterCloseCallback;
> virAdmConnectUnregisterCloseCallback;
> };
>diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
>index b6d50f3..5cfc512 100755
>--- a/src/rpc/gendispatch.pl
>+++ b/src/rpc/gendispatch.pl
>@@ -50,7 +50,7 @@ my $protocol = shift or die "missing protocol argument";
> my @autogen;
>
> my $connect_ptr = $structprefix eq "admin" ? "virAdmConnectPtr" : "virConnectPtr";
>-my $prefix = ($structprefix eq "admin") ? "adm" : "vir";
>+my $prefix = ($structprefix eq "admin") ? "admin" : "vir";
>
I wanted to differentiate two different calls with admCall and
adminCall, I wish I remembered which were those.
Otherwise looks fine to me.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151103/56cab9e4/attachment-0001.sig>
More information about the libvir-list
mailing list