Blame view

include/linux/cn_proc.h 3.73 KB
9f46080c4   Matt Helsley   [PATCH] Process E...
1
2
3
4
5
  /*
   * cn_proc.h - process events connector
   *
   * Copyright (C) Matt Helsley, IBM Corp. 2005
   * Based on cn_fork.h by Nguyen Anh Quynh and Guillaume Thouvenin
9f46080c4   Matt Helsley   [PATCH] Process E...
6
7
8
   * Copyright (C) 2005 Nguyen Anh Quynh <aquynh@gmail.com>
   * Copyright (C) 2005 Guillaume Thouvenin <guillaume.thouvenin@bull.net>
   *
3fa2164d0   Matt Helsley   [PATCH] Process E...
9
10
11
   * This program is free software; you can redistribute it and/or modify it
   * under the terms of version 2.1 of the GNU Lesser General Public License
   * as published by the Free Software Foundation.
9f46080c4   Matt Helsley   [PATCH] Process E...
12
   *
3fa2164d0   Matt Helsley   [PATCH] Process E...
13
14
15
   * This program is distributed in the hope that it would be useful, but
   * WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9f46080c4   Matt Helsley   [PATCH] Process E...
16
17
18
19
20
21
   */
  
  #ifndef CN_PROC_H
  #define CN_PROC_H
  
  #include <linux/types.h>
9f46080c4   Matt Helsley   [PATCH] Process E...
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  
  /*
   * Userspace sends this enum to register with the kernel that it is listening
   * for events on the connector.
   */
  enum proc_cn_mcast_op {
  	PROC_CN_MCAST_LISTEN = 1,
  	PROC_CN_MCAST_IGNORE = 2
  };
  
  /*
   * From the user's point of view, the process
   * ID is the thread group ID and thread ID is the internal
   * kernel "pid". So, fields are assigned as follow:
   *
   *  In user space     -  In  kernel space
   *
   * parent process ID  =  parent->tgid
   * parent thread  ID  =  parent->pid
   * child  process ID  =  child->tgid
   * child  thread  ID  =  child->pid
   */
  
  struct proc_event {
  	enum what {
  		/* Use successive bits so the enums can be used to record
  		 * sets of events as well
  		 */
  		PROC_EVENT_NONE = 0x00000000,
  		PROC_EVENT_FORK = 0x00000001,
  		PROC_EVENT_EXEC = 0x00000002,
  		PROC_EVENT_UID  = 0x00000004,
  		PROC_EVENT_GID  = 0x00000040,
02b51df1b   Scott James Remnant   proc connector: a...
55
  		PROC_EVENT_SID  = 0x00000080,
f701e5b73   Vladimir Zapolskiy   connector: add an...
56
  		PROC_EVENT_PTRACE = 0x00000100,
9f46080c4   Matt Helsley   [PATCH] Process E...
57
58
59
60
61
  		/* "next" should be 0x00000400 */
  		/* "last" is the last process event: exit */
  		PROC_EVENT_EXIT = 0x80000000
  	} what;
  	__u32 cpu;
822cfbff2   Chandra Seetharaman   [PATCH] Process E...
62
63
  	__u64 __attribute__((aligned(8))) timestamp_ns;
  		/* Number of nano seconds since system boot */
9f46080c4   Matt Helsley   [PATCH] Process E...
64
65
66
67
68
69
  	union { /* must be last field of proc_event struct */
  		struct {
  			__u32 err;
  		} ack;
  
  		struct fork_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
70
71
72
73
  			__kernel_pid_t parent_pid;
  			__kernel_pid_t parent_tgid;
  			__kernel_pid_t child_pid;
  			__kernel_pid_t child_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
74
75
76
  		} fork;
  
  		struct exec_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
77
78
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
79
80
81
  		} exec;
  
  		struct id_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
82
83
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
84
  			union {
df69a60dc   Matt Helsley   [PATCH] process e...
85
86
  				__u32 ruid; /* task uid */
  				__u32 rgid; /* task gid */
9f46080c4   Matt Helsley   [PATCH] Process E...
87
88
  			} r;
  			union {
df69a60dc   Matt Helsley   [PATCH] process e...
89
90
  				__u32 euid;
  				__u32 egid;
9f46080c4   Matt Helsley   [PATCH] Process E...
91
92
  			} e;
  		} id;
02b51df1b   Scott James Remnant   proc connector: a...
93
94
95
96
  		struct sid_proc_event {
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
  		} sid;
f701e5b73   Vladimir Zapolskiy   connector: add an...
97
98
99
100
101
102
  		struct ptrace_proc_event {
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
  			__kernel_pid_t tracer_pid;
  			__kernel_pid_t tracer_tgid;
  		} ptrace;
9f46080c4   Matt Helsley   [PATCH] Process E...
103
  		struct exit_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
104
105
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
106
107
108
109
110
111
112
113
114
115
  			__u32 exit_code, exit_signal;
  		} exit;
  	} event_data;
  };
  
  #ifdef __KERNEL__
  #ifdef CONFIG_PROC_EVENTS
  void proc_fork_connector(struct task_struct *task);
  void proc_exec_connector(struct task_struct *task);
  void proc_id_connector(struct task_struct *task, int which_id);
02b51df1b   Scott James Remnant   proc connector: a...
116
  void proc_sid_connector(struct task_struct *task);
f701e5b73   Vladimir Zapolskiy   connector: add an...
117
  void proc_ptrace_connector(struct task_struct *task, int which_id);
9f46080c4   Matt Helsley   [PATCH] Process E...
118
119
120
121
122
123
124
125
126
127
128
  void proc_exit_connector(struct task_struct *task);
  #else
  static inline void proc_fork_connector(struct task_struct *task)
  {}
  
  static inline void proc_exec_connector(struct task_struct *task)
  {}
  
  static inline void proc_id_connector(struct task_struct *task,
  				     int which_id)
  {}
02b51df1b   Scott James Remnant   proc connector: a...
129
130
  static inline void proc_sid_connector(struct task_struct *task)
  {}
f701e5b73   Vladimir Zapolskiy   connector: add an...
131
132
133
  static inline void proc_ptrace_connector(struct task_struct *task,
  					 int ptrace_id)
  {}
9f46080c4   Matt Helsley   [PATCH] Process E...
134
135
136
137
138
  static inline void proc_exit_connector(struct task_struct *task)
  {}
  #endif	/* CONFIG_PROC_EVENTS */
  #endif	/* __KERNEL__ */
  #endif	/* CN_PROC_H */