1 /* ckrm_ce.h - Header file to be used by Classification Engine of CKRM
3 * Copyright (C) Hubertus Franke, IBM Corp. 2003
4 * (C) Shailabh Nagar, IBM Corp. 2003
5 * (C) Chandra Seetharaman, IBM Corp. 2003
7 * Provides data structures, macros and kernel API of CKRM for
8 * classification engine.
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 * Adopted to classtypes
30 #ifndef _LINUX_CKRM_CE_H
31 #define _LINUX_CKRM_CE_H
35 #include <linux/ckrm.h> // getting the event names
37 /* Action parameters identifying the cause of a task<->class notify callback
38 * these can perculate up to user daemon consuming records send by the
39 * classification engine
44 typedef void *(*ce_classify_fct_t) (enum ckrm_event event, void *obj, ...);
45 typedef void (*ce_notify_fct_t) (enum ckrm_event event, void *classobj,
48 typedef struct ckrm_eng_callback {
49 /* general state information */
50 int always_callback; /* set if CE should always be called back
51 regardless of numclasses */
56 /* callbacks which are called without holding locks */
58 unsigned long c_interest; /* set of classification events of
62 /* generic classify */
63 ce_classify_fct_t classify;
65 void (*class_add) (const char *name, void *core, int classtype);
67 void (*class_delete) (const char *name, void *core, int classtype);
70 /* callbacks which are called while holding task_lock(tsk) */
72 unsigned long n_interest; /* set of notification events of
75 /* notify on class switch */
76 ce_notify_fct_t notify;
78 } ckrm_eng_callback_t;
83 typedef struct rbce_eng_callback {
84 int (*mkdir) (struct inode *, struct dentry *, int); // mkdir
85 int (*rmdir) (struct inode *, struct dentry *); // rmdir
88 } rbce_eng_callback_t;
90 extern int ckrm_register_engine(const char *name, ckrm_eng_callback_t *);
91 extern int ckrm_unregister_engine(const char *name);
93 extern void *ckrm_classobj(char *, int *classtype);
94 extern int get_exe_path_name(struct task_struct *t, char *filename,
97 extern int rcfs_register_engine(rbce_eng_callback_t *);
98 extern int rcfs_unregister_engine(rbce_eng_callback_t *);
100 extern int ckrm_reclassify(int pid);
102 #ifndef _LINUX_CKRM_RC_H
103 // ckrm kernel has inlined functions for this which are exported
104 extern void ckrm_core_grab(void *);
105 extern void ckrm_core_drop(void *);
108 #endif // CONFIG_CKRM
112 #endif // _LINUX_CKRM_CE_H