4 * Copyright (C) Cavium Inc. 2017. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
16 * * Neither the name of Cavium networks nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #ifndef __OCTEONTX_RXTX_H__
34 #define __OCTEONTX_RXTX_H__
36 #include <rte_ethdev.h>
39 #define __hot __attribute__((hot))
42 /* Packet type table */
43 #define PTYPE_SIZE OCCTX_PKI_LTYPE_LAST
45 static const uint32_t __rte_cache_aligned
46 ptype_table[PTYPE_SIZE][PTYPE_SIZE][PTYPE_SIZE] = {
47 [LC_NONE][LE_NONE][LF_NONE] = RTE_PTYPE_UNKNOWN,
48 [LC_NONE][LE_NONE][LF_IPSEC_ESP] = RTE_PTYPE_UNKNOWN,
49 [LC_NONE][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L4_FRAG,
50 [LC_NONE][LE_NONE][LF_IPCOMP] = RTE_PTYPE_UNKNOWN,
51 [LC_NONE][LE_NONE][LF_TCP] = RTE_PTYPE_L4_TCP,
52 [LC_NONE][LE_NONE][LF_UDP] = RTE_PTYPE_L4_UDP,
53 [LC_NONE][LE_NONE][LF_GRE] = RTE_PTYPE_TUNNEL_GRE,
54 [LC_NONE][LE_NONE][LF_UDP_GENEVE] = RTE_PTYPE_TUNNEL_GENEVE,
55 [LC_NONE][LE_NONE][LF_UDP_VXLAN] = RTE_PTYPE_TUNNEL_VXLAN,
56 [LC_NONE][LE_NONE][LF_NVGRE] = RTE_PTYPE_TUNNEL_NVGRE,
58 [LC_IPV4][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN,
59 [LC_IPV4][LE_NONE][LF_IPSEC_ESP] =
60 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L3_IPV4,
61 [LC_IPV4][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_FRAG,
62 [LC_IPV4][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_UNKNOWN,
63 [LC_IPV4][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_TCP,
64 [LC_IPV4][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L4_UDP,
65 [LC_IPV4][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GRE,
66 [LC_IPV4][LE_NONE][LF_UDP_GENEVE] =
67 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_GENEVE,
68 [LC_IPV4][LE_NONE][LF_UDP_VXLAN] =
69 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_VXLAN,
70 [LC_IPV4][LE_NONE][LF_NVGRE] =
71 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE,
73 [LC_IPV4_OPT][LE_NONE][LF_NONE] =
74 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN,
75 [LC_IPV4_OPT][LE_NONE][LF_IPSEC_ESP] =
76 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L3_IPV4,
77 [LC_IPV4_OPT][LE_NONE][LF_IPFRAG] =
78 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_FRAG,
79 [LC_IPV4_OPT][LE_NONE][LF_IPCOMP] =
80 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_UNKNOWN,
81 [LC_IPV4_OPT][LE_NONE][LF_TCP] =
82 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_TCP,
83 [LC_IPV4_OPT][LE_NONE][LF_UDP] =
84 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L4_UDP,
85 [LC_IPV4_OPT][LE_NONE][LF_GRE] =
86 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GRE,
87 [LC_IPV4_OPT][LE_NONE][LF_UDP_GENEVE] =
88 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_GENEVE,
89 [LC_IPV4_OPT][LE_NONE][LF_UDP_VXLAN] =
90 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_VXLAN,
91 [LC_IPV4_OPT][LE_NONE][LF_NVGRE] =
92 RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_TUNNEL_NVGRE,
94 [LC_IPV6][LE_NONE][LF_NONE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN,
95 [LC_IPV6][LE_NONE][LF_IPSEC_ESP] =
96 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L3_IPV4,
97 [LC_IPV6][LE_NONE][LF_IPFRAG] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_FRAG,
98 [LC_IPV6][LE_NONE][LF_IPCOMP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_UNKNOWN,
99 [LC_IPV6][LE_NONE][LF_TCP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_TCP,
100 [LC_IPV6][LE_NONE][LF_UDP] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L4_UDP,
101 [LC_IPV6][LE_NONE][LF_GRE] = RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GRE,
102 [LC_IPV6][LE_NONE][LF_UDP_GENEVE] =
103 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_GENEVE,
104 [LC_IPV6][LE_NONE][LF_UDP_VXLAN] =
105 RTE_PTYPE_L3_IPV6 | RTE_PTYPE_TUNNEL_VXLAN,
106 [LC_IPV6][LE_NONE][LF_NVGRE] =
107 RTE_PTYPE_L3_IPV4 | RTE_PTYPE_TUNNEL_NVGRE,
108 [LC_IPV6_OPT][LE_NONE][LF_NONE] =
109 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN,
110 [LC_IPV6_OPT][LE_NONE][LF_IPSEC_ESP] =
111 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L3_IPV4,
112 [LC_IPV6_OPT][LE_NONE][LF_IPFRAG] =
113 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_FRAG,
114 [LC_IPV6_OPT][LE_NONE][LF_IPCOMP] =
115 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_UNKNOWN,
116 [LC_IPV6_OPT][LE_NONE][LF_TCP] =
117 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_TCP,
118 [LC_IPV6_OPT][LE_NONE][LF_UDP] =
119 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L4_UDP,
120 [LC_IPV6_OPT][LE_NONE][LF_GRE] =
121 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GRE,
122 [LC_IPV6_OPT][LE_NONE][LF_UDP_GENEVE] =
123 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_GENEVE,
124 [LC_IPV6_OPT][LE_NONE][LF_UDP_VXLAN] =
125 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_VXLAN,
126 [LC_IPV6_OPT][LE_NONE][LF_NVGRE] =
127 RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_TUNNEL_NVGRE,
132 octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts);
135 octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
137 #endif /* __OCTEONTX_RXTX_H__ */