+int kernctl_track_pid(int fd, int pid)
+{
+ return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_TRACK_PID, pid);
+}
+
+int kernctl_untrack_pid(int fd, int pid)
+{
+ return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_UNTRACK_PID, pid);
+}
+
+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_process_attr process_attr)
+{
+ switch (process_attr) {
+ case LTTNG_PROCESS_ATTR_PROCESS_ID:
+ return LTTNG_KERNEL_TRACKER_PID;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID:
+ return LTTNG_KERNEL_TRACKER_VPID;
+ case LTTNG_PROCESS_ATTR_USER_ID:
+ return LTTNG_KERNEL_TRACKER_UID;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID:
+ return LTTNG_KERNEL_TRACKER_VUID;
+ case LTTNG_PROCESS_ATTR_GROUP_ID:
+ return LTTNG_KERNEL_TRACKER_GID;
+ case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID:
+ return LTTNG_KERNEL_TRACKER_VGID;
+ default:
+ return LTTNG_KERNEL_TRACKER_UNKNOWN;
+ }
+}
+
+int kernctl_track_id(int fd, enum lttng_process_attr process_attr, int id)
+{
+ struct lttng_kernel_tracker_args args;
+
+ args.id = id;
+ args.type = get_kernel_tracker_type(process_attr);
+ 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_process_attr process_attr, int id)
+{
+ struct lttng_kernel_tracker_args args;
+
+ args.id = id;
+ args.type = get_kernel_tracker_type(process_attr);
+ 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_process_attr process_attr)
+{
+ struct lttng_kernel_tracker_args args;
+
+ args.id = -1;
+ args.type = get_kernel_tracker_type(process_attr);
+ 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);
+}
+
+int kernctl_session_regenerate_statedump(int fd)
+{
+ return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_STATEDUMP);
+}
+
+int kernctl_session_set_name(int fd, const char *name)
+{
+ int ret;
+ struct lttng_kernel_session_name session_name;
+
+ ret = lttng_strncpy(session_name.name, name, sizeof(session_name.name));
+ if (ret) {
+ goto end;
+ }
+
+ ret = LTTNG_IOCTL_CHECK(
+ fd, LTTNG_KERNEL_SESSION_SET_NAME, &session_name);
+end:
+ return ret;
+}
+
+int kernctl_session_set_creation_time(int fd, time_t time)
+{
+ int ret;
+ struct lttng_kernel_session_creation_time creation_time;
+
+ ret = time_to_iso8601_str(time, creation_time.iso8601,
+ sizeof(creation_time.iso8601));
+ if (ret) {
+ goto end;
+ }
+
+ ret = LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_SET_CREATION_TIME,
+ &creation_time);
+end:
+ return ret;
+}
+