X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fkernel-ctl%2Fkernel-ctl.c;h=1df6849a9c06e721f27897f86639d43b0cc83a73;hp=5f25adf02dc269debabcbdad5d04729ec0d46eb3;hb=d01c0e5606d656a1118348f693b3593554b1e58f;hpb=41ef8f6305f01c9e31e8be48db625788ef01e758 diff --git a/src/common/kernel-ctl/kernel-ctl.c b/src/common/kernel-ctl/kernel-ctl.c index 5f25adf02..1df6849a9 100644 --- a/src/common/kernel-ctl/kernel-ctl.c +++ b/src/common/kernel-ctl/kernel-ctl.c @@ -230,6 +230,67 @@ int kernctl_list_tracker_pids(int fd) return LTTNG_IOCTL_NO_CHECK(fd, LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS); } +static enum lttng_kernel_tracker_type get_kernel_tracker_type( + enum lttng_tracker_type type) +{ + switch (type) { + case LTTNG_TRACKER_PID: + return LTTNG_KERNEL_TRACKER_PID; + case LTTNG_TRACKER_VPID: + return LTTNG_KERNEL_TRACKER_VPID; + case LTTNG_TRACKER_UID: + return LTTNG_KERNEL_TRACKER_UID; + case LTTNG_TRACKER_VUID: + return LTTNG_KERNEL_TRACKER_VUID; + case LTTNG_TRACKER_GID: + return LTTNG_KERNEL_TRACKER_GID; + case LTTNG_TRACKER_VGID: + return LTTNG_KERNEL_TRACKER_VGID; + default: + return LTTNG_KERNEL_TRACKER_UNKNOWN; + } +} + +int kernctl_track_id(int fd, enum lttng_tracker_type tracker_type, int id) +{ + struct lttng_kernel_tracker_args args; + + args.id = id; + args.type = get_kernel_tracker_type(tracker_type); + if (args.type == LTTNG_KERNEL_TRACKER_UNKNOWN) { + errno = EINVAL; + return -1; + } + return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_TRACK_ID, &args); +} + +int kernctl_untrack_id(int fd, enum lttng_tracker_type tracker_type, int id) +{ + struct lttng_kernel_tracker_args args; + + args.id = id; + args.type = get_kernel_tracker_type(tracker_type); + if (args.type == LTTNG_KERNEL_TRACKER_UNKNOWN) { + errno = EINVAL; + return -1; + } + return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_UNTRACK_ID, &args); +} + +int kernctl_list_tracker_ids(int fd, enum lttng_tracker_type tracker_type) +{ + struct lttng_kernel_tracker_args args; + + args.id = -1; + args.type = get_kernel_tracker_type(tracker_type); + if (args.type == LTTNG_KERNEL_TRACKER_UNKNOWN) { + errno = EINVAL; + return -1; + } + return LTTNG_IOCTL_NO_CHECK( + fd, LTTNG_KERNEL_SESSION_LIST_TRACKER_IDS, &args); +} + int kernctl_session_regenerate_metadata(int fd) { return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_METADATA_REGEN);