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? 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