examples/l2fwd-crypto: add cryptodev mask option

Previously, l2fwd-crypto application did not give user the
flexibility to decide which crypto device(s) will be used.

In this patch, a new cryptodev_mask option is added to the
application. Same as portmask, the cryptodev_mask avails the
user to mask out the unwanted crypto devices in the system.

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
This commit is contained in:
Fan Zhang 2017-04-18 12:34:31 +01:00 committed by Pablo de Lara
parent 18f421f65b
commit d2797f51cc
2 changed files with 50 additions and 2 deletions

View File

@ -89,7 +89,7 @@ The application requires a number of command line options:
[--cipher_key_random_size SIZE] [--iv IV] [--iv_random_size SIZE] /
[--auth_algo ALGO] [--auth_op GENERATE/VERIFY] [--auth_key KEY] /
[--auth_key_random_size SIZE] [--aad AAD] [--aad_random_size SIZE] /
[--digest size SIZE] [--sessionless]
[--digest size SIZE] [--sessionless] [--cryptodev_mask MASK]
where,
@ -157,6 +157,11 @@ where,
* sessionless: no crypto session will be created.
* cryptodev_mask: A hexadecimal bitmask of the cryptodevs to be used by the
application.
(default is all cryptodevs).
The application requires that crypto devices capable of performing
the specified crypto operation are available on application initialization.

View File

@ -167,6 +167,8 @@ struct l2fwd_crypto_options {
uint16_t block_size;
char string_type[MAX_STR_LEN];
uint64_t cryptodev_mask;
};
/** l2fwd crypto lcore params */
@ -857,7 +859,8 @@ l2fwd_crypto_usage(const char *prgname)
" --aad_random_size SIZE: size of AAD when generated randomly\n"
" --digest_size SIZE: size of digest to be generated/verified\n"
" --sessionless\n",
" --sessionless\n"
" --cryptodev_mask MASK: hexadecimal bitmask of crypto devices to configure\n",
prgname);
}
@ -1001,6 +1004,27 @@ parse_auth_op(enum rte_crypto_auth_operation *op, char *optarg)
return -1;
}
static int
parse_cryptodev_mask(struct l2fwd_crypto_options *options,
const char *q_arg)
{
char *end = NULL;
uint64_t pm;
/* parse hexadecimal string */
pm = strtoul(q_arg, &end, 16);
if ((pm == '\0') || (end == NULL) || (*end != '\0'))
pm = 0;
options->cryptodev_mask = pm;
if (options->cryptodev_mask == 0) {
printf("invalid cryptodev_mask specified\n");
return -1;
}
return 0;
}
/** Parse long options */
static int
l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
@ -1101,6 +1125,9 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
return 0;
}
else if (strcmp(lgopts[option_index].name, "cryptodev_mask") == 0)
return parse_cryptodev_mask(options, optarg);
return -1;
}
@ -1215,6 +1242,7 @@ l2fwd_crypto_default_options(struct l2fwd_crypto_options *options)
options->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
options->type = CDEV_TYPE_ANY;
options->cryptodev_mask = UINT64_MAX;
}
static void
@ -1337,6 +1365,7 @@ l2fwd_crypto_parse_args(struct l2fwd_crypto_options *options,
{ "digest_size", required_argument, 0, 0 },
{ "sessionless", no_argument, 0, 0 },
{ "cryptodev_mask", required_argument, 0, 0},
{ NULL, 0, 0, 0 }
};
@ -1477,6 +1506,17 @@ check_type(struct l2fwd_crypto_options *options, struct rte_cryptodev_info *dev_
return -1;
}
/* Check if the device is enabled by cryptodev_mask */
static int
check_cryptodev_mask(struct l2fwd_crypto_options *options,
uint8_t cdev_id)
{
if (options->cryptodev_mask & (1 << cdev_id))
return 0;
return -1;
}
static inline int
check_supported_size(uint16_t length, uint16_t min, uint16_t max,
uint16_t increment)
@ -1531,6 +1571,9 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
}
};
if (check_cryptodev_mask(options, (uint8_t)cdev_id))
continue;
rte_cryptodev_info_get(cdev_id, &dev_info);
/* Set cipher parameters */