Blame view

include/linux/cn_proc.h 3.38 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,
9f46080c4   Matt Helsley   [PATCH] Process E...
56
57
58
59
60
  		/* "next" should be 0x00000400 */
  		/* "last" is the last process event: exit */
  		PROC_EVENT_EXIT = 0x80000000
  	} what;
  	__u32 cpu;
822cfbff2   Chandra Seetharaman   [PATCH] Process E...
61
62
  	__u64 __attribute__((aligned(8))) timestamp_ns;
  		/* Number of nano seconds since system boot */
9f46080c4   Matt Helsley   [PATCH] Process E...
63
64
65
66
67
68
  	union { /* must be last field of proc_event struct */
  		struct {
  			__u32 err;
  		} ack;
  
  		struct fork_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
69
70
71
72
  			__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...
73
74
75
  		} fork;
  
  		struct exec_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
76
77
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
78
79
80
  		} exec;
  
  		struct id_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
81
82
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
83
  			union {
df69a60dc   Matt Helsley   [PATCH] process e...
84
85
  				__u32 ruid; /* task uid */
  				__u32 rgid; /* task gid */
9f46080c4   Matt Helsley   [PATCH] Process E...
86
87
  			} r;
  			union {
df69a60dc   Matt Helsley   [PATCH] process e...
88
89
  				__u32 euid;
  				__u32 egid;
9f46080c4   Matt Helsley   [PATCH] Process E...
90
91
  			} e;
  		} id;
02b51df1b   Scott James Remnant   proc connector: a...
92
93
94
95
  		struct sid_proc_event {
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
  		} sid;
9f46080c4   Matt Helsley   [PATCH] Process E...
96
  		struct exit_proc_event {
85efde6f4   Arnd Bergmann   make exported hea...
97
98
  			__kernel_pid_t process_pid;
  			__kernel_pid_t process_tgid;
9f46080c4   Matt Helsley   [PATCH] Process E...
99
100
101
102
103
104
105
106
107
108
  			__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...
109
  void proc_sid_connector(struct task_struct *task);
9f46080c4   Matt Helsley   [PATCH] Process E...
110
111
112
113
114
115
116
117
118
119
120
  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...
121
122
  static inline void proc_sid_connector(struct task_struct *task)
  {}
9f46080c4   Matt Helsley   [PATCH] Process E...
123
124
125
126
127
  static inline void proc_exit_connector(struct task_struct *task)
  {}
  #endif	/* CONFIG_PROC_EVENTS */
  #endif	/* __KERNEL__ */
  #endif	/* CN_PROC_H */