- fixed thread pool removal
[strongswan.git] / Source / charon / daemon.h
1 /**
2 * @file daemon.h
3 *
4 * @brief Interface of daemon_t.
5 *
6 */
7
8 /*
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20 * for more details.
21 */
22
23 #ifndef DAEMON_H_
24 #define DAEMON_H_
25
26 #include <threads/sender.h>
27 #include <threads/receiver.h>
28 #include <threads/scheduler.h>
29 #include <threads/thread_pool.h>
30 #include <network/socket.h>
31 #include <sa/ike_sa_manager.h>
32 #include <queues/send_queue.h>
33 #include <queues/job_queue.h>
34 #include <queues/event_queue.h>
35 #include <utils/logger_manager.h>
36 #include <config/configuration_manager.h>
37
38 /**
39 * Name of the daemon.
40 */
41 #define DAEMON_NAME "charon"
42
43 /**
44 * @brief Number of threads in the thread pool.
45 *
46 * There are several other threads, this defines
47 * only the number of threads in thread_pool_t.
48 */
49 #define NUMBER_OF_WORKING_THREADS 4
50
51 /**
52 * UDP Port on which the daemon will listen for incoming traffic.
53 */
54 #define IKEV2_UDP_PORT 500
55
56 /**
57 * @brief First retransmit timeout in milliseconds.
58 *
59 * Timeout value is increasing in each retransmit round.
60 */
61 #define RETRANSMIT_TIMEOUT 3000
62
63 /**
64 * Timeout in milliseconds after that a half open IKE_SA gets deleted.
65 */
66 #define HALF_OPEN_IKE_SA_TIMEOUT 30000
67
68 /**
69 * @brief Max retransmit count.
70 *
71 * 0 for infinite. The max time a half open IKE_SA is alive is set by
72 * RETRANSMIT_TIMEOUT.
73 */
74 #define MAX_RETRANSMIT_COUNT 0
75
76
77 /**
78 * Max number of primes to precompute per prime type.
79 */
80 #define PRIME_PRE_COMPUTATION_LIMIT 5
81
82 /**
83 * @brief Default loglevel for every logger context.
84 *
85 * This is the maximum allowed level for ever context, the definiton
86 * of the context may be less verbose.
87 */
88 #define DEFAULT_LOGLEVEL CONTROL | ERROR | AUDIT
89
90
91 typedef struct daemon_t daemon_t;
92
93 /**
94 * @brief Main class of daemon, contains some globals.
95 */
96 struct daemon_t {
97 /**
98 * A socket_t instance.
99 */
100 socket_t *socket;
101
102 /**
103 * A send_queue_t instance.
104 */
105
106 send_queue_t *send_queue;
107
108 /**
109 * A job_queue_t instance.
110 */
111 job_queue_t *job_queue;
112
113 /**
114 * A event_queue_t instance.
115 */
116 event_queue_t *event_queue;
117
118 /**
119 * A logger_manager_t instance.
120 */
121 logger_manager_t *logger_manager;
122
123 /**
124 * A ike_sa_manager_t instance.
125 */
126 ike_sa_manager_t *ike_sa_manager;
127
128 /**
129 * A configuration_manager_t instance.
130 */
131 configuration_manager_t *configuration_manager;
132
133 /**
134 * The Sender-Thread.
135 */
136 sender_t *sender;
137
138 /**
139 * The Receiver-Thread.
140 */
141 receiver_t *receiver;
142
143 /**
144 * The Scheduler-Thread.
145 */
146 scheduler_t *scheduler;
147
148 /**
149 * The Thread pool managing the worker threads.
150 */
151 thread_pool_t *thread_pool;
152
153 /**
154 * @brief Shut down the daemon.
155 *
156 * @param this the daemon to kill
157 * @param reason describition why it will be killed
158 */
159 void (*kill) (daemon_t *this, char *reason);
160 };
161
162 /**
163 * One and only instance of the daemon.
164 */
165 extern daemon_t *charon;
166
167 #endif /*DAEMON_H_*/