libhydra: Move kernel interface to libcharon
[strongswan.git] / src / libcharon / kernel / kernel_listener.h
1 /*
2 * Copyright (C) 2010-2013 Tobias Brunner
3 * Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup kernel_listener kernel_listener
18 * @{ @ingroup kernel
19 */
20
21 #ifndef KERNEL_LISTENER_H_
22 #define KERNEL_LISTENER_H_
23
24 typedef struct kernel_listener_t kernel_listener_t;
25
26 #include <networking/host.h>
27 #include <networking/tun_device.h>
28 #include <selectors/traffic_selector.h>
29 #include <kernel/kernel_ipsec.h>
30
31 /**
32 * Interface for components interested in kernel events.
33 *
34 * All hooks are optional.
35 */
36 struct kernel_listener_t {
37
38 /**
39 * Hook called if an acquire event for a policy is received.
40 *
41 * @param reqid reqid of the policy to acquire
42 * @param src_ts source traffic selector
43 * @param dst_ts destination traffic selector
44 * @return TRUE to remain registered, FALSE to unregister
45 */
46 bool (*acquire)(kernel_listener_t *this, u_int32_t reqid,
47 traffic_selector_t *src_ts, traffic_selector_t *dst_ts);
48
49 /**
50 * Hook called if an exire event for an IPsec SA is received.
51 *
52 * @param protocol protocol of the expired SA
53 * @param spi spi of the expired SA
54 * @param dst destination address of expired SA
55 * @param hard TRUE if it is a hard expire, FALSE otherwise
56 * @return TRUE to remain registered, FALSE to unregister
57 */
58 bool (*expire)(kernel_listener_t *this, u_int8_t protocol, u_int32_t spi,
59 host_t *dst, bool hard);
60
61 /**
62 * Hook called if the NAT mappings of an IPsec SA changed.
63 *
64 * @param protocol IPsec protocol of affected SA
65 * @param spi spi of the SA
66 * @param dst old destinatino address of SA
67 * @param remote new remote host
68 * @return TRUE to remain registered, FALSE to unregister
69 */
70 bool (*mapping)(kernel_listener_t *this, u_int8_t protocol, u_int32_t spi,
71 host_t *dst, host_t *remote);
72
73 /**
74 * Hook called if a migrate event for a policy is received.
75 *
76 * @param reqid reqid of the policy
77 * @param src_ts source traffic selector
78 * @param dst_ts destination traffic selector
79 * @param direction direction of the policy (in|out)
80 * @param local local host address to be used in the IKE_SA
81 * @param remote remote host address to be used in the IKE_SA
82 * @return TRUE to remain registered, FALSE to unregister
83 */
84 bool (*migrate)(kernel_listener_t *this, u_int32_t reqid,
85 traffic_selector_t *src_ts, traffic_selector_t *dst_ts,
86 policy_dir_t direction, host_t *local, host_t *remote);
87
88 /**
89 * Hook called if changes in the networking layer occurred (interfaces
90 * up/down, routes added/deleted etc.).
91 *
92 * @param address TRUE if address list, FALSE if routing changed
93 * @return TRUE to remain registered, FALSE to unregister
94 */
95 bool (*roam)(kernel_listener_t *this, bool address);
96
97 /**
98 * Hook called after a TUN device was created for a virtual IP address, or
99 * before such a device gets destroyed.
100 *
101 * @param tun TUN device
102 * @param created TRUE if created, FALSE if going to be destroyed
103 */
104 bool (*tun)(kernel_listener_t *this, tun_device_t *tun, bool created);
105 };
106
107 #endif /** KERNEL_LISTENER_H_ @}*/