/*
- * Copyright (C) 2017 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ * Copyright (C) 2017 Jérémie Galarneau <jeremie.galarneau@efficios.com>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2 only,
- * as published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "version.h"
#include "sessiond-config.h"
-#include <assert.h>
#include "lttng-ust-ctl.h"
#include <common/defaults.h>
#include <limits.h>
-#include <errno.h>
#include <ctype.h>
#include <common/error.h>
#include <common/utils.h>
+#include <common/compat/errno.h>
#include <common/compat/getenv.h>
static
.verbose = 0,
.verbose_consumer = 0,
- .agent_tcp_port = DEFAULT_AGENT_TCP_PORT,
+ .agent_tcp_port = { .begin = DEFAULT_AGENT_TCP_PORT_RANGE_BEGIN, .end = DEFAULT_AGENT_TCP_PORT_RANGE_END },
+ .event_notifier_buffer_size_kernel = DEFAULT_EVENT_NOTIFIER_ERROR_COUNT_MAP_SIZE,
+ .event_notifier_buffer_size_userspace = DEFAULT_EVENT_NOTIFIER_ERROR_COUNT_MAP_SIZE,
.app_socket_timeout = DEFAULT_APP_SOCKET_RW_TIMEOUT,
.no_kernel = false,
.daemonize = false,
.sig_parent = false,
- .tracing_group_name.value = DEFAULT_TRACING_GROUP,
+ .tracing_group_name.value = (char *) DEFAULT_TRACING_GROUP,
.kmod_probes_list.value = NULL,
.kmod_extra_probes_list.value = NULL,
}
/* Only use for dynamically-allocated strings. */
-LTTNG_HIDDEN
void config_string_set(struct config_string *config_str, char *value)
{
- assert(config_str);
+ LTTNG_ASSERT(config_str);
if (config_str->should_free) {
free(config_str->value);
config_str->should_free = false;
config_str->value = value;
}
-LTTNG_HIDDEN
int sessiond_config_apply_env_config(struct sessiond_config *config)
{
int ret = 0;
return ret;
}
-LTTNG_HIDDEN
int sessiond_config_init(struct sessiond_config *config)
{
int ret;
bool is_root = (getuid() == 0);
char *str;
- assert(config);
+ LTTNG_ASSERT(config);
memcpy(config, &sessiond_config_build_defaults, sizeof(*config));
if (is_root) {
} else {
ret = config_set_paths_non_root(config);
}
+ if (ret < 0) {
+ goto error;
+ }
/* 32 bits consumerd path setup */
ret = asprintf(&str, DEFAULT_USTCONSUMERD32_PATH,
config->rundir.value);
if (ret < 0) {
ERR("Failed to set 32-bit consumer path");
- goto end;
+ goto error;
}
config_string_set(&config->consumerd32_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set 32-bit consumer error socket path");
- goto end;
+ goto error;
}
config_string_set(&config->consumerd32_err_unix_sock_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set 32-bit consumer command socket path");
- goto end;
+ goto error;
}
config_string_set(&config->consumerd32_cmd_unix_sock_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set 64-bit consumer path");
- goto end;
+ goto error;
}
config_string_set(&config->consumerd64_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set 64-bit consumer error socket path");
- goto end;
+ goto error;
}
config_string_set(&config->consumerd64_err_unix_sock_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set 64-bit consumer command socket path");
- goto end;
+ goto error;
}
config_string_set(&config->consumerd64_cmd_unix_sock_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set kernel consumer path");
- goto end;
+ goto error;
}
config_string_set(&config->kconsumerd_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set kernel consumer error socket path");
- goto end;
+ goto error;
}
config_string_set(&config->kconsumerd_err_unix_sock_path, str);
str = NULL;
config->rundir.value);
if (ret < 0) {
ERR("Failed to set kernel consumer command socket path");
- goto end;
+ goto error;
}
config_string_set(&config->kconsumerd_cmd_unix_sock_path, str);
str = NULL;
DEFAULT_LTTNG_SESSIOND_PIDFILE);
if (ret < 0) {
ERR("Failed to set PID file path");
- goto end;
+ goto error;
}
config_string_set(&config->pid_file_path, str);
str = NULL;
DEFAULT_LTTNG_SESSIOND_LOCKFILE);
if (ret < 0) {
ERR("Failed to set lock file path");
- goto end;
+ goto error;
}
config_string_set(&config->lock_file_path, str);
str = NULL;
DEFAULT_LTTNG_SESSIOND_AGENTPORT_FILE);
if (ret < 0) {
ERR("Failed to set agent port file path");
- goto end;
+ goto error;
}
config_string_set(&config->agent_port_file_path, str);
str = NULL;
#error "Unknown bitness"
#endif
ret = 0;
-end:
+ return ret;
+error:
+ sessiond_config_fini(config);
return ret;
}
-LTTNG_HIDDEN
void sessiond_config_fini(struct sessiond_config *config)
{
config_string_fini(&config->tracing_group_name);
config_string_fini(&config->kmod_probes_list);
config_string_fini(&config->kmod_extra_probes_list);
+ config_string_fini(&config->rundir);
config_string_fini(&config->apps_unix_sock_path);
config_string_fini(&config->client_unix_sock_path);
config_string_fini(&config->wait_shm_path);
if (resolve_path(path_config_str)) \
return -1
-LTTNG_HIDDEN
int sessiond_config_resolve_paths(struct sessiond_config *config)
{
RESOLVE_CHECK(&config->apps_unix_sock_path);
return 0;
}
-LTTNG_HIDDEN
void sessiond_config_log(struct sessiond_config *config)
{
DBG_NO_LOC("[sessiond configuration]");
- DBG_NO_LOC("\tverbose: %i", config->verbose);
- DBG_NO_LOC("\tverbose consumer: %i", config->verbose_consumer);
- DBG_NO_LOC("\tquiet mode: %s", config->quiet ? "True" : "False");
- DBG_NO_LOC("\tagent_tcp_port: %i", config->agent_tcp_port);
- DBG_NO_LOC("\tapplication socket timeout: %i", config->app_socket_timeout);
- DBG_NO_LOC("\tno-kernel: %s", config->no_kernel ? "True" : "False");
- DBG_NO_LOC("\tbackground: %s", config->background ? "True" : "False");
- DBG_NO_LOC("\tdaemonize: %s", config->daemonize ? "True" : "False");
- DBG_NO_LOC("\tsignal parent on start: %s", config->sig_parent ? "True" : "False");
- DBG_NO_LOC("\ttracing group name: %s", config->tracing_group_name.value ? : "Unknown");
- DBG_NO_LOC("\tkmod_probe_list: %s", config->kmod_probes_list.value ? : "None");
- DBG_NO_LOC("\tkmod_extra_probe_list: %s", config->kmod_extra_probes_list.value ? : "None");
- DBG_NO_LOC("\trundir: %s", config->rundir.value ? : "Unknown");
- DBG_NO_LOC("\tapplication socket path: %s", config->apps_unix_sock_path.value ? : "Unknown");
- DBG_NO_LOC("\tclient socket path: %s", config->client_unix_sock_path.value ? : "Unknown");
- DBG_NO_LOC("\twait shm path: %s", config->wait_shm_path.value ? : "Unknown");
- DBG_NO_LOC("\thealth socket path: %s", config->health_unix_sock_path.value ? : "Unknown");
- DBG_NO_LOC("\tLTTNG_UST_CLOCK_PLUGIN: %s", config->lttng_ust_clock_plugin.value ? : "None");
- DBG_NO_LOC("\tpid file path: %s", config->pid_file_path.value ? : "Unknown");
- DBG_NO_LOC("\tlock file path: %s", config->lock_file_path.value ? : "Unknown");
- DBG_NO_LOC("\tsession load path: %s", config->load_session_path.value ? : "None");
- DBG_NO_LOC("\tagent port file path: %s", config->agent_port_file_path.value ? : "Unknown");
+ DBG_NO_LOC("\tversion %s", VERSION);
+ if (GIT_VERSION[0] != '\0') {
+ DBG_NO_LOC("\tgit version %s", GIT_VERSION);
+ }
+ if (EXTRA_VERSION_NAME[0] != '\0') {
+ DBG_NO_LOC("\textra version name %s", EXTRA_VERSION_NAME);
+ }
+ if (EXTRA_VERSION_DESCRIPTION[0] != '\0') {
+ DBG_NO_LOC("\textra version description:\n\t%s", EXTRA_VERSION_DESCRIPTION);
+ }
+ if (EXTRA_VERSION_PATCHES[0] != '\0') {
+ DBG_NO_LOC("\textra version patches:\n\t%s", EXTRA_VERSION_PATCHES);
+ }
+ DBG_NO_LOC("\tverbose: %i", config->verbose);
+ DBG_NO_LOC("\tverbose consumer: %i", config->verbose_consumer);
+ DBG_NO_LOC("\tquiet mode: %s", config->quiet ? "True" : "False");
+ if (config->agent_tcp_port.begin == config->agent_tcp_port.end) {
+ DBG_NO_LOC("\tagent_tcp_port: %i", config->agent_tcp_port.begin);
+ } else {
+ DBG_NO_LOC("\tagent_tcp_port: [%i, %i]",
+ config->agent_tcp_port.begin,
+ config->agent_tcp_port.end);
+ }
+ DBG_NO_LOC("\tapplication socket timeout: %i", config->app_socket_timeout);
+ DBG_NO_LOC("\tno-kernel: %s", config->no_kernel ? "True" : "False");
+ DBG_NO_LOC("\tbackground: %s", config->background ? "True" : "False");
+ DBG_NO_LOC("\tdaemonize: %s", config->daemonize ? "True" : "False");
+ DBG_NO_LOC("\tsignal parent on start: %s", config->sig_parent ? "True" : "False");
+ DBG_NO_LOC("\ttracing group name: %s", config->tracing_group_name.value ? : "Unknown");
+ DBG_NO_LOC("\tkmod_probe_list: %s", config->kmod_probes_list.value ? : "None");
+ DBG_NO_LOC("\tkmod_extra_probe_list: %s", config->kmod_extra_probes_list.value ? : "None");
+ DBG_NO_LOC("\trundir: %s", config->rundir.value ? : "Unknown");
+ DBG_NO_LOC("\tapplication socket path: %s", config->apps_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tclient socket path: %s", config->client_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\twait shm path: %s", config->wait_shm_path.value ? : "Unknown");
+ DBG_NO_LOC("\thealth socket path: %s", config->health_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tLTTNG_UST_CLOCK_PLUGIN: %s", config->lttng_ust_clock_plugin.value ? : "None");
+ DBG_NO_LOC("\tpid file path: %s", config->pid_file_path.value ? : "Unknown");
+ DBG_NO_LOC("\tlock file path: %s", config->lock_file_path.value ? : "Unknown");
+ DBG_NO_LOC("\tsession load path: %s", config->load_session_path.value ? : "None");
+ DBG_NO_LOC("\tagent port file path: %s", config->agent_port_file_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd32 path: %s", config->consumerd32_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd32 bin path: %s", config->consumerd32_bin_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd32 lib dir: %s", config->consumerd32_lib_dir.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd32 err unix sock path:%s", config->consumerd32_err_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd32 cmd unix sock path:%s", config->consumerd32_cmd_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd64 path: %s", config->consumerd64_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd64 bin path: %s", config->consumerd64_bin_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd64 lib dir: %s", config->consumerd64_lib_dir.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd64 err unix sock path:%s", config->consumerd64_err_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tconsumerd64 cmd unix sock path:%s", config->consumerd64_cmd_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tkconsumerd path: %s", config->kconsumerd_path.value ? : "Unknown");
+ DBG_NO_LOC("\tkconsumerd err unix sock path: %s", config->kconsumerd_err_unix_sock_path.value ? : "Unknown");
+ DBG_NO_LOC("\tkconsumerd cmd unix sock path: %s", config->kconsumerd_cmd_unix_sock_path.value ? : "Unknown");
}