xref: /dpdk/drivers/net/octeontx/octeontx_rxtx.h (revision aaf4363e1e9e518c034c7ff9938a2faefde9854d)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4 
5 #ifndef	__OCTEONTX_RXTX_H__
6 #define	__OCTEONTX_RXTX_H__
7 
8 #include <rte_ethdev.h>
9 
10 #ifndef __hot
11 #define __hot	__attribute__((hot))
12 #endif
13 
14 /* Packet type table */
15 #define PTYPE_SIZE	OCCTX_PKI_LTYPE_LAST
16 
17 static const uint32_t __rte_cache_aligned
18 ptype_table[PTYPE_SIZE][PTYPE_SIZE][PTYPE_SIZE] = {
19 	[LC_NONE][LE_NONE][LF_NONE] = RTE_PTYPE_UNKNOWN,
20 	[LC_NONE][LE_NONE][LF_IPSEC_ESP] = RTE_PTYPE_UNKNOWN,
21 	[LC_NONE][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L4_FRAG,
22 	[LC_NONE][LE_NONE][LF_IPCOMP] = RTE_PTYPE_UNKNOWN,
23 	[LC_NONE][LE_NONE][LF_TCP] = RTE_PTYPE_L4_TCP,
24 	[LC_NONE][LE_NONE][LF_UDP] = RTE_PTYPE_L4_UDP,
25 	[LC_NONE][LE_NONE][LF_GRE] = RTE_PTYPE_TUNNEL_GRE,
26 	[LC_NONE][LE_NONE][LF_UDP_GENEVE] = RTE_PTYPE_TUNNEL_GENEVE,
27 	[LC_NONE][LE_NONE][LF_UDP_VXLAN] = RTE_PTYPE_TUNNEL_VXLAN,
28 	[LC_NONE][LE_NONE][LF_NVGRE] = RTE_PTYPE_TUNNEL_NVGRE,
29 
30 	[LC_IPV4][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN,
31 	[LC_IPV4][LE_NONE][LF_IPSEC_ESP] =
32 				RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L3_IPV4,
33 	[LC_IPV4][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_FRAG,
34 	[LC_IPV4][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN,
35 	[LC_IPV4][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,
36 	[LC_IPV4][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,
37 	[LC_IPV4][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GRE,
38 	[LC_IPV4][LE_NONE][LF_UDP_GENEVE] =
39 				RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GENEVE,
40 	[LC_IPV4][LE_NONE][LF_UDP_VXLAN] =
41 				RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_VXLAN,
42 	[LC_IPV4][LE_NONE][LF_NVGRE] =
43 				RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE,
44 
45 	[LC_IPV4_OPT][LE_NONE][LF_NONE] =
46 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN,
47 	[LC_IPV4_OPT][LE_NONE][LF_IPSEC_ESP] =
48 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L3_IPV4,
49 	[LC_IPV4_OPT][LE_NONE][LF_IPFRAG] =
50 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_FRAG,
51 	[LC_IPV4_OPT][LE_NONE][LF_IPCOMP] =
52 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN,
53 	[LC_IPV4_OPT][LE_NONE][LF_TCP] =
54 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP,
55 	[LC_IPV4_OPT][LE_NONE][LF_UDP] =
56 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP,
57 	[LC_IPV4_OPT][LE_NONE][LF_GRE] =
58 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GRE,
59 	[LC_IPV4_OPT][LE_NONE][LF_UDP_GENEVE] =
60 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GENEVE,
61 	[LC_IPV4_OPT][LE_NONE][LF_UDP_VXLAN] =
62 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_VXLAN,
63 	[LC_IPV4_OPT][LE_NONE][LF_NVGRE] =
64 				RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_NVGRE,
65 
66 	[LC_IPV6][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN,
67 	[LC_IPV6][LE_NONE][LF_IPSEC_ESP] =
68 				RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L3_IPV4,
69 	[LC_IPV6][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_FRAG,
70 	[LC_IPV6][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN,
71 	[LC_IPV6][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,
72 	[LC_IPV6][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,
73 	[LC_IPV6][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GRE,
74 	[LC_IPV6][LE_NONE][LF_UDP_GENEVE] =
75 				RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GENEVE,
76 	[LC_IPV6][LE_NONE][LF_UDP_VXLAN] =
77 				RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_VXLAN,
78 	[LC_IPV6][LE_NONE][LF_NVGRE] =
79 				RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE,
80 	[LC_IPV6_OPT][LE_NONE][LF_NONE] =
81 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN,
82 	[LC_IPV6_OPT][LE_NONE][LF_IPSEC_ESP] =
83 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L3_IPV4,
84 	[LC_IPV6_OPT][LE_NONE][LF_IPFRAG] =
85 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_FRAG,
86 	[LC_IPV6_OPT][LE_NONE][LF_IPCOMP] =
87 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN,
88 	[LC_IPV6_OPT][LE_NONE][LF_TCP] =
89 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,
90 	[LC_IPV6_OPT][LE_NONE][LF_UDP] =
91 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,
92 	[LC_IPV6_OPT][LE_NONE][LF_GRE] =
93 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GRE,
94 	[LC_IPV6_OPT][LE_NONE][LF_UDP_GENEVE] =
95 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GENEVE,
96 	[LC_IPV6_OPT][LE_NONE][LF_UDP_VXLAN] =
97 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_VXLAN,
98 	[LC_IPV6_OPT][LE_NONE][LF_NVGRE] =
99 				RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_NVGRE,
100 
101 };
102 
103 uint16_t
104 octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts);
105 
106 uint16_t
107 octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
108 
109 #endif /* __OCTEONTX_RXTX_H__ */
110