Annotation of embedaddon/strongswan/src/libipsec/ipsec_sa_mgr.h, revision 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>