telemetry: use log function from pointer
Rather than passing back an error string to the caller, take as input the rte_log function to use, and just use regular logging. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Ciara Power <ciara.power@intel.com>
This commit is contained in:
parent
c8c3cfd699
commit
37b881a961
@ -941,16 +941,12 @@ rte_eal_init(int argc, char **argv)
|
||||
return -1;
|
||||
}
|
||||
if (!internal_conf->no_telemetry) {
|
||||
const char *error_str = NULL;
|
||||
uint32_t tlog = rte_log_register_type_and_pick_level(
|
||||
"lib.telemetry", RTE_LOG_WARNING);
|
||||
if (rte_telemetry_init(rte_eal_get_runtime_dir(),
|
||||
rte_version(),
|
||||
&internal_conf->ctrl_cpuset, &error_str)
|
||||
!= 0) {
|
||||
rte_eal_init_alert(error_str);
|
||||
&internal_conf->ctrl_cpuset, rte_log, tlog) != 0)
|
||||
return -1;
|
||||
}
|
||||
if (error_str != NULL)
|
||||
RTE_LOG(NOTICE, EAL, "%s\n", error_str);
|
||||
}
|
||||
|
||||
eal_mcfg_complete();
|
||||
|
@ -1314,16 +1314,12 @@ rte_eal_init(int argc, char **argv)
|
||||
return -1;
|
||||
}
|
||||
if (!internal_conf->no_telemetry) {
|
||||
const char *error_str = NULL;
|
||||
uint32_t tlog = rte_log_register_type_and_pick_level(
|
||||
"lib.telemetry", RTE_LOG_WARNING);
|
||||
if (rte_telemetry_init(rte_eal_get_runtime_dir(),
|
||||
rte_version(),
|
||||
&internal_conf->ctrl_cpuset, &error_str)
|
||||
!= 0) {
|
||||
rte_eal_init_alert(error_str);
|
||||
&internal_conf->ctrl_cpuset, rte_log, tlog) != 0)
|
||||
return -1;
|
||||
}
|
||||
if (error_str != NULL)
|
||||
RTE_LOG(NOTICE, EAL, "%s\n", error_str);
|
||||
}
|
||||
|
||||
eal_mcfg_complete();
|
||||
|
@ -294,6 +294,12 @@ rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help);
|
||||
|
||||
#ifdef RTE_HAS_CPUSET
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Log function type, to allow passing as parameter if necessary
|
||||
*/
|
||||
typedef int (*rte_log_fn)(uint32_t level, uint32_t logtype, const char *format, ...);
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Initialize Telemetry.
|
||||
@ -302,9 +308,10 @@ rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help);
|
||||
* The runtime directory of DPDK.
|
||||
* @param cpuset
|
||||
* The CPU set to be used for setting the thread affinity.
|
||||
* @param err_str
|
||||
* This err_str pointer should point to NULL on entry. In the case of an error
|
||||
* or warning, it will be non-NULL on exit.
|
||||
* @param log_fn
|
||||
* Function pointer to the rte_log function for logging use
|
||||
* @param registered_logtype
|
||||
* The registered log type to use for logging
|
||||
*
|
||||
* @return
|
||||
* 0 on success.
|
||||
@ -314,7 +321,7 @@ rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help);
|
||||
__rte_internal
|
||||
int
|
||||
rte_telemetry_init(const char *runtime_dir, const char *rte_version, rte_cpuset_t *cpuset,
|
||||
const char **err_str);
|
||||
rte_log_fn log_fn, uint32_t registered_logtype);
|
||||
|
||||
#endif /* RTE_HAS_CPUSET */
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include <rte_string_fns.h>
|
||||
#include <rte_common.h>
|
||||
#include <rte_spinlock.h>
|
||||
#include <rte_log.h>
|
||||
|
||||
#include "rte_telemetry.h"
|
||||
#include "telemetry_json.h"
|
||||
@ -49,7 +50,14 @@ static struct socket v1_socket; /* socket for v1 telemetry */
|
||||
#endif /* !RTE_EXEC_ENV_WINDOWS */
|
||||
|
||||
static const char *telemetry_version; /* save rte_version */
|
||||
static char telemetry_log_error[1024]; /* Will contain error on init failure */
|
||||
static const char *socket_dir; /* runtime directory */
|
||||
static rte_cpuset_t *thread_cpuset;
|
||||
static rte_log_fn rte_log_ptr;
|
||||
static uint32_t logtype;
|
||||
|
||||
#define TMTY_LOG(l, ...) \
|
||||
rte_log_ptr(RTE_LOG_ ## l, logtype, "TELEMETRY: " __VA_ARGS__)
|
||||
|
||||
/* list of command callbacks, with one command registered by default */
|
||||
static struct cmd_callback callbacks[TELEMETRY_MAX_CALLBACKS];
|
||||
static int num_callbacks; /* How many commands are registered */
|
||||
@ -345,9 +353,7 @@ socket_listener(void *socket)
|
||||
struct socket *s = (struct socket *)socket;
|
||||
int s_accepted = accept(s->sock, NULL, NULL);
|
||||
if (s_accepted < 0) {
|
||||
snprintf(telemetry_log_error,
|
||||
sizeof(telemetry_log_error),
|
||||
"Error with accept, telemetry thread quitting");
|
||||
TMTY_LOG(ERR, "Error with accept, telemetry thread quitting\n");
|
||||
return NULL;
|
||||
}
|
||||
if (s->num_clients != NULL) {
|
||||
@ -389,9 +395,7 @@ create_socket(char *path)
|
||||
{
|
||||
int sock = socket(AF_UNIX, SOCK_SEQPACKET, 0);
|
||||
if (sock < 0) {
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"Error with socket creation, %s",
|
||||
strerror(errno));
|
||||
TMTY_LOG(ERR, "Error with socket creation, %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -399,17 +403,13 @@ create_socket(char *path)
|
||||
strlcpy(sun.sun_path, path, sizeof(sun.sun_path));
|
||||
unlink(sun.sun_path);
|
||||
if (bind(sock, (void *) &sun, sizeof(sun)) < 0) {
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"Error binding socket: %s",
|
||||
strerror(errno));
|
||||
TMTY_LOG(ERR, "Error binding socket: %s\n", strerror(errno));
|
||||
sun.sun_path[0] = 0;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (listen(sock, 1) < 0) {
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"Error calling listen for socket: %s",
|
||||
strerror(errno));
|
||||
TMTY_LOG(ERR, "Error calling listen for socket: %s\n", strerror(errno));
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -422,35 +422,33 @@ error:
|
||||
}
|
||||
|
||||
static int
|
||||
telemetry_legacy_init(const char *runtime_dir, rte_cpuset_t *cpuset)
|
||||
telemetry_legacy_init(void)
|
||||
{
|
||||
pthread_t t_old;
|
||||
|
||||
if (num_legacy_callbacks == 1) {
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"No legacy callbacks, legacy socket not created");
|
||||
TMTY_LOG(WARNING, "No legacy callbacks, legacy socket not created\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
v1_socket.fn = legacy_client_handler;
|
||||
if ((size_t) snprintf(v1_socket.path, sizeof(v1_socket.path),
|
||||
"%s/telemetry", runtime_dir)
|
||||
>= sizeof(v1_socket.path)) {
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"Error with socket binding, path too long");
|
||||
"%s/telemetry", socket_dir) >= sizeof(v1_socket.path)) {
|
||||
TMTY_LOG(ERR, "Error with socket binding, path too long\n");
|
||||
return -1;
|
||||
}
|
||||
v1_socket.sock = create_socket(v1_socket.path);
|
||||
if (v1_socket.sock < 0)
|
||||
return -1;
|
||||
pthread_create(&t_old, NULL, socket_listener, &v1_socket);
|
||||
pthread_setaffinity_np(t_old, sizeof(*cpuset), cpuset);
|
||||
pthread_setaffinity_np(t_old, sizeof(*thread_cpuset), thread_cpuset);
|
||||
|
||||
TMTY_LOG(DEBUG, "Legacy telemetry socket initialized ok\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
telemetry_v2_init(const char *runtime_dir, rte_cpuset_t *cpuset)
|
||||
telemetry_v2_init(void)
|
||||
{
|
||||
pthread_t t_new;
|
||||
|
||||
@ -462,10 +460,9 @@ telemetry_v2_init(const char *runtime_dir, rte_cpuset_t *cpuset)
|
||||
rte_telemetry_register_cmd("/help", command_help,
|
||||
"Returns help text for a command. Parameters: string command");
|
||||
v2_socket.fn = client_handler;
|
||||
if (strlcpy(v2_socket.path, get_socket_path(runtime_dir, 2),
|
||||
if (strlcpy(v2_socket.path, get_socket_path(socket_dir, 2),
|
||||
sizeof(v2_socket.path)) >= sizeof(v2_socket.path)) {
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"Error with socket binding, path too long");
|
||||
TMTY_LOG(ERR, "Error with socket binding, path too long\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -473,7 +470,7 @@ telemetry_v2_init(const char *runtime_dir, rte_cpuset_t *cpuset)
|
||||
if (v2_socket.sock < 0)
|
||||
return -1;
|
||||
pthread_create(&t_new, NULL, socket_listener, &v2_socket);
|
||||
pthread_setaffinity_np(t_new, sizeof(*cpuset), cpuset);
|
||||
pthread_setaffinity_np(t_new, sizeof(*thread_cpuset), thread_cpuset);
|
||||
atexit(unlink_sockets);
|
||||
|
||||
return 0;
|
||||
@ -482,25 +479,20 @@ telemetry_v2_init(const char *runtime_dir, rte_cpuset_t *cpuset)
|
||||
#endif /* !RTE_EXEC_ENV_WINDOWS */
|
||||
|
||||
int32_t
|
||||
rte_telemetry_init(const char *runtime_dir, const char *rte_version,
|
||||
rte_cpuset_t *cpuset, const char **err_str)
|
||||
rte_telemetry_init(const char *runtime_dir, const char *rte_version, rte_cpuset_t *cpuset,
|
||||
rte_log_fn log_fn, uint32_t registered_logtype)
|
||||
{
|
||||
telemetry_version = rte_version;
|
||||
#ifndef RTE_EXEC_ENV_WINDOWS
|
||||
if (telemetry_v2_init(runtime_dir, cpuset) != 0) {
|
||||
*err_str = telemetry_log_error;
|
||||
return -1;
|
||||
}
|
||||
if (telemetry_legacy_init(runtime_dir, cpuset) != 0) {
|
||||
*err_str = telemetry_log_error;
|
||||
}
|
||||
#else /* RTE_EXEC_ENV_WINDOWS */
|
||||
RTE_SET_USED(runtime_dir);
|
||||
RTE_SET_USED(cpuset);
|
||||
RTE_SET_USED(err_str);
|
||||
socket_dir = runtime_dir;
|
||||
thread_cpuset = cpuset;
|
||||
rte_log_ptr = log_fn;
|
||||
logtype = registered_logtype;
|
||||
|
||||
snprintf(telemetry_log_error, sizeof(telemetry_log_error),
|
||||
"DPDK Telemetry is not supported on Windows.");
|
||||
#ifndef RTE_EXEC_ENV_WINDOWS
|
||||
if (telemetry_v2_init() != 0)
|
||||
return -1;
|
||||
TMTY_LOG(DEBUG, "Telemetry initialized ok\n");
|
||||
telemetry_legacy_init();
|
||||
#endif /* RTE_EXEC_ENV_WINDOWS */
|
||||
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user