83243502ac
This patch adds tests for inner IP and inner L4 checksum verification in IPsec mode. Signed-off-by: Archana Muniganti <marchana@marvell.com> Acked-by: Akhil Goyal <gakhil@marvell.com>
127 lines
2.8 KiB
C
127 lines
2.8 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright(C) 2021 Marvell.
|
|
*/
|
|
|
|
#ifndef _TEST_CRYPTODEV_SECURITY_IPSEC_H_
|
|
#define _TEST_CRYPTODEV_SECURITY_IPSEC_H_
|
|
|
|
#include <rte_cryptodev.h>
|
|
#include <rte_security.h>
|
|
|
|
#define IPSEC_TEST_PACKETS_MAX 32
|
|
|
|
struct ipsec_test_data {
|
|
struct {
|
|
uint8_t data[32];
|
|
} key;
|
|
|
|
struct {
|
|
uint8_t data[1024];
|
|
unsigned int len;
|
|
} input_text;
|
|
|
|
struct {
|
|
uint8_t data[1024];
|
|
unsigned int len;
|
|
} output_text;
|
|
|
|
struct {
|
|
uint8_t data[4];
|
|
unsigned int len;
|
|
} salt;
|
|
|
|
struct {
|
|
uint8_t data[16];
|
|
} iv;
|
|
|
|
struct rte_security_ipsec_xform ipsec_xform;
|
|
|
|
bool aead;
|
|
|
|
union {
|
|
struct {
|
|
struct rte_crypto_sym_xform cipher;
|
|
struct rte_crypto_sym_xform auth;
|
|
} chain;
|
|
struct rte_crypto_sym_xform aead;
|
|
} xform;
|
|
};
|
|
|
|
struct ipsec_test_flags {
|
|
bool display_alg;
|
|
bool sa_expiry_pkts_soft;
|
|
bool sa_expiry_pkts_hard;
|
|
bool icv_corrupt;
|
|
bool iv_gen;
|
|
uint32_t tunnel_hdr_verify;
|
|
bool udp_encap;
|
|
bool udp_ports_verify;
|
|
bool ip_csum;
|
|
bool l4_csum;
|
|
};
|
|
|
|
struct crypto_param {
|
|
enum rte_crypto_sym_xform_type type;
|
|
union {
|
|
enum rte_crypto_cipher_algorithm cipher;
|
|
enum rte_crypto_auth_algorithm auth;
|
|
enum rte_crypto_aead_algorithm aead;
|
|
} alg;
|
|
uint16_t key_length;
|
|
};
|
|
|
|
static const struct crypto_param aead_list[] = {
|
|
{
|
|
.type = RTE_CRYPTO_SYM_XFORM_AEAD,
|
|
.alg.aead = RTE_CRYPTO_AEAD_AES_GCM,
|
|
.key_length = 16,
|
|
},
|
|
{
|
|
.type = RTE_CRYPTO_SYM_XFORM_AEAD,
|
|
.alg.aead = RTE_CRYPTO_AEAD_AES_GCM,
|
|
.key_length = 24,
|
|
},
|
|
{
|
|
.type = RTE_CRYPTO_SYM_XFORM_AEAD,
|
|
.alg.aead = RTE_CRYPTO_AEAD_AES_GCM,
|
|
.key_length = 32
|
|
},
|
|
};
|
|
|
|
int test_ipsec_sec_caps_verify(struct rte_security_ipsec_xform *ipsec_xform,
|
|
const struct rte_security_capability *sec_cap,
|
|
bool silent);
|
|
|
|
int test_ipsec_crypto_caps_aead_verify(
|
|
const struct rte_security_capability *sec_cap,
|
|
struct rte_crypto_sym_xform *aead);
|
|
|
|
void test_ipsec_td_in_from_out(const struct ipsec_test_data *td_out,
|
|
struct ipsec_test_data *td_in);
|
|
|
|
void test_ipsec_td_prepare(const struct crypto_param *param1,
|
|
const struct crypto_param *param2,
|
|
const struct ipsec_test_flags *flags,
|
|
struct ipsec_test_data *td_array,
|
|
int nb_td);
|
|
|
|
void test_ipsec_td_update(struct ipsec_test_data td_inb[],
|
|
const struct ipsec_test_data td_outb[],
|
|
int nb_td,
|
|
const struct ipsec_test_flags *flags);
|
|
|
|
void test_ipsec_display_alg(const struct crypto_param *param1,
|
|
const struct crypto_param *param2);
|
|
|
|
int test_ipsec_post_process(struct rte_mbuf *m,
|
|
const struct ipsec_test_data *td,
|
|
struct ipsec_test_data *res_d, bool silent,
|
|
const struct ipsec_test_flags *flags);
|
|
|
|
int test_ipsec_status_check(struct rte_crypto_op *op,
|
|
const struct ipsec_test_flags *flags,
|
|
enum rte_security_ipsec_sa_direction dir,
|
|
int pkt_num);
|
|
|
|
#endif
|