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

import "rlimit.proto";
import "timer.proto";
import "creds.proto";

import "siginfo.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;
	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;

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

	optional uint32			loginuid	= 13;

	optional int32			oom_score_adj	= 14;
}

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;
}

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;
}

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;
	}

	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 task_core_entry	tc		= 3;
	optional task_kobj_ids_entry	ids		= 4;
	optional thread_core_entry	thread_core	= 5;
}
