Annotation of embedaddon/strongswan/src/libcharon/daemon.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2006-2017 Tobias Brunner
! 3: * Copyright (C) 2005-2009 Martin Willi
! 4: * Copyright (C) 2006 Daniel Roethlisberger
! 5: * Copyright (C) 2005 Jan Hutter
! 6: * HSR Hochschule fuer Technik Rapperswil
! 7: *
! 8: * This program is free software; you can redistribute it and/or modify it
! 9: * under the terms of the GNU General Public License as published by the
! 10: * Free Software Foundation; either version 2 of the License, or (at your
! 11: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 12: *
! 13: * This program is distributed in the hope that it will be useful, but
! 14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 16: * for more details.
! 17: */
! 18:
! 19: /*
! 20: * Copyright (C) 2016 secunet Security Networks AG
! 21: * Copyright (C) 2016 Thomas Egerer
! 22: *
! 23: * Permission is hereby granted, free of charge, to any person obtaining a copy
! 24: * of this software and associated documentation files (the "Software"), to deal
! 25: * in the Software without restriction, including without limitation the rights
! 26: * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
! 27: * copies of the Software, and to permit persons to whom the Software is
! 28: * furnished to do so, subject to the following conditions:
! 29: *
! 30: * The above copyright notice and this permission notice shall be included in
! 31: * all copies or substantial portions of the Software.
! 32: *
! 33: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
! 34: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
! 35: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
! 36: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
! 37: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
! 38: * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
! 39: * THE SOFTWARE.
! 40: */
! 41:
! 42: /**
! 43: * @defgroup libcharon libcharon
! 44: *
! 45: * @defgroup attributes attributes
! 46: * @ingroup libcharon
! 47: *
! 48: * @defgroup bus bus
! 49: * @ingroup libcharon
! 50: *
! 51: * @defgroup listeners listeners
! 52: * @ingroup bus
! 53: *
! 54: * @defgroup config config
! 55: * @ingroup libcharon
! 56: *
! 57: * @defgroup control control
! 58: * @ingroup libcharon
! 59: *
! 60: * @defgroup encoding encoding
! 61: * @ingroup libcharon
! 62: *
! 63: * @defgroup payloads payloads
! 64: * @ingroup encoding
! 65: *
! 66: * @defgroup kernel kernel
! 67: * @ingroup libcharon
! 68: *
! 69: * @defgroup network network
! 70: * @ingroup libcharon
! 71: *
! 72: * @defgroup cplugins plugins
! 73: * @ingroup libcharon
! 74: *
! 75: * @defgroup cprocessing processing
! 76: * @ingroup libcharon
! 77: *
! 78: * @defgroup cjobs jobs
! 79: * @ingroup cprocessing
! 80: *
! 81: * @defgroup sa sa
! 82: * @ingroup libcharon
! 83: *
! 84: * @defgroup ikev1 ikev1
! 85: * @ingroup sa
! 86: *
! 87: * @defgroup ikev2 ikev2
! 88: * @ingroup sa
! 89: *
! 90: * @defgroup authenticators_v1 authenticators
! 91: * @ingroup ikev1
! 92: *
! 93: * @defgroup authenticators_v2 authenticators
! 94: * @ingroup ikev2
! 95: *
! 96: * @defgroup eap eap
! 97: * @ingroup sa
! 98: *
! 99: * @defgroup xauth xauth
! 100: * @ingroup sa
! 101: *
! 102: * @defgroup tasks_v1 tasks
! 103: * @ingroup ikev1
! 104: *
! 105: * @defgroup tasks_v2 tasks
! 106: * @ingroup ikev2
! 107: *
! 108: * @addtogroup libcharon
! 109: * @{
! 110: *
! 111: * IKEv2 keying daemon.
! 112: *
! 113: * All IKEv2 stuff is handled in charon. It uses a newer and more flexible
! 114: * architecture than pluto. Charon uses a thread-pool (called processor),
! 115: * which allows parallel execution SA-management. All threads originate
! 116: * from the processor. Work is delegated to the processor by queueing jobs
! 117: * to it.
! 118: @verbatim
! 119:
! 120: +---------------------------------+ +----------------------------+
! 121: | controller | | config |
! 122: +---------------------------------+ +----------------------------+
! 123: | | | ^ ^ ^
! 124: V V V | | |
! 125:
! 126: +----------+ +-----------+ +------+ +----------+ +----+
! 127: | receiver | | | | | +------+ | CHILD_SA | | K |
! 128: +---+------+ | Scheduler | | IKE- | | IKE- |--+----------+ | e |
! 129: | | | | SA |--| SA | | CHILD_SA | | r |
! 130: +------+---+ +-----------+ | | +------+ +----------+ | n |
! 131: <->| socket | | | Man- | | e |
! 132: +------+---+ +-----------+ | ager | +------+ +----------+ | l |
! 133: | | | | | | IKE- |--| CHILD_SA | | - |
! 134: +---+------+ | Processor |---| |--| SA | +----------+ | I |
! 135: | sender | | | | | +------+ | f |
! 136: +----------+ +-----------+ +------+ +----+
! 137:
! 138: | | | | | |
! 139: V V V V V V
! 140: +---------------------------------+ +----------------------------+
! 141: | Bus | | credentials |
! 142: +---------------------------------+ +----------------------------+
! 143:
! 144: @endverbatim
! 145: * The scheduler is responsible to execute timed events. Jobs may be queued to
! 146: * the scheduler to get executed at a defined time (e.g. rekeying). The
! 147: * scheduler does not execute the jobs itself, it queues them to the processor.
! 148: *
! 149: * The IKE_SA manager managers all IKE_SA. It further handles the
! 150: * synchronization:
! 151: * Each IKE_SA must be checked out strictly and checked in again after use. The
! 152: * manager guarantees that only one thread may check out a single IKE_SA. This
! 153: * allows us to write the (complex) IKE_SAs routines non-threadsafe.
! 154: * The IKE_SA contain the state and the logic of each IKE_SA and handle the
! 155: * messages.
! 156: *
! 157: * The CHILD_SA contains state about a IPsec security association and manages
! 158: * them. An IKE_SA may have multiple CHILD_SAs. Communication to the kernel
! 159: * takes place here through the kernel interface.
! 160: *
! 161: * The kernel interface installs IPsec security associations, policies, routes
! 162: * and virtual addresses. It further provides methods to enumerate interfaces
! 163: * and may notify the daemon about state changes at lower layers.
! 164: *
! 165: * The bus receives signals from the different threads and relays them to
! 166: * interested listeners. Debugging signals, but also important state changes or
! 167: * error messages are sent over the bus.
! 168: * Its listeners are not only for logging, but also to track the state of an
! 169: * IKE_SA.
! 170: *
! 171: * The controller, credential_manager, bus and backend_manager (config) are
! 172: * places where a plugin ca register itself to provide information or observe
! 173: * and control the daemon.
! 174: */
! 175:
! 176: #ifndef DAEMON_H_
! 177: #define DAEMON_H_
! 178:
! 179: typedef struct daemon_t daemon_t;
! 180:
! 181: #include <attributes/attribute_manager.h>
! 182: #include <kernel/kernel_interface.h>
! 183: #include <network/sender.h>
! 184: #include <network/receiver.h>
! 185: #include <network/socket_manager.h>
! 186: #include <control/controller.h>
! 187: #include <bus/bus.h>
! 188: #include <bus/listeners/custom_logger.h>
! 189: #include <sa/ike_sa_manager.h>
! 190: #include <sa/child_sa_manager.h>
! 191: #include <sa/trap_manager.h>
! 192: #include <sa/shunt_manager.h>
! 193: #include <sa/redirect_manager.h>
! 194: #include <config/backend_manager.h>
! 195: #include <sa/eap/eap_manager.h>
! 196: #include <sa/xauth/xauth_manager.h>
! 197:
! 198: #ifdef ME
! 199: #include <sa/ikev2/connect_manager.h>
! 200: #include <sa/ikev2/mediation_manager.h>
! 201: #endif /* ME */
! 202:
! 203: /**
! 204: * Number of threads in the thread pool, if not specified in config.
! 205: */
! 206: #define DEFAULT_THREADS 16
! 207:
! 208: /**
! 209: * Primary UDP port used by IKE.
! 210: */
! 211: #define IKEV2_UDP_PORT 500
! 212:
! 213: /**
! 214: * UDP port defined for use in case a NAT is detected.
! 215: */
! 216: #define IKEV2_NATT_PORT 4500
! 217:
! 218: /**
! 219: * UDP port on which the daemon will listen for incoming traffic (also used as
! 220: * source port for outgoing traffic).
! 221: */
! 222: #ifndef CHARON_UDP_PORT
! 223: #define CHARON_UDP_PORT IKEV2_UDP_PORT
! 224: #endif
! 225:
! 226: /**
! 227: * UDP port used by the daemon in case a NAT is detected.
! 228: */
! 229: #ifndef CHARON_NATT_PORT
! 230: #define CHARON_NATT_PORT IKEV2_NATT_PORT
! 231: #endif
! 232:
! 233: /**
! 234: * Main class of daemon, contains some globals.
! 235: */
! 236: struct daemon_t {
! 237:
! 238: /**
! 239: * Socket manager instance
! 240: */
! 241: socket_manager_t *socket;
! 242:
! 243: /**
! 244: * Kernel interface to communicate with kernel
! 245: */
! 246: kernel_interface_t *kernel;
! 247:
! 248: /**
! 249: * A ike_sa_manager_t instance.
! 250: */
! 251: ike_sa_manager_t *ike_sa_manager;
! 252:
! 253: /**
! 254: * A child_sa_manager_t instance.
! 255: */
! 256: child_sa_manager_t *child_sa_manager;
! 257:
! 258: /**
! 259: * Manager for triggering policies, called traps
! 260: */
! 261: trap_manager_t *traps;
! 262:
! 263: /**
! 264: * Manager for shunt PASS|DROP policies
! 265: */
! 266: shunt_manager_t *shunts;
! 267:
! 268: /**
! 269: * Manager for IKE redirect providers
! 270: */
! 271: redirect_manager_t *redirect;
! 272:
! 273: /**
! 274: * Manager for the different configuration backends.
! 275: */
! 276: backend_manager_t *backends;
! 277:
! 278: /**
! 279: * The Sender-Thread.
! 280: */
! 281: sender_t *sender;
! 282:
! 283: /**
! 284: * The Receiver-Thread.
! 285: */
! 286: receiver_t *receiver;
! 287:
! 288: /**
! 289: * Manager for IKE configuration attributes
! 290: */
! 291: attribute_manager_t *attributes;
! 292:
! 293: /**
! 294: * The signaling bus.
! 295: */
! 296: bus_t *bus;
! 297:
! 298: /**
! 299: * Controller to control the daemon
! 300: */
! 301: controller_t *controller;
! 302:
! 303: /**
! 304: * EAP manager to maintain registered EAP methods
! 305: */
! 306: eap_manager_t *eap;
! 307:
! 308: /**
! 309: * XAuth manager to maintain registered XAuth methods
! 310: */
! 311: xauth_manager_t *xauth;
! 312:
! 313: #ifdef ME
! 314: /**
! 315: * Connect manager
! 316: */
! 317: connect_manager_t *connect_manager;
! 318:
! 319: /**
! 320: * Mediation manager
! 321: */
! 322: mediation_manager_t *mediation_manager;
! 323: #endif /* ME */
! 324:
! 325: /**
! 326: * Initialize the daemon.
! 327: *
! 328: * @param plugins list of plugins to load
! 329: * @return TRUE, if successful
! 330: */
! 331: bool (*initialize)(daemon_t *this, char *plugins);
! 332:
! 333: /**
! 334: * Starts the daemon, i.e. spawns the threads of the thread pool.
! 335: */
! 336: void (*start)(daemon_t *this);
! 337:
! 338: /**
! 339: * Load/Reload loggers defined in strongswan.conf
! 340: *
! 341: * If none are defined in strongswan.conf default loggers configured via
! 342: * set_default_loggers() are loaded.
! 343: */
! 344: void (*load_loggers)(daemon_t *this);
! 345:
! 346: /**
! 347: * Configure default loggers if none are defined in strongswan.conf
! 348: *
! 349: * @param levels debug levels used to create default loggers if none are
! 350: * defined in strongswan.conf (NULL to disable)
! 351: * @param to_stderr TRUE to log to stderr/stdout if no loggers are defined
! 352: * in strongswan.conf (logging to syslog is always enabled)
! 353: */
! 354: void (*set_default_loggers)(daemon_t *this, level_t levels[DBG_MAX],
! 355: bool to_stderr);
! 356:
! 357: /**
! 358: * Set the log level for the given log group for all loaded loggers.
! 359: *
! 360: * This change is not persistent and gets reset if loggers are reloaded
! 361: * via load_loggers().
! 362: *
! 363: * @param group log group
! 364: * @param level log level
! 365: */
! 366: void (*set_level)(daemon_t *this, debug_t group, level_t level);
! 367: };
! 368:
! 369: /**
! 370: * The one and only instance of the daemon.
! 371: *
! 372: * Set between libcharon_init() and libcharon_deinit() calls.
! 373: */
! 374: extern daemon_t *charon;
! 375:
! 376: /**
! 377: * Initialize libcharon and create the "charon" instance of daemon_t.
! 378: *
! 379: * This function initializes the bus, listeners can be registered before
! 380: * calling initialize().
! 381: *
! 382: * libcharon_init() may be called multiple times in a single process, but each
! 383: * caller must call libcharon_deinit() for each call to libcharon_init().
! 384: *
! 385: * @return FALSE if integrity check failed
! 386: */
! 387: bool libcharon_init();
! 388:
! 389: /**
! 390: * Deinitialize libcharon and destroy the "charon" instance of daemon_t.
! 391: */
! 392: void libcharon_deinit();
! 393:
! 394: /**
! 395: * Register a custom logger constructor.
! 396: *
! 397: * To be called from __attribute__((constructor)) functions.
! 398: *
! 399: * @param name name of the logger (also used for loglevel config)
! 400: * @param constructor constructor to create custom logger
! 401: */
! 402: void register_custom_logger(char *name,
! 403: custom_logger_constructor_t constructor);
! 404:
! 405: #endif /** DAEMON_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>