xref: /dpdk/app/test-pmd/macswap.h (revision 04d43857ea3acbd4db4b28939dc2807932b85e72)
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(&eth_hdr->dst_addr, &addr);
33*04d43857SDmitry Kozlyuk 		rte_ether_addr_copy(&eth_hdr->src_addr, &eth_hdr->dst_addr);
34*04d43857SDmitry Kozlyuk 		rte_ether_addr_copy(&addr, &eth_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