4 * @brief Interface of daemon_t.
9 * Copyright (C) 2006 Tobias Brunner, Daniel Roethlisberger
10 * Copyright (C) 2005-2006 Martin Willi
11 * Copyright (C) 2005 Jan Hutter
12 * Hochschule fuer Technik Rapperswil
14 * This program is free software; you can redistribute it and/or modify it
15 * under the terms of the GNU General Public License as published by the
16 * Free Software Foundation; either version 2 of the License, or (at your
17 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
19 * This program is distributed in the hope that it will be useful, but
20 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
21 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
28 typedef struct daemon_t daemon_t
;
30 #include <credential_store.h>
32 #include <threads/sender.h>
33 #include <threads/receiver.h>
34 #include <threads/scheduler.h>
35 #include <threads/kernel_interface.h>
36 #include <threads/thread_pool.h>
37 #include <threads/stroke_interface.h>
38 #include <network/socket.h>
40 #include <bus/listeners/file_logger.h>
41 #include <bus/listeners/sys_logger.h>
42 #include <sa/ike_sa_manager.h>
43 #include <queues/job_queue.h>
44 #include <queues/event_queue.h>
45 #include <config/configuration.h>
46 #include <config/connections/connection_store.h>
47 #include <config/policies/policy_store.h>
50 * @defgroup charon charon
52 * @brief IKEv2 keying daemon.
54 * @section Architecture
56 * All IKEv2 stuff is handled in charon. It uses a newer and more flexible
57 * architecture than pluto. Charon uses a thread-pool, which allows parallel
58 * execution SA-management. Beside the thread-pool, there are some special purpose
59 * threads which do their job for the common health of the daemon.
63 | v u |---+ +------+ +------+
64 | e e | | | | | IKE- |
65 | n u | +-----------+ | |--| SA |
66 | t e | | | | I M | +------+
67 +------------+ | - | | Scheduler | | K a |
68 | receiver | +------+ | | | E n | +------+
69 +----+-------+ +-----------+ | - a | | IKE- |
70 | | +------+ | | S g |--| SA |
71 +-------+--+ +-----| J Q |---+ +------------+ | A e | +------+
72 -| socket | | o u | | | | - r |
73 +-------+--+ | b e | | Thread- | | |
74 | | - u | | Pool | | |
75 +----+-------+ | e |------| |---| |
76 | sender | +------+ +------------+ +------+
80 * The thread-pool is the heart of the architecture. It processes jobs from a
81 * (fully synchronized) job-queue. Mostly, a job is associated with a specific
82 * IKE SA. These IKE SAs are synchronized, only one thread can work one an IKE SA.
83 * This makes it unnecesary to use further synchronisation methods once a IKE SA
84 * is checked out. The (rather complex) synchronization of IKE SAs is completely
85 * done in the IKE SA manager.
86 * The sceduler is responsible for event firing. It waits until a event in the
87 * (fully synchronized) event-queue is ready for processing and pushes the event
88 * down to the job-queue. A thread form the pool will pick it up as quick as
89 * possible. Every thread can queue events or jobs. Furter, an event can place a
90 * packet in the sender. The sender thread waits for those packets and sends
91 * them over the wire, via the socket. The receiver does exactly the opposite of
92 * the sender. It waits on the socket, reads in packets an places them on the
93 * job-queue for further processing by a thread from the pool.
94 * There are even more threads, not drawn in the upper scheme. The stroke thread
95 * is responsible for reading and processessing commands from another process. The
96 * kernel interface thread handles communication from and to the kernel via a
97 * netlink socket. It waits for kernel events and processes them appropriately.
101 * @defgroup config config
103 * Classes implementing configuration related things.
109 * @defgroup encoding encoding
111 * Classes used to encode and decode IKEv2 messages.
117 * @defgroup payloads payloads
119 * Classes representing specific IKEv2 payloads.
125 * @defgroup network network
127 * Classes for network relevant stuff.
133 * @defgroup queues queues
135 * Different kind of queues
136 * (thread save lists).
142 * @defgroup jobs jobs
144 * Jobs used in job queue and event queue.
152 * Security associations for IKE and IPSec,
153 * and some helper classes.
159 * @defgroup tasks tasks
161 * Tasks process and build message payloads. They are used to create
162 * and process multiple exchanges.
168 * @defgroup authenticators authenticators
170 * Authenticator classes to prove identity of peer.
178 * EAP authentication module interface and it's implementations.
180 * @ingroup authenticators
184 * @defgroup threads threads
186 * Threaded classes, which will do their job alone.
194 * Signaling bus and its listeners.
200 * Name of the daemon.
204 #define DAEMON_NAME "charon"
207 * @brief Number of threads in the thread pool.
209 * There are several other threads, this defines
210 * only the number of threads in thread_pool_t.
214 #define NUMBER_OF_WORKING_THREADS 4
217 * UDP Port on which the daemon will listen for incoming traffic.
221 #define IKEV2_UDP_PORT 500
224 * UDP Port to which the daemon will float to if NAT is detected.
228 #define IKEV2_NATT_PORT 4500
231 * PID file, in which charon stores its process id
235 #define PID_FILE IPSEC_PIDDIR "/charon.pid"
238 * Configuration directory
242 #define CONFIG_DIR IPSEC_CONFDIR
245 * Directory of IPsec relevant files
249 #define IPSEC_D_DIR CONFIG_DIR "/ipsec.d"
252 * Default directory for private keys
256 #define PRIVATE_KEY_DIR IPSEC_D_DIR "/private"
259 * Default directory for end entity certificates
263 #define CERTIFICATE_DIR IPSEC_D_DIR "/certs"
266 * Default directory for trusted CA certificates
270 #define CA_CERTIFICATE_DIR IPSEC_D_DIR "/cacerts"
273 * Default directory for OCSP signing certificates
277 #define OCSP_CERTIFICATE_DIR IPSEC_D_DIR "/ocspcerts"
280 * Default directory for CRLs
284 #define CRL_DIR IPSEC_D_DIR "/crls"
291 #define SECRETS_FILE CONFIG_DIR "/ipsec.secrets"
294 * @brief Main class of daemon, contains some globals.
300 * A socket_t instance.
305 * A job_queue_t instance.
307 job_queue_t
*job_queue
;
310 * A event_queue_t instance.
312 event_queue_t
*event_queue
;
315 * A ike_sa_manager_t instance.
317 ike_sa_manager_t
*ike_sa_manager
;
320 * A configuration_t instance.
322 configuration_t
*configuration
;
325 * A connection_store_t instance.
327 connection_store_t
*connections
;
330 * A policy_store_t instance.
332 policy_store_t
*policies
;
335 * A credential_store_t instance.
337 credential_store_t
*credentials
;
345 * The Receiver-Thread.
347 receiver_t
*receiver
;
350 * The Scheduler-Thread.
352 scheduler_t
*scheduler
;
355 * The Thread pool managing the worker threads.
357 thread_pool_t
*thread_pool
;
365 * A bus listener logging to stdout
367 file_logger_t
*outlog
;
370 * A bus listener logging to syslog
372 sys_logger_t
*syslog
;
375 * A bus listener logging most important events
377 sys_logger_t
*authlog
;
380 * Kernel Interface to communicate with kernel
382 kernel_interface_t
*kernel_interface
;
385 * IPC interface, as whack in pluto
390 * @brief Shut down the daemon.
392 * @param this the daemon to kill
393 * @param reason describtion why it will be killed
395 void (*kill
) (daemon_t
*this, char *reason
);
399 * The one and only instance of the daemon.
401 extern daemon_t
*charon
;