/*
- * Copyright (C) 2014 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ * Copyright (C) 2014 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.
*/
#define _LGPL_SOURCE
/* Return LTTNG_OK on success else a LTTNG_ERR* code. */
static
int save_ust_channel_attributes(struct config_writer *writer,
- struct lttng_ust_channel_attr *attr)
+ struct lttng_ust_abi_channel_attr *attr)
{
int ret;
struct ltt_ust_channel *channel = NULL;
ret = config_writer_write_element_string(writer,
config_element_output_type,
- attr->output == LTTNG_UST_MMAP ?
+ attr->output == LTTNG_UST_ABI_MMAP ?
config_output_type_mmap : config_output_type_splice);
if (ret) {
ret = LTTNG_ERR_SAVE_IO_FAIL;
static
const char *get_kernel_instrumentation_string(
- enum lttng_kernel_instrumentation instrumentation)
+ enum lttng_kernel_abi_instrumentation instrumentation)
{
const char *instrumentation_string;
switch (instrumentation) {
- case LTTNG_KERNEL_ALL:
+ case LTTNG_KERNEL_ABI_ALL:
instrumentation_string = config_event_type_all;
break;
- case LTTNG_KERNEL_TRACEPOINT:
+ case LTTNG_KERNEL_ABI_TRACEPOINT:
instrumentation_string = config_event_type_tracepoint;
break;
- case LTTNG_KERNEL_KPROBE:
+ case LTTNG_KERNEL_ABI_KPROBE:
instrumentation_string = config_event_type_probe;
break;
- case LTTNG_KERNEL_UPROBE:
+ case LTTNG_KERNEL_ABI_UPROBE:
instrumentation_string = config_event_type_userspace_probe;
break;
- case LTTNG_KERNEL_FUNCTION:
+ case LTTNG_KERNEL_ABI_FUNCTION:
instrumentation_string = config_event_type_function_entry;
break;
- case LTTNG_KERNEL_KRETPROBE:
+ case LTTNG_KERNEL_ABI_KRETPROBE:
instrumentation_string = config_event_type_function;
break;
- case LTTNG_KERNEL_NOOP:
+ case LTTNG_KERNEL_ABI_NOOP:
instrumentation_string = config_event_type_noop;
break;
- case LTTNG_KERNEL_SYSCALL:
+ case LTTNG_KERNEL_ABI_SYSCALL:
instrumentation_string = config_event_type_syscall;
break;
default:
static
const char *get_kernel_context_type_string(
- enum lttng_kernel_context_type context_type)
+ enum lttng_kernel_abi_context_type context_type)
{
const char *context_type_string;
switch (context_type) {
- case LTTNG_KERNEL_CONTEXT_PID:
+ case LTTNG_KERNEL_ABI_CONTEXT_PID:
context_type_string = config_event_context_pid;
break;
- case LTTNG_KERNEL_CONTEXT_PROCNAME:
+ case LTTNG_KERNEL_ABI_CONTEXT_PROCNAME:
context_type_string = config_event_context_procname;
break;
- case LTTNG_KERNEL_CONTEXT_PRIO:
+ case LTTNG_KERNEL_ABI_CONTEXT_PRIO:
context_type_string = config_event_context_prio;
break;
- case LTTNG_KERNEL_CONTEXT_NICE:
+ case LTTNG_KERNEL_ABI_CONTEXT_NICE:
context_type_string = config_event_context_nice;
break;
- case LTTNG_KERNEL_CONTEXT_VPID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VPID:
context_type_string = config_event_context_vpid;
break;
- case LTTNG_KERNEL_CONTEXT_TID:
+ case LTTNG_KERNEL_ABI_CONTEXT_TID:
context_type_string = config_event_context_tid;
break;
- case LTTNG_KERNEL_CONTEXT_VTID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VTID:
context_type_string = config_event_context_vtid;
break;
- case LTTNG_KERNEL_CONTEXT_PPID:
+ case LTTNG_KERNEL_ABI_CONTEXT_PPID:
context_type_string = config_event_context_ppid;
break;
- case LTTNG_KERNEL_CONTEXT_VPPID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VPPID:
context_type_string = config_event_context_vppid;
break;
- case LTTNG_KERNEL_CONTEXT_HOSTNAME:
+ case LTTNG_KERNEL_ABI_CONTEXT_HOSTNAME:
context_type_string = config_event_context_hostname;
break;
- case LTTNG_KERNEL_CONTEXT_INTERRUPTIBLE:
+ case LTTNG_KERNEL_ABI_CONTEXT_INTERRUPTIBLE:
context_type_string = config_event_context_interruptible;
break;
- case LTTNG_KERNEL_CONTEXT_PREEMPTIBLE:
+ case LTTNG_KERNEL_ABI_CONTEXT_PREEMPTIBLE:
context_type_string = config_event_context_preemptible;
break;
- case LTTNG_KERNEL_CONTEXT_NEED_RESCHEDULE:
+ case LTTNG_KERNEL_ABI_CONTEXT_NEED_RESCHEDULE:
context_type_string = config_event_context_need_reschedule;
break;
- case LTTNG_KERNEL_CONTEXT_MIGRATABLE:
+ case LTTNG_KERNEL_ABI_CONTEXT_MIGRATABLE:
context_type_string = config_event_context_migratable;
break;
- case LTTNG_KERNEL_CONTEXT_CALLSTACK_USER:
+ case LTTNG_KERNEL_ABI_CONTEXT_CALLSTACK_USER:
context_type_string = config_event_context_callstack_user;
break;
- case LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL:
+ case LTTNG_KERNEL_ABI_CONTEXT_CALLSTACK_KERNEL:
context_type_string = config_event_context_callstack_kernel;
break;
- case LTTNG_KERNEL_CONTEXT_CGROUP_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_CGROUP_NS:
context_type_string = config_event_context_cgroup_ns;
break;
- case LTTNG_KERNEL_CONTEXT_IPC_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_IPC_NS:
context_type_string = config_event_context_ipc_ns;
break;
- case LTTNG_KERNEL_CONTEXT_MNT_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_MNT_NS:
context_type_string = config_event_context_mnt_ns;
break;
- case LTTNG_KERNEL_CONTEXT_NET_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_NET_NS:
context_type_string = config_event_context_net_ns;
break;
- case LTTNG_KERNEL_CONTEXT_PID_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_PID_NS:
context_type_string = config_event_context_pid_ns;
break;
- case LTTNG_KERNEL_CONTEXT_USER_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_TIME_NS:
+ context_type_string = config_event_context_time_ns;
+ break;
+ case LTTNG_KERNEL_ABI_CONTEXT_USER_NS:
context_type_string = config_event_context_user_ns;
break;
- case LTTNG_KERNEL_CONTEXT_UTS_NS:
+ case LTTNG_KERNEL_ABI_CONTEXT_UTS_NS:
context_type_string = config_event_context_uts_ns;
break;
- case LTTNG_KERNEL_CONTEXT_UID:
+ case LTTNG_KERNEL_ABI_CONTEXT_UID:
context_type_string = config_event_context_uid;
break;
- case LTTNG_KERNEL_CONTEXT_EUID:
+ case LTTNG_KERNEL_ABI_CONTEXT_EUID:
context_type_string = config_event_context_euid;
break;
- case LTTNG_KERNEL_CONTEXT_SUID:
+ case LTTNG_KERNEL_ABI_CONTEXT_SUID:
context_type_string = config_event_context_suid;
break;
- case LTTNG_KERNEL_CONTEXT_GID:
+ case LTTNG_KERNEL_ABI_CONTEXT_GID:
context_type_string = config_event_context_gid;
break;
- case LTTNG_KERNEL_CONTEXT_EGID:
+ case LTTNG_KERNEL_ABI_CONTEXT_EGID:
context_type_string = config_event_context_egid;
break;
- case LTTNG_KERNEL_CONTEXT_SGID:
+ case LTTNG_KERNEL_ABI_CONTEXT_SGID:
context_type_string = config_event_context_sgid;
break;
- case LTTNG_KERNEL_CONTEXT_VUID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VUID:
context_type_string = config_event_context_vuid;
break;
- case LTTNG_KERNEL_CONTEXT_VEUID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VEUID:
context_type_string = config_event_context_veuid;
break;
- case LTTNG_KERNEL_CONTEXT_VSUID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VSUID:
context_type_string = config_event_context_vsuid;
break;
- case LTTNG_KERNEL_CONTEXT_VGID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VGID:
context_type_string = config_event_context_vgid;
break;
- case LTTNG_KERNEL_CONTEXT_VEGID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VEGID:
context_type_string = config_event_context_vegid;
break;
- case LTTNG_KERNEL_CONTEXT_VSGID:
+ case LTTNG_KERNEL_ABI_CONTEXT_VSGID:
context_type_string = config_event_context_vsgid;
break;
default:
static
const char *get_ust_context_type_string(
- enum lttng_ust_context_type context_type)
+ enum lttng_ust_abi_context_type context_type)
{
const char *context_type_string;
switch (context_type) {
- case LTTNG_UST_CONTEXT_PROCNAME:
+ case LTTNG_UST_ABI_CONTEXT_PROCNAME:
context_type_string = config_event_context_procname;
break;
- case LTTNG_UST_CONTEXT_VPID:
+ case LTTNG_UST_ABI_CONTEXT_VPID:
context_type_string = config_event_context_vpid;
break;
- case LTTNG_UST_CONTEXT_VTID:
+ case LTTNG_UST_ABI_CONTEXT_VTID:
context_type_string = config_event_context_vtid;
break;
- case LTTNG_UST_CONTEXT_IP:
+ case LTTNG_UST_ABI_CONTEXT_IP:
context_type_string = config_event_context_ip;
break;
- case LTTNG_UST_CONTEXT_PTHREAD_ID:
+ case LTTNG_UST_ABI_CONTEXT_PTHREAD_ID:
context_type_string = config_event_context_pthread_id;
break;
- case LTTNG_UST_CONTEXT_APP_CONTEXT:
+ case LTTNG_UST_ABI_CONTEXT_APP_CONTEXT:
context_type_string = config_event_context_app;
break;
- case LTTNG_UST_CONTEXT_CGROUP_NS:
+ case LTTNG_UST_ABI_CONTEXT_CGROUP_NS:
context_type_string = config_event_context_cgroup_ns;
break;
- case LTTNG_UST_CONTEXT_IPC_NS:
+ case LTTNG_UST_ABI_CONTEXT_IPC_NS:
context_type_string = config_event_context_ipc_ns;
break;
- case LTTNG_UST_CONTEXT_MNT_NS:
+ case LTTNG_UST_ABI_CONTEXT_MNT_NS:
context_type_string = config_event_context_mnt_ns;
break;
- case LTTNG_UST_CONTEXT_NET_NS:
+ case LTTNG_UST_ABI_CONTEXT_NET_NS:
context_type_string = config_event_context_net_ns;
break;
- case LTTNG_UST_CONTEXT_PID_NS:
+ case LTTNG_UST_ABI_CONTEXT_TIME_NS:
+ context_type_string = config_event_context_time_ns;
+ break;
+ case LTTNG_UST_ABI_CONTEXT_PID_NS:
context_type_string = config_event_context_pid_ns;
break;
- case LTTNG_UST_CONTEXT_USER_NS:
+ case LTTNG_UST_ABI_CONTEXT_USER_NS:
context_type_string = config_event_context_user_ns;
break;
- case LTTNG_UST_CONTEXT_UTS_NS:
+ case LTTNG_UST_ABI_CONTEXT_UTS_NS:
context_type_string = config_event_context_uts_ns;
break;
- case LTTNG_UST_CONTEXT_VUID:
+ case LTTNG_UST_ABI_CONTEXT_VUID:
context_type_string = config_event_context_vuid;
break;
- case LTTNG_UST_CONTEXT_VEUID:
+ case LTTNG_UST_ABI_CONTEXT_VEUID:
context_type_string = config_event_context_veuid;
break;
- case LTTNG_UST_CONTEXT_VSUID:
+ case LTTNG_UST_ABI_CONTEXT_VSUID:
context_type_string = config_event_context_vsuid;
break;
- case LTTNG_UST_CONTEXT_VGID:
+ case LTTNG_UST_ABI_CONTEXT_VGID:
context_type_string = config_event_context_vgid;
break;
- case LTTNG_UST_CONTEXT_VEGID:
+ case LTTNG_UST_ABI_CONTEXT_VEGID:
context_type_string = config_event_context_vegid;
break;
- case LTTNG_UST_CONTEXT_VSGID:
+ case LTTNG_UST_ABI_CONTEXT_VSGID:
context_type_string = config_event_context_vsgid;
break;
- case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER:
+ case LTTNG_UST_ABI_CONTEXT_PERF_THREAD_COUNTER:
/*
* Error, should not be stored in the XML, perf contexts
* are stored as a node of type event_perf_context_type.
static
const char *get_loglevel_type_string(
- enum lttng_ust_loglevel_type loglevel_type)
+ enum lttng_ust_abi_loglevel_type loglevel_type)
{
const char *loglevel_type_string;
switch (loglevel_type) {
- case LTTNG_UST_LOGLEVEL_ALL:
+ case LTTNG_UST_ABI_LOGLEVEL_ALL:
loglevel_type_string = config_loglevel_type_all;
break;
- case LTTNG_UST_LOGLEVEL_RANGE:
+ case LTTNG_UST_ABI_LOGLEVEL_RANGE:
loglevel_type_string = config_loglevel_type_range;
break;
- case LTTNG_UST_LOGLEVEL_SINGLE:
+ case LTTNG_UST_ABI_LOGLEVEL_SINGLE:
loglevel_type_string = config_loglevel_type_single;
break;
default:
uint64_t offset;
switch (event->event->instrumentation) {
- case LTTNG_KERNEL_KPROBE:
+ case LTTNG_KERNEL_ABI_KPROBE:
/*
* Comments in lttng-kernel.h mention that
* either addr or symbol_name are set, not both.
offset = event->event->u.kprobe.offset;
symbol_name = addr ? NULL : event->event->u.kprobe.symbol_name;
break;
- case LTTNG_KERNEL_KRETPROBE:
+ case LTTNG_KERNEL_ABI_KRETPROBE:
addr = event->event->u.kretprobe.addr;
offset = event->event->u.kretprobe.offset;
symbol_name = addr ? NULL : event->event->u.kretprobe.symbol_name;
}
}
- if (event->event->instrumentation == LTTNG_KERNEL_FUNCTION ||
- event->event->instrumentation == LTTNG_KERNEL_KPROBE ||
- event->event->instrumentation == LTTNG_KERNEL_UPROBE ||
- event->event->instrumentation == LTTNG_KERNEL_KRETPROBE) {
+ if (event->event->instrumentation == LTTNG_KERNEL_ABI_FUNCTION ||
+ event->event->instrumentation == LTTNG_KERNEL_ABI_KPROBE ||
+ event->event->instrumentation == LTTNG_KERNEL_ABI_UPROBE ||
+ event->event->instrumentation == LTTNG_KERNEL_ABI_KRETPROBE) {
ret = config_writer_open_element(writer,
config_element_attributes);
}
switch (event->event->instrumentation) {
- case LTTNG_KERNEL_SYSCALL:
- case LTTNG_KERNEL_FUNCTION:
+ case LTTNG_KERNEL_ABI_SYSCALL:
+ case LTTNG_KERNEL_ABI_FUNCTION:
ret = save_kernel_function_event(writer, event);
if (ret) {
goto end;
}
break;
- case LTTNG_KERNEL_KPROBE:
- case LTTNG_KERNEL_KRETPROBE:
+ case LTTNG_KERNEL_ABI_KPROBE:
+ case LTTNG_KERNEL_ABI_KRETPROBE:
ret = save_kernel_kprobe_event(writer, event);
if (ret) {
goto end;
}
break;
- case LTTNG_KERNEL_UPROBE:
+ case LTTNG_KERNEL_ABI_UPROBE:
ret = save_kernel_userspace_probe_event(writer, event);
if (ret) {
goto end;
goto end;
}
- if (event->attr.instrumentation != LTTNG_UST_TRACEPOINT) {
+ if (event->attr.instrumentation != LTTNG_UST_ABI_TRACEPOINT) {
ERR("Unsupported UST instrumentation type.");
ret = LTTNG_ERR_INVALID;
goto end;
}
/* The log level is irrelevant if no "filtering" is enabled */
- if (event->attr.loglevel_type != LTTNG_UST_LOGLEVEL_ALL) {
+ if (event->attr.loglevel_type != LTTNG_UST_ABI_LOGLEVEL_ALL) {
ret = config_writer_write_element_signed_int(writer,
config_element_loglevel, event->attr.loglevel);
if (ret) {
struct agent_event *agent_event)
{
int ret;
- enum lttng_ust_loglevel_type ust_loglevel_type;
+ enum lttng_ust_abi_loglevel_type ust_loglevel_type;
- ust_event->enabled = agent_event->enabled;
- ust_event->attr.instrumentation = LTTNG_UST_TRACEPOINT;
+ ust_event->enabled = AGENT_EVENT_IS_ENABLED(agent_event);
+ ust_event->attr.instrumentation = LTTNG_UST_ABI_TRACEPOINT;
if (lttng_strncpy(ust_event->attr.name, agent_event->name,
LTTNG_SYMBOL_NAME_LEN)) {
ret = LTTNG_ERR_INVALID;
}
switch (agent_event->loglevel_type) {
case LTTNG_EVENT_LOGLEVEL_ALL:
- ust_loglevel_type = LTTNG_UST_LOGLEVEL_ALL;
+ ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_ALL;
break;
case LTTNG_EVENT_LOGLEVEL_SINGLE:
- ust_loglevel_type = LTTNG_UST_LOGLEVEL_SINGLE;
+ ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_SINGLE;
break;
case LTTNG_EVENT_LOGLEVEL_RANGE:
- ust_loglevel_type = LTTNG_UST_LOGLEVEL_RANGE;
+ ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_RANGE;
break;
default:
ERR("Invalid agent_event loglevel_type.");
rcu_read_lock();
cds_lfht_for_each_entry(agent->events->ht, &iter.iter, node, node) {
- int ret;
struct agent_event *agent_event;
struct ltt_ust_event fake_event;
/* Return LTTNG_OK on success else a LTTNG_ERR* code. */
static
int save_kernel_context(struct config_writer *writer,
- struct lttng_kernel_context *ctx)
+ struct lttng_kernel_abi_context *ctx)
{
int ret = LTTNG_OK;
goto end;
}
- if (ctx->ctx == LTTNG_KERNEL_CONTEXT_PERF_CPU_COUNTER) {
+ if (ctx->ctx == LTTNG_KERNEL_ABI_CONTEXT_PERF_CPU_COUNTER) {
ret = config_writer_open_element(writer,
config_element_context_perf);
if (ret) {
}
switch (ctx->ctx.ctx) {
- case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER:
+ case LTTNG_UST_ABI_CONTEXT_PERF_THREAD_COUNTER:
ret = save_ust_context_perf_thread_counter(writer, ctx);
break;
- case LTTNG_UST_CONTEXT_APP_CONTEXT:
+ case LTTNG_UST_ABI_CONTEXT_APP_CONTEXT:
ret = save_ust_context_app_ctx(writer, ctx);
break;
default:
}
/* Return LTTNG_OK on success else a LTTNG_ERR* code. */
-static int save_id_tracker(struct config_writer *writer,
+static int save_process_attr_tracker(struct config_writer *writer,
struct ltt_session *sess,
int domain,
- enum lttng_tracker_type tracker_type)
+ enum lttng_process_attr process_attr)
{
int ret = LTTNG_OK;
- ssize_t nr_ids = 0, i;
- struct lttng_tracker_id **ids = NULL;
const char *element_id_tracker, *element_target_id, *element_id;
- struct lttng_tracker_id *id;
- enum lttng_tracker_id_status status;
- int value;
- const char *string;
-
- switch (tracker_type) {
- case LTTNG_TRACKER_PID:
- element_id_tracker = config_element_pid_tracker;
- element_target_id = config_element_target_pid;
- element_id = config_element_pid;
- break;
- case LTTNG_TRACKER_VPID:
- element_id_tracker = config_element_vpid_tracker;
- element_target_id = config_element_target_vpid;
- element_id = config_element_id;
- break;
- case LTTNG_TRACKER_UID:
- element_id_tracker = config_element_uid_tracker;
- element_target_id = config_element_target_uid;
- element_id = config_element_id;
- break;
- case LTTNG_TRACKER_VUID:
- element_id_tracker = config_element_vuid_tracker;
- element_target_id = config_element_target_vuid;
- element_id = config_element_id;
- break;
- case LTTNG_TRACKER_GID:
- element_id_tracker = config_element_gid_tracker;
- element_target_id = config_element_target_gid;
- element_id = config_element_id;
- break;
- case LTTNG_TRACKER_VGID:
- element_id_tracker = config_element_vgid_tracker;
- element_target_id = config_element_target_vgid;
- element_id = config_element_id;
+ const struct process_attr_tracker *tracker;
+ enum lttng_tracking_policy tracking_policy;
+ struct lttng_process_attr_values *values = NULL;
+
+ switch (process_attr) {
+ case LTTNG_PROCESS_ATTR_PROCESS_ID:
+ element_id_tracker = config_element_process_attr_tracker_pid;
+ element_target_id = config_element_process_attr_pid_value;
+ element_id = config_element_process_attr_id;
+ break;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID:
+ element_id_tracker = config_element_process_attr_tracker_vpid;
+ element_target_id = config_element_process_attr_vpid_value;
+ element_id = config_element_process_attr_id;
+ break;
+ case LTTNG_PROCESS_ATTR_USER_ID:
+ element_id_tracker = config_element_process_attr_tracker_uid;
+ element_target_id = config_element_process_attr_uid_value;
+ element_id = config_element_process_attr_id;
+ break;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID:
+ element_id_tracker = config_element_process_attr_tracker_vuid;
+ element_target_id = config_element_process_attr_vuid_value;
+ element_id = config_element_process_attr_id;
+ break;
+ case LTTNG_PROCESS_ATTR_GROUP_ID:
+ element_id_tracker = config_element_process_attr_tracker_gid;
+ element_target_id = config_element_process_attr_gid_value;
+ element_id = config_element_process_attr_id;
+ break;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID:
+ element_id_tracker = config_element_process_attr_tracker_vgid;
+ element_target_id = config_element_process_attr_vgid_value;
+ element_id = config_element_process_attr_id;
break;
default:
ret = LTTNG_ERR_SAVE_IO_FAIL;
switch (domain) {
case LTTNG_DOMAIN_KERNEL:
{
- nr_ids = kernel_list_tracker_ids(
- tracker_type, sess->kernel_session, &ids);
- if (nr_ids < 0) {
- ret = LTTNG_ERR_KERN_LIST_FAIL;
- goto end;
- }
+ tracker = kernel_get_process_attr_tracker(
+ sess->kernel_session, process_attr);
+ assert(tracker);
break;
}
case LTTNG_DOMAIN_UST:
{
- nr_ids = trace_ust_list_tracker_ids(
- tracker_type, sess->ust_session, &ids);
- if (nr_ids < 0) {
- ret = LTTNG_ERR_UST_LIST_FAIL;
- goto end;
- }
+ tracker = trace_ust_get_process_attr_tracker(
+ sess->ust_session, process_attr);
+ assert(tracker);
break;
}
case LTTNG_DOMAIN_JUL:
case LTTNG_DOMAIN_LOG4J:
case LTTNG_DOMAIN_PYTHON:
default:
- ret = LTTNG_ERR_UNKNOWN_DOMAIN;
+ ret = LTTNG_ERR_UNSUPPORTED_DOMAIN;
goto end;
}
- if (nr_ids == 1 && lttng_tracker_id_get_type(ids[0]) == LTTNG_ID_ALL) {
+ tracking_policy = process_attr_tracker_get_tracking_policy(tracker);
+ if (tracking_policy == LTTNG_TRACKING_POLICY_INCLUDE_ALL) {
/* Tracking all, nothing to output. */
ret = LTTNG_OK;
goto end;
goto end;
}
- ret = config_writer_open_element(writer, config_element_targets);
+ ret = config_writer_open_element(
+ writer, config_element_process_attr_values);
if (ret) {
ret = LTTNG_ERR_SAVE_IO_FAIL;
goto end;
}
- if (nr_ids == 0) {
- /* Tracking none: empty list. */
- ret = config_writer_open_element(writer, element_target_id);
- if (ret) {
- ret = LTTNG_ERR_SAVE_IO_FAIL;
- goto end;
- }
+ if (tracking_policy == LTTNG_TRACKING_POLICY_INCLUDE_SET) {
+ unsigned int i, count;
+ enum process_attr_tracker_status status =
+ process_attr_tracker_get_inclusion_set(
+ tracker, &values);
- /* /$element_target_id */
- ret = config_writer_close_element(writer);
- if (ret) {
- ret = LTTNG_ERR_SAVE_IO_FAIL;
+ if (status != PROCESS_ATTR_TRACKER_STATUS_OK) {
+ ret = LTTNG_ERR_NOMEM;
goto end;
}
- } else {
- /* Tracking list. */
- for (i = 0; i < nr_ids; i++) {
- id = ids[i];
- switch (lttng_tracker_id_get_type(id)) {
- case LTTNG_ID_VALUE:
- ret = config_writer_open_element(
- writer, element_target_id);
- if (ret) {
- ret = LTTNG_ERR_SAVE_IO_FAIL;
- goto end;
- }
- status = lttng_tracker_id_get_value(id, &value);
- ret = config_writer_write_element_unsigned_int(
- writer, element_id, value);
+
+ count = _lttng_process_attr_values_get_count(values);
+
+ for (i = 0; i < count; i++) {
+ unsigned int integral_value = UINT_MAX;
+ const char *name = NULL;
+ const struct process_attr_value *value =
+ lttng_process_attr_tracker_values_get_at_index(
+ values, i);
+
+ assert(value);
+ ret = config_writer_open_element(
+ writer, element_target_id);
+ if (ret) {
+ ret = LTTNG_ERR_SAVE_IO_FAIL;
+ goto end;
+ }
+
+ switch (value->type) {
+ case LTTNG_PROCESS_ATTR_VALUE_TYPE_PID:
+ integral_value =
+ (unsigned int) value->value.pid;
break;
- case LTTNG_ID_STRING:
- ret = config_writer_open_element(
- writer, element_target_id);
- if (ret) {
- ret = LTTNG_ERR_SAVE_IO_FAIL;
- goto end;
- }
- status = lttng_tracker_id_get_string(
- id, &string);
- ret = config_writer_write_element_string(writer,
- config_element_name, string);
+ case LTTNG_PROCESS_ATTR_VALUE_TYPE_UID:
+ integral_value =
+ (unsigned int) value->value.uid;
+ break;
+ case LTTNG_PROCESS_ATTR_VALUE_TYPE_GID:
+ integral_value =
+ (unsigned int) value->value.gid;
+ break;
+ case LTTNG_PROCESS_ATTR_VALUE_TYPE_USER_NAME:
+ name = value->value.user_name;
+ assert(name);
+ break;
+ case LTTNG_PROCESS_ATTR_VALUE_TYPE_GROUP_NAME:
+ name = value->value.group_name;
+ assert(name);
break;
default:
- /* Unexpected. */
- ret = LTTNG_ERR_SAVE_IO_FAIL;
- goto end;
+ abort();
}
- if (ret) {
- ret = LTTNG_ERR_SAVE_IO_FAIL;
- goto end;
+
+ if (name) {
+ ret = config_writer_write_element_string(writer,
+ config_element_name, name);
+ } else {
+ ret = config_writer_write_element_unsigned_int(
+ writer, element_id,
+ integral_value);
}
- if (status != LTTNG_TRACKER_ID_STATUS_OK) {
+
+ if (ret) {
ret = LTTNG_ERR_SAVE_IO_FAIL;
goto end;
}
}
}
- /* /targets */
+ /* /values */
ret = config_writer_close_element(writer);
if (ret) {
ret = LTTNG_ERR_SAVE_IO_FAIL;
ret = LTTNG_OK;
end:
- lttng_tracker_ids_destroy(ids, nr_ids);
- free(ids);
+ lttng_process_attr_values_destroy(values);
return ret;
}
/* Return LTTNG_OK on success else a LTTNG_ERR* code. */
-static int save_id_trackers(struct config_writer *writer,
+static int save_process_attr_trackers(struct config_writer *writer,
struct ltt_session *sess,
int domain)
{
switch (domain) {
case LTTNG_DOMAIN_KERNEL:
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_PID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VPID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_UID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VUID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_GID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VGID);
- if (ret != LTTNG_OK)
- return ret;
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_PROCESS_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_USER_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_GROUP_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
break;
case LTTNG_DOMAIN_UST:
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VPID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VUID);
- if (ret != LTTNG_OK)
- return ret;
- ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VGID);
- if (ret != LTTNG_OK)
- return ret;
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
+ ret = save_process_attr_tracker(writer, sess, domain,
+ LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID);
+ if (ret != LTTNG_OK) {
+ goto end;
+ }
break;
default:
- return LTTNG_ERR_INVALID;
+ ret = LTTNG_ERR_INVALID;
+ goto end;
}
- return LTTNG_OK;
+ ret = LTTNG_OK;
+end:
+ return ret;
}
/* Return LTTNG_OK on success else a LTTNG_ERR* code. */
}
if (domain == LTTNG_DOMAIN_UST) {
- ret = config_writer_open_element(writer,
- config_element_trackers);
+ ret = config_writer_open_element(
+ writer, config_element_process_attr_trackers);
if (ret) {
ret = LTTNG_ERR_SAVE_IO_FAIL;
goto end;
}
- ret = save_id_trackers(writer, session, LTTNG_DOMAIN_UST);
+ ret = save_process_attr_trackers(
+ writer, session, LTTNG_DOMAIN_UST);
if (ret != LTTNG_OK) {
goto end;
}
goto end;
}
- ret = config_writer_open_element(writer,
- config_element_trackers);
+ ret = config_writer_open_element(
+ writer, config_element_process_attr_trackers);
if (ret) {
ret = LTTNG_ERR_SAVE_IO_FAIL;
goto end;
}
- ret = save_id_trackers(writer, session, LTTNG_DOMAIN_KERNEL);
+ ret = save_process_attr_trackers(
+ writer, session, LTTNG_DOMAIN_KERNEL);
if (ret != LTTNG_OK) {
goto end;
}
memset(config_file_path, 0, sizeof(config_file_path));
if (!session_access_ok(session,
- LTTNG_SOCK_GET_UID_CRED(creds),
- LTTNG_SOCK_GET_GID_CRED(creds)) || session->destroyed) {
+ LTTNG_SOCK_GET_UID_CRED(creds)) || session->destroyed) {
ret = LTTNG_ERR_EPERM;
goto end;
}