struct rte_ether_addr addr;
/* Swap dest and src mac addresses. */
- rte_ether_addr_copy(ð_hdr->d_addr, &addr);
- rte_ether_addr_copy(ð_hdr->s_addr, ð_hdr->d_addr);
- rte_ether_addr_copy(&addr, ð_hdr->s_addr);
+ rte_ether_addr_copy(ð_hdr->dst_addr, &addr);
+ rte_ether_addr_copy(ð_hdr->src_addr, ð_hdr->dst_addr);
+ rte_ether_addr_copy(&addr, ð_hdr->src_addr);
}
static inline void
if (proto == RTE_BE16(RTE_ETHER_TYPE_IPV4)) {
swap_ipv4(h.ipv4);
next_proto = h.ipv4->next_proto_id;
- mb->l3_len = (h.ipv4->version_ihl & 0x0f) * 4;
+ mb->l3_len = rte_ipv4_hdr_len(h.ipv4);
h.byte += mb->l3_len;
} else if (proto == RTE_BE16(RTE_ETHER_TYPE_IPV6)) {
swap_ipv6(h.ipv6);
get_end_cycles(fs, start_tsc);
}
+static void
+stream_init_5tuple_swap(struct fwd_stream *fs)
+{
+ bool rx_stopped, tx_stopped;
+
+ rx_stopped = ports[fs->rx_port].rxq[fs->rx_queue].state ==
+ RTE_ETH_QUEUE_STATE_STOPPED;
+ tx_stopped = ports[fs->tx_port].txq[fs->tx_queue].state ==
+ RTE_ETH_QUEUE_STATE_STOPPED;
+ fs->disabled = rx_stopped || tx_stopped;
+}
+
struct fwd_engine five_tuple_swap_fwd_engine = {
.fwd_mode_name = "5tswap",
.port_fwd_begin = NULL,
.port_fwd_end = NULL,
+ .stream_init = stream_init_5tuple_swap,
.packet_fwd = pkt_burst_5tuple_swap,
};