Annotation of embedaddon/strongswan/src/libipsec/ipsec_sa_mgr.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2012 Tobias Brunner
3: * Copyright (C) 2012 Giuliano Grassi
4: * Copyright (C) 2012 Ralf Sager
5: * HSR Hochschule fuer Technik Rapperswil
6: *
7: * This program is free software; you can redistribute it and/or modify it
8: * under the terms of the GNU General Public License as published by the
9: * Free Software Foundation; either version 2 of the License, or (at your
10: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11: *
12: * This program is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15: * for more details.
16: */
17:
18: /**
19: * @defgroup ipsec_sa_mgr ipsec_sa_mgr
20: * @{ @ingroup libipsec
21: */
22:
23: #ifndef IPSEC_SA_MGR_H_
24: #define IPSEC_SA_MGR_H_
25:
26: #include "ipsec_sa.h"
27:
28: #include <library.h>
29: #include <ipsec/ipsec_types.h>
30: #include <selectors/traffic_selector.h>
31: #include <networking/host.h>
32:
33: typedef struct ipsec_sa_mgr_t ipsec_sa_mgr_t;
34:
35: /**
36: * IPsec SA manager
37: *
38: * The first methods are modeled after those in kernel_ipsec_t.
39: */
40: struct ipsec_sa_mgr_t {
41:
42: /**
43: * Allocate an SPI for an inbound IPsec SA
44: *
45: * @param src source address of the SA
46: * @param dst destination address of the SA
47: * @param protocol protocol of the SA (only ESP supported)
48: * @param spi the allocated SPI
49: * @return SUCCESS of operation successful
50: */
51: status_t (*get_spi)(ipsec_sa_mgr_t *this, host_t *src, host_t *dst,
52: uint8_t protocol, uint32_t *spi);
53:
54: /**
55: * Add a new SA
56: *
57: * @param src source address for this SA (gets cloned)
58: * @param dst destination address for this SA (gets cloned)
59: * @param spi SPI for this SA
60: * @param protocol protocol for this SA (only ESP is supported)
61: * @param reqid reqid for this SA
62: * @param mark mark for this SA (ignored)
63: * @param tfc Traffic Flow Confidentiality (not yet supported)
64: * @param lifetime lifetime for this SA
65: * @param enc_alg encryption algorithm for this SA
66: * @param enc_key encryption key for this SA
67: * @param int_alg integrity protection algorithm
68: * @param int_key integrity protection key
69: * @param mode mode for this SA (only tunnel mode is supported)
70: * @param ipcomp IPcomp transform (not supported, use IPCOMP_NONE)
71: * @param cpi CPI for IPcomp (ignored)
72: * @param initiator TRUE if initiator of the exchange creating this SA
73: * @param encap enable UDP encapsulation (must be TRUE)
74: * @param esn Extended Sequence Numbers (currently not supported)
75: * @param inbound TRUE if this is an inbound SA, FALSE otherwise
76: * @param update TRUE if an SPI has already been allocated for SA
77: * @return SUCCESS if operation completed
78: */
79: status_t (*add_sa)(ipsec_sa_mgr_t *this, host_t *src, host_t *dst,
80: uint32_t spi, uint8_t protocol, uint32_t reqid,
81: mark_t mark, uint32_t tfc, lifetime_cfg_t *lifetime,
82: uint16_t enc_alg, chunk_t enc_key, uint16_t int_alg,
83: chunk_t int_key, ipsec_mode_t mode, uint16_t ipcomp,
84: uint16_t cpi, bool initiator, bool encap, bool esn,
85: bool inbound, bool update);
86:
87: /**
88: * Update the hosts on an installed SA.
89: *
90: * @param spi SPI of the SA
91: * @param protocol protocol for this SA (ESP/AH)
92: * @param cpi CPI for IPComp, 0 if no IPComp is used
93: * @param src current source address
94: * @param dst current destination address
95: * @param new_src new source address
96: * @param new_dst new destination address
97: * @param encap current use of UDP encapsulation
98: * @param new_encap new use of UDP encapsulation
99: * @param mark optional mark for this SA
100: * @return SUCCESS if operation completed
101: */
102: status_t (*update_sa)(ipsec_sa_mgr_t *this,
103: uint32_t spi, uint8_t protocol, uint16_t cpi,
104: host_t *src, host_t *dst,
105: host_t *new_src, host_t *new_dst,
106: bool encap, bool new_encap, mark_t mark);
107:
108: /**
109: * Query the number of bytes processed by an SA from the SAD.
110: *
111: * @param src source address for this SA
112: * @param dst destination address for this SA
113: * @param spi SPI allocated by us or remote peer
114: * @param protocol protocol for this SA (ESP/AH)
115: * @param mark optional mark for this SA
116: * @param[out] bytes the number of bytes processed by SA
117: * @param[out] packets number of packets processed by SA
118: * @param[out] time last (monotonic) time of SA use
119: * @return SUCCESS if operation completed
120: */
121: status_t (*query_sa)(ipsec_sa_mgr_t *this, host_t *src, host_t *dst,
122: uint32_t spi, uint8_t protocol, mark_t mark,
123: uint64_t *bytes, uint64_t *packets, time_t *time);
124:
125: /**
126: * Delete a previously added SA
127: *
128: * @param spi SPI of the SA
129: * @param src source address of the SA
130: * @param dst destination address of the SA
131: * @param protocol protocol of the SA
132: * @param cpi CPI for IPcomp
133: * @param mark optional mark
134: * @return SUCCESS if operation completed
135: */
136: status_t (*del_sa)(ipsec_sa_mgr_t *this, host_t *src, host_t *dst,
137: uint32_t spi, uint8_t protocol, uint16_t cpi,
138: mark_t mark);
139:
140: /**
141: * Flush all SAs
142: *
143: * @return SUCCESS if operation completed
144: */
145: status_t (*flush_sas)(ipsec_sa_mgr_t *this);
146:
147: /**
148: * Checkout an installed IPsec SA by SPI and destination address
149: * Can be used to find the correct SA for an inbound packet.
150: *
151: * The matching SA is locked until it is checked in using checkin().
152: * If the matching SA is already checked out, this call blocks until the
153: * SA is checked in.
154: *
155: * Since other threads may be waiting for the checked out SA, it should be
156: * checked in as soon as possible after use.
157: *
158: * @param spi SPI (e.g. of an inbound packet)
159: * @param dst destination address (e.g. of an inbound packet)
160: * @return the matching IPsec SA, or NULL if none is found
161: */
162: ipsec_sa_t *(*checkout_by_spi)(ipsec_sa_mgr_t *this, uint32_t spi,
163: host_t *dst);
164:
165: /**
166: * Checkout an installed IPsec SA by its reqid and inbound/outbound flag.
167: * Can be used to find the correct SA for an outbound packet.
168: *
169: * The matching SA is locked until it is checked in using checkin().
170: * If the matching SA is already checked out, this call blocks until the
171: * SA is checked in.
172: *
173: * Since other threads may be waiting for a checked out SA, it should be
174: * checked in as soon as possible after use.
175: *
176: * @param reqid reqid of the SA
177: * @param inbound TRUE for an inbound SA, FALSE for an outbound SA
178: * @return the matching IPsec SA, or NULL if none is found
179: */
180: ipsec_sa_t *(*checkout_by_reqid)(ipsec_sa_mgr_t *this, uint32_t reqid,
181: bool inbound);
182:
183: /**
184: * Checkin an SA after use.
185: *
186: * @param sa checked out SA
187: */
188: void (*checkin)(ipsec_sa_mgr_t *this, ipsec_sa_t *sa);
189:
190: /**
191: * Destroy an ipsec_sa_mgr_t
192: */
193: void (*destroy)(ipsec_sa_mgr_t *this);
194:
195: };
196:
197: /**
198: * Create an ipsec_sa_mgr instance
199: *
200: * @return IPsec SA manager instance
201: */
202: ipsec_sa_mgr_t *ipsec_sa_mgr_create();
203:
204: #endif /** IPSEC_SA_MGR_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>