Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(c) 2018-2020 Intel Corporation 3 : : */ 4 : : 5 : : #include <eal_export.h> 6 : : #include <rte_ipsec.h> 7 : : #include "sa.h" 8 : : 9 : : static int 10 : 0 : session_check(struct rte_ipsec_session *ss) 11 : : { 12 [ # # # # ]: 0 : if (ss == NULL || ss->sa == NULL) 13 : : return -EINVAL; 14 : : 15 [ # # ]: 0 : if (ss->type == RTE_SECURITY_ACTION_TYPE_NONE || 16 : : ss->type == RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO) { 17 [ # # ]: 0 : if (ss->crypto.ses == NULL) 18 : 0 : return -EINVAL; 19 : : } else { 20 [ # # ]: 0 : if (ss->security.ses == NULL) 21 : : return -EINVAL; 22 [ # # ]: 0 : if ((ss->type == RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO || 23 : : ss->type == 24 : 0 : RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL) && 25 [ # # ]: 0 : ss->security.ctx == NULL) 26 : 0 : return -EINVAL; 27 : : } 28 : : 29 : : return 0; 30 : : } 31 : : 32 : : RTE_EXPORT_SYMBOL(rte_ipsec_session_prepare) 33 : : int 34 : 0 : rte_ipsec_session_prepare(struct rte_ipsec_session *ss) 35 : : { 36 : : int32_t rc; 37 : : struct rte_ipsec_sa_pkt_func fp; 38 : : 39 : 0 : rc = session_check(ss); 40 [ # # ]: 0 : if (rc != 0) 41 : : return rc; 42 : : 43 : 0 : rc = ipsec_sa_pkt_func_select(ss, ss->sa, &fp); 44 [ # # ]: 0 : if (rc != 0) 45 : : return rc; 46 : : 47 : 0 : ss->pkt_func = fp; 48 : : 49 [ # # ]: 0 : if (ss->type == RTE_SECURITY_ACTION_TYPE_NONE) 50 : 0 : rte_cryptodev_sym_session_opaque_data_set(ss->crypto.ses, 51 : : (uintptr_t)ss); 52 : : else 53 : 0 : rte_security_session_opaque_data_set(ss->security.ses, (uintptr_t)ss); 54 : : 55 : : return 0; 56 : : }