28#ifndef PROTOCORE_IPSEC_DB_H
29#define PROTOCORE_IPSEC_DB_H
33#if PROTOCORE_ENABLE_IKEV2
45#define PROTOCORE_IPSEC_ADDR_MAX 16
48#define PROTOCORE_IPSEC_SPD_MAX 8
51#define PROTOCORE_IPSEC_SAD_MAX 8
56 IPSEC_ACTION_DISCARD = 0,
57 IPSEC_ACTION_BYPASS = 1,
58 IPSEC_ACTION_PROTECT = 2,
71 uint8_t src_lo[PROTOCORE_IPSEC_ADDR_MAX];
72 uint8_t src_hi[PROTOCORE_IPSEC_ADDR_MAX];
73 uint8_t dst_lo[PROTOCORE_IPSEC_ADDR_MAX];
74 uint8_t dst_hi[PROTOCORE_IPSEC_ADDR_MAX];
92 IpsecPolicy entries[PROTOCORE_IPSEC_SPD_MAX];
111 uint8_t dst[PROTOCORE_IPSEC_ADDR_MAX];
124 IpsecSaEntry entries[PROTOCORE_IPSEC_SAD_MAX];
132} IpsecDbProtocoreIpsecSpdInitArgs;
138 const IpsecSelector *sel;
141} IpsecDbProtocoreIpsecSpdAddArgs;
147 const IpsecFlow *flow;
148} IpsecDbProtocoreIpsecSpdLookupArgs;
153 const IpsecSelector *sel;
154 const IpsecFlow *flow;
155} IpsecDbProtocoreIpsecSelectorMatchArgs;
161 const IkeTrafficSelector *ts_src;
162 const IkeTrafficSelector *ts_dst;
163} IpsecDbProtocoreIpsecSelectorFromTsArgs;
169} IpsecDbProtocoreIpsecSadInitArgs;
181} IpsecDbProtocoreIpsecSadAddArgs;
188} IpsecDbProtocoreIpsecSadFindArgs;
195} IpsecDbProtocoreIpsecSadRemoveArgs;
202} IpsecDbProtocoreIpsecSadNextSeqArgs;
244 IpsecDbProtocoreIpsecSpdInitArgs protocore_ipsec_spd_init_args;
245 IpsecDbProtocoreIpsecSpdAddArgs protocore_ipsec_spd_add_args;
246 IpsecDbProtocoreIpsecSpdLookupArgs protocore_ipsec_spd_lookup_args;
247 IpsecDbProtocoreIpsecSelectorMatchArgs protocore_ipsec_selector_match_args;
248 IpsecDbProtocoreIpsecSelectorFromTsArgs protocore_ipsec_selector_from_ts_args;
249 IpsecDbProtocoreIpsecSadInitArgs protocore_ipsec_sad_init_args;
250 IpsecDbProtocoreIpsecSadAddArgs protocore_ipsec_sad_add_args;
251 IpsecDbProtocoreIpsecSadFindArgs protocore_ipsec_sad_find_args;
252 IpsecDbProtocoreIpsecSadRemoveArgs protocore_ipsec_sad_remove_args;
253 IpsecDbProtocoreIpsecSadNextSeqArgs protocore_ipsec_sad_next_seq_args;
255 const IpsecPolicy *ptr;
260extern IpsecDbVars IpsecDbV;
265 void (*
const protocore_ipsec_spd_init)(uint8_t *work);
266 void (*
const protocore_ipsec_spd_add)(uint8_t *work);
267 void (*
const protocore_ipsec_spd_lookup)(uint8_t *work);
268 void (*
const protocore_ipsec_selector_match)(uint8_t *work);
269 void (*
const protocore_ipsec_selector_from_ts)(uint8_t *work);
270 void (*
const protocore_ipsec_sad_init)(uint8_t *work);
271 void (*
const protocore_ipsec_sad_add)(uint8_t *work);
272 void (*
const protocore_ipsec_sad_find)(uint8_t *work);
273 void (*
const protocore_ipsec_sad_remove)(uint8_t *work);
274 void (*
const protocore_ipsec_sad_next_seq)(uint8_t *work);
279void protocore_ipsec_db_protocore_ipsec_spd_init(uint8_t *work);
280void protocore_ipsec_db_protocore_ipsec_spd_add(uint8_t *work);
281void protocore_ipsec_db_protocore_ipsec_spd_lookup(uint8_t *work);
282void protocore_ipsec_db_protocore_ipsec_selector_match(uint8_t *work);
283void protocore_ipsec_db_protocore_ipsec_selector_from_ts(uint8_t *work);
284void protocore_ipsec_db_protocore_ipsec_sad_init(uint8_t *work);
285void protocore_ipsec_db_protocore_ipsec_sad_add(uint8_t *work);
286void protocore_ipsec_db_protocore_ipsec_sad_find(uint8_t *work);
287void protocore_ipsec_db_protocore_ipsec_sad_remove(uint8_t *work);
288void protocore_ipsec_db_protocore_ipsec_sad_next_seq(uint8_t *work);
294static const IpsecDbNs IpsecDb __attribute__((unused)) = {
295 .protocore_ipsec_spd_init = protocore_ipsec_db_protocore_ipsec_spd_init,
296 .protocore_ipsec_spd_add = protocore_ipsec_db_protocore_ipsec_spd_add,
297 .protocore_ipsec_spd_lookup = protocore_ipsec_db_protocore_ipsec_spd_lookup,
298 .protocore_ipsec_selector_match = protocore_ipsec_db_protocore_ipsec_selector_match,
299 .protocore_ipsec_selector_from_ts = protocore_ipsec_db_protocore_ipsec_selector_from_ts,
300 .protocore_ipsec_sad_init = protocore_ipsec_db_protocore_ipsec_sad_init,
301 .protocore_ipsec_sad_add = protocore_ipsec_db_protocore_ipsec_sad_add,
302 .protocore_ipsec_sad_find = protocore_ipsec_db_protocore_ipsec_sad_find,
303 .protocore_ipsec_sad_remove = protocore_ipsec_db_protocore_ipsec_sad_remove,
304 .protocore_ipsec_sad_next_seq = protocore_ipsec_db_protocore_ipsec_sad_next_seq,
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
ESP (RFC 4303) packet transform with AES-256-GCM (RFC 4106) - the IPsec datapath's crypto core.
#define PROTOCORE_ESP_SALT_LEN
Implicit salt length (the tail of the ESP key, not on the wire).
#define PROTOCORE_ESP_KEY_LEN
AES-256 key length.
IKEv2 (RFC 7296): the message and payload codec, the key schedule, and the handshake driver.
Anti-replay sliding-window state for one inbound SA (zero-heap).
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS