| 532 | } |
| 533 | |
| 534 | static void |
| 535 | tracef_init(void) |
| 536 | { |
| 537 | static const char name[] = APP_NAME; |
| 538 | FILE *f; |
| 539 | size_t sz; |
| 540 | uint32_t i, k, n; |
| 541 | struct ipv4_5tuple *v; |
| 542 | struct ipv6_5tuple *w; |
| 543 | |
| 544 | sz = config.nb_traces * (config.ipv6 ? sizeof(*w) : sizeof(*v)); |
| 545 | config.traces = rte_zmalloc_socket(name, sz, RTE_CACHE_LINE_SIZE, |
| 546 | SOCKET_ID_ANY); |
| 547 | if (config.traces == NULL) |
| 548 | rte_exit(EXIT_FAILURE, "Cannot allocate %zu bytes for " |
| 549 | "requested %u number of trace records\n", |
| 550 | sz, config.nb_traces); |
| 551 | |
| 552 | f = fopen(config.trace_file, "r"); |
| 553 | if (f == NULL) |
| 554 | rte_exit(-EINVAL, "failed to open file: %s\n", |
| 555 | config.trace_file); |
| 556 | |
| 557 | v = config.traces; |
| 558 | w = config.traces; |
| 559 | k = 0; |
| 560 | n = 0; |
| 561 | for (i = 0; n != config.nb_traces; i++) { |
| 562 | |
| 563 | if (fgets(line, sizeof(line), f) == NULL) |
| 564 | break; |
| 565 | |
| 566 | if (skip_line(line) != 0) { |
| 567 | k++; |
| 568 | continue; |
| 569 | } |
| 570 | |
| 571 | n = i - k; |
| 572 | |
| 573 | if (config.ipv6) { |
| 574 | if (parse_cb_ipv6_trace(line, w + n) != 0) |
| 575 | rte_exit(EXIT_FAILURE, |
| 576 | "%s: failed to parse ipv6 trace " |
| 577 | "record at line %u\n", |
| 578 | config.trace_file, i + 1); |
| 579 | } else { |
| 580 | if (parse_cb_ipv4_trace(line, v + n) != 0) |
| 581 | rte_exit(EXIT_FAILURE, |
| 582 | "%s: failed to parse ipv4 trace " |
| 583 | "record at line %u\n", |
| 584 | config.trace_file, i + 1); |
| 585 | } |
| 586 | } |
| 587 | |
| 588 | config.used_traces = i - k; |
| 589 | fclose(f); |
| 590 | } |
| 591 |
no test coverage detected