From d2797f51cc6383ff0b0f6043d9255c85ae5dfea4 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 18 Apr 2017 12:34:31 +0100 Subject: [PATCH] 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 --- .../sample_app_ug/l2_forward_crypto.rst | 7 ++- examples/l2fwd-crypto/main.c | 45 ++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/doc/guides/sample_app_ug/l2_forward_crypto.rst b/doc/guides/sample_app_ug/l2_forward_crypto.rst index b3fd873026..d6df36b5fc 100644 --- a/doc/guides/sample_app_ug/l2_forward_crypto.rst +++ b/doc/guides/sample_app_ug/l2_forward_crypto.rst @@ -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. diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c index 2eb14c14c6..720a1c211e 100644 --- a/examples/l2fwd-crypto/main.c +++ b/examples/l2fwd-crypto/main.c @@ -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 */ -- 2.20.1