1474f1202SAnoob Joseph /* SPDX-License-Identifier: BSD-3-Clause 2474f1202SAnoob Joseph * Copyright(C) 2021 Marvell. 3474f1202SAnoob Joseph */ 4474f1202SAnoob Joseph 5474f1202SAnoob Joseph #ifndef _TEST_CRYPTODEV_SECURITY_IPSEC_H_ 6474f1202SAnoob Joseph #define _TEST_CRYPTODEV_SECURITY_IPSEC_H_ 7474f1202SAnoob Joseph 8474f1202SAnoob Joseph #include <rte_cryptodev.h> 9474f1202SAnoob Joseph #include <rte_security.h> 10474f1202SAnoob Joseph 11*f5e2f44cSVidya Sagar Velumuri #include "test_security_proto.h" 12*f5e2f44cSVidya Sagar Velumuri 133edd1197SNithin Dabilpuram #define IPSEC_TEXT_MAX_LEN 16384u 146622d9c9SAnoob Joseph 15474f1202SAnoob Joseph struct ipsec_test_data { 16474f1202SAnoob Joseph struct { 17474f1202SAnoob Joseph uint8_t data[32]; 18474f1202SAnoob Joseph } key; 19178a12fbSTejasree Kondoj struct { 2050069f3cSTejasree Kondoj uint8_t data[64]; 21178a12fbSTejasree Kondoj } auth_key; 22474f1202SAnoob Joseph 23474f1202SAnoob Joseph struct { 243edd1197SNithin Dabilpuram uint8_t data[IPSEC_TEXT_MAX_LEN]; 25474f1202SAnoob Joseph unsigned int len; 26474f1202SAnoob Joseph } input_text; 27474f1202SAnoob Joseph 28474f1202SAnoob Joseph struct { 293edd1197SNithin Dabilpuram uint8_t data[IPSEC_TEXT_MAX_LEN]; 30474f1202SAnoob Joseph unsigned int len; 31474f1202SAnoob Joseph } output_text; 32474f1202SAnoob Joseph 33474f1202SAnoob Joseph struct { 34474f1202SAnoob Joseph uint8_t data[4]; 35474f1202SAnoob Joseph unsigned int len; 36474f1202SAnoob Joseph } salt; 37474f1202SAnoob Joseph 38474f1202SAnoob Joseph struct { 39474f1202SAnoob Joseph uint8_t data[16]; 40474f1202SAnoob Joseph } iv; 41474f1202SAnoob Joseph 42474f1202SAnoob Joseph struct rte_security_ipsec_xform ipsec_xform; 43474f1202SAnoob Joseph 44474f1202SAnoob Joseph bool aead; 45663d78beSArchana Muniganti 460e4cc244SArchana Muniganti bool aes_gmac; 470e4cc244SArchana Muniganti 48663d78beSArchana Muniganti bool auth_only; 49663d78beSArchana Muniganti 50d02c6bfcSTejasree Kondoj /* Antireplay packet */ 51d02c6bfcSTejasree Kondoj bool ar_packet; 52474f1202SAnoob Joseph 53474f1202SAnoob Joseph union { 54474f1202SAnoob Joseph struct { 55474f1202SAnoob Joseph struct rte_crypto_sym_xform cipher; 56474f1202SAnoob Joseph struct rte_crypto_sym_xform auth; 57474f1202SAnoob Joseph } chain; 58474f1202SAnoob Joseph struct rte_crypto_sym_xform aead; 59474f1202SAnoob Joseph } xform; 60474f1202SAnoob Joseph }; 61474f1202SAnoob Joseph 62e2cbb384SAnoob Joseph enum df_flags { 63e2cbb384SAnoob Joseph TEST_IPSEC_COPY_DF_INNER_0 = 1, 64e2cbb384SAnoob Joseph TEST_IPSEC_COPY_DF_INNER_1, 65e2cbb384SAnoob Joseph TEST_IPSEC_SET_DF_0_INNER_1, 66e2cbb384SAnoob Joseph TEST_IPSEC_SET_DF_1_INNER_0, 67e2cbb384SAnoob Joseph }; 68e2cbb384SAnoob Joseph 6970c60cfdSAnoob Joseph #define TEST_IPSEC_DSCP_VAL 0x12 7070c60cfdSAnoob Joseph 7170c60cfdSAnoob Joseph enum dscp_flags { 7270c60cfdSAnoob Joseph TEST_IPSEC_COPY_DSCP_INNER_0 = 1, 7370c60cfdSAnoob Joseph TEST_IPSEC_COPY_DSCP_INNER_1, 7470c60cfdSAnoob Joseph TEST_IPSEC_SET_DSCP_0_INNER_1, 7570c60cfdSAnoob Joseph TEST_IPSEC_SET_DSCP_1_INNER_0, 7670c60cfdSAnoob Joseph }; 7770c60cfdSAnoob Joseph 7891d1d052SVamsi Attunuru #define TEST_IPSEC_FLABEL_VAL 0x1234 7991d1d052SVamsi Attunuru 8091d1d052SVamsi Attunuru enum flabel_flags { 8191d1d052SVamsi Attunuru TEST_IPSEC_COPY_FLABEL_INNER_0 = 1, 8291d1d052SVamsi Attunuru TEST_IPSEC_COPY_FLABEL_INNER_1, 8391d1d052SVamsi Attunuru TEST_IPSEC_SET_FLABEL_0_INNER_1, 8491d1d052SVamsi Attunuru TEST_IPSEC_SET_FLABEL_1_INNER_0, 8591d1d052SVamsi Attunuru }; 8691d1d052SVamsi Attunuru 876622d9c9SAnoob Joseph struct ipsec_test_flags { 886622d9c9SAnoob Joseph bool display_alg; 894aa52f21SAnoob Joseph bool sa_expiry_pkts_soft; 906978f51eSAnoob Joseph bool sa_expiry_pkts_hard; 9134e8a9d9SVamsi Attunuru bool sa_expiry_bytes_soft; 9234e8a9d9SVamsi Attunuru bool sa_expiry_bytes_hard; 930f453190STejasree Kondoj bool icv_corrupt; 94cd928003STejasree Kondoj bool iv_gen; 95270470eeSTejasree Kondoj uint32_t tunnel_hdr_verify; 96c8234341STejasree Kondoj bool udp_encap; 979ec50a52STejasree Kondoj bool udp_ports_verify; 98757bb461SVidya Sagar Velumuri bool udp_encap_custom_ports; 9983243502SArchana Muniganti bool ip_csum; 10083243502SArchana Muniganti bool l4_csum; 1019fb87fbfSTejasree Kondoj bool ipv6; 1029fb87fbfSTejasree Kondoj bool tunnel_ipv6; 10365d68c7cSAnoob Joseph bool transport; 104b7986bdeSTejasree Kondoj bool fragment; 1052c85598cSAnkur Dwivedi bool stats_success; 106d02c6bfcSTejasree Kondoj bool antireplay; 1072765636fSTejasree Kondoj bool use_ext_mbuf; 108e2cbb384SAnoob Joseph enum df_flags df; 10970c60cfdSAnoob Joseph enum dscp_flags dscp; 11091d1d052SVamsi Attunuru enum flabel_flags flabel; 11142902e81SVolodymyr Fialko bool dec_ttl_or_hop_limit; 112663d78beSArchana Muniganti bool ah; 1133edd1197SNithin Dabilpuram uint32_t plaintext_len; 114c36d7c0dSVolodymyr Fialko int nb_segs_in_mbuf; 1151d63855bSNithin Dabilpuram bool inb_oop; 11669e1a909SVidya Sagar Velumuri bool rx_inject; 1176622d9c9SAnoob Joseph }; 1186622d9c9SAnoob Joseph 1198d290523SAnoob Joseph extern struct ipsec_test_data pkt_aes_256_gcm; 1209fb87fbfSTejasree Kondoj extern struct ipsec_test_data pkt_aes_256_gcm_v6; 1218d290523SAnoob Joseph extern struct ipsec_test_data pkt_aes_128_cbc_hmac_sha256; 1229fb87fbfSTejasree Kondoj extern struct ipsec_test_data pkt_aes_128_cbc_hmac_sha256_v6; 1238d290523SAnoob Joseph 124474f1202SAnoob Joseph int test_ipsec_sec_caps_verify(struct rte_security_ipsec_xform *ipsec_xform, 125474f1202SAnoob Joseph const struct rte_security_capability *sec_cap, 126474f1202SAnoob Joseph bool silent); 127474f1202SAnoob Joseph 128474f1202SAnoob Joseph void test_ipsec_td_in_from_out(const struct ipsec_test_data *td_out, 129474f1202SAnoob Joseph struct ipsec_test_data *td_in); 130474f1202SAnoob Joseph 1316622d9c9SAnoob Joseph void test_ipsec_td_prepare(const struct crypto_param *param1, 1326622d9c9SAnoob Joseph const struct crypto_param *param2, 1336622d9c9SAnoob Joseph const struct ipsec_test_flags *flags, 1346622d9c9SAnoob Joseph struct ipsec_test_data *td_array, 1356622d9c9SAnoob Joseph int nb_td); 1366622d9c9SAnoob Joseph 1376622d9c9SAnoob Joseph void test_ipsec_td_update(struct ipsec_test_data td_inb[], 1386622d9c9SAnoob Joseph const struct ipsec_test_data td_outb[], 1396622d9c9SAnoob Joseph int nb_td, 1406622d9c9SAnoob Joseph const struct ipsec_test_flags *flags); 1416622d9c9SAnoob Joseph 142c36d7c0dSVolodymyr Fialko int test_ipsec_post_process(const struct rte_mbuf *m, 143474f1202SAnoob Joseph const struct ipsec_test_data *td, 1446622d9c9SAnoob Joseph struct ipsec_test_data *res_d, bool silent, 1456622d9c9SAnoob Joseph const struct ipsec_test_flags *flags); 146474f1202SAnoob Joseph 147d02c6bfcSTejasree Kondoj int test_ipsec_status_check(const struct ipsec_test_data *td, 148d02c6bfcSTejasree Kondoj struct rte_crypto_op *op, 1496622d9c9SAnoob Joseph const struct ipsec_test_flags *flags, 1504aa52f21SAnoob Joseph enum rte_security_ipsec_sa_direction dir, 1514aa52f21SAnoob Joseph int pkt_num); 152474f1202SAnoob Joseph 15379bdb787SAkhil Goyal int test_ipsec_stats_verify(void *ctx, 1542973dbf9SAkhil Goyal void *sess, 1552c85598cSAnkur Dwivedi const struct ipsec_test_flags *flags, 1562c85598cSAnkur Dwivedi enum rte_security_ipsec_sa_direction dir); 1572c85598cSAnkur Dwivedi 158e2cbb384SAnoob Joseph int test_ipsec_pkt_update(uint8_t *pkt, const struct ipsec_test_flags *flags); 159e2cbb384SAnoob Joseph 160474f1202SAnoob Joseph #endif 161