1a825afdbSQi Zhang /* SPDX-License-Identifier: BSD-3-Clause
2a825afdbSQi Zhang * Copyright(c) 2018 Intel Corporation
3a825afdbSQi Zhang */
4a825afdbSQi Zhang
5a825afdbSQi Zhang #ifndef _MACSWAP_H_
6a825afdbSQi Zhang #define _MACSWAP_H_
7a825afdbSQi Zhang
8a825afdbSQi Zhang #include "macswap_common.h"
9a825afdbSQi Zhang
10a825afdbSQi Zhang static inline void
do_macswap(struct rte_mbuf * pkts[],uint16_t nb,struct rte_port * txp)11a825afdbSQi Zhang do_macswap(struct rte_mbuf *pkts[], uint16_t nb,
12a825afdbSQi Zhang struct rte_port *txp)
13a825afdbSQi Zhang {
146d13ea8eSOlivier Matz struct rte_ether_hdr *eth_hdr;
15a825afdbSQi Zhang struct rte_mbuf *mb;
166d13ea8eSOlivier Matz struct rte_ether_addr addr;
17a825afdbSQi Zhang uint64_t ol_flags;
18a825afdbSQi Zhang int i;
19a825afdbSQi Zhang
20a825afdbSQi Zhang ol_flags = ol_flags_init(txp->dev_conf.txmode.offloads);
21a825afdbSQi Zhang vlan_qinq_set(pkts, nb, ol_flags,
22a825afdbSQi Zhang txp->tx_vlan_id, txp->tx_vlan_id_outer);
23a825afdbSQi Zhang
24a825afdbSQi Zhang for (i = 0; i < nb; i++) {
25a825afdbSQi Zhang if (likely(i < nb - 1))
26a825afdbSQi Zhang rte_prefetch0(rte_pktmbuf_mtod(pkts[i+1], void *));
27a825afdbSQi Zhang mb = pkts[i];
28a825afdbSQi Zhang
296d13ea8eSOlivier Matz eth_hdr = rte_pktmbuf_mtod(mb, struct rte_ether_hdr *);
30a825afdbSQi Zhang
31a825afdbSQi Zhang /* Swap dest and src mac addresses. */
32*04d43857SDmitry Kozlyuk rte_ether_addr_copy(ð_hdr->dst_addr, &addr);
33*04d43857SDmitry Kozlyuk rte_ether_addr_copy(ð_hdr->src_addr, ð_hdr->dst_addr);
34*04d43857SDmitry Kozlyuk rte_ether_addr_copy(&addr, ð_hdr->src_addr);
35a825afdbSQi Zhang
36a825afdbSQi Zhang mbuf_field_set(mb, ol_flags);
37a825afdbSQi Zhang }
38a825afdbSQi Zhang }
39a825afdbSQi Zhang
40a825afdbSQi Zhang #endif /* _MACSWAP_H_ */
41