提交 cd484b53 编写于 作者: E Erik Skultety

admin: Introduce virAdmConnectGetLoggingFilters

Enable libvirt users to query logging filter settings.
Signed-off-by: NErik Skultety <eskultet@redhat.com>
上级 fc7d1be7
...@@ -399,6 +399,22 @@ adminConnectGetLoggingOutputs(char **outputs, unsigned int flags) ...@@ -399,6 +399,22 @@ adminConnectGetLoggingOutputs(char **outputs, unsigned int flags)
return virLogGetNbOutputs(); return virLogGetNbOutputs();
} }
/* Returns the number of defined filters or -1 in case of an error */
static int
adminConnectGetLoggingFilters(char **filters, unsigned int flags)
{
char *tmp = NULL;
int ret = 0;
virCheckFlags(0, -1);
if ((ret = virLogGetNbFilters()) > 0 && !(tmp = virLogGetFilters()))
return -1;
*filters = tmp;
return ret;
}
static int static int
adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED, adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED,
virNetServerClientPtr client ATTRIBUTE_UNUSED, virNetServerClientPtr client ATTRIBUTE_UNUSED,
...@@ -420,4 +436,35 @@ adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED, ...@@ -420,4 +436,35 @@ adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED,
return 0; return 0;
} }
static int
adminDispatchConnectGetLoggingFilters(virNetServerPtr server ATTRIBUTE_UNUSED,
virNetServerClientPtr client ATTRIBUTE_UNUSED,
virNetMessagePtr msg ATTRIBUTE_UNUSED,
virNetMessageErrorPtr rerr,
admin_connect_get_logging_filters_args *args,
admin_connect_get_logging_filters_ret *ret)
{
char *filters = NULL;
int nfilters = 0;
if ((nfilters = adminConnectGetLoggingFilters(&filters, args->flags)) < 0) {
virNetMessageSaveError(rerr);
return -1;
}
if (nfilters == 0) {
ret->filters = NULL;
} else {
char **ret_filters = NULL;
if (VIR_ALLOC(ret_filters) < 0)
return -1;
*ret_filters = filters;
ret->filters = ret_filters;
}
ret->nfilters = nfilters;
return 0;
}
#include "admin_dispatch.h" #include "admin_dispatch.h"
...@@ -408,6 +408,10 @@ int virAdmConnectGetLoggingOutputs(virAdmConnectPtr conn, ...@@ -408,6 +408,10 @@ int virAdmConnectGetLoggingOutputs(virAdmConnectPtr conn,
char **outputs, char **outputs,
unsigned int flags); unsigned int flags);
int virAdmConnectGetLoggingFilters(virAdmConnectPtr conn,
char **filters,
unsigned int flags);
# ifdef __cplusplus # ifdef __cplusplus
} }
# endif # endif
......
...@@ -192,6 +192,15 @@ struct admin_connect_get_logging_outputs_ret { ...@@ -192,6 +192,15 @@ struct admin_connect_get_logging_outputs_ret {
unsigned int noutputs; unsigned int noutputs;
}; };
struct admin_connect_get_logging_filters_args {
unsigned int flags;
};
struct admin_connect_get_logging_filters_ret {
admin_string filters;
unsigned int nfilters;
};
/* Define the program number, protocol version and procedure numbers here. */ /* Define the program number, protocol version and procedure numbers here. */
const ADMIN_PROGRAM = 0x06900690; const ADMIN_PROGRAM = 0x06900690;
const ADMIN_PROTOCOL_VERSION = 1; const ADMIN_PROTOCOL_VERSION = 1;
...@@ -282,5 +291,10 @@ enum admin_procedure { ...@@ -282,5 +291,10 @@ enum admin_procedure {
/** /**
* @generate: none * @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
}; };
...@@ -460,3 +460,38 @@ remoteAdminConnectGetLoggingOutputs(virAdmConnectPtr conn, ...@@ -460,3 +460,38 @@ remoteAdminConnectGetLoggingOutputs(virAdmConnectPtr conn,
virObjectUnlock(priv); virObjectUnlock(priv);
return rv; return rv;
} }
static int
remoteAdminConnectGetLoggingFilters(virAdmConnectPtr conn,
char **filters,
unsigned int flags)
{
int rv = -1;
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)
*filters = ret.filters ? *ret.filters : NULL;
rv = ret.nfilters;
VIR_FREE(ret.filters);
done:
virObjectUnlock(priv);
return rv;
}
...@@ -134,6 +134,13 @@ struct admin_connect_get_logging_outputs_ret { ...@@ -134,6 +134,13 @@ struct admin_connect_get_logging_outputs_ret {
admin_nonnull_string outputs; admin_nonnull_string outputs;
u_int noutputs; u_int noutputs;
}; };
struct admin_connect_get_logging_filters_args {
u_int flags;
};
struct admin_connect_get_logging_filters_ret {
admin_string filters;
u_int nfilters;
};
enum admin_procedure { enum admin_procedure {
ADMIN_PROC_CONNECT_OPEN = 1, ADMIN_PROC_CONNECT_OPEN = 1,
ADMIN_PROC_CONNECT_CLOSE = 2, ADMIN_PROC_CONNECT_CLOSE = 2,
...@@ -149,4 +156,5 @@ enum admin_procedure { ...@@ -149,4 +156,5 @@ enum admin_procedure {
ADMIN_PROC_SERVER_GET_CLIENT_LIMITS = 12, ADMIN_PROC_SERVER_GET_CLIENT_LIMITS = 12,
ADMIN_PROC_SERVER_SET_CLIENT_LIMITS = 13, ADMIN_PROC_SERVER_SET_CLIENT_LIMITS = 13,
ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 14, ADMIN_PROC_CONNECT_GET_LOGGING_OUTPUTS = 14,
ADMIN_PROC_CONNECT_GET_LOGGING_FILTERS = 15,
}; };
...@@ -1124,3 +1124,44 @@ virAdmConnectGetLoggingOutputs(virAdmConnectPtr conn, ...@@ -1124,3 +1124,44 @@ virAdmConnectGetLoggingOutputs(virAdmConnectPtr conn,
virDispatchError(NULL); virDispatchError(NULL);
return -1; 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) or
* NULL if just the number of defined outputs is required
* @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);
if ((ret = remoteAdminConnectGetLoggingFilters(conn, filters,
flags)) < 0)
goto error;
return ret;
error:
virDispatchError(NULL);
return -1;
}
...@@ -10,6 +10,8 @@ xdr_admin_client_close_args; ...@@ -10,6 +10,8 @@ xdr_admin_client_close_args;
xdr_admin_client_get_info_args; xdr_admin_client_get_info_args;
xdr_admin_client_get_info_ret; xdr_admin_client_get_info_ret;
xdr_admin_connect_get_lib_version_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_args;
xdr_admin_connect_get_logging_outputs_ret; xdr_admin_connect_get_logging_outputs_ret;
xdr_admin_connect_list_servers_args; xdr_admin_connect_list_servers_args;
......
...@@ -43,4 +43,5 @@ LIBVIRT_ADMIN_2.0.0 { ...@@ -43,4 +43,5 @@ LIBVIRT_ADMIN_2.0.0 {
LIBVIRT_ADMIN_3.0.0 { LIBVIRT_ADMIN_3.0.0 {
global: global:
virAdmConnectGetLoggingOutputs; virAdmConnectGetLoggingOutputs;
virAdmConnectGetLoggingFilters;
} LIBVIRT_ADMIN_2.0.0; } LIBVIRT_ADMIN_2.0.0;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册