Annotation of embedaddon/strongswan/src/libipsec/ipsec_sa.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 ipsec_sa
                     20:  * @{ @ingroup libipsec
                     21:  */
                     22: 
                     23: #ifndef IPSEC_SA_H_
                     24: #define IPSEC_SA_H_
                     25: 
                     26: #include "esp_context.h"
                     27: 
                     28: #include <library.h>
                     29: #include <networking/host.h>
                     30: #include <selectors/traffic_selector.h>
                     31: #include <ipsec/ipsec_types.h>
                     32: 
                     33: typedef struct ipsec_sa_t ipsec_sa_t;
                     34: 
                     35: /**
                     36:  * IPsec Security Association (SA)
                     37:  */
                     38: struct ipsec_sa_t {
                     39: 
                     40:        /**
                     41:         * Get the source address for this SA
                     42:         *
                     43:         * @return                      source address of this SA
                     44:         */
                     45:        host_t *(*get_source)(ipsec_sa_t *this);
                     46: 
                     47:        /**
                     48:         * Get the destination address for this SA
                     49:         *
                     50:         * @return                      destination address of this SA
                     51:         */
                     52:        host_t *(*get_destination)(ipsec_sa_t *this);
                     53: 
                     54:        /**
                     55:         * Set the source address for this SA
                     56:         *
                     57:         * @param addr          source address of this SA (gets cloned)
                     58:         */
                     59:        void (*set_source)(ipsec_sa_t *this, host_t *addr);
                     60: 
                     61:        /**
                     62:         * Set the destination address for this SA
                     63:         *
                     64:         * @param addr          destination address of this SA (gets cloned)
                     65:         */
                     66:        void (*set_destination)(ipsec_sa_t *this, host_t *addr);
                     67: 
                     68:        /**
                     69:         * Get the SPI for this SA
                     70:         *
                     71:         * @return                      SPI of this SA
                     72:         */
                     73:        uint32_t (*get_spi)(ipsec_sa_t *this);
                     74: 
                     75:        /**
                     76:         * Get the reqid of this SA
                     77:         *
                     78:         * @return                      reqid of this SA
                     79:         */
                     80:        uint32_t (*get_reqid)(ipsec_sa_t *this);
                     81: 
                     82:        /**
                     83:         * Get the protocol (e.g. IPPROTO_ESP) of this SA
                     84:         *
                     85:         * @return                      protocol of this SA
                     86:         */
                     87:        uint8_t (*get_protocol)(ipsec_sa_t *this);
                     88: 
                     89:        /**
                     90:         * Returns whether this SA is inbound or outbound
                     91:         *
                     92:         * @return                      TRUE if inbound, FALSE if outbound
                     93:         */
                     94:        bool (*is_inbound)(ipsec_sa_t *this);
                     95: 
                     96:        /**
                     97:         * Get the lifetime information for this SA
                     98:         * Note that this information is always relative to the time when the
                     99:         * SA was installed (i.e. it is not adjusted over time)
                    100:         *
                    101:         * @return                      lifetime of this SA
                    102:         */
                    103:        lifetime_cfg_t *(*get_lifetime)(ipsec_sa_t *this);
                    104: 
                    105:        /**
                    106:         * Get the ESP context for this SA
                    107:         *
                    108:         * @return                      ESP context of this SA
                    109:         */
                    110:        esp_context_t *(*get_esp_context)(ipsec_sa_t *this);
                    111: 
                    112:        /**
                    113:         * Get usage statistics for this SA.
                    114:         *
                    115:         * @param bytes         receives number of processed bytes, or NULL
                    116:         * @param packets       receives number of processed packets, or NULL
                    117:         * @param time          receives last use time of this SA, or NULL
                    118:         */
                    119:        void (*get_usestats)(ipsec_sa_t *this, uint64_t *bytes, uint64_t *packets,
                    120:                                                 time_t *time);
                    121: 
                    122:        /**
                    123:         * Record en/decryption of a packet to update usage statistics.
                    124:         *
                    125:         * @param bytes         length of packet processed
                    126:         */
                    127:        void (*update_usestats)(ipsec_sa_t *this, uint32_t bytes);
                    128: 
                    129:        /**
                    130:         * Expire this SA, soft or hard.
                    131:         *
                    132:         * A soft expire triggers a rekey, a hard expire blocks the SA and
                    133:         * triggers a delete for the SA.
                    134:         *
                    135:         * @param hard          TRUE for hard, FALSE for soft
                    136:         */
                    137:        void (*expire)(ipsec_sa_t *this, bool hard);
                    138: 
                    139:        /**
                    140:         * Check if this SA matches all given parameters
                    141:         *
                    142:         * Only matches if the SA has not yet expired.
                    143:         *
                    144:         * @param spi           SPI
                    145:         * @param dst           destination address
                    146:         * @return                      TRUE if this SA matches all parameters, FALSE otherwise
                    147:         */
                    148:        bool (*match_by_spi_dst)(ipsec_sa_t *this, uint32_t spi, host_t *dst);
                    149: 
                    150:        /**
                    151:         * Check if this SA matches all given parameters
                    152:         *
                    153:         * @param spi           SPI
                    154:         * @param src           source address
                    155:         * @param dst           destination address
                    156:         * @return                      TRUE if this SA matches all parameters, FALSE otherwise
                    157:         */
                    158:        bool (*match_by_spi_src_dst)(ipsec_sa_t *this, uint32_t spi, host_t *src,
                    159:                                                                 host_t *dst);
                    160: 
                    161:        /**
                    162:         * Check if this SA matches all given parameters
                    163:         *
                    164:         * Only matches if the SA has not yet expired.
                    165:         *
                    166:         * @param reqid         reqid
                    167:         * @param inbound       TRUE for inbound SA, FALSE for outbound
                    168:         * @return                      TRUE if this SA matches all parameters, FALSE otherwise
                    169:         */
                    170:        bool (*match_by_reqid)(ipsec_sa_t *this, uint32_t reqid, bool inbound);
                    171: 
                    172:        /**
                    173:         * Destroy an ipsec_sa_t
                    174:         */
                    175:        void (*destroy)(ipsec_sa_t *this);
                    176: 
                    177: };
                    178: 
                    179: /**
                    180:  * Create an ipsec_sa_t instance
                    181:  *
                    182:  * @param spi                  SPI for this SA
                    183:  * @param src                  source address for this SA (gets cloned)
                    184:  * @param dst                  destination address for this SA (gets cloned)
                    185:  * @param protocol             protocol for this SA (only ESP is supported)
                    186:  * @param reqid                        reqid for this SA
                    187:  * @param mark                 mark for this SA (ignored)
                    188:  * @param tfc                  Traffic Flow Confidentiality (currently not supported)
                    189:  * @param lifetime             lifetime for this SA
                    190:  * @param enc_alg              encryption algorithm for this SA
                    191:  * @param enc_key              encryption key for this SA
                    192:  * @param int_alg              integrity protection algorithm
                    193:  * @param int_key              integrity protection key
                    194:  * @param mode                 mode for this SA (only tunnel mode is supported)
                    195:  * @param ipcomp               IPcomp transform (not supported, use IPCOMP_NONE)
                    196:  * @param cpi                  CPI for IPcomp (ignored)
                    197:  * @param encap                        enable UDP encapsulation (must be TRUE)
                    198:  * @param esn                  Extended Sequence Numbers (currently not supported)
                    199:  * @param inbound              TRUE if this is an inbound SA, FALSE otherwise
                    200:  * @return                             the IPsec SA, or NULL if the creation failed
                    201:  */
                    202: ipsec_sa_t *ipsec_sa_create(uint32_t spi, host_t *src, host_t *dst,
                    203:                                                        uint8_t protocol, uint32_t reqid, mark_t mark,
                    204:                                                        uint32_t tfc, lifetime_cfg_t *lifetime,
                    205:                                                        uint16_t enc_alg, chunk_t enc_key,
                    206:                                                        uint16_t int_alg, chunk_t int_key,
                    207:                                                        ipsec_mode_t mode, uint16_t ipcomp, uint16_t cpi,
                    208:                                                        bool encap, bool esn, bool inbound);
                    209: 
                    210: #endif /** IPSEC_SA_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>