+ crypto_alg_t *a;
+
+ vec_validate_aligned (dcm->cipher_algs, IPSEC_CRYPTO_N_ALG - 1, 8);
+
+ {
+#define _(v,f,str) \
+ dcm->cipher_algs[IPSEC_CRYPTO_ALG_##f].name = str; \
+ dcm->cipher_algs[IPSEC_CRYPTO_ALG_##f].disabled = n_mains;
+ foreach_ipsec_crypto_alg
+#undef _
+ }
+
+ /* Minimum boundary for ciphers is 4B, required by ESP */
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_NONE];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_NULL;
+ a->boundary = 4; /* 1 */
+ a->key_len = 0;
+ a->iv_len = 0;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_CBC_128];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_AES_CBC;
+ a->boundary = 16;
+ a->key_len = 16;
+ a->iv_len = 16;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_CBC_192];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_AES_CBC;
+ a->boundary = 16;
+ a->key_len = 24;
+ a->iv_len = 16;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_CBC_256];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_AES_CBC;
+ a->boundary = 16;
+ a->key_len = 32;
+ a->iv_len = 16;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_CTR_128];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_AES_CTR;
+ a->boundary = 4; /* 1 */
+ a->key_len = 16;
+ a->iv_len = 8;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_CTR_192];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_AES_CTR;
+ a->boundary = 4; /* 1 */
+ a->key_len = 24;
+ a->iv_len = 8;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_CTR_256];
+ a->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+ a->alg = RTE_CRYPTO_CIPHER_AES_CTR;
+ a->boundary = 4; /* 1 */
+ a->key_len = 32;
+ a->iv_len = 8;
+
+#define AES_GCM_TYPE RTE_CRYPTO_SYM_XFORM_AEAD
+#define AES_GCM_ALG RTE_CRYPTO_AEAD_AES_GCM
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_GCM_128];
+ a->type = AES_GCM_TYPE;
+ a->alg = AES_GCM_ALG;
+ a->boundary = 4; /* 1 */
+ a->key_len = 16;
+ a->iv_len = 8;
+ a->trunc_size = 16;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_GCM_192];
+ a->type = AES_GCM_TYPE;
+ a->alg = AES_GCM_ALG;
+ a->boundary = 4; /* 1 */
+ a->key_len = 24;
+ a->iv_len = 8;
+ a->trunc_size = 16;
+
+ a = &dcm->cipher_algs[IPSEC_CRYPTO_ALG_AES_GCM_256];
+ a->type = AES_GCM_TYPE;
+ a->alg = AES_GCM_ALG;
+ a->boundary = 4; /* 1 */
+ a->key_len = 32;
+ a->iv_len = 8;
+ a->trunc_size = 16;
+
+ vec_validate (dcm->auth_algs, IPSEC_INTEG_N_ALG - 1);
+
+ {
+#define _(v,f,str) \
+ dcm->auth_algs[IPSEC_INTEG_ALG_##f].name = str; \
+ dcm->auth_algs[IPSEC_INTEG_ALG_##f].disabled = n_mains;
+ foreach_ipsec_integ_alg
+#undef _
+ }
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_NONE];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_NULL;
+ a->key_len = 0;
+ a->trunc_size = 0;
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_MD5_96];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_MD5_HMAC;
+ a->key_len = 16;
+ a->trunc_size = 12;
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_SHA1_96];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_SHA1_HMAC;
+ a->key_len = 20;
+ a->trunc_size = 12;
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_SHA_256_96];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_SHA256_HMAC;
+ a->key_len = 32;
+ a->trunc_size = 12;
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_SHA_256_128];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_SHA256_HMAC;
+ a->key_len = 32;
+ a->trunc_size = 16;
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_SHA_384_192];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_SHA384_HMAC;
+ a->key_len = 48;
+ a->trunc_size = 24;
+
+ a = &dcm->auth_algs[IPSEC_INTEG_ALG_SHA_512_256];
+ a->type = RTE_CRYPTO_SYM_XFORM_AUTH;
+ a->alg = RTE_CRYPTO_AUTH_SHA512_HMAC;
+ a->key_len = 64;
+ a->trunc_size = 32;
+}