mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
admin: Introduce virAdmConnectGetLoggingFilters
Enable libvirt users to query logging filter settings. Signed-off-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
fc7d1be79e
commit
cd484b534e
@ -399,6 +399,22 @@ adminConnectGetLoggingOutputs(char **outputs, unsigned int flags)
|
||||
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
|
||||
adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
@ -420,4 +436,35 @@ adminDispatchConnectGetLoggingOutputs(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
|
||||
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"
|
||||
|
@ -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
|
||||
|
@ -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_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
|
||||
};
|
||||
|
@ -460,3 +460,38 @@ remoteAdminConnectGetLoggingOutputs(virAdmConnectPtr conn,
|
||||
virObjectUnlock(priv);
|
||||
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 {
|
||||
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_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,
|
||||
};
|
||||
|
@ -1124,3 +1124,44 @@ 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) 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;
|
||||
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;
|
||||
|
@ -43,4 +43,5 @@ LIBVIRT_ADMIN_2.0.0 {
|
||||
LIBVIRT_ADMIN_3.0.0 {
|
||||
global:
|
||||
virAdmConnectGetLoggingOutputs;
|
||||
virAdmConnectGetLoggingFilters;
|
||||
} LIBVIRT_ADMIN_2.0.0;
|
||||
|
Loading…
Reference in New Issue
Block a user