| 1020 | } |
| 1021 | |
| 1022 | static uint32_t |
| 1023 | search_ip5tuples_once(uint32_t categories, uint32_t step, const char *alg) |
| 1024 | { |
| 1025 | int ret; |
| 1026 | uint32_t i, j, k, n, r; |
| 1027 | const uint8_t *data[step], *v; |
| 1028 | uint32_t results[step * categories]; |
| 1029 | |
| 1030 | v = config.traces; |
| 1031 | for (i = 0; i != config.used_traces; i += n) { |
| 1032 | |
| 1033 | n = RTE_MIN(step, config.used_traces - i); |
| 1034 | |
| 1035 | for (j = 0; j != n; j++) { |
| 1036 | data[j] = v; |
| 1037 | v += config.trace_sz; |
| 1038 | } |
| 1039 | |
| 1040 | ret = rte_acl_classify(config.acx, data, results, |
| 1041 | n, categories); |
| 1042 | |
| 1043 | if (ret != 0) |
| 1044 | rte_exit(ret, "classify for ipv%c_5tuples returns %d\n", |
| 1045 | config.ipv6 ? '6' : '4', ret); |
| 1046 | |
| 1047 | for (r = 0, j = 0; j != n; j++) { |
| 1048 | for (k = 0; k != categories; k++, r++) { |
| 1049 | dump_verbose(DUMP_PKT, stdout, |
| 1050 | "ipv%c_5tuple: %u, category: %u, " |
| 1051 | "result: %u\n", |
| 1052 | config.ipv6 ? '6' : '4', |
| 1053 | i + j + 1, k, results[r] - 1); |
| 1054 | } |
| 1055 | |
| 1056 | } |
| 1057 | } |
| 1058 | |
| 1059 | dump_verbose(DUMP_SEARCH, stdout, |
| 1060 | "%s(%u, %u, %s) returns %u\n", __func__, |
| 1061 | categories, step, alg, i); |
| 1062 | return i; |
| 1063 | } |
| 1064 | |
| 1065 | static int |
| 1066 | search_ip5tuples(__rte_unused void *arg) |
no test coverage detected