xref: /dpdk/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h (revision f5057be340e44f3edc0fe90fa875eb89a4c49b4f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2014-2020 Broadcom
3  * All rights reserved.
4  */
5 
6 #ifndef _ULP_RTE_PARSER_H_
7 #define _ULP_RTE_PARSER_H_
8 
9 #include <rte_log.h>
10 #include <rte_flow.h>
11 #include <rte_flow_driver.h>
12 #include "ulp_template_db_enum.h"
13 #include "ulp_template_struct.h"
14 
15 /* defines to be used in the tunnel header parsing */
16 #define BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS	2
17 #define BNXT_ULP_ENCAP_IPV4_ID_PROTO		6
18 #define BNXT_ULP_ENCAP_IPV4_DEST_IP		4
19 #define BNXT_ULP_ENCAP_IPV4_SIZE		12
20 #define BNXT_ULP_ENCAP_IPV6_VTC_FLOW		4
21 #define BNXT_ULP_ENCAP_IPV6_PROTO_TTL		2
22 #define BNXT_ULP_ENCAP_IPV6_DO			2
23 #define BNXT_ULP_ENCAP_IPV6_SIZE		24
24 #define BNXT_ULP_ENCAP_UDP_SIZE			4
25 #define BNXT_ULP_INVALID_SVIF_VAL		-1U
26 
27 #define	BNXT_ULP_GET_IPV6_VER(vtcf)		\
28 			(((vtcf) & BNXT_ULP_PARSER_IPV6_VER_MASK) >> 28)
29 #define	BNXT_ULP_GET_IPV6_TC(vtcf)		\
30 			(((vtcf) & BNXT_ULP_PARSER_IPV6_TC) >> 20)
31 #define	BNXT_ULP_GET_IPV6_FLOWLABEL(vtcf)	\
32 			((vtcf) & BNXT_ULP_PARSER_IPV6_FLOW_LABEL)
33 #define	BNXT_ULP_PARSER_IPV6_VER_MASK		0xf0000000
34 #define	BNXT_ULP_PARSER_IPV6_TC			0x0ff00000
35 #define	BNXT_ULP_PARSER_IPV6_FLOW_LABEL		0x000fffff
36 
37 /* Function to handle the parsing of the RTE port id. */
38 int32_t
39 ulp_rte_parser_implicit_match_port_process(struct ulp_rte_parser_params *param);
40 
41 /* Function to handle the implicit action port id */
42 int32_t
43 ulp_rte_parser_implicit_act_port_process(struct ulp_rte_parser_params *params);
44 
45 /*
46  * Function to handle the parsing of RTE Flows and placing
47  * the RTE flow items into the ulp structures.
48  */
49 int32_t
50 bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],
51 			      struct ulp_rte_parser_params *params);
52 
53 /*
54  * Function to handle the parsing of RTE Flows and placing
55  * the RTE flow actions into the ulp structures.
56  */
57 int32_t
58 bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action actions[],
59 			      struct ulp_rte_parser_params *params);
60 
61 /*
62  * Function to handle the post processing of the parsing details
63  */
64 int32_t
65 bnxt_ulp_rte_parser_post_process(struct ulp_rte_parser_params *params);
66 
67 /* Function to handle the parsing of RTE Flow item PF Header. */
68 int32_t
69 ulp_rte_pf_hdr_handler(const struct rte_flow_item *item,
70 		       struct ulp_rte_parser_params *params);
71 
72 /* Function to handle the parsing of RTE Flow item VF Header. */
73 int32_t
74 ulp_rte_vf_hdr_handler(const struct rte_flow_item *item,
75 		       struct ulp_rte_parser_params *params);
76 
77 /* Function to handle the parsing of RTE Flow item port id Header. */
78 int32_t
79 ulp_rte_port_id_hdr_handler(const struct rte_flow_item *item,
80 			    struct ulp_rte_parser_params *params);
81 
82 /* Function to handle the parsing of RTE Flow item port Header. */
83 int32_t
84 ulp_rte_phy_port_hdr_handler(const struct rte_flow_item *item,
85 			     struct ulp_rte_parser_params *params);
86 
87 /* Function to handle the RTE item Ethernet Header. */
88 int32_t
89 ulp_rte_eth_hdr_handler(const struct rte_flow_item *item,
90 			struct ulp_rte_parser_params *params);
91 
92 /* Function to handle the parsing of RTE Flow item Vlan Header. */
93 int32_t
94 ulp_rte_vlan_hdr_handler(const struct rte_flow_item *item,
95 			 struct ulp_rte_parser_params *params);
96 
97 /* Function to handle the parsing of RTE Flow item IPV4 Header. */
98 int32_t
99 ulp_rte_ipv4_hdr_handler(const struct rte_flow_item *item,
100 			 struct ulp_rte_parser_params *params);
101 
102 /* Function to handle the parsing of RTE Flow item IPV6 Header. */
103 int32_t
104 ulp_rte_ipv6_hdr_handler(const struct rte_flow_item *item,
105 			 struct ulp_rte_parser_params *params);
106 
107 /* Function to handle the parsing of RTE Flow item UDP Header. */
108 int32_t
109 ulp_rte_udp_hdr_handler(const struct rte_flow_item *item,
110 			struct ulp_rte_parser_params *params);
111 
112 /* Function to handle the parsing of RTE Flow item TCP Header. */
113 int32_t
114 ulp_rte_tcp_hdr_handler(const struct rte_flow_item *item,
115 			struct ulp_rte_parser_params *params);
116 
117 /* Function to handle the parsing of RTE Flow item Vxlan Header. */
118 int32_t
119 ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,
120 			  struct ulp_rte_parser_params *params);
121 
122 /* Function to handle the parsing of RTE Flow item void Header. */
123 int32_t
124 ulp_rte_void_hdr_handler(const struct rte_flow_item *item,
125 			 struct ulp_rte_parser_params *params);
126 
127 /* Function to handle the parsing of RTE Flow action void Header. */
128 int32_t
129 ulp_rte_void_act_handler(const struct rte_flow_action *action_item,
130 			 struct ulp_rte_parser_params *params);
131 
132 /* Function to handle the parsing of RTE Flow action RSS Header. */
133 int32_t
134 ulp_rte_rss_act_handler(const struct rte_flow_action *action_item,
135 			struct ulp_rte_parser_params *params);
136 
137 /* Function to handle the parsing of RTE Flow action Mark Header. */
138 int32_t
139 ulp_rte_mark_act_handler(const struct rte_flow_action *action_item,
140 			 struct ulp_rte_parser_params *params);
141 
142 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
143 int32_t
144 ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
145 				struct ulp_rte_parser_params *params);
146 
147 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
148 int32_t
149 ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action *action_item,
150 				struct ulp_rte_parser_params *params);
151 
152 /* Function to handle the parsing of RTE Flow action drop Header. */
153 int32_t
154 ulp_rte_drop_act_handler(const struct rte_flow_action *action_item,
155 			 struct ulp_rte_parser_params *params);
156 
157 /* Function to handle the parsing of RTE Flow action count. */
158 int32_t
159 ulp_rte_count_act_handler(const struct rte_flow_action *action_item,
160 			  struct ulp_rte_parser_params *params);
161 
162 /* Function to handle the parsing of RTE Flow action PF. */
163 int32_t
164 ulp_rte_pf_act_handler(const struct rte_flow_action *action_item,
165 		       struct ulp_rte_parser_params *params);
166 
167 /* Function to handle the parsing of RTE Flow action VF. */
168 int32_t
169 ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,
170 		       struct ulp_rte_parser_params *params);
171 
172 /* Function to handle the parsing of RTE Flow action port_id. */
173 int32_t
174 ulp_rte_port_id_act_handler(const struct rte_flow_action *act_item,
175 			    struct ulp_rte_parser_params *params);
176 
177 /* Function to handle the parsing of RTE Flow action phy_port. */
178 int32_t
179 ulp_rte_phy_port_act_handler(const struct rte_flow_action *action_item,
180 			     struct ulp_rte_parser_params *params);
181 
182 /* Function to handle the parsing of RTE Flow action pop vlan. */
183 int32_t
184 ulp_rte_of_pop_vlan_act_handler(const struct rte_flow_action *action_item,
185 				struct ulp_rte_parser_params *params);
186 
187 /* Function to handle the parsing of RTE Flow action push vlan. */
188 int32_t
189 ulp_rte_of_push_vlan_act_handler(const struct rte_flow_action *action_item,
190 				 struct ulp_rte_parser_params *params);
191 
192 /* Function to handle the parsing of RTE Flow action set vlan id. */
193 int32_t
194 ulp_rte_of_set_vlan_vid_act_handler(const struct rte_flow_action *action_item,
195 				    struct ulp_rte_parser_params *params);
196 
197 /* Function to handle the parsing of RTE Flow action set vlan pcp. */
198 int32_t
199 ulp_rte_of_set_vlan_pcp_act_handler(const struct rte_flow_action *action_item,
200 				    struct ulp_rte_parser_params *params);
201 
202 /* Function to handle the parsing of RTE Flow action set ipv4 src.*/
203 int32_t
204 ulp_rte_set_ipv4_src_act_handler(const struct rte_flow_action *action_item,
205 				 struct ulp_rte_parser_params *params);
206 
207 /* Function to handle the parsing of RTE Flow action set ipv4 dst.*/
208 int32_t
209 ulp_rte_set_ipv4_dst_act_handler(const struct rte_flow_action *action_item,
210 				 struct ulp_rte_parser_params *params);
211 
212 /* Function to handle the parsing of RTE Flow action set tp src.*/
213 int32_t
214 ulp_rte_set_tp_src_act_handler(const struct rte_flow_action *action_item,
215 			       struct ulp_rte_parser_params *params);
216 
217 /* Function to handle the parsing of RTE Flow action set tp dst.*/
218 int32_t
219 ulp_rte_set_tp_dst_act_handler(const struct rte_flow_action *action_item,
220 			       struct ulp_rte_parser_params *params);
221 
222 /* Function to handle the parsing of RTE Flow action dec ttl.*/
223 int32_t
224 ulp_rte_dec_ttl_act_handler(const struct rte_flow_action *action_item,
225 			    struct ulp_rte_parser_params *params);
226 
227 #endif /* _ULP_RTE_PARSER_H_ */
228