On 11/22/2016 11:29 AM, Erik Skultety wrote: > On Wed, Nov 09, 2016 at 11:26:26AM -0500, John Ferlan wrote: >> >> >> On 11/01/2016 06:27 AM, Erik Skultety wrote: >>> Enable libvirt users to modify logging filters of a daemon from outside. >>> >>> Signed-off-by: Erik Skultety <eskultet@xxxxxxxxxx> >>> --- >>> daemon/admin.c | 10 ++++++++++ >>> include/libvirt/libvirt-admin.h | 4 ++++ >>> src/admin/admin_protocol.x | 12 +++++++++++- >>> src/admin_protocol-structs | 5 +++++ >>> src/libvirt-admin.c | 36 ++++++++++++++++++++++++++++++++++++ >>> src/libvirt_admin_private.syms | 1 + >>> src/libvirt_admin_public.syms | 1 + >>> 7 files changed, 68 insertions(+), 1 deletion(-) >>> >>> diff --git a/daemon/admin.c b/daemon/admin.c >>> index 79961b2..b66ccd8 100644 >>> --- a/daemon/admin.c >>> +++ b/daemon/admin.c >>> @@ -434,6 +434,16 @@ adminConnectSetLoggingOutputs(virNetDaemonPtr dmn ATTRIBUTE_UNUSED, >>> } >>> >>> static int >>> +adminConnectSetLoggingFilters(virNetDaemonPtr dmn ATTRIBUTE_UNUSED, >>> + const char *filters, >>> + unsigned int flags) >>> +{ >>> + virCheckFlags(0, -1); >>> + >>> + return virLogSetFilters(filters); >>> +} >>> + >>> +static int >>> adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED, >>> virNetServerClientPtr client ATTRIBUTE_UNUSED, >>> virNetMessagePtr msg ATTRIBUTE_UNUSED, >>> diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h >>> index aa33fef..161727e 100644 >>> --- a/include/libvirt/libvirt-admin.h >>> +++ b/include/libvirt/libvirt-admin.h >>> @@ -416,6 +416,10 @@ int virAdmConnectSetLoggingOutputs(virAdmConnectPtr conn, >>> const char *outputs, >>> unsigned int flags); >>> >>> +int virAdmConnectSetLoggingFilters(virAdmConnectPtr conn, >>> + const char *filters, >>> + unsigned int flags); >>> + >>> # ifdef __cplusplus >>> } >>> # endif >>> diff --git a/src/admin/admin_protocol.x b/src/admin/admin_protocol.x >>> index 4a05928..4eef088 100644 >>> --- a/src/admin/admin_protocol.x >>> +++ b/src/admin/admin_protocol.x >>> @@ -206,6 +206,11 @@ struct admin_connect_set_logging_outputs_args { >>> unsigned int flags; >>> }; >>> >>> +struct admin_connect_set_logging_filters_args { >>> + admin_nonnull_string filters; >>> + unsigned int flags; >>> +}; >>> + >>> /* Define the program number, protocol version and procedure numbers here. */ >>> const ADMIN_PROGRAM = 0x06900690; >>> const ADMIN_PROTOCOL_VERSION = 1; >>> @@ -306,5 +311,10 @@ enum admin_procedure { >>> /** >>> * @generate: both >>> */ >>> - ADMIN_PROC_CONNECT_SET_LOGGING_OUTPUTS = 16 >>> + ADMIN_PROC_CONNECT_SET_LOGGING_OUTPUTS = 16, >>> + >>> + /** >>> + * @generate: both >>> + */ >>> + ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 17 >>> }; >>> diff --git a/src/admin_protocol-structs b/src/admin_protocol-structs >>> index cbc99e3..1974c07 100644 >>> --- a/src/admin_protocol-structs >>> +++ b/src/admin_protocol-structs >>> @@ -145,6 +145,10 @@ struct admin_connect_set_logging_outputs_args { >>> admin_nonnull_string outputs; >>> u_int flags; >>> }; >>> +struct admin_connect_set_logging_filters_args { >>> + admin_nonnull_string filters; >>> + u_int flags; >>> +}; >>> enum admin_procedure { >>> ADMIN_PROC_CONNECT_OPEN = 1, >>> ADMIN_PROC_CONNECT_CLOSE = 2, >>> @@ -162,4 +166,5 @@ enum admin_procedure { >>> ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 14, >>> ADMIN_PROC_CONNECT_GET_LOGGING_FILTERS = 15, >>> ADMIN_PROC_CONNECT_SET_LOGGING_OUTPUTS = 16, >>> + ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 17, >>> }; >>> diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c >>> index 01ae26c..c74e6b9 100644 >>> --- a/src/libvirt-admin.c >>> +++ b/src/libvirt-admin.c >>> @@ -1221,3 +1221,39 @@ virAdmConnectSetLoggingOutputs(virAdmConnectPtr conn, >>> virDispatchError(NULL); >>> return -1; >>> } >>> + >>> +/** >>> + * virAdmConnectSetLoggingFilters: >>> + * @conn: pointer to an active admin connection >>> + * @filters: pointer to a string containing a list of filters to be defined >>> + * @flags: extra flags; not used yet, so callers should always pass 0 >>> + * >>> + * Redefine the existing (set of) filter(s) with a new one specified in >>> + * @filters. If multiple filters are specified, they need to be delimited by >>> + * spaces. The format of each filter must conform to the format described in >>> + * daemon's configuration file (e.g. libvirtd.conf). >>> + * >> >> So you didn't want to write the code that would allow resetting filters >> back to their defaults? Or is that next? >> > > See my reply to 2/8, we should either fallback to some hard-coded value like > with the outputs or not at all, since that would introduce certain level of > confusion like what do we actually default to - a libvirt hard-coded value or > the initial user-provided value. So passing NULL could have a different result than passing ""?... Hmmm. In any case, this is probably what prompted me to note something in patch 2 about virLogDefaultFilter. John > > Erik > >> IOW: I can see value for altering the filters in real time and then >> wanting to reset them back to whatever was originally set at daemon startup. >> >>> + * Returns 0 if the new filter or the set of filters has been defined >>> + * successfully, or -1 in case of an error. >>> + */ >>> +int >>> +virAdmConnectSetLoggingFilters(virAdmConnectPtr conn, >>> + const 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 = remoteAdminConnectSetLoggingFilters(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 d1ca034..22b7167 100644 >>> --- a/src/libvirt_admin_private.syms >>> +++ b/src/libvirt_admin_private.syms >>> @@ -19,6 +19,7 @@ xdr_admin_connect_list_servers_ret; >>> xdr_admin_connect_lookup_server_args; >>> xdr_admin_connect_lookup_server_ret; >>> xdr_admin_connect_open_args; >>> +xdr_admin_connect_set_logging_filters_args; >>> xdr_admin_connect_set_logging_outputs_args; >>> xdr_admin_server_get_client_limits_args; >>> xdr_admin_server_get_client_limits_ret; >>> diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms >>> index d39de42..b4aee98 100644 >>> --- a/src/libvirt_admin_public.syms >>> +++ b/src/libvirt_admin_public.syms >>> @@ -40,5 +40,6 @@ LIBVIRT_ADMIN_2.0.0 { >>> virAdmServerSetClientLimits; >>> virAdmConnectGetLoggingFilters; >>> virAdmConnectGetLoggingOutputs; >>> + virAdmConnectSetLoggingFilters; >> >> Similar stanza comment from patch 6 >> >> >> John >>> virAdmConnectSetLoggingOutputs; >>> }; >>> >> >> -- >> libvir-list mailing list >> libvir-list@xxxxxxxxxx >> https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list