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
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
24 * Made modifications to suit the new RBCE module.
26 * Added callbacks_active and surrounding logic. Added task paramter
27 * for all CE callbacks.
29 * New Event callback structure
37 // Data structure and function to get the list of registered
38 // resource controllers.
40 // #include <linux/sched.h>
42 /* CKRM defines a set of events at particular points in the kernel
43 * at which callbacks registered by various class types are called
47 /* we distinguish various events types
49 * (a) CKRM_LATCHABLE_EVENTS
50 * events can be latched for event callbacks by classtypes
52 * (b) CKRM_NONLATACHBLE_EVENTS
53 * events can not be latched but can be used to call classification
55 * (c) event that are used for notification purposes
56 * range: [ CKRM_EVENT_CANNOT_CLASSIFY .. )
61 CKRM_LATCHABLE_EVENTS,
63 CKRM_EVENT_NEWTASK = CKRM_LATCHABLE_EVENTS,
73 CKRM_EVENT_LISTEN_START,
74 CKRM_EVENT_LISTEN_STOP,
79 CKRM_NONLATCHABLE_EVENTS,
81 CKRM_EVENT_RECLASSIFY = CKRM_NONLATCHABLE_EVENTS,
84 CKRM_NOTCLASSIFY_EVENTS,
86 CKRM_EVENT_MANUAL = CKRM_NOTCLASSIFY_EVENTS,
95 extern void ckrm_invoke_event_cb_chain(enum ckrm_event ev, void *arg);
97 typedef void (*ckrm_event_cb) (void *arg);
101 struct ckrm_hook_cb *next;
104 #define CKRM_DEF_CB(EV,fct) \
105 static inline void ckrm_cb_##fct(void) \
107 ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,NULL); \
110 #define CKRM_DEF_CB_ARG(EV,fct,argtp) \
111 static inline void ckrm_cb_##fct(argtp arg) \
113 ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,(void*)arg); \
116 #else // !CONFIG_CKRM
118 #define CKRM_DEF_CB(EV,fct) \
119 static inline void ckrm_cb_##fct(void) { }
121 #define CKRM_DEF_CB_ARG(EV,fct,argtp) \
122 static inline void ckrm_cb_##fct(argtp arg) { }
124 #endif // CONFIG_CKRM
126 /*-----------------------------------------------------------------
127 * define the CKRM event functions
129 *-----------------------------------------------------------------*/
136 CKRM_DEF_CB_ARG(FORK, fork, struct task_struct *);
137 CKRM_DEF_CB_ARG(EXEC, exec, const char *);
138 CKRM_DEF_CB(UID, uid);
139 CKRM_DEF_CB(GID, gid);
140 CKRM_DEF_CB_ARG(XID, xid, struct task_struct *);
141 CKRM_DEF_CB(APPTAG, apptag);
142 CKRM_DEF_CB(LOGIN, login);
143 CKRM_DEF_CB_ARG(USERADD, useradd, struct user_struct *);
144 CKRM_DEF_CB_ARG(USERDEL, userdel, struct user_struct *);
145 CKRM_DEF_CB_ARG(LISTEN_START, listen_start, struct sock *);
146 CKRM_DEF_CB_ARG(LISTEN_STOP, listen_stop, struct sock *);
148 // some other functions required
150 extern void ckrm_init(void);
151 void ckrm_cb_newtask(struct task_struct *);
152 void ckrm_cb_exit(struct task_struct *);
154 #define ckrm_init(x) do { } while (0)
155 #define ckrm_cb_newtask(x) do { } while (0)
156 #define ckrm_cb_exit(x) do { } while (0)
159 extern int get_exe_path_name(struct task_struct *, char *, int);
163 #endif // _LINUX_CKRM_H