Enable libvirt users to query for the current logging level setting. --- daemon/admin.c | 9 +++++++++ include/libvirt/libvirt-admin.h | 2 ++ src/admin/admin_protocol.x | 16 +++++++++++++++- src/admin_protocol-structs | 8 ++++++++ src/libvirt-admin.c | 34 ++++++++++++++++++++++++++++++++++ src/libvirt_admin_private.syms | 2 ++ src/libvirt_admin_public.syms | 1 + 7 files changed, 71 insertions(+), 1 deletion(-) diff --git a/daemon/admin.c b/daemon/admin.c index 3de09ca..5129e2d 100644 --- a/daemon/admin.c +++ b/daemon/admin.c @@ -295,4 +295,13 @@ adminDispatchClientGetInfo(virNetServerPtr server ATTRIBUTE_UNUSED, virObjectUnref(srv); return rv; } + +static int +adminConnectGetLoggingLevel(virNetDaemonPtr dmn ATTRIBUTE_UNUSED, + unsigned int flags) +{ + virCheckFlags(0, -1); + + return virLogGetDefaultPriority(); +} #include "admin_dispatch.h" diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h index 0a1ea61..2878c78 100644 --- a/include/libvirt/libvirt-admin.h +++ b/include/libvirt/libvirt-admin.h @@ -349,6 +349,8 @@ int virAdmClientGetInfo(virAdmClientPtr client, int *nparams, unsigned int flags); +int virAdmConnectGetLoggingLevel(virAdmConnectPtr conn, unsigned int flags); + # ifdef __cplusplus } # endif diff --git a/src/admin/admin_protocol.x b/src/admin/admin_protocol.x index 67bdbf3..6a95665 100644 --- a/src/admin/admin_protocol.x +++ b/src/admin/admin_protocol.x @@ -158,6 +158,15 @@ struct admin_client_get_info_args { struct admin_client_get_info_ret { /* insert@1 */ admin_typed_param params<ADMIN_CLIENT_INFO_PARAMETERS_MAX>; + unsigned int flags; +}; + +struct admin_connect_get_logging_level_args { + unsigned int flags; +}; + +struct admin_connect_get_logging_level_ret { + int level; }; /* Define the program number, protocol version and procedure numbers here. */ @@ -230,5 +239,10 @@ enum admin_procedure { /** * @generate: none */ - ADMIN_PROC_CLIENT_GET_INFO = 10 + ADMIN_PROC_CLIENT_GET_INFO = 10, + + /** + * @generate: both + */ + ADMIN_PROC_CONNECT_GET_LOGGING_LEVEL = 11 }; diff --git a/src/admin_protocol-structs b/src/admin_protocol-structs index ea9adf6..72d93ec 100644 --- a/src/admin_protocol-structs +++ b/src/admin_protocol-structs @@ -104,6 +104,13 @@ struct admin_client_get_info_ret { u_int params_len; admin_typed_param * params_val; } params; + u_int flags; +}; +struct admin_connect_get_logging_level_args { + u_int flags; +}; +struct admin_connect_get_logging_level_ret { + int level; }; enum admin_procedure { ADMIN_PROC_CONNECT_OPEN = 1, @@ -116,4 +123,5 @@ enum admin_procedure { ADMIN_PROC_SERVER_LIST_CLIENTS = 8, ADMIN_PROC_SERVER_LOOKUP_CLIENT = 9, ADMIN_PROC_CLIENT_GET_INFO = 10, + ADMIN_PROC_CONNECT_GET_LOGGING_LEVEL = 11, }; diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c index a94f5dd..898b9c1 100644 --- a/src/libvirt-admin.c +++ b/src/libvirt-admin.c @@ -975,3 +975,37 @@ virAdmClientGetInfo(virAdmClientPtr client, virDispatchError(NULL); return -1; } + +/** + * virAdmConnectGetLoggingLevel: + * @conn: pointer to an active admin connection + * @flags: extra flags; not used yet, so callers should always pass 0 + * + * Retrieves the current global logging level (as per daemon configuration): + * 1: DEBUG + * 2: INFO + * 3: WARNING + * 4: ERROR + * + * Returns the numeric logging level representation or -1 in case of an error. + */ +int +virAdmConnectGetLoggingLevel(virAdmConnectPtr conn, + unsigned int flags) +{ + int ret = -1; + + VIR_DEBUG("conn=%p, flags=%x", conn, flags); + + virResetLastError(); + virCheckAdmConnectReturn(conn, -1); + virCheckFlagsGoto(0, error); + + if ((ret = remoteAdminConnectGetLoggingLevel(conn, flags)) < 0) + goto error; + + return ret; + error: + virDispatchError(NULL); + return -1; +} diff --git a/src/libvirt_admin_private.syms b/src/libvirt_admin_private.syms index affe8c1..8534ab1 100644 --- a/src/libvirt_admin_private.syms +++ b/src/libvirt_admin_private.syms @@ -9,6 +9,8 @@ xdr_admin_client_get_info_args; xdr_admin_client_get_info_ret; xdr_admin_connect_get_lib_version_ret; +xdr_admin_connect_get_logging_level_args; +xdr_admin_connect_get_logging_level_ret; xdr_admin_connect_list_servers_args; xdr_admin_connect_list_servers_ret; xdr_admin_connect_lookup_server_args; diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms index 27e4a1d..4cc0a5b 100644 --- a/src/libvirt_admin_public.syms +++ b/src/libvirt_admin_public.syms @@ -26,6 +26,7 @@ LIBVIRT_ADMIN_1.3.0 { virAdmConnectRegisterCloseCallback; virAdmConnectUnregisterCloseCallback; virAdmConnectListServers; + virAdmConnectGetLoggingLevel; virAdmServerGetName; virAdmServerGetThreadPoolParameters; virAdmServerFree; -- 2.4.11 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list