xref: /dpdk/app/test/test_cryptodev_security_ipsec.h (revision 838e8dec47afb3729014339d75efeb1067a096bb)
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