// SPDX-License-Identifier: MIT

syntax = "proto2";

import "core-x86.proto";
import "core-arm.proto";
import "core-aarch64.proto";
import "core-ppc64.proto";
import "core-s390.proto";
import "core-mips.proto";

import "rlimit.proto";
import "timer.proto";
import "creds.proto";
import "criu-sa.proto";
import "siginfo.proto";
import "rseq.proto";

import "opts.proto";

/*
 * These match the SECCOMP_MODE_* flags from <linux/seccomp.h>.
 */
enum seccomp_mode {
	disabled	= 0;
	strict		= 1;
	filter		= 2;
};

message task_core_entry {
	required uint32			task_state	= 1 [(criu).dict = "gen"];
	required uint32			exit_code	= 2;

	required uint32			personality	= 3;
	required uint32			flags		= 4;
	required uint64			blk_sigset	= 5[(criu).hex = true];

	required string			comm		= 6;

	optional task_timers_entry	timers		= 7;
	optional task_rlimits_entry	rlimits		= 8;

	optional uint32			cg_set		= 9;

	optional signal_queue_entry	signals_s	= 10;

	/* These two are deprecated, should be per-thread */
	optional seccomp_mode	old_seccomp_mode	= 11;
	optional uint32		old_seccomp_filter	= 12;

	optional uint32			loginuid	= 13;

	optional int32			oom_score_adj	= 14;
	repeated sa_entry		sigactions	= 15;
	// Reserved for tty inheritance
	//optional int32		tty_nr		= 16;
	//optional int32		tty_pgrp	= 17;

	optional bool			child_subreaper	= 18;
	// Reserved for container relative start time
	//optional uint64		start_time	= 19;
	optional uint64			blk_sigset_extended = 20[(criu).hex = true];
}

message task_kobj_ids_entry {
	required uint32			vm_id		= 1;
	required uint32			files_id	= 2;
	required uint32			fs_id		= 3;
	required uint32			sighand_id	= 4;

	optional uint32			pid_ns_id	= 5;
	optional uint32			net_ns_id	= 6;
	optional uint32			ipc_ns_id	= 7;
	optional uint32			uts_ns_id	= 8;
	optional uint32			mnt_ns_id	= 9;
	optional uint32			user_ns_id	= 10;
	optional uint32			cgroup_ns_id	= 11;
	optional uint32			time_ns_id	= 12;
}

message thread_sas_entry {
	required uint64			ss_sp		= 1;
	required uint64			ss_size		= 2;
	required uint32			ss_flags	= 3;
}

message thread_core_entry {
	required uint64			futex_rla	= 1;
	required uint32			futex_rla_len	= 2;
	optional sint32			sched_nice	= 3;
	optional uint32			sched_policy	= 4;
	optional uint32			sched_prio	= 5;
	optional uint64			blk_sigset	= 6;
	optional thread_sas_entry	sas		= 7;
	optional uint32			pdeath_sig	= 8;

	optional signal_queue_entry	signals_p	= 9;
	optional creds_entry		creds		= 10;

	optional seccomp_mode		seccomp_mode	= 11;
	optional uint32			seccomp_filter	= 12;

	optional string			comm		= 13;
	optional uint64			blk_sigset_extended	= 14;
	optional rseq_entry		rseq_entry	= 15;
}

message task_rlimits_entry {
	repeated rlimit_entry		rlimits		= 1;
};

message core_entry {
	enum march {
		UNKNOWN		= 0;
		X86_64		= 1;
		ARM             = 2;
		AARCH64		= 3;
		PPC64		= 4;
		S390		= 5;
		MIPS		= 6;
	}

	required march			mtype		= 1;
	optional thread_info_x86	thread_info	= 2;
	optional thread_info_arm	ti_arm		= 6;
	optional thread_info_aarch64	ti_aarch64	= 8;
	optional thread_info_ppc64	ti_ppc64	= 9;
	optional thread_info_s390	ti_s390		= 10;
	optional thread_info_mips	ti_mips		= 11;

	optional task_core_entry	tc		= 3;
	optional task_kobj_ids_entry	ids		= 4;
	optional thread_core_entry	thread_core	= 5;
}
