examples/l2fwd-crypto: use key-value list of supported algorithms

In order to ease the parsing and display of supported algorithms
in the application, two new arrays are created, which contains
the strings of the different cipher and authentication algorithms,

These lists are used to parse the algorithms from the command line,
and will be used to display crypto information to the user.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
This commit is contained in:
Pablo de Lara 2016-03-31 10:32:13 +01:00 committed by Thomas Monjalon
parent fcdbb3d5c2
commit 00c58901f1
2 changed files with 58 additions and 54 deletions

View File

@ -133,6 +133,9 @@ struct l2fwd_key {
phys_addr_t phys_addr;
};
char supported_auth_algo[RTE_CRYPTO_AUTH_LIST_END][MAX_STR_LEN];
char supported_cipher_algo[RTE_CRYPTO_CIPHER_LIST_END][MAX_STR_LEN];
/** l2fwd crypto application command line options */
struct l2fwd_crypto_options {
unsigned portmask;
@ -164,8 +167,6 @@ struct l2fwd_crypto_options {
int digest_size;
uint16_t block_size;
char string_auth_algo[MAX_STR_LEN];
char string_cipher_algo[MAX_STR_LEN];
char string_type[MAX_STR_LEN];
};
@ -328,6 +329,32 @@ print_stats(void)
printf("\n====================================================\n");
}
static void
fill_supported_algorithm_tables(void)
{
unsigned i;
for (i = 0; i < RTE_CRYPTO_AUTH_LIST_END; i++)
strcpy(supported_auth_algo[i], "NOT_SUPPORTED");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_AES_GCM], "AES_GCM");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_MD5_HMAC], "MD5_HMAC");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_NULL], "NULL");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_SHA1_HMAC], "SHA1_HMAC");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_SHA224_HMAC], "SHA224_HMAC");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_SHA256_HMAC], "SHA256_HMAC");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_SHA384_HMAC], "SHA384_HMAC");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_SHA512_HMAC], "SHA512_HMAC");
strcpy(supported_auth_algo[RTE_CRYPTO_AUTH_SNOW3G_UIA2], "SNOW3G_UIA2");
for (i = 0; i < RTE_CRYPTO_CIPHER_LIST_END; i++)
strcpy(supported_cipher_algo[i], "NOT_SUPPORTED");
strcpy(supported_cipher_algo[RTE_CRYPTO_CIPHER_AES_CBC], "AES_CBC");
strcpy(supported_cipher_algo[RTE_CRYPTO_CIPHER_AES_GCM], "AES_GCM");
strcpy(supported_cipher_algo[RTE_CRYPTO_CIPHER_NULL], "NULL");
strcpy(supported_cipher_algo[RTE_CRYPTO_CIPHER_SNOW3G_UEA2], "SNOW3G_UEA2");
}
static int
@ -864,19 +891,14 @@ parse_crypto_opt_chain(struct l2fwd_crypto_options *options, char *optarg)
static int
parse_cipher_algo(enum rte_crypto_cipher_algorithm *algo, char *optarg)
{
if (strcmp("AES_CBC", optarg) == 0) {
*algo = RTE_CRYPTO_CIPHER_AES_CBC;
return 0;
} else if (strcmp("AES_GCM", optarg) == 0) {
*algo = RTE_CRYPTO_CIPHER_AES_GCM;
return 0;
} else if (strcmp("NULL", optarg) == 0) {
*algo = RTE_CRYPTO_CIPHER_NULL;
return 0;
} else if (strcmp("SNOW3G_UEA2", optarg) == 0) {
*algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2;
unsigned i;
for (i = 0; i < RTE_CRYPTO_CIPHER_LIST_END; i++) {
if (!strcmp(supported_cipher_algo[i], optarg)) {
*algo = i;
return 0;
}
}
printf("Cipher algorithm not supported!\n");
return -1;
@ -945,34 +967,14 @@ parse_size(int *size, const char *q_arg)
static int
parse_auth_algo(enum rte_crypto_auth_algorithm *algo, char *optarg)
{
if (strcmp("AES_GCM", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_AES_GCM;
return 0;
} else if (strcmp("MD5_HMAC", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_MD5_HMAC;
return 0;
} else if (strcmp("NULL", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_NULL;
return 0;
} else if (strcmp("SHA1_HMAC", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
return 0;
} else if (strcmp("SHA224_HMAC", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_SHA224_HMAC;
return 0;
} else if (strcmp("SHA256_HMAC", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
return 0;
} else if (strcmp("SHA384_HMAC", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_SHA384_HMAC;
return 0;
} else if (strcmp("SHA512_HMAC", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
return 0;
} else if (strcmp("SNOW3G_UIA2", optarg) == 0) {
*algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2;
unsigned i;
for (i = 0; i < RTE_CRYPTO_AUTH_LIST_END; i++) {
if (!strcmp(supported_auth_algo[i], optarg)) {
*algo = i;
return 0;
}
}
printf("Authentication algorithm specified not supported!\n");
return -1;
@ -1011,13 +1013,9 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
return parse_crypto_opt_chain(options, optarg);
/* Cipher options */
else if (strcmp(lgopts[option_index].name, "cipher_algo") == 0) {
retval = parse_cipher_algo(&options->cipher_xform.cipher.algo,
else if (strcmp(lgopts[option_index].name, "cipher_algo") == 0)
return parse_cipher_algo(&options->cipher_xform.cipher.algo,
optarg);
if (retval == 0)
strcpy(options->string_cipher_algo, optarg);
return retval;
}
else if (strcmp(lgopts[option_index].name, "cipher_op") == 0)
return parse_cipher_op(&options->cipher_xform.cipher.op,
@ -1051,11 +1049,8 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
/* Authentication options */
else if (strcmp(lgopts[option_index].name, "auth_algo") == 0) {
retval = parse_auth_algo(&options->auth_xform.auth.algo,
return parse_auth_algo(&options->auth_xform.auth.algo,
optarg);
if (retval == 0)
strcpy(options->string_auth_algo, optarg);
return retval;
}
else if (strcmp(lgopts[option_index].name, "auth_op") == 0)
@ -1474,7 +1469,8 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
if (cap->op == RTE_CRYPTO_OP_TYPE_UNDEFINED) {
printf("Algorithm %s not supported by cryptodev %u"
" or device not of preferred type (%s)\n",
options->string_cipher_algo, cdev_id,
supported_cipher_algo[opt_cipher_algo],
cdev_id,
options->string_type);
continue;
}
@ -1573,7 +1569,8 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
if (cap->op == RTE_CRYPTO_OP_TYPE_UNDEFINED) {
printf("Algorithm %s not supported by cryptodev %u"
" or device not of preferred type (%s)\n",
options->string_auth_algo, cdev_id,
supported_auth_algo[opt_auth_algo],
cdev_id,
options->string_type);
continue;
}
@ -1848,6 +1845,9 @@ main(int argc, char **argv)
/* reserve memory for Cipher/Auth key and IV */
reserve_key_memory(&options);
/* fill out the supported algorithm tables */
fill_supported_algorithm_tables();
/* parse application arguments (after the EAL ones) */
ret = l2fwd_crypto_parse_args(&options, argc, argv);
if (ret < 0)

View File

@ -101,8 +101,10 @@ enum rte_crypto_cipher_algorithm {
RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
/**< SNOW3G algorithm in UEA2 mode */
RTE_CRYPTO_CIPHER_ZUC_EEA3
RTE_CRYPTO_CIPHER_ZUC_EEA3,
/**< ZUC algorithm in EEA3 mode */
RTE_CRYPTO_CIPHER_LIST_END
};
/** Symmetric Cipher Direction */
@ -234,6 +236,8 @@ enum rte_crypto_auth_algorithm {
RTE_CRYPTO_AUTH_ZUC_EIA3,
/**< ZUC algorithm in EIA3 mode */
RTE_CRYPTO_AUTH_LIST_END
};
/** Symmetric Authentication / Hash Operations */