1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2024 Oxide Computer Company 14 */ 15 16 #ifndef _INET_TCPSIG_H 17 #define _INET_TCPSIG_H 18 19 #include <sys/stdbool.h> 20 #include <inet/keysock.h> 21 #include <inet/sadb.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 typedef struct tcpsig_sa { 28 list_node_t ts_link; 29 30 tcp_stack_t *ts_stack; 31 32 sa_family_t ts_family; 33 struct sockaddr_storage ts_src; 34 struct sockaddr_storage ts_dst; 35 36 ipsa_key_t ts_key; 37 38 kmutex_t ts_lock; 39 /* Following protected by ts_lock */ 40 uint64_t ts_refcnt; 41 bool ts_tombstoned; 42 } tcpsig_sa_t; 43 44 typedef struct tcpsig_db { 45 krwlock_t td_lock; 46 list_t td_salist; 47 } tcpsig_db_t; 48 49 extern void tcpsig_init(tcp_stack_t *); 50 extern void tcpsig_fini(tcp_stack_t *); 51 extern void tcpsig_sa_handler(keysock_t *, mblk_t *, sadb_msg_t *, 52 sadb_ext_t **); 53 54 extern void tcpsig_sa_rele(tcpsig_sa_t *); 55 extern bool tcpsig_sa_exists(tcp_t *, bool, tcpsig_sa_t **); 56 extern bool tcpsig_signature(mblk_t *, tcp_t *, tcpha_t *, int, uint8_t *, 57 bool); 58 extern bool tcpsig_verify(mblk_t *, tcp_t *, tcpha_t *, ip_recv_attr_t *, 59 uint8_t *); 60 61 #ifdef __cplusplus 62 } 63 #endif 64 65 #endif /* _INET_TCPSIG_H */ 66