162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* Copyright (c) 2020 Facebook */ 362306a36Sopenharmony_ci#pragma once 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#define TASK_COMM_LEN 16 662306a36Sopenharmony_ci#define MAX_ANCESTORS 4 762306a36Sopenharmony_ci#define MAX_PATH 256 862306a36Sopenharmony_ci#define KILL_TARGET_LEN 64 962306a36Sopenharmony_ci#define CTL_MAXNAME 10 1062306a36Sopenharmony_ci#define MAX_ARGS_LEN 4096 1162306a36Sopenharmony_ci#define MAX_FILENAME_LEN 512 1262306a36Sopenharmony_ci#define MAX_ENVIRON_LEN 8192 1362306a36Sopenharmony_ci#define MAX_PATH_DEPTH 32 1462306a36Sopenharmony_ci#define MAX_FILEPATH_LENGTH (MAX_PATH_DEPTH * MAX_PATH) 1562306a36Sopenharmony_ci#define MAX_CGROUPS_PATH_DEPTH 8 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define MAX_METADATA_PAYLOAD_LEN TASK_COMM_LEN 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define MAX_CGROUP_PAYLOAD_LEN \ 2062306a36Sopenharmony_ci (MAX_PATH * 2 + (MAX_PATH * MAX_CGROUPS_PATH_DEPTH)) 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#define MAX_CAP_PAYLOAD_LEN (MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define MAX_SYSCTL_PAYLOAD_LEN \ 2562306a36Sopenharmony_ci (MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + CTL_MAXNAME + MAX_PATH) 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#define MAX_KILL_PAYLOAD_LEN \ 2862306a36Sopenharmony_ci (MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + TASK_COMM_LEN + \ 2962306a36Sopenharmony_ci KILL_TARGET_LEN) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define MAX_EXEC_PAYLOAD_LEN \ 3262306a36Sopenharmony_ci (MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + MAX_FILENAME_LEN + \ 3362306a36Sopenharmony_ci MAX_ARGS_LEN + MAX_ENVIRON_LEN) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define MAX_FILEMOD_PAYLOAD_LEN \ 3662306a36Sopenharmony_ci (MAX_METADATA_PAYLOAD_LEN + MAX_CGROUP_PAYLOAD_LEN + MAX_FILEPATH_LENGTH + \ 3762306a36Sopenharmony_ci MAX_FILEPATH_LENGTH) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cienum data_type { 4062306a36Sopenharmony_ci INVALID_EVENT, 4162306a36Sopenharmony_ci EXEC_EVENT, 4262306a36Sopenharmony_ci FORK_EVENT, 4362306a36Sopenharmony_ci KILL_EVENT, 4462306a36Sopenharmony_ci SYSCTL_EVENT, 4562306a36Sopenharmony_ci FILEMOD_EVENT, 4662306a36Sopenharmony_ci MAX_DATA_TYPE_EVENT 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cienum filemod_type { 5062306a36Sopenharmony_ci FMOD_OPEN, 5162306a36Sopenharmony_ci FMOD_LINK, 5262306a36Sopenharmony_ci FMOD_SYMLINK, 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct ancestors_data_t { 5662306a36Sopenharmony_ci pid_t ancestor_pids[MAX_ANCESTORS]; 5762306a36Sopenharmony_ci uint32_t ancestor_exec_ids[MAX_ANCESTORS]; 5862306a36Sopenharmony_ci uint64_t ancestor_start_times[MAX_ANCESTORS]; 5962306a36Sopenharmony_ci uint32_t num_ancestors; 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistruct var_metadata_t { 6362306a36Sopenharmony_ci enum data_type type; 6462306a36Sopenharmony_ci pid_t pid; 6562306a36Sopenharmony_ci uint32_t exec_id; 6662306a36Sopenharmony_ci uid_t uid; 6762306a36Sopenharmony_ci gid_t gid; 6862306a36Sopenharmony_ci uint64_t start_time; 6962306a36Sopenharmony_ci uint32_t cpu_id; 7062306a36Sopenharmony_ci uint64_t bpf_stats_num_perf_events; 7162306a36Sopenharmony_ci uint64_t bpf_stats_start_ktime_ns; 7262306a36Sopenharmony_ci uint8_t comm_length; 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cistruct cgroup_data_t { 7662306a36Sopenharmony_ci ino_t cgroup_root_inode; 7762306a36Sopenharmony_ci ino_t cgroup_proc_inode; 7862306a36Sopenharmony_ci uint64_t cgroup_root_mtime; 7962306a36Sopenharmony_ci uint64_t cgroup_proc_mtime; 8062306a36Sopenharmony_ci uint16_t cgroup_root_length; 8162306a36Sopenharmony_ci uint16_t cgroup_proc_length; 8262306a36Sopenharmony_ci uint16_t cgroup_full_length; 8362306a36Sopenharmony_ci int cgroup_full_path_root_pos; 8462306a36Sopenharmony_ci}; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistruct var_sysctl_data_t { 8762306a36Sopenharmony_ci struct var_metadata_t meta; 8862306a36Sopenharmony_ci struct cgroup_data_t cgroup_data; 8962306a36Sopenharmony_ci struct ancestors_data_t ancestors_info; 9062306a36Sopenharmony_ci uint8_t sysctl_val_length; 9162306a36Sopenharmony_ci uint16_t sysctl_path_length; 9262306a36Sopenharmony_ci char payload[MAX_SYSCTL_PAYLOAD_LEN]; 9362306a36Sopenharmony_ci}; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_cistruct var_kill_data_t { 9662306a36Sopenharmony_ci struct var_metadata_t meta; 9762306a36Sopenharmony_ci struct cgroup_data_t cgroup_data; 9862306a36Sopenharmony_ci struct ancestors_data_t ancestors_info; 9962306a36Sopenharmony_ci pid_t kill_target_pid; 10062306a36Sopenharmony_ci int kill_sig; 10162306a36Sopenharmony_ci uint32_t kill_count; 10262306a36Sopenharmony_ci uint64_t last_kill_time; 10362306a36Sopenharmony_ci uint8_t kill_target_name_length; 10462306a36Sopenharmony_ci uint8_t kill_target_cgroup_proc_length; 10562306a36Sopenharmony_ci char payload[MAX_KILL_PAYLOAD_LEN]; 10662306a36Sopenharmony_ci size_t payload_length; 10762306a36Sopenharmony_ci}; 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_cistruct var_exec_data_t { 11062306a36Sopenharmony_ci struct var_metadata_t meta; 11162306a36Sopenharmony_ci struct cgroup_data_t cgroup_data; 11262306a36Sopenharmony_ci pid_t parent_pid; 11362306a36Sopenharmony_ci uint32_t parent_exec_id; 11462306a36Sopenharmony_ci uid_t parent_uid; 11562306a36Sopenharmony_ci uint64_t parent_start_time; 11662306a36Sopenharmony_ci uint16_t bin_path_length; 11762306a36Sopenharmony_ci uint16_t cmdline_length; 11862306a36Sopenharmony_ci uint16_t environment_length; 11962306a36Sopenharmony_ci char payload[MAX_EXEC_PAYLOAD_LEN]; 12062306a36Sopenharmony_ci}; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cistruct var_fork_data_t { 12362306a36Sopenharmony_ci struct var_metadata_t meta; 12462306a36Sopenharmony_ci pid_t parent_pid; 12562306a36Sopenharmony_ci uint32_t parent_exec_id; 12662306a36Sopenharmony_ci uint64_t parent_start_time; 12762306a36Sopenharmony_ci char payload[MAX_METADATA_PAYLOAD_LEN]; 12862306a36Sopenharmony_ci}; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_cistruct var_filemod_data_t { 13162306a36Sopenharmony_ci struct var_metadata_t meta; 13262306a36Sopenharmony_ci struct cgroup_data_t cgroup_data; 13362306a36Sopenharmony_ci enum filemod_type fmod_type; 13462306a36Sopenharmony_ci unsigned int dst_flags; 13562306a36Sopenharmony_ci uint32_t src_device_id; 13662306a36Sopenharmony_ci uint32_t dst_device_id; 13762306a36Sopenharmony_ci ino_t src_inode; 13862306a36Sopenharmony_ci ino_t dst_inode; 13962306a36Sopenharmony_ci uint16_t src_filepath_length; 14062306a36Sopenharmony_ci uint16_t dst_filepath_length; 14162306a36Sopenharmony_ci char payload[MAX_FILEMOD_PAYLOAD_LEN]; 14262306a36Sopenharmony_ci}; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_cistruct profiler_config_struct { 14562306a36Sopenharmony_ci bool fetch_cgroups_from_bpf; 14662306a36Sopenharmony_ci ino_t cgroup_fs_inode; 14762306a36Sopenharmony_ci ino_t cgroup_login_session_inode; 14862306a36Sopenharmony_ci uint64_t kill_signals_mask; 14962306a36Sopenharmony_ci ino_t inode_filter; 15062306a36Sopenharmony_ci uint32_t stale_info_secs; 15162306a36Sopenharmony_ci bool use_variable_buffers; 15262306a36Sopenharmony_ci bool read_environ_from_exec; 15362306a36Sopenharmony_ci bool enable_cgroup_v1_resolver; 15462306a36Sopenharmony_ci}; 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_cistruct bpf_func_stats_data { 15762306a36Sopenharmony_ci uint64_t time_elapsed_ns; 15862306a36Sopenharmony_ci uint64_t num_executions; 15962306a36Sopenharmony_ci uint64_t num_perf_events; 16062306a36Sopenharmony_ci}; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_cistruct bpf_func_stats_ctx { 16362306a36Sopenharmony_ci uint64_t start_time_ns; 16462306a36Sopenharmony_ci struct bpf_func_stats_data* bpf_func_stats_data_val; 16562306a36Sopenharmony_ci}; 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_cienum bpf_function_id { 16862306a36Sopenharmony_ci profiler_bpf_proc_sys_write, 16962306a36Sopenharmony_ci profiler_bpf_sched_process_exec, 17062306a36Sopenharmony_ci profiler_bpf_sched_process_exit, 17162306a36Sopenharmony_ci profiler_bpf_sys_enter_kill, 17262306a36Sopenharmony_ci profiler_bpf_do_filp_open_ret, 17362306a36Sopenharmony_ci profiler_bpf_sched_process_fork, 17462306a36Sopenharmony_ci profiler_bpf_vfs_link, 17562306a36Sopenharmony_ci profiler_bpf_vfs_symlink, 17662306a36Sopenharmony_ci profiler_bpf_max_function_id 17762306a36Sopenharmony_ci}; 178