00001 /* 00002 * GPL vRelease licence 00003 * 00004 * kREproxy project (C) Marcin Tomasik 2009 00005 * 00006 * <marcin.tomasik.priv[onserver]gmail.com> 00007 * 00008 * http://kreproxy.sourceforge.net/ 00009 * 00010 */ 00011 00012 00017 #ifndef KRE_THREADS_H 00018 #define KRE_THREADS_H 00019 00020 #define KRE_NAME "kreproxythread" 00021 00022 /* kREproxy thread states */ 00023 #define KRE_NOT_INITIALIZED 0 00024 #define KRE_INITIALIZED 1 00025 #define KRE_RUNNING 2 00026 #define KRE_SHOULD_STOP 3 00027 #define KRE_COMPLETED 4 00028 00029 #include <linux/kthread.h> 00030 //#include <linux/smp_lock.h> 00031 00032 #include <linux/netdevice.h> 00033 #include <linux/completion.h> 00034 #include <linux/delay.h> 00035 #include <asm/semaphore.h> 00036 #include "kre_debug.h" 00037 #include "kre_network.h" 00038 00039 #ifndef KRE_MAX_THREADS 00040 # define KRE_MAX_THREADS 10 00041 #endif 00042 00045 struct kre_thread { 00046 00048 struct task_struct *task; 00049 00051 int (*fun)( void * ); 00052 00053 void *data; 00054 00056 int state; 00057 00060 struct semaphore state_sem; 00061 00066 struct completion c; 00067 00069 struct socket *csock; 00070 00072 struct socket *dstsock; 00073 00074 }; 00075 00079 typedef struct kre_thread kre_threads[ KRE_MAX_THREADS ]; 00080 00081 00085 extern void kre_threads_register_one_thread( struct kre_thread *t ); 00086 00089 extern void kre_threads_register( kre_threads * ); 00090 00093 extern int kre_threads_unregister( kre_threads * ); 00094 00101 extern int kre_threads_init( struct kre_thread *t, 00102 int (*f)( void * ), 00103 void *data 00104 ); 00105 00110 extern int kre_threads_start( struct kre_thread *t ); 00111 00116 extern struct kre_thread * kre_threads_fff( kre_threads t ); 00117 00118 /* kre_thread_add_tail - add new thread structure on the end of tset 00119 * @new: new thread to add 00120 * @tset: pointer to set of threads 00121 */ 00122 //extern int kre_thread_add_tail( struct kre_thread *new, kre_threads *tset ); 00123 00124 00125 /* kre_thread_count - count thread in thread set 00126 * @t: set of kre threads 00127 * 00128 * @return: count of kre threads ( this function 00129 * counting all states KRE_NOT_INI..., KRE_INITI...,.... ) 00130 */ 00131 //extern int kre_thread_count( kre_threads *t ); 00132 00133 00139 extern int kre_threads_find_by_pid( pid_t p, kre_threads t ); 00140 00141 00146 extern struct kre_thread * kre_threads_get_by_id( int id, kre_threads t ); 00147 00152 extern void kre_threads_complete( struct kre_thread *t ); 00153 00158 extern int kre_threads_should_work( struct kre_thread *t ); 00159 00165 extern int kre_threads_stop( struct kre_thread *t); 00166 00167 #endif