[libvirt] [PATCH REPOST 35/38] admin: Introduce virAdmConnectSetLoggingFilters

Erik Skultety eskultet at redhat.com
Wed May 4 14:30:46 UTC 2016


Enable libvirt users to modify logging filters of a daemon from outside.
---
 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 a2d35df..2a0a9ab 100644
--- a/daemon/admin.c
+++ b/daemon/admin.c
@@ -350,6 +350,16 @@ adminConnectGetLoggingOutputs(char **outputs, unsigned int flags)
 }
 
 static int
+adminConnectSetLoggingFilters(virNetDaemonPtr dmn ATTRIBUTE_UNUSED,
+                              const char *filters,
+                              unsigned int flags)
+{
+    virCheckFlags(0, -1);
+
+    return virLogSetFilters(filters);
+}
+
+static int
 adminDispatchConnectGetLoggingFilters(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 41a9e2b..6be649a 100644
--- a/include/libvirt/libvirt-admin.h
+++ b/include/libvirt/libvirt-admin.h
@@ -363,6 +363,10 @@ int virAdmConnectSetLoggingLevel(virAdmConnectPtr conn,
                                  unsigned int level,
                                  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 d20c9d5..80de75a 100644
--- a/src/admin/admin_protocol.x
+++ b/src/admin/admin_protocol.x
@@ -192,6 +192,11 @@ struct admin_connect_set_logging_level_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;
@@ -282,5 +287,10 @@ enum admin_procedure {
     /**
      * @generate: both
      */
-    ADMIN_PROC_CONNECT_SET_LOGGING_LEVEL = 14
+    ADMIN_PROC_CONNECT_SET_LOGGING_LEVEL = 14,
+
+    /**
+     * @generate: both
+     */
+    ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 15
 };
diff --git a/src/admin_protocol-structs b/src/admin_protocol-structs
index 6620fb3..000cef9 100644
--- a/src/admin_protocol-structs
+++ b/src/admin_protocol-structs
@@ -130,6 +130,10 @@ struct admin_connect_set_logging_level_args {
         u_int                      level;
         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,
@@ -145,4 +149,5 @@ enum admin_procedure {
         ADMIN_PROC_CONNECT_GET_LOGGING_FILTERS = 12,
         ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 13,
         ADMIN_PROC_CONNECT_SET_LOGGING_LEVEL = 14,
+        ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 15,
 };
diff --git a/src/libvirt-admin.c b/src/libvirt-admin.c
index 7ac72d1..fedd4a6 100644
--- a/src/libvirt-admin.c
+++ b/src/libvirt-admin.c
@@ -1123,3 +1123,39 @@ virAdmConnectSetLoggingLevel(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).
+ *
+ * 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 28ff81c..2d72a86 100644
--- a/src/libvirt_admin_private.syms
+++ b/src/libvirt_admin_private.syms
@@ -20,6 +20,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_level_args;
 xdr_admin_server_get_threadpool_parameters_args;
 xdr_admin_server_get_threadpool_parameters_ret;
diff --git a/src/libvirt_admin_public.syms b/src/libvirt_admin_public.syms
index a8b51c3..ffc8606 100644
--- a/src/libvirt_admin_public.syms
+++ b/src/libvirt_admin_public.syms
@@ -38,4 +38,5 @@ LIBVIRT_ADMIN_1.3.0 {
         virAdmServerListClients;
         virAdmClientGetInfo;
         virAdmConnectSetLoggingLevel;
+        virAdmConnectSetLoggingFilters;
 };
-- 
2.4.11




More information about the libvir-list mailing list