xref: /dpdk/app/test-pmd/macswap_common.h (revision daa02b5cddbb8e11b31d41e2bf7bb1ae64dcae2f)
1a825afdbSQi Zhang /* SPDX-License-Identifier: BSD-3-Clause
2a825afdbSQi Zhang  * Copyright(c) 2018 Intel Corporation
3a825afdbSQi Zhang  */
4a825afdbSQi Zhang 
5a825afdbSQi Zhang #ifndef _MACSWAP_COMMON_H_
6a825afdbSQi Zhang #define _MACSWAP_COMMON_H_
7a825afdbSQi Zhang 
8a825afdbSQi Zhang static inline uint64_t
ol_flags_init(uint64_t tx_offload)9a825afdbSQi Zhang ol_flags_init(uint64_t tx_offload)
10a825afdbSQi Zhang {
11a825afdbSQi Zhang 	uint64_t ol_flags = 0;
12a825afdbSQi Zhang 
13295968d1SFerruh Yigit 	ol_flags |= (tx_offload & RTE_ETH_TX_OFFLOAD_VLAN_INSERT) ?
14*daa02b5cSOlivier Matz 			RTE_MBUF_F_TX_VLAN : 0;
15295968d1SFerruh Yigit 	ol_flags |= (tx_offload & RTE_ETH_TX_OFFLOAD_QINQ_INSERT) ?
16*daa02b5cSOlivier Matz 			RTE_MBUF_F_TX_QINQ : 0;
17295968d1SFerruh Yigit 	ol_flags |= (tx_offload & RTE_ETH_TX_OFFLOAD_MACSEC_INSERT) ?
18*daa02b5cSOlivier Matz 			RTE_MBUF_F_TX_MACSEC : 0;
19a825afdbSQi Zhang 
20a825afdbSQi Zhang 	return ol_flags;
21a825afdbSQi Zhang }
22a825afdbSQi Zhang 
23a825afdbSQi Zhang static inline void
vlan_qinq_set(struct rte_mbuf * pkts[],uint16_t nb,uint64_t ol_flags,uint16_t vlan,uint16_t outer_vlan)24a825afdbSQi Zhang vlan_qinq_set(struct rte_mbuf *pkts[], uint16_t nb,
25a825afdbSQi Zhang 		uint64_t ol_flags, uint16_t vlan, uint16_t outer_vlan)
26a825afdbSQi Zhang {
27a825afdbSQi Zhang 	int i;
28a825afdbSQi Zhang 
29*daa02b5cSOlivier Matz 	if (ol_flags & RTE_MBUF_F_TX_VLAN)
30a825afdbSQi Zhang 		for (i = 0; i < nb; i++)
31a825afdbSQi Zhang 			pkts[i]->vlan_tci = vlan;
32*daa02b5cSOlivier Matz 	if (ol_flags & RTE_MBUF_F_TX_QINQ)
33a825afdbSQi Zhang 		for (i = 0; i < nb; i++)
34a825afdbSQi Zhang 			pkts[i]->vlan_tci_outer = outer_vlan;
35a825afdbSQi Zhang }
36a825afdbSQi Zhang 
37a825afdbSQi Zhang static inline void
mbuf_field_set(struct rte_mbuf * mb,uint64_t ol_flags)38a825afdbSQi Zhang mbuf_field_set(struct rte_mbuf *mb, uint64_t ol_flags)
39a825afdbSQi Zhang {
40*daa02b5cSOlivier Matz 	mb->ol_flags &= RTE_MBUF_F_INDIRECT | RTE_MBUF_F_EXTERNAL;
41a825afdbSQi Zhang 	mb->ol_flags |= ol_flags;
426d13ea8eSOlivier Matz 	mb->l2_len = sizeof(struct rte_ether_hdr);
43a7c528e5SOlivier Matz 	mb->l3_len = sizeof(struct rte_ipv4_hdr);
44a825afdbSQi Zhang }
45a825afdbSQi Zhang 
46a825afdbSQi Zhang #endif /* _MACSWAP_COMMON_H_ */
47