130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * cn_proc.h - process events connector 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) Matt Helsley, IBM Corp. 2005 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com> 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net> 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or modify it 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * under the terms of version 2.1 of the GNU Lesser General Public License 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * as published by the Free Software Foundation. 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is distributed in the hope that it would be useful, but 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * WITHOUT ANY WARRANTY; without even the implied warranty of 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPICN_PROC_H 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPICN_PROC_H 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h> 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Userspace sends this enum to register with the kernel that it is listening 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * for events on the connector. 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2730692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum proc_cn_mcast_op { 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_CN_MCAST_LISTEN = 1, 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_CN_MCAST_IGNORE = 2 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * From the user's point of view, the process 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ID is the thread group ID and thread ID is the internal 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * kernel "pid". So, fields are assigned as follow: 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * In user space - In kernel space 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * parent process ID = parent->tgid 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * parent thread ID = parent->pid 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * child process ID = child->tgid 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * child thread ID = child->pid 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct proc_event { 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng enum what { 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Use successive bits so the enums can be used to record 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * sets of events as well 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_NONE = 0x00000000, 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_FORK = 0x00000001, 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_EXEC = 0x00000002, 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_UID = 0x00000004, 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_GID = 0x00000040, 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_SID = 0x00000080, 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_PTRACE = 0x00000100, 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_COMM = 0x00000200, 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* "next" should be 0x00000400 */ 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* "last" is the last process event: exit, 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * while "next to last" is coredumping event */ 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_COREDUMP = 0x40000000, 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng PROC_EVENT_EXIT = 0x80000000 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } what; 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 cpu; 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u64 __attribute__((aligned(8))) timestamp_ns; 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* Number of nano seconds since system boot */ 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { /* must be last field of proc_event struct */ 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 err; 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } ack; 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fork_proc_event { 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t parent_pid; 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t parent_tgid; 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t child_pid; 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t child_tgid; 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } fork; 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct exec_proc_event { 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } exec; 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct id_proc_event { 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 ruid; /* task uid */ 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 rgid; /* task gid */ 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } r; 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 euid; 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 egid; 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } e; 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } id; 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct sid_proc_event { 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } sid; 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct ptrace_proc_event { 10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t tracer_pid; 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t tracer_tgid; 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } ptrace; 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct comm_proc_event { 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng char comm[16]; 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } comm; 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct coredump_proc_event { 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } coredump; 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct exit_proc_event { 12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_pid; 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __kernel_pid_t process_tgid; 12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng __u32 exit_code, exit_signal; 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } exit; 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } event_data; 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPICN_PROC_H */ 130