1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2014-2021 Broadcom
6 #ifndef _ULP_RTE_PARSER_H_
7 #define _ULP_RTE_PARSER_H_
11 #include <rte_flow_driver.h>
12 #include "ulp_template_db_enum.h"
13 #include "ulp_template_struct.h"
14 #include "ulp_mapper.h"
15 #include "bnxt_tf_common.h"
17 /* defines to be used in the tunnel header parsing */
18 #define BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS 2
19 #define BNXT_ULP_ENCAP_IPV4_ID_PROTO 6
20 #define BNXT_ULP_ENCAP_IPV4_DEST_IP 4
21 #define BNXT_ULP_ENCAP_IPV4_SIZE 12
22 #define BNXT_ULP_ENCAP_IPV6_VTC_FLOW 4
23 #define BNXT_ULP_ENCAP_IPV6_PROTO_TTL 2
24 #define BNXT_ULP_ENCAP_IPV6_DO 2
25 #define BNXT_ULP_ENCAP_IPV6_SIZE 24
26 #define BNXT_ULP_ENCAP_UDP_SIZE 4
27 #define BNXT_ULP_INVALID_SVIF_VAL -1UL
29 #define BNXT_ULP_GET_IPV6_VER(vtcf) \
30 (((vtcf) & BNXT_ULP_PARSER_IPV6_VER_MASK) >> 28)
31 #define BNXT_ULP_GET_IPV6_TC(vtcf) \
32 (((vtcf) & BNXT_ULP_PARSER_IPV6_TC) >> 20)
33 #define BNXT_ULP_GET_IPV6_FLOWLABEL(vtcf) \
34 ((vtcf) & BNXT_ULP_PARSER_IPV6_FLOW_LABEL)
35 #define BNXT_ULP_PARSER_IPV6_VER_MASK 0xf0000000
36 #define BNXT_ULP_IPV6_DFLT_VER 0x60000000
37 #define BNXT_ULP_PARSER_IPV6_TC 0x0ff00000
38 #define BNXT_ULP_PARSER_IPV6_FLOW_LABEL 0x000fffff
39 #define BNXT_ULP_DEFAULT_TTL 64
41 enum bnxt_ulp_prsr_action {
42 ULP_PRSR_ACT_DEFAULT = 0,
43 ULP_PRSR_ACT_MATCH_IGNORE = 1,
44 ULP_PRSR_ACT_MASK_IGNORE = 2,
45 ULP_PRSR_ACT_SPEC_IGNORE = 4
49 bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,
50 struct ulp_rte_parser_params *params,
51 enum bnxt_ulp_fdb_type flow_type);
53 /* Function to handle the parsing of the RTE port id. */
55 ulp_rte_parser_implicit_match_port_process(struct ulp_rte_parser_params *param);
57 /* Function to handle the implicit action port id */
59 ulp_rte_parser_implicit_act_port_process(struct ulp_rte_parser_params *params);
62 * Function to handle the parsing of RTE Flows and placing
63 * the RTE flow items into the ulp structures.
66 bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],
67 struct ulp_rte_parser_params *params);
70 * Function to handle the parsing of RTE Flows and placing
71 * the RTE flow actions into the ulp structures.
74 bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action actions[],
75 struct ulp_rte_parser_params *params);
78 * Function to handle the post processing of the parsing details
81 bnxt_ulp_rte_parser_post_process(struct ulp_rte_parser_params *params);
83 /* Function to handle the parsing of RTE Flow item PF Header. */
85 ulp_rte_pf_hdr_handler(const struct rte_flow_item *item,
86 struct ulp_rte_parser_params *params);
88 /* Function to handle the parsing of RTE Flow item VF Header. */
90 ulp_rte_vf_hdr_handler(const struct rte_flow_item *item,
91 struct ulp_rte_parser_params *params);
93 /* Parse items PORT_ID, PORT_REPRESENTOR and REPRESENTED_PORT. */
95 ulp_rte_port_hdr_handler(const struct rte_flow_item *item,
96 struct ulp_rte_parser_params *params);
98 /* Function to handle the parsing of RTE Flow item port Header. */
100 ulp_rte_phy_port_hdr_handler(const struct rte_flow_item *item,
101 struct ulp_rte_parser_params *params);
103 /* Function to handle the RTE item Ethernet Header. */
105 ulp_rte_eth_hdr_handler(const struct rte_flow_item *item,
106 struct ulp_rte_parser_params *params);
108 /* Function to handle the parsing of RTE Flow item Vlan Header. */
110 ulp_rte_vlan_hdr_handler(const struct rte_flow_item *item,
111 struct ulp_rte_parser_params *params);
113 /* Function to handle the parsing of RTE Flow item IPV4 Header. */
115 ulp_rte_ipv4_hdr_handler(const struct rte_flow_item *item,
116 struct ulp_rte_parser_params *params);
118 /* Function to handle the parsing of RTE Flow item IPV6 Header. */
120 ulp_rte_ipv6_hdr_handler(const struct rte_flow_item *item,
121 struct ulp_rte_parser_params *params);
123 /* Function to handle the parsing of RTE Flow item UDP Header. */
125 ulp_rte_udp_hdr_handler(const struct rte_flow_item *item,
126 struct ulp_rte_parser_params *params);
128 /* Function to handle the parsing of RTE Flow item TCP Header. */
130 ulp_rte_tcp_hdr_handler(const struct rte_flow_item *item,
131 struct ulp_rte_parser_params *params);
133 /* Function to handle the parsing of RTE Flow item Vxlan Header. */
135 ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,
136 struct ulp_rte_parser_params *params);
138 /* Function to handle the parsing of RTE Flow item GRE Header. */
140 ulp_rte_gre_hdr_handler(const struct rte_flow_item *item,
141 struct ulp_rte_parser_params *params);
144 ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,
145 struct ulp_rte_parser_params *params __rte_unused);
147 /* Function to handle the parsing of RTE Flow item ICMP Header. */
149 ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
150 struct ulp_rte_parser_params *params);
152 /* Function to handle the parsing of RTE Flow item ICMP6 Header. */
154 ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
155 struct ulp_rte_parser_params *params);
157 /* Function to handle the parsing of RTE Flow item void Header. */
159 ulp_rte_void_hdr_handler(const struct rte_flow_item *item,
160 struct ulp_rte_parser_params *params);
162 /* Function to handle the parsing of RTE Flow action void Header. */
164 ulp_rte_void_act_handler(const struct rte_flow_action *action_item,
165 struct ulp_rte_parser_params *params);
167 /* Function to handle the parsing of RTE Flow action RSS Header. */
169 ulp_rte_rss_act_handler(const struct rte_flow_action *action_item,
170 struct ulp_rte_parser_params *params);
172 /* Function to handle the parsing of RTE Flow action Mark Header. */
174 ulp_rte_mark_act_handler(const struct rte_flow_action *action_item,
175 struct ulp_rte_parser_params *params);
177 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
179 ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
180 struct ulp_rte_parser_params *params);
182 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
184 ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action *action_item,
185 struct ulp_rte_parser_params *params);
187 /* Function to handle the parsing of RTE Flow action drop Header. */
189 ulp_rte_drop_act_handler(const struct rte_flow_action *action_item,
190 struct ulp_rte_parser_params *params);
192 /* Function to handle the parsing of RTE Flow action count. */
194 ulp_rte_count_act_handler(const struct rte_flow_action *action_item,
195 struct ulp_rte_parser_params *params);
197 /* Function to handle the parsing of RTE Flow action PF. */
199 ulp_rte_pf_act_handler(const struct rte_flow_action *action_item,
200 struct ulp_rte_parser_params *params);
202 /* Function to handle the parsing of RTE Flow action VF. */
204 ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,
205 struct ulp_rte_parser_params *params);
207 /* Function to handle the parsing of RTE Flow action port_id. */
209 ulp_rte_port_id_act_handler(const struct rte_flow_action *act_item,
210 struct ulp_rte_parser_params *params);
212 /* Function to handle the parsing of RTE Flow action phy_port. */
214 ulp_rte_phy_port_act_handler(const struct rte_flow_action *action_item,
215 struct ulp_rte_parser_params *params);
217 /* Function to handle the parsing of RTE Flow action pop vlan. */
219 ulp_rte_of_pop_vlan_act_handler(const struct rte_flow_action *action_item,
220 struct ulp_rte_parser_params *params);
222 /* Function to handle the parsing of RTE Flow action push vlan. */
224 ulp_rte_of_push_vlan_act_handler(const struct rte_flow_action *action_item,
225 struct ulp_rte_parser_params *params);
227 /* Function to handle the parsing of RTE Flow action set vlan id. */
229 ulp_rte_of_set_vlan_vid_act_handler(const struct rte_flow_action *action_item,
230 struct ulp_rte_parser_params *params);
232 /* Function to handle the parsing of RTE Flow action set vlan pcp. */
234 ulp_rte_of_set_vlan_pcp_act_handler(const struct rte_flow_action *action_item,
235 struct ulp_rte_parser_params *params);
237 /* Function to handle the parsing of RTE Flow action set ipv4 src.*/
239 ulp_rte_set_ipv4_src_act_handler(const struct rte_flow_action *action_item,
240 struct ulp_rte_parser_params *params);
242 /* Function to handle the parsing of RTE Flow action set ipv4 dst.*/
244 ulp_rte_set_ipv4_dst_act_handler(const struct rte_flow_action *action_item,
245 struct ulp_rte_parser_params *params);
247 /* Function to handle the parsing of RTE Flow action set tp src.*/
249 ulp_rte_set_tp_src_act_handler(const struct rte_flow_action *action_item,
250 struct ulp_rte_parser_params *params);
252 /* Function to handle the parsing of RTE Flow action set tp dst.*/
254 ulp_rte_set_tp_dst_act_handler(const struct rte_flow_action *action_item,
255 struct ulp_rte_parser_params *params);
257 /* Function to handle the parsing of RTE Flow action dec ttl.*/
259 ulp_rte_dec_ttl_act_handler(const struct rte_flow_action *action_item,
260 struct ulp_rte_parser_params *params);
262 /* Function to handle the parsing of RTE Flow action JUMP .*/
264 ulp_rte_jump_act_handler(const struct rte_flow_action *action_item,
265 struct ulp_rte_parser_params *params);
268 ulp_rte_sample_act_handler(const struct rte_flow_action *action_item,
269 struct ulp_rte_parser_params *params);
272 ulp_rte_shared_act_handler(const struct rte_flow_action *action_item,
273 struct ulp_rte_parser_params *params);
276 ulp_vendor_vxlan_decap_act_handler(const struct rte_flow_action *action_item,
277 struct ulp_rte_parser_params *params);
280 ulp_rte_vendor_vxlan_decap_hdr_handler(const struct rte_flow_item *item,
281 struct ulp_rte_parser_params *params);
283 #endif /* _ULP_RTE_PARSER_H_ */