#ifndef __INTERFACE_H__
#define __INTERFACE_H__
#include "vmlinux.h"
#define PAGE_SIZE 4096
#define KERNEL_MAX_ARG_STRLEN (PAGE_SIZE * 32)
#define KERNEL_MAX_ARG_STRINGS 0x7FFFFFFF
#define _SC_ARG_MAX 2097152
#define ARGC_MAX 233017
#define PATH_MAX 4096
#define PATH_LEN_MAX 65536
#define PATH_DEPTH_MAX 65536
#define PATH_SEGMENT_MAX 256
#define FSTYPE_NAME_MAX 256
#define BITS_PER_LONG 64
#define NOFILE_MAX 2147483584
#define FDSET_SIZE_MAX_BYTES 2097152
#define FDSET_SIZE_MAX_IN_LONG ((2097152) / sizeof(long))
enum exec_event_flags {
ERROR = 1,
TOO_MANY_ITEMS = 2,
COMM_READ_FAILURE = 4,
POSSIBLE_TRUNCATION = 8,
PTR_READ_FAILURE = 16,
NO_ROOM = 32,
STR_READ_FAILURE = 64,
FDS_PROBE_FAILURE = 128,
OUTPUT_FAILURE = 256,
FLAGS_READ_FAILURE = 512,
USERSPACE_DROP_MARKER = 1024,
BAIL_OUT = 2048,
LOOP_FAIL = 4096,
PATH_READ_ERR = 8192,
INO_READ_ERR = 16384,
MNTID_READ_ERR = 32768,
FILENAME_READ_ERR = 65536,
POS_READ_ERR = 131072
};
enum event_type {
SYSENTER_EVENT,
SYSEXIT_EVENT,
STRING_EVENT,
FD_EVENT,
PATH_SEGMENT_EVENT,
PATH_EVENT,
EXIT_EVENT,
FORK_EVENT,
};
struct tracexec_event_header {
pid_t pid;
u32 flags;
u64 eid;
u32 id;
enum event_type type;
};
struct exec_event {
struct tracexec_event_header header;
pid_t tgid;
uid_t uid;
uid_t gid;
bool is_execveat;
bool is_compat;
s64 ret;
u32 count[2];
u32 fd_count;
u32 path_count;
s32 fd;
s32 cwd_path_id;
u64 flags;
u8 base_filename[PATH_MAX];
u8 comm[TASK_COMM_LEN];
};
struct string_event {
struct tracexec_event_header header;
u8 data[_SC_ARG_MAX];
};
struct fd_event {
struct tracexec_event_header header;
unsigned int flags;
unsigned int fd;
int mnt_id;
s32 path_id;
long unsigned int ino;
loff_t pos;
u8 fstype[FSTYPE_NAME_MAX];
};
struct path_event {
struct tracexec_event_header header;
u32 segment_count;
};
struct path_segment_event {
struct tracexec_event_header header;
u32 index;
u8 segment[PATH_SEGMENT_MAX];
};
struct fork_event {
struct tracexec_event_header header;
pid_t parent_tgid;
};
struct exit_event {
struct tracexec_event_header header;
int code;
u32 sig;
bool is_root_tracee;
};
union cache_item {
struct string_event string;
struct fd_event fd;
struct path_event path;
struct path_segment_event segment;
struct fork_event fork;
struct exit_event exit;
};
#endif