1 /* ckrm.h - Class-based Kernel Resource Management (CKRM)
3 * Copyright (C) Hubertus Franke, IBM Corp. 2003,2004
4 * (C) Shailabh Nagar, IBM Corp. 2003
5 * (C) Chandra Seetharaman, IBM Corp. 2003
8 * Provides a base header file including macros and basic data structures.
10 * Latest version, more details at http://ckrm.sf.net
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of version 2.1 of the GNU Lesser General Public License
14 * as published by the Free Software Foundation.
16 * This program is distributed in the hope that it would be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 * Made modifications to suit the new RBCE module.
29 * Added callbacks_active and surrounding logic. Added task paramter
30 * for all CE callbacks.
32 * New Event callback structure
40 // Data structure and function to get the list of registered
41 // resource controllers.
43 // #include <linux/sched.h>
45 /* CKRM defines a set of events at particular points in the kernel
46 * at which callbacks registered by various class types are called
50 /* we distinguish various events types
52 * (a) CKRM_LATCHABLE_EVENTS
53 * events can be latched for event callbacks by classtypes
55 * (b) CKRM_NONLATACHBLE_EVENTS
56 * events can not be latched but can be used to call classification
58 * (c) event that are used for notification purposes
59 * range: [ CKRM_EVENT_CANNOT_CLASSIFY .. )
64 CKRM_LATCHABLE_EVENTS,
66 CKRM_EVENT_NEWTASK = CKRM_LATCHABLE_EVENTS,
76 CKRM_EVENT_LISTEN_START,
77 CKRM_EVENT_LISTEN_STOP,
82 CKRM_NONLATCHABLE_EVENTS,
84 CKRM_EVENT_RECLASSIFY = CKRM_NONLATCHABLE_EVENTS,
87 CKRM_NOTCLASSIFY_EVENTS,
89 CKRM_EVENT_MANUAL = CKRM_NOTCLASSIFY_EVENTS,
98 extern void ckrm_invoke_event_cb_chain(enum ckrm_event ev, void *arg);
100 typedef void (*ckrm_event_cb) (void *arg);
102 struct ckrm_hook_cb {
104 struct ckrm_hook_cb *next;
107 #define CKRM_DEF_CB(EV,fct) \
108 static inline void ckrm_cb_##fct(void) \
110 ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,NULL); \
113 #define CKRM_DEF_CB_ARG(EV,fct,argtp) \
114 static inline void ckrm_cb_##fct(argtp arg) \
116 ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,(void*)arg); \
119 #else // !CONFIG_CKRM
121 #define CKRM_DEF_CB(EV,fct) \
122 static inline void ckrm_cb_##fct(void) { }
124 #define CKRM_DEF_CB_ARG(EV,fct,argtp) \
125 static inline void ckrm_cb_##fct(argtp arg) { }
127 #endif // CONFIG_CKRM
129 /*-----------------------------------------------------------------
130 * define the CKRM event functions
132 *-----------------------------------------------------------------*/
139 CKRM_DEF_CB_ARG(FORK, fork, struct task_struct *);
140 CKRM_DEF_CB_ARG(EXEC, exec, const char *);
141 CKRM_DEF_CB(UID, uid);
142 CKRM_DEF_CB(GID, gid);
143 CKRM_DEF_CB_ARG(XID, xid, struct task_struct *);
144 CKRM_DEF_CB(APPTAG, apptag);
145 CKRM_DEF_CB(LOGIN, login);
146 CKRM_DEF_CB_ARG(USERADD, useradd, struct user_struct *);
147 CKRM_DEF_CB_ARG(USERDEL, userdel, struct user_struct *);
148 CKRM_DEF_CB_ARG(LISTEN_START, listen_start, struct sock *);
149 CKRM_DEF_CB_ARG(LISTEN_STOP, listen_stop, struct sock *);
151 // some other functions required
153 extern void ckrm_init(void);
154 void ckrm_cb_newtask(struct task_struct *);
155 void ckrm_cb_exit(struct task_struct *);
157 #define ckrm_init(x) do { } while (0)
158 #define ckrm_cb_newtask(x) do { } while (0)
159 #define ckrm_cb_exit(x) do { } while (0)
162 extern int get_exe_path_name(struct task_struct *, char *, int);
166 #endif // _LINUX_CKRM_H