+ return LTTNG_IOCTL_NO_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_LIST_TRACKER_PIDS);
+}
+
+static enum lttng_kernel_abi_tracker_type get_kernel_tracker_type(
+ enum lttng_process_attr process_attr)
+{
+ switch (process_attr) {
+ case LTTNG_PROCESS_ATTR_PROCESS_ID:
+ return LTTNG_KERNEL_ABI_TRACKER_PID;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID:
+ return LTTNG_KERNEL_ABI_TRACKER_VPID;
+ case LTTNG_PROCESS_ATTR_USER_ID:
+ return LTTNG_KERNEL_ABI_TRACKER_UID;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID:
+ return LTTNG_KERNEL_ABI_TRACKER_VUID;
+ case LTTNG_PROCESS_ATTR_GROUP_ID:
+ return LTTNG_KERNEL_ABI_TRACKER_GID;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID:
+ return LTTNG_KERNEL_ABI_TRACKER_VGID;
+ default:
+ return LTTNG_KERNEL_ABI_TRACKER_UNKNOWN;
+ }
+}
+
+int kernctl_track_id(int fd, enum lttng_process_attr process_attr, int id)
+{
+ struct lttng_kernel_abi_tracker_args args;
+ int ret;
+
+ args.id = id;
+ args.type = get_kernel_tracker_type(process_attr);
+ if (args.type == LTTNG_KERNEL_ABI_TRACKER_UNKNOWN) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_TRACK_ID, &args);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_TRACK_ID, &args);
+ }
+
+ return ret;
+}
+
+int kernctl_untrack_id(int fd, enum lttng_process_attr process_attr, int id)
+{
+ struct lttng_kernel_abi_tracker_args args;
+ int ret;
+
+ args.id = id;
+ args.type = get_kernel_tracker_type(process_attr);
+ if (args.type == LTTNG_KERNEL_ABI_TRACKER_UNKNOWN) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_ABI_SESSION_UNTRACK_ID, &args);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_UNTRACK_ID, &args);
+ }
+
+ return ret;
+}
+
+int kernctl_list_tracker_ids(int fd, enum lttng_process_attr process_attr)
+{
+ struct lttng_kernel_abi_tracker_args args;
+ int ret;
+
+ args.id = -1;
+ args.type = get_kernel_tracker_type(process_attr);
+ if (args.type == LTTNG_KERNEL_ABI_TRACKER_UNKNOWN) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ ret = LTTNG_IOCTL_NO_CHECK(
+ fd, LTTNG_KERNEL_ABI_SESSION_LIST_TRACKER_IDS, &args);
+ if (ret == -ENOSYS) {
+ ret = LTTNG_IOCTL_NO_CHECK(fd,
+ LTTNG_KERNEL_ABI_OLD_SESSION_LIST_TRACKER_IDS,
+ &args);
+ }
+
+ return ret;