/* SPDX-License-Identifier: BSD-3-Clause * Copyright 2014-2020 Mellanox Technologies, Ltd */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "testpmd.h" #if defined(RTE_ARCH_X86) #include "macswap_sse.h" #elif defined(__ARM_NEON) #include "macswap_neon.h" #else #include "macswap.h" #endif /* * MAC swap forwarding mode: Swap the source and the destination Ethernet * addresses of packets before forwarding them. */ static bool pkt_burst_mac_swap(struct fwd_stream *fs) { struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; uint16_t nb_rx; /* * Receive a burst of packets and forward them. */ nb_rx = common_fwd_stream_receive(fs, pkts_burst, nb_pkt_per_burst); if (unlikely(nb_rx == 0)) return false; do_macswap(pkts_burst, nb_rx, &ports[fs->tx_port]); common_fwd_stream_transmit(fs, pkts_burst, nb_rx); return true; } struct fwd_engine mac_swap_engine = { .fwd_mode_name = "macswap", .stream_init = common_fwd_stream_init, .packet_fwd = pkt_burst_mac_swap, };