xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/cn_proc.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /*
2*53ee8cc1Swenshuai.xi  * cn_proc.h - process events connector
3*53ee8cc1Swenshuai.xi  *
4*53ee8cc1Swenshuai.xi  * Copyright (C) Matt Helsley, IBM Corp. 2005
5*53ee8cc1Swenshuai.xi  * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin
6*53ee8cc1Swenshuai.xi  * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com>
7*53ee8cc1Swenshuai.xi  * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net>
8*53ee8cc1Swenshuai.xi  *
9*53ee8cc1Swenshuai.xi  * This program is free software; you can redistribute it and/or modify it
10*53ee8cc1Swenshuai.xi  * under the terms of version 2.1 of the GNU Lesser General Public License
11*53ee8cc1Swenshuai.xi  * as published by the Free Software Foundation.
12*53ee8cc1Swenshuai.xi  *
13*53ee8cc1Swenshuai.xi  * This program is distributed in the hope that it would be useful, but
14*53ee8cc1Swenshuai.xi  * WITHOUT ANY WARRANTY; without even the implied warranty of
15*53ee8cc1Swenshuai.xi  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16*53ee8cc1Swenshuai.xi  */
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi #ifndef CN_PROC_H
19*53ee8cc1Swenshuai.xi #define CN_PROC_H
20*53ee8cc1Swenshuai.xi 
21*53ee8cc1Swenshuai.xi #include <linux/types.h>
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi /*
24*53ee8cc1Swenshuai.xi  * Userspace sends this enum to register with the kernel that it is listening
25*53ee8cc1Swenshuai.xi  * for events on the connector.
26*53ee8cc1Swenshuai.xi  */
27*53ee8cc1Swenshuai.xi enum proc_cn_mcast_op {
28*53ee8cc1Swenshuai.xi 	PROC_CN_MCAST_LISTEN = 1,
29*53ee8cc1Swenshuai.xi 	PROC_CN_MCAST_IGNORE = 2
30*53ee8cc1Swenshuai.xi };
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi /*
33*53ee8cc1Swenshuai.xi  * From the user's point of view, the process
34*53ee8cc1Swenshuai.xi  * ID is the thread group ID and thread ID is the internal
35*53ee8cc1Swenshuai.xi  * kernel "pid". So, fields are assigned as follow:
36*53ee8cc1Swenshuai.xi  *
37*53ee8cc1Swenshuai.xi  *  In user space     -  In  kernel space
38*53ee8cc1Swenshuai.xi  *
39*53ee8cc1Swenshuai.xi  * parent process ID  =  parent->tgid
40*53ee8cc1Swenshuai.xi  * parent thread  ID  =  parent->pid
41*53ee8cc1Swenshuai.xi  * child  process ID  =  child->tgid
42*53ee8cc1Swenshuai.xi  * child  thread  ID  =  child->pid
43*53ee8cc1Swenshuai.xi  */
44*53ee8cc1Swenshuai.xi 
45*53ee8cc1Swenshuai.xi struct proc_event {
46*53ee8cc1Swenshuai.xi 	enum what {
47*53ee8cc1Swenshuai.xi 		/* Use successive bits so the enums can be used to record
48*53ee8cc1Swenshuai.xi 		 * sets of events as well
49*53ee8cc1Swenshuai.xi 		 */
50*53ee8cc1Swenshuai.xi 		PROC_EVENT_NONE = 0x00000000,
51*53ee8cc1Swenshuai.xi 		PROC_EVENT_FORK = 0x00000001,
52*53ee8cc1Swenshuai.xi 		PROC_EVENT_EXEC = 0x00000002,
53*53ee8cc1Swenshuai.xi 		PROC_EVENT_UID  = 0x00000004,
54*53ee8cc1Swenshuai.xi 		PROC_EVENT_GID  = 0x00000040,
55*53ee8cc1Swenshuai.xi 		/* "next" should be 0x00000400 */
56*53ee8cc1Swenshuai.xi 		/* "last" is the last process event: exit */
57*53ee8cc1Swenshuai.xi 		PROC_EVENT_EXIT = 0x80000000
58*53ee8cc1Swenshuai.xi 	} what;
59*53ee8cc1Swenshuai.xi 	__u32 cpu;
60*53ee8cc1Swenshuai.xi 	__u64 __attribute__((aligned(8))) timestamp_ns;
61*53ee8cc1Swenshuai.xi 		/* Number of nano seconds since system boot */
62*53ee8cc1Swenshuai.xi 	union { /* must be last field of proc_event struct */
63*53ee8cc1Swenshuai.xi 		struct {
64*53ee8cc1Swenshuai.xi 			__u32 err;
65*53ee8cc1Swenshuai.xi 		} ack;
66*53ee8cc1Swenshuai.xi 
67*53ee8cc1Swenshuai.xi 		struct fork_proc_event {
68*53ee8cc1Swenshuai.xi 			pid_t parent_pid;
69*53ee8cc1Swenshuai.xi 			pid_t parent_tgid;
70*53ee8cc1Swenshuai.xi 			pid_t child_pid;
71*53ee8cc1Swenshuai.xi 			pid_t child_tgid;
72*53ee8cc1Swenshuai.xi 		} fork;
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi 		struct exec_proc_event {
75*53ee8cc1Swenshuai.xi 			pid_t process_pid;
76*53ee8cc1Swenshuai.xi 			pid_t process_tgid;
77*53ee8cc1Swenshuai.xi 		} exec;
78*53ee8cc1Swenshuai.xi 
79*53ee8cc1Swenshuai.xi 		struct id_proc_event {
80*53ee8cc1Swenshuai.xi 			pid_t process_pid;
81*53ee8cc1Swenshuai.xi 			pid_t process_tgid;
82*53ee8cc1Swenshuai.xi 			union {
83*53ee8cc1Swenshuai.xi 				__u32 ruid; /* task uid */
84*53ee8cc1Swenshuai.xi 				__u32 rgid; /* task gid */
85*53ee8cc1Swenshuai.xi 			} r;
86*53ee8cc1Swenshuai.xi 			union {
87*53ee8cc1Swenshuai.xi 				__u32 euid;
88*53ee8cc1Swenshuai.xi 				__u32 egid;
89*53ee8cc1Swenshuai.xi 			} e;
90*53ee8cc1Swenshuai.xi 		} id;
91*53ee8cc1Swenshuai.xi 
92*53ee8cc1Swenshuai.xi 		struct exit_proc_event {
93*53ee8cc1Swenshuai.xi 			pid_t process_pid;
94*53ee8cc1Swenshuai.xi 			pid_t process_tgid;
95*53ee8cc1Swenshuai.xi 			__u32 exit_code, exit_signal;
96*53ee8cc1Swenshuai.xi 		} exit;
97*53ee8cc1Swenshuai.xi 	} event_data;
98*53ee8cc1Swenshuai.xi };
99*53ee8cc1Swenshuai.xi 
100*53ee8cc1Swenshuai.xi #endif	/* CN_PROC_H */
101