X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-crypto-perf%2Fcperf_options_parsing.c;h=09c98121c83e8303092dbdc79861bcd6c179d85a;hb=e689abaf8bc17f4baf343bc535e9b20ed34594cb;hp=40b6dfb64820758d0c209fcdcc6e75489196175f;hpb=487cfc24370fdb7ea843aa510d6e6d2a7212dd23;p=dpdk.git diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto-perf/cperf_options_parsing.c index 40b6dfb648..09c98121c8 100644 --- a/app/test-crypto-perf/cperf_options_parsing.c +++ b/app/test-crypto-perf/cperf_options_parsing.c @@ -10,6 +10,7 @@ #include #include "cperf_options.h" +#include "cperf_test_vectors.h" #define AES_BLOCK_SIZE 16 #define DES_BLOCK_SIZE 8 @@ -57,6 +58,8 @@ usage(char *progname) " --pmd-cyclecount-delay-ms N: set delay between enqueue\n" " and dequeue in pmd-cyclecount benchmarking mode\n" " --csv-friendly: enable test result output CSV friendly\n" + " --modex-len N: modex length, supported lengths are " + "60, 128, 255, 448. Default: 128\n" #ifdef RTE_LIB_SECURITY " --pdcp-sn-sz N: set PDCP SN size N <5/7/12/15/18>\n" " --pdcp-domain DOMAIN: set PDCP domain \n" @@ -313,6 +316,16 @@ parse_pool_sz(struct cperf_options *opts, const char *arg) return ret; } +static int +parse_modex_len(struct cperf_options *opts, const char *arg) +{ + int ret = parse_uint16_t(&opts->modex_len, arg); + + if (ret) + RTE_LOG(ERR, USER1, "failed to parse modex len"); + return ret; +} + static int parse_burst_sz(struct cperf_options *opts, const char *arg) { @@ -457,6 +470,14 @@ parse_op_type(struct cperf_options *opts, const char *arg) { cperf_op_type_strs[CPERF_DOCSIS], CPERF_DOCSIS + }, + { + cperf_op_type_strs[CPERF_IPSEC], + CPERF_IPSEC + }, + { + cperf_op_type_strs[CPERF_ASYM_MODEX], + CPERF_ASYM_MODEX } }; @@ -506,6 +527,12 @@ parse_test_name(struct cperf_options *opts, { char *test_name = (char *) rte_zmalloc(NULL, sizeof(char) * (strlen(arg) + 3), 0); + if (test_name == NULL) { + RTE_LOG(ERR, USER1, "Failed to rte zmalloc with size: %zu\n", + strlen(arg) + 3); + return -1; + } + snprintf(test_name, strlen(arg) + 3, "[%s]", arg); opts->test_name = test_name; @@ -656,7 +683,8 @@ parse_pdcp_sn_sz(struct cperf_options *opts, const char *arg) const char *cperf_pdcp_domain_strs[] = { [RTE_SECURITY_PDCP_MODE_CONTROL] = "control", - [RTE_SECURITY_PDCP_MODE_DATA] = "data" + [RTE_SECURITY_PDCP_MODE_DATA] = "data", + [RTE_SECURITY_PDCP_MODE_SHORT_MAC] = "short_mac" }; static int @@ -671,6 +699,11 @@ parse_pdcp_domain(struct cperf_options *opts, const char *arg) cperf_pdcp_domain_strs [RTE_SECURITY_PDCP_MODE_DATA], RTE_SECURITY_PDCP_MODE_DATA + }, + { + cperf_pdcp_domain_strs + [RTE_SECURITY_PDCP_MODE_SHORT_MAC], + RTE_SECURITY_PDCP_MODE_SHORT_MAC } }; @@ -802,6 +835,7 @@ struct long_opt_parser { static struct option lgopts[] = { { CPERF_PTEST_TYPE, required_argument, 0, 0 }, + { CPERF_MODEX_LEN, required_argument, 0, 0 }, { CPERF_POOL_SIZE, required_argument, 0, 0 }, { CPERF_TOTAL_OPS, required_argument, 0, 0 }, @@ -919,6 +953,7 @@ cperf_options_default(struct cperf_options *opts) opts->pdcp_ses_hfn_en = 0; opts->docsis_hdr_sz = 17; #endif + opts->modex_data = (struct cperf_modex_test_data *)&modex_perf_data[0]; } static int @@ -926,6 +961,7 @@ cperf_opts_parse_long(int opt_idx, struct cperf_options *opts) { struct long_opt_parser parsermap[] = { { CPERF_PTEST_TYPE, parse_cperf_test_type }, + { CPERF_MODEX_LEN, parse_modex_len }, { CPERF_SILENT, parse_silent }, { CPERF_POOL_SIZE, parse_pool_sz }, { CPERF_TOTAL_OPS, parse_total_ops }, @@ -1097,6 +1133,8 @@ check_docsis_buffer_length(struct cperf_options *options) int cperf_options_check(struct cperf_options *options) { + int i; + if (options->op_type == CPERF_CIPHER_ONLY || options->op_type == CPERF_DOCSIS) options->digest_sz = 0; @@ -1112,9 +1150,17 @@ cperf_options_check(struct cperf_options *options) * If segment size is not set, assume only one segment, * big enough to contain the largest buffer and the digest */ - if (options->segment_sz == 0) + if (options->segment_sz == 0) { options->segment_sz = options->max_buffer_size + options->digest_sz; + /* In IPsec operation, packet length will be increased + * by some bytes depend upon the algorithm, so increasing + * the segment size by headroom to cover most of + * the scenarios. + */ + if (options->op_type == CPERF_IPSEC) + options->segment_sz += RTE_PKTMBUF_HEADROOM; + } if (options->segment_sz < options->digest_sz) { RTE_LOG(ERR, USER1, @@ -1215,6 +1261,30 @@ cperf_options_check(struct cperf_options *options) return -EINVAL; } + if (options->modex_len) { + if (options->op_type != CPERF_ASYM_MODEX) { + RTE_LOG(ERR, USER1, "Option modex len should be used only with " + " optype: modex.\n"); + return -EINVAL; + } + + for (i = 0; i < (int)RTE_DIM(modex_perf_data); i++) { + if (modex_perf_data[i].modulus.len == + options->modex_len) { + options->modex_data = + (struct cperf_modex_test_data + *)&modex_perf_data[i]; + break; + } + } + if (i == (int)RTE_DIM(modex_perf_data)) { + RTE_LOG(ERR, USER1, + "Option modex len: %d is not supported\n", + options->modex_len); + return -EINVAL; + } + } + #ifdef RTE_LIB_SECURITY if (options->op_type == CPERF_DOCSIS) { if (check_docsis_buffer_length(options) < 0)