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_PARSER_IPV6_TC 0x0ff00000
37 #define BNXT_ULP_PARSER_IPV6_FLOW_LABEL 0x000fffff
39 enum bnxt_ulp_prsr_action {
40 ULP_PRSR_ACT_DEFAULT = 0,
41 ULP_PRSR_ACT_MATCH_IGNORE = 1,
42 ULP_PRSR_ACT_MASK_IGNORE = 2,
43 ULP_PRSR_ACT_SPEC_IGNORE = 4
47 bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,
48 struct ulp_rte_parser_params *params,
49 enum bnxt_ulp_fdb_type flow_type);
51 /* Function to handle the parsing of the RTE port id. */
53 ulp_rte_parser_implicit_match_port_process(struct ulp_rte_parser_params *param);
55 /* Function to handle the implicit action port id */
57 ulp_rte_parser_implicit_act_port_process(struct ulp_rte_parser_params *params);
60 * Function to handle the parsing of RTE Flows and placing
61 * the RTE flow items into the ulp structures.
64 bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],
65 struct ulp_rte_parser_params *params);
68 * Function to handle the parsing of RTE Flows and placing
69 * the RTE flow actions into the ulp structures.
72 bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action actions[],
73 struct ulp_rte_parser_params *params);
76 * Function to handle the post processing of the parsing details
79 bnxt_ulp_rte_parser_post_process(struct ulp_rte_parser_params *params);
81 /* Function to handle the parsing of RTE Flow item PF Header. */
83 ulp_rte_pf_hdr_handler(const struct rte_flow_item *item,
84 struct ulp_rte_parser_params *params);
86 /* Function to handle the parsing of RTE Flow item VF Header. */
88 ulp_rte_vf_hdr_handler(const struct rte_flow_item *item,
89 struct ulp_rte_parser_params *params);
91 /* Function to handle the parsing of RTE Flow item port id Header. */
93 ulp_rte_port_id_hdr_handler(const struct rte_flow_item *item,
94 struct ulp_rte_parser_params *params);
96 /* Function to handle the parsing of RTE Flow item port Header. */
98 ulp_rte_phy_port_hdr_handler(const struct rte_flow_item *item,
99 struct ulp_rte_parser_params *params);
101 /* Function to handle the RTE item Ethernet Header. */
103 ulp_rte_eth_hdr_handler(const struct rte_flow_item *item,
104 struct ulp_rte_parser_params *params);
106 /* Function to handle the parsing of RTE Flow item Vlan Header. */
108 ulp_rte_vlan_hdr_handler(const struct rte_flow_item *item,
109 struct ulp_rte_parser_params *params);
111 /* Function to handle the parsing of RTE Flow item IPV4 Header. */
113 ulp_rte_ipv4_hdr_handler(const struct rte_flow_item *item,
114 struct ulp_rte_parser_params *params);
116 /* Function to handle the parsing of RTE Flow item IPV6 Header. */
118 ulp_rte_ipv6_hdr_handler(const struct rte_flow_item *item,
119 struct ulp_rte_parser_params *params);
121 /* Function to handle the parsing of RTE Flow item UDP Header. */
123 ulp_rte_udp_hdr_handler(const struct rte_flow_item *item,
124 struct ulp_rte_parser_params *params);
126 /* Function to handle the parsing of RTE Flow item TCP Header. */
128 ulp_rte_tcp_hdr_handler(const struct rte_flow_item *item,
129 struct ulp_rte_parser_params *params);
131 /* Function to handle the parsing of RTE Flow item Vxlan Header. */
133 ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,
134 struct ulp_rte_parser_params *params);
136 /* Function to handle the parsing of RTE Flow item GRE Header. */
138 ulp_rte_gre_hdr_handler(const struct rte_flow_item *item,
139 struct ulp_rte_parser_params *params);
142 ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,
143 struct ulp_rte_parser_params *params __rte_unused);
145 /* Function to handle the parsing of RTE Flow item ICMP Header. */
147 ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
148 struct ulp_rte_parser_params *params);
150 /* Function to handle the parsing of RTE Flow item ICMP6 Header. */
152 ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
153 struct ulp_rte_parser_params *params);
155 /* Function to handle the parsing of RTE Flow item void Header. */
157 ulp_rte_void_hdr_handler(const struct rte_flow_item *item,
158 struct ulp_rte_parser_params *params);
160 /* Function to handle the parsing of RTE Flow action void Header. */
162 ulp_rte_void_act_handler(const struct rte_flow_action *action_item,
163 struct ulp_rte_parser_params *params);
165 /* Function to handle the parsing of RTE Flow action RSS Header. */
167 ulp_rte_rss_act_handler(const struct rte_flow_action *action_item,
168 struct ulp_rte_parser_params *params);
170 /* Function to handle the parsing of RTE Flow action Mark Header. */
172 ulp_rte_mark_act_handler(const struct rte_flow_action *action_item,
173 struct ulp_rte_parser_params *params);
175 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
177 ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
178 struct ulp_rte_parser_params *params);
180 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
182 ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action *action_item,
183 struct ulp_rte_parser_params *params);
185 /* Function to handle the parsing of RTE Flow action drop Header. */
187 ulp_rte_drop_act_handler(const struct rte_flow_action *action_item,
188 struct ulp_rte_parser_params *params);
190 /* Function to handle the parsing of RTE Flow action count. */
192 ulp_rte_count_act_handler(const struct rte_flow_action *action_item,
193 struct ulp_rte_parser_params *params);
195 /* Function to handle the parsing of RTE Flow action PF. */
197 ulp_rte_pf_act_handler(const struct rte_flow_action *action_item,
198 struct ulp_rte_parser_params *params);
200 /* Function to handle the parsing of RTE Flow action VF. */
202 ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,
203 struct ulp_rte_parser_params *params);
205 /* Function to handle the parsing of RTE Flow action port_id. */
207 ulp_rte_port_id_act_handler(const struct rte_flow_action *act_item,
208 struct ulp_rte_parser_params *params);
210 /* Function to handle the parsing of RTE Flow action phy_port. */
212 ulp_rte_phy_port_act_handler(const struct rte_flow_action *action_item,
213 struct ulp_rte_parser_params *params);
215 /* Function to handle the parsing of RTE Flow action pop vlan. */
217 ulp_rte_of_pop_vlan_act_handler(const struct rte_flow_action *action_item,
218 struct ulp_rte_parser_params *params);
220 /* Function to handle the parsing of RTE Flow action push vlan. */
222 ulp_rte_of_push_vlan_act_handler(const struct rte_flow_action *action_item,
223 struct ulp_rte_parser_params *params);
225 /* Function to handle the parsing of RTE Flow action set vlan id. */
227 ulp_rte_of_set_vlan_vid_act_handler(const struct rte_flow_action *action_item,
228 struct ulp_rte_parser_params *params);
230 /* Function to handle the parsing of RTE Flow action set vlan pcp. */
232 ulp_rte_of_set_vlan_pcp_act_handler(const struct rte_flow_action *action_item,
233 struct ulp_rte_parser_params *params);
235 /* Function to handle the parsing of RTE Flow action set ipv4 src.*/
237 ulp_rte_set_ipv4_src_act_handler(const struct rte_flow_action *action_item,
238 struct ulp_rte_parser_params *params);
240 /* Function to handle the parsing of RTE Flow action set ipv4 dst.*/
242 ulp_rte_set_ipv4_dst_act_handler(const struct rte_flow_action *action_item,
243 struct ulp_rte_parser_params *params);
245 /* Function to handle the parsing of RTE Flow action set tp src.*/
247 ulp_rte_set_tp_src_act_handler(const struct rte_flow_action *action_item,
248 struct ulp_rte_parser_params *params);
250 /* Function to handle the parsing of RTE Flow action set tp dst.*/
252 ulp_rte_set_tp_dst_act_handler(const struct rte_flow_action *action_item,
253 struct ulp_rte_parser_params *params);
255 /* Function to handle the parsing of RTE Flow action dec ttl.*/
257 ulp_rte_dec_ttl_act_handler(const struct rte_flow_action *action_item,
258 struct ulp_rte_parser_params *params);
260 /* Function to handle the parsing of RTE Flow action JUMP .*/
262 ulp_rte_jump_act_handler(const struct rte_flow_action *action_item,
263 struct ulp_rte_parser_params *params);
266 ulp_rte_sample_act_handler(const struct rte_flow_action *action_item,
267 struct ulp_rte_parser_params *params);
270 ulp_rte_shared_act_handler(const struct rte_flow_action *action_item,
271 struct ulp_rte_parser_params *params);
273 #endif /* _ULP_RTE_PARSER_H_ */