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 -1U
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
40 bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,
41 struct ulp_rte_parser_params *params,
42 enum bnxt_ulp_fdb_type flow_type);
44 /* Function to handle the parsing of the RTE port id. */
46 ulp_rte_parser_implicit_match_port_process(struct ulp_rte_parser_params *param);
48 /* Function to handle the implicit action port id */
50 ulp_rte_parser_implicit_act_port_process(struct ulp_rte_parser_params *params);
53 * Function to handle the parsing of RTE Flows and placing
54 * the RTE flow items into the ulp structures.
57 bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],
58 struct ulp_rte_parser_params *params);
61 * Function to handle the parsing of RTE Flows and placing
62 * the RTE flow actions into the ulp structures.
65 bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action actions[],
66 struct ulp_rte_parser_params *params);
69 * Function to handle the post processing of the parsing details
72 bnxt_ulp_rte_parser_post_process(struct ulp_rte_parser_params *params);
74 /* Function to handle the parsing of RTE Flow item PF Header. */
76 ulp_rte_pf_hdr_handler(const struct rte_flow_item *item,
77 struct ulp_rte_parser_params *params);
79 /* Function to handle the parsing of RTE Flow item VF Header. */
81 ulp_rte_vf_hdr_handler(const struct rte_flow_item *item,
82 struct ulp_rte_parser_params *params);
84 /* Function to handle the parsing of RTE Flow item port id Header. */
86 ulp_rte_port_id_hdr_handler(const struct rte_flow_item *item,
87 struct ulp_rte_parser_params *params);
89 /* Function to handle the parsing of RTE Flow item port Header. */
91 ulp_rte_phy_port_hdr_handler(const struct rte_flow_item *item,
92 struct ulp_rte_parser_params *params);
94 /* Function to handle the RTE item Ethernet Header. */
96 ulp_rte_eth_hdr_handler(const struct rte_flow_item *item,
97 struct ulp_rte_parser_params *params);
99 /* Function to handle the parsing of RTE Flow item Vlan Header. */
101 ulp_rte_vlan_hdr_handler(const struct rte_flow_item *item,
102 struct ulp_rte_parser_params *params);
104 /* Function to handle the parsing of RTE Flow item IPV4 Header. */
106 ulp_rte_ipv4_hdr_handler(const struct rte_flow_item *item,
107 struct ulp_rte_parser_params *params);
109 /* Function to handle the parsing of RTE Flow item IPV6 Header. */
111 ulp_rte_ipv6_hdr_handler(const struct rte_flow_item *item,
112 struct ulp_rte_parser_params *params);
114 /* Function to handle the parsing of RTE Flow item UDP Header. */
116 ulp_rte_udp_hdr_handler(const struct rte_flow_item *item,
117 struct ulp_rte_parser_params *params);
119 /* Function to handle the parsing of RTE Flow item TCP Header. */
121 ulp_rte_tcp_hdr_handler(const struct rte_flow_item *item,
122 struct ulp_rte_parser_params *params);
124 /* Function to handle the parsing of RTE Flow item Vxlan Header. */
126 ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,
127 struct ulp_rte_parser_params *params);
129 /* Function to handle the parsing of RTE Flow item void Header. */
131 ulp_rte_void_hdr_handler(const struct rte_flow_item *item,
132 struct ulp_rte_parser_params *params);
134 /* Function to handle the parsing of RTE Flow action void Header. */
136 ulp_rte_void_act_handler(const struct rte_flow_action *action_item,
137 struct ulp_rte_parser_params *params);
139 /* Function to handle the parsing of RTE Flow action RSS Header. */
141 ulp_rte_rss_act_handler(const struct rte_flow_action *action_item,
142 struct ulp_rte_parser_params *params);
144 /* Function to handle the parsing of RTE Flow action Mark Header. */
146 ulp_rte_mark_act_handler(const struct rte_flow_action *action_item,
147 struct ulp_rte_parser_params *params);
149 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
151 ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,
152 struct ulp_rte_parser_params *params);
154 /* Function to handle the parsing of RTE Flow action vxlan_encap Header. */
156 ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action *action_item,
157 struct ulp_rte_parser_params *params);
159 /* Function to handle the parsing of RTE Flow action drop Header. */
161 ulp_rte_drop_act_handler(const struct rte_flow_action *action_item,
162 struct ulp_rte_parser_params *params);
164 /* Function to handle the parsing of RTE Flow action count. */
166 ulp_rte_count_act_handler(const struct rte_flow_action *action_item,
167 struct ulp_rte_parser_params *params);
169 /* Function to handle the parsing of RTE Flow action PF. */
171 ulp_rte_pf_act_handler(const struct rte_flow_action *action_item,
172 struct ulp_rte_parser_params *params);
174 /* Function to handle the parsing of RTE Flow action VF. */
176 ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,
177 struct ulp_rte_parser_params *params);
179 /* Function to handle the parsing of RTE Flow action port_id. */
181 ulp_rte_port_id_act_handler(const struct rte_flow_action *act_item,
182 struct ulp_rte_parser_params *params);
184 /* Function to handle the parsing of RTE Flow action phy_port. */
186 ulp_rte_phy_port_act_handler(const struct rte_flow_action *action_item,
187 struct ulp_rte_parser_params *params);
189 /* Function to handle the parsing of RTE Flow action pop vlan. */
191 ulp_rte_of_pop_vlan_act_handler(const struct rte_flow_action *action_item,
192 struct ulp_rte_parser_params *params);
194 /* Function to handle the parsing of RTE Flow action push vlan. */
196 ulp_rte_of_push_vlan_act_handler(const struct rte_flow_action *action_item,
197 struct ulp_rte_parser_params *params);
199 /* Function to handle the parsing of RTE Flow action set vlan id. */
201 ulp_rte_of_set_vlan_vid_act_handler(const struct rte_flow_action *action_item,
202 struct ulp_rte_parser_params *params);
204 /* Function to handle the parsing of RTE Flow action set vlan pcp. */
206 ulp_rte_of_set_vlan_pcp_act_handler(const struct rte_flow_action *action_item,
207 struct ulp_rte_parser_params *params);
209 /* Function to handle the parsing of RTE Flow action set ipv4 src.*/
211 ulp_rte_set_ipv4_src_act_handler(const struct rte_flow_action *action_item,
212 struct ulp_rte_parser_params *params);
214 /* Function to handle the parsing of RTE Flow action set ipv4 dst.*/
216 ulp_rte_set_ipv4_dst_act_handler(const struct rte_flow_action *action_item,
217 struct ulp_rte_parser_params *params);
219 /* Function to handle the parsing of RTE Flow action set tp src.*/
221 ulp_rte_set_tp_src_act_handler(const struct rte_flow_action *action_item,
222 struct ulp_rte_parser_params *params);
224 /* Function to handle the parsing of RTE Flow action set tp dst.*/
226 ulp_rte_set_tp_dst_act_handler(const struct rte_flow_action *action_item,
227 struct ulp_rte_parser_params *params);
229 /* Function to handle the parsing of RTE Flow action dec ttl.*/
231 ulp_rte_dec_ttl_act_handler(const struct rte_flow_action *action_item,
232 struct ulp_rte_parser_params *params);
234 /* Function to handle the parsing of RTE Flow action JUMP .*/
236 ulp_rte_jump_act_handler(const struct rte_flow_action *action_item,
237 struct ulp_rte_parser_params *params);
239 #endif /* _ULP_RTE_PARSER_H_ */