| 567 | } |
| 568 | |
| 569 | static inline void |
| 570 | process_pkts(struct lcore_conf *qconf, struct rte_mbuf **pkts, |
| 571 | uint16_t nb_pkts, uint16_t portid, void *ctx) |
| 572 | { |
| 573 | struct ipsec_traffic traffic; |
| 574 | |
| 575 | prepare_traffic(ctx, pkts, &traffic, nb_pkts); |
| 576 | |
| 577 | if (unlikely(single_sa)) { |
| 578 | if (is_unprotected_port(portid)) |
| 579 | process_pkts_inbound_nosp(&qconf->inbound, &traffic); |
| 580 | else |
| 581 | process_pkts_outbound_nosp(&qconf->outbound, &traffic); |
| 582 | } else { |
| 583 | if (is_unprotected_port(portid)) |
| 584 | process_pkts_inbound(&qconf->inbound, &traffic); |
| 585 | else |
| 586 | process_pkts_outbound(&qconf->outbound, &traffic); |
| 587 | } |
| 588 | |
| 589 | #if defined __ARM_NEON |
| 590 | /* Neon optimized packet routing */ |
| 591 | route4_pkts_neon(qconf->rt4_ctx, traffic.ip4.pkts, traffic.ip4.num, |
| 592 | qconf->outbound.ipv4_offloads, true); |
| 593 | route6_pkts_neon(qconf->rt6_ctx, traffic.ip6.pkts, traffic.ip6.num); |
| 594 | #else |
| 595 | route4_pkts(qconf->rt4_ctx, traffic.ip4.pkts, traffic.ip4.num, |
| 596 | qconf->outbound.ipv4_offloads, true); |
| 597 | route6_pkts(qconf->rt6_ctx, traffic.ip6.pkts, traffic.ip6.num); |
| 598 | #endif |
| 599 | } |
| 600 | |
| 601 | static inline void |
| 602 | drain_crypto_buffers(struct lcore_conf *qconf) |
no test coverage detected