[libvirt] [ocaml PATCH 0/3] Few misc improvements

Raise the libvirt version to the de-facto requirement, and add a new API which will be useful. Also, sync Virterror with libvirt. Pino Toscano (3): build: bump required libvirt to 1.2.8 Implement Connect.get_domain_capabilities Synchronize Virterror with libvirt 5.2.0 configure.ac | 2 +- libvirt/libvirt.ml | 12 ++++++++++++ libvirt/libvirt.mli | 23 ++++++++++++++++++++++- libvirt/libvirt_c_epilogue.c | 4 ++-- libvirt/libvirt_c_oneoffs.c | 16 ++++++++++++++++ 5 files changed, 53 insertions(+), 4 deletions(-) -- 2.20.1

virConnectGetAllDomainStats, used unconditionally, was introduced in libvirt 1.2.8. Signed-off-by: Pino Toscano <ptoscano@redhat.com> --- configure.ac | 2 +- libvirt/libvirt.mli | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 7d923bf..a463dba 100644 --- a/configure.ac +++ b/configure.ac @@ -56,7 +56,7 @@ fi dnl Check for libvirt development environment. PKG_PROG_PKG_CONFIG -PKG_CHECK_MODULES([LIBVIRT], [libvirt >= 1.0.2]) +PKG_CHECK_MODULES([LIBVIRT], [libvirt >= 1.2.8]) dnl Check for basic OCaml environment & findlib. AC_PROG_OCAML diff --git a/libvirt/libvirt.mli b/libvirt/libvirt.mli index 628f797..0bd3d05 100644 --- a/libvirt/libvirt.mli +++ b/libvirt/libvirt.mli @@ -145,7 +145,7 @@ printf "uri = %s\n%!" uri {3 Backwards and forwards compatibility} - OCaml-libvirt requires libvirt version 1.0.2 or later. Future + OCaml-libvirt requires libvirt version 1.2.8 or later. Future releases of OCaml-libvirt will use newer features of libvirt and therefore will require later versions of libvirt. It is always possible to dynamically link your application against a newer -- 2.20.1

Wrap the virConnectGetDomainCapabilities C API. Signed-off-by: Pino Toscano <ptoscano@redhat.com> --- libvirt/libvirt.ml | 2 ++ libvirt/libvirt.mli | 16 ++++++++++++++++ libvirt/libvirt_c_oneoffs.c | 16 ++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/libvirt/libvirt.ml b/libvirt/libvirt.ml index 49ccc3e..c7c5ffc 100644 --- a/libvirt/libvirt.ml +++ b/libvirt/libvirt.ml @@ -138,6 +138,8 @@ struct cb = _call_auth_default_callback; } + external get_domain_capabilities : ?emulatorbin:string -> ?arch:string -> ?machine:string -> ?virttype:string -> [>`R] t -> string = "ocaml_libvirt_connect_get_domain_capabilities" + external const : [>`R] t -> ro t = "%identity" end diff --git a/libvirt/libvirt.mli b/libvirt/libvirt.mli index 0bd3d05..7448722 100644 --- a/libvirt/libvirt.mli +++ b/libvirt/libvirt.mli @@ -456,6 +456,22 @@ sig of libvirt. *) + val get_domain_capabilities : ?emulatorbin:string -> ?arch:string -> ?machine:string -> ?virttype:string -> [>`R] t -> string + (** [get_domain_capabilities ()] returns the XML with the + available capabilities of the emulator or libvirt for domains. + + The optional flag [?emulatorbin] is used to specify a different + emulator. + + The optional flag [?arch] is used to specify a different + architecture. + + The optional flag [?machine] is used to specify a different + machine type. + + The optional flag [?virttype] is used to specify a different + type of virtualization. *) + external const : [>`R] t -> ro t = "%identity" (** [const conn] turns a read/write connection into a read-only connection. Note that the opposite operation is impossible. diff --git a/libvirt/libvirt_c_oneoffs.c b/libvirt/libvirt_c_oneoffs.c index 71ca78e..0a9e485 100644 --- a/libvirt/libvirt_c_oneoffs.c +++ b/libvirt/libvirt_c_oneoffs.c @@ -419,6 +419,22 @@ ocaml_libvirt_connect_call_auth_default_callback (value listv) CAMLreturn (retv); } +CAMLprim value +ocaml_libvirt_connect_get_domain_capabilities (value emulatorbinv, value archv, value machinev, value virttypev, value connv) +{ + CAMLparam5 (emulatorbinv, archv, machinev, virttypev, connv); + CAMLlocal1 (rv); + virConnectPtr conn = Connect_val (connv); + char *r; + + NONBLOCKING (r = virConnectGetDomainCapabilities (conn, Optstring_val (emulatorbinv), Optstring_val (archv), Optstring_val (machinev), Optstring_val (virttypev), 0)); + CHECK_ERROR (r == NULL, "virConnectGetDomainCapabilities"); + + rv = caml_copy_string (r); + free (r); + CAMLreturn (rv); +} + CAMLprim value ocaml_libvirt_domain_get_id (value domv) { -- 2.20.1

Signed-off-by: Pino Toscano <ptoscano@redhat.com> --- libvirt/libvirt.ml | 10 ++++++++++ libvirt/libvirt.mli | 5 +++++ libvirt/libvirt_c_epilogue.c | 4 ++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/libvirt/libvirt.ml b/libvirt/libvirt.ml index c7c5ffc..d935bfc 100644 --- a/libvirt/libvirt.ml +++ b/libvirt/libvirt.ml @@ -248,6 +248,9 @@ struct | VIR_ERR_DEVICE_MISSING | VIR_ERR_INVALID_NWFILTER_BINDING | VIR_ERR_NO_NWFILTER_BINDING + | VIR_ERR_INVALID_DOMAIN_CHECKPOINT + | VIR_ERR_NO_DOMAIN_CHECKPOINT + | VIR_ERR_NO_DOMAIN_BACKUP | VIR_ERR_UNKNOWN of int let string_of_code = function @@ -353,6 +356,9 @@ struct | VIR_ERR_DEVICE_MISSING -> "VIR_ERR_DEVICE_MISSING" | VIR_ERR_INVALID_NWFILTER_BINDING -> "VIR_ERR_INVALID_NWFILTER_BINDING" | VIR_ERR_NO_NWFILTER_BINDING -> "VIR_ERR_NO_NWFILTER_BINDING" + | VIR_ERR_INVALID_DOMAIN_CHECKPOINT -> "VIR_ERR_INVALID_DOMAIN_CHECKPOINT" + | VIR_ERR_NO_DOMAIN_CHECKPOINT -> "VIR_ERR_NO_DOMAIN_CHECKPOINT" + | VIR_ERR_NO_DOMAIN_BACKUP -> "VIR_ERR_NO_DOMAIN_BACKUP" | VIR_ERR_UNKNOWN i -> "VIR_ERR_" ^ string_of_int i type domain = @@ -424,6 +430,8 @@ struct | VIR_FROM_PERF | VIR_FROM_LIBSSH | VIR_FROM_RESCTRL + | VIR_FROM_FIREWALLD + | VIR_FROM_DOMAIN_CHECKPOINT | VIR_FROM_UNKNOWN of int let string_of_domain = function @@ -495,6 +503,8 @@ struct | VIR_FROM_PERF -> "VIR_FROM_PERF" | VIR_FROM_LIBSSH -> "VIR_FROM_LIBSSH" | VIR_FROM_RESCTRL -> "VIR_FROM_RESCTRL" + | VIR_FROM_FIREWALLD -> "VIR_FROM_FIREWALLD" + | VIR_FROM_DOMAIN_CHECKPOINT -> "VIR_FROM_DOMAIN_CHECKPOINT" | VIR_FROM_UNKNOWN i -> "VIR_FROM_" ^ string_of_int i type level = diff --git a/libvirt/libvirt.mli b/libvirt/libvirt.mli index 7448722..fc5a1fc 100644 --- a/libvirt/libvirt.mli +++ b/libvirt/libvirt.mli @@ -1478,6 +1478,9 @@ sig | VIR_ERR_DEVICE_MISSING | VIR_ERR_INVALID_NWFILTER_BINDING | VIR_ERR_NO_NWFILTER_BINDING + | VIR_ERR_INVALID_DOMAIN_CHECKPOINT + | VIR_ERR_NO_DOMAIN_CHECKPOINT + | VIR_ERR_NO_DOMAIN_BACKUP (* ^^ NB: If you add a variant you MUST edit libvirt_c_epilogue.c:MAX_VIR_* *) | VIR_ERR_UNKNOWN of int (** Other error, not handled with existing values. *) @@ -1554,6 +1557,8 @@ sig | VIR_FROM_PERF | VIR_FROM_LIBSSH | VIR_FROM_RESCTRL + | VIR_FROM_FIREWALLD + | VIR_FROM_DOMAIN_CHECKPOINT (* ^^ NB: If you add a variant you MUST edit libvirt_c_epilogue.c: MAX_VIR_* *) | VIR_FROM_UNKNOWN of int (** Other domain, not handled with existing values. *) diff --git a/libvirt/libvirt_c_epilogue.c b/libvirt/libvirt_c_epilogue.c index 4e75d2f..4d45629 100644 --- a/libvirt/libvirt_c_epilogue.c +++ b/libvirt/libvirt_c_epilogue.c @@ -143,8 +143,8 @@ Val_virconnectcredential (const virConnectCredentialPtr cred) * to convert it into VIR_*_UNKNOWN (code). */ -#define MAX_VIR_CODE 101 /* VIR_ERR_NO_NWFILTER_BINDING */ -#define MAX_VIR_DOMAIN 67 /* VIR_FROM_RESCTRL */ +#define MAX_VIR_CODE 104 /* VIR_ERR_NO_DOMAIN_BACKUP */ +#define MAX_VIR_DOMAIN 69 /* VIR_FROM_DOMAIN_CHECKPOINT */ #define MAX_VIR_LEVEL VIR_ERR_ERROR static inline value -- 2.20.1

On Fri, Apr 05, 2019 at 06:33:52PM +0200, Pino Toscano wrote:
Raise the libvirt version to the de-facto requirement, and add a new API which will be useful. Also, sync Virterror with libvirt.
Pino Toscano (3): build: bump required libvirt to 1.2.8 Implement Connect.get_domain_capabilities Synchronize Virterror with libvirt 5.2.0
configure.ac | 2 +- libvirt/libvirt.ml | 12 ++++++++++++ libvirt/libvirt.mli | 23 ++++++++++++++++++++++- libvirt/libvirt_c_epilogue.c | 4 ++-- libvirt/libvirt_c_oneoffs.c | 16 ++++++++++++++++ 5 files changed, 53 insertions(+), 4 deletions(-)
Thanks, ACKed and pushed (finally!) Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW
participants (2)
-
Pino Toscano
-
Richard W.M. Jones