[libvirt] [PATCH 5/8] admin: Introduce virAdmConnectGetLoggingFilters
John Ferlan
jferlan at redhat.com
Wed Nov 9 16:24:29 UTC 2016
On 11/01/2016 06:27 AM, Erik Skultety wrote:
> Enable libvirt users to query logging filter settings.
>
> Signed-off-by: Erik Skultety <eskultet at redhat.com>
> ---
> daemon/admin.c | 52 +++++++++++++++++++++++++++++++++++++++++
> include/libvirt/libvirt-admin.h | 4 ++++
> src/admin/admin_protocol.x | 16 ++++++++++++-
> src/admin/admin_remote.c | 43 ++++++++++++++++++++++++++++++++++
> src/admin_protocol-structs | 8 +++++++
> src/libvirt-admin.c | 40 +++++++++++++++++++++++++++++++
> src/libvirt_admin_private.syms | 2 ++
> src/libvirt_admin_public.syms | 1 +
> 8 files changed, 165 insertions(+), 1 deletion(-)
>
I assume there will be similar comments here as to the previous patch...
I won't repeat them...
> diff --git a/daemon/admin.c b/daemon/admin.c
> index b31b125..c0598e0 100644
> --- a/daemon/admin.c
> +++ b/daemon/admin.c
> @@ -409,6 +409,30 @@ adminConnectGetLoggingOutputs(char **outputs, unsigned int flags)
> }
>
> static int
> +adminConnectGetLoggingFilters(char **filters, unsigned int flags)
> +{
> + char *tmp = NULL;
> + int ret = -1;
> +
> + virCheckFlags(0, -1);
> +
> + if ((ret = virLogGetNbFilters()) > 0) {
> + if (!(tmp = virLogGetFilters()))
> + return -1;
Indent return -1;
> + } else {
> + /* there were no filters defined, return an empty string */
> + if (!tmp) {
> + if (VIR_ALLOC(tmp) < 0)
> + return -1;
> + memset(tmp, 0, 1);
> + }
> + }
> +
> + *filters = tmp;
> + return ret;
> +}
> +
> +static int
> adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED,
> virNetServerClientPtr client ATTRIBUTE_UNUSED,
> virNetMessagePtr msg ATTRIBUTE_UNUSED,
> @@ -435,4 +459,32 @@ adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED,
> VIR_FREE(outputs);
> return rv;
> }
> +
> +static int
> +adminDispatchConnectGetLoggingFilters(virNetServerPtr server ATTRIBUTE_UNUSED,
> + virNetServerClientPtr client ATTRIBUTE_UNUSED,
> + virNetMessagePtr msg ATTRIBUTE_UNUSED,
> + virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED,
> + admin_connect_get_logging_filters_args *args,
> + admin_connect_get_logging_filters_ret *ret)
> +{
> + char *filters = NULL;
> + int nfilters = 0;
> + int rv = -1;
> +
> + if ((nfilters = adminConnectGetLoggingFilters(&filters, args->flags)) < 0)
> + goto cleanup;
> +
> + if (VIR_STRDUP(ret->filters, filters) < 0)
> + goto cleanup;
> +
> + ret->nfilters = nfilters;
> + rv = 0;
> +
> + cleanup:
> + if (rv < 0)
> + virNetMessageSaveError(rerr);
> + VIR_FREE(filters);
> + return rv;
> +}
> #include "admin_dispatch.h"
> diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h
> index 46d2155..d76ac20 100644
> --- a/include/libvirt/libvirt-admin.h
> +++ b/include/libvirt/libvirt-admin.h
> @@ -408,6 +408,10 @@ int virAdmConnectGetLoggingOutputs(virAdmConnectPtr conn,
> char **outputs,
> unsigned int flags);
>
> +int virAdmConnectGetLoggingFilters(virAdmConnectPtr conn,
> + char **filters,
> + unsigned int flags);
> +
> # ifdef __cplusplus
> }
> # endif
> diff --git a/src/admin/admin_protocol.x b/src/admin/admin_protocol.x
> index 237632a..69aeb54 100644
> --- a/src/admin/admin_protocol.x
> +++ b/src/admin/admin_protocol.x
> @@ -192,6 +192,15 @@ struct admin_connect_get_logging_outputs_ret {
> unsigned int noutputs;
> };
>
> +struct admin_connect_get_logging_filters_args {
> + unsigned int flags;
> +};
> +
> +struct admin_connect_get_logging_filters_ret {
> + admin_nonnull_string filters;
> + unsigned int nfilters;
> +};
> +
> /* Define the program number, protocol version and procedure numbers here. */
> const ADMIN_PROGRAM = 0x06900690;
> const ADMIN_PROTOCOL_VERSION = 1;
> @@ -282,5 +291,10 @@ enum admin_procedure {
> /**
> * @generate: none
> */
> - ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 14
> + ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 14,
> +
> + /**
> + * @generate: none
> + */
> + ADMIN_PROC_CONNECT_GET_LOGGING_FILTERS = 15
> };
> diff --git a/src/admin/admin_remote.c b/src/admin/admin_remote.c
> index de3662c..ec128f6 100644
> --- a/src/admin/admin_remote.c
> +++ b/src/admin/admin_remote.c
> @@ -472,3 +472,46 @@ remoteAdminConnectGetLoggingOutputs(virAdmConnectPtr conn,
> virObjectUnlock(priv);
> return rv;
> }
> +
> +static int
> +remoteAdminConnectGetLoggingFilters(virAdmConnectPtr conn,
> + char **filters,
> + unsigned int flags)
> +{
> + int rv = -1;
> + char *tmp_filters = NULL;
> + remoteAdminPrivPtr priv = conn->privateData;
> + admin_connect_get_logging_filters_args args;
> + admin_connect_get_logging_filters_ret ret;
> +
> + args.flags = flags;
> +
> + memset(&ret, 0, sizeof(ret));
> + virObjectLock(priv);
> +
> + if (call(conn,
> + 0,
> + ADMIN_PROC_CONNECT_GET_LOGGING_FILTERS,
> + (xdrproc_t) xdr_admin_connect_get_logging_filters_args,
> + (char *) &args,
> + (xdrproc_t) xdr_admin_connect_get_logging_filters_ret,
> + (char *) &ret) == -1)
> + goto done;
> +
> + if (filters) {
> + if (VIR_STRDUP(tmp_filters, ret.filters) < 0)
> + goto cleanup;
> +
> + *filters = tmp_filters;
> + tmp_filters = NULL;
> + }
> +
> + rv = ret.nfilters;
> +
> + cleanup:
> + xdr_free((xdrproc_t) xdr_admin_connect_get_logging_filters_ret, (char *) &ret);
> +
> + done:
> + virObjectUnlock(priv);
> + return rv;
> +}
> diff --git a/src/admin_protocol-structs b/src/admin_protocol-structs
> index 096bf5a..41d065d 100644
> --- a/src/admin_protocol-structs
> +++ b/src/admin_protocol-structs
> @@ -134,6 +134,13 @@ struct admin_connect_get_logging_outputs_ret {
> admin_nonnull_string outputs;
> u_int noutputs;
> };
> +struct admin_connect_get_logging_filters_args {
> + u_int flags;
> +};
> +struct admin_connect_get_logging_filters_ret {
> + admin_nonnull_string filters;
> + u_int nfilters;
> +};
> enum admin_procedure {
> ADMIN_PROC_CONNECT_OPEN = 1,
> ADMIN_PROC_CONNECT_CLOSE = 2,
> @@ -149,4 +156,5 @@ enum admin_procedure {
> ADMIN_PROC_SERVER_GET_CLIENT_LIMITS = 12,
> ADMIN_PROC_SERVER_SET_CLIENT_LIMITS = 13,
> ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 14,
> + ADMIN_PROC_CONNECT_GET_LOGGING_FILTERS = 15,
> };
> diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c
> index 264411f..61a538c 100644
> --- a/src/libvirt-admin.c
> +++ b/src/libvirt-admin.c
> @@ -1145,3 +1145,43 @@ virAdmConnectGetLoggingOutputs(virAdmConnectPtr conn,
> virDispatchError(NULL);
> return -1;
> }
> +
> +/**
> + * virAdmConnectGetLoggingFilters:
> + * @conn: pointer to an active admin connection
> + * @filters: pointer to a variable to store a string containing all currently
> + * defined logging filters on daemon (allocated automatically)
> + * @flags: extra flags; not used yet, so callers should always pass 0
> + *
> + * Retrieves a list of currently installed logging filters. Filters returned
> + * are contained within an automatically allocated string and delimited by
> + * spaces. The format of each filter conforms to the format described in
> + * daemon's configuration file (e.g. libvirtd.conf).
> + * To retrieve individual filters, additional parsing needs to be done by the
> + * caller. Caller is also responsible for freeing @filters correctly.
> + *
> + * Returns the number of filters returned in @filters, or -1 in case of
> + * an error.
> + */
> +int
> +virAdmConnectGetLoggingFilters(virAdmConnectPtr conn,
> + char **filters,
> + unsigned int flags)
> +{
> + int ret = -1;
> +
> + VIR_DEBUG("conn=%p, flags=%x", conn, flags);
> +
> + virResetLastError();
> + virCheckAdmConnectReturn(conn, -1);
> + virCheckNonNullArgGoto(filters, error);
> +
> + if ((ret = remoteAdminConnectGetLoggingFilters(conn, filters,
> + 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 c95aa3c..b36880d 100644
> --- a/src/libvirt_admin_private.syms
> +++ b/src/libvirt_admin_private.syms
> @@ -10,6 +10,8 @@ xdr_admin_client_close_args;
> xdr_admin_client_get_info_args;
> xdr_admin_client_get_info_ret;
> xdr_admin_connect_get_lib_version_ret;
> +xdr_admin_connect_get_logging_filters_args;
> +xdr_admin_connect_get_logging_filters_ret;
> xdr_admin_connect_get_logging_outputs_args;
> xdr_admin_connect_get_logging_outputs_ret;
> xdr_admin_connect_list_servers_args;
> diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms
> index c1420ee..e6ee0e8 100644
> --- a/src/libvirt_admin_public.syms
> +++ b/src/libvirt_admin_public.syms
> @@ -38,5 +38,6 @@ LIBVIRT_ADMIN_2.0.0 {
> virAdmClientClose;
> virAdmServerGetClientLimits;
> virAdmServerSetClientLimits;
> + virAdmConnectGetLoggingFilters;
Similar to 4/8
John
> virAdmConnectGetLoggingOutputs;
> };
>
More information about the libvir-list
mailing list