/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2014-2020 Broadcom
+ * Copyright(c) 2014-2021 Broadcom
* All rights reserved.
*/
#include <rte_flow_driver.h>
#include "ulp_template_db_enum.h"
#include "ulp_template_struct.h"
+#include "ulp_mapper.h"
+#include "bnxt_tf_common.h"
/* defines to be used in the tunnel header parsing */
#define BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS 2
#define BNXT_ULP_ENCAP_IPV4_ID_PROTO 6
#define BNXT_ULP_ENCAP_IPV4_DEST_IP 4
#define BNXT_ULP_ENCAP_IPV4_SIZE 12
-#define BNXT_ULP_ENCAP_IPV6_SIZE 8
+#define BNXT_ULP_ENCAP_IPV6_VTC_FLOW 4
+#define BNXT_ULP_ENCAP_IPV6_PROTO_TTL 2
+#define BNXT_ULP_ENCAP_IPV6_DO 2
+#define BNXT_ULP_ENCAP_IPV6_SIZE 24
#define BNXT_ULP_ENCAP_UDP_SIZE 4
-#define BNXT_ULP_INVALID_SVIF_VAL -1U
+#define BNXT_ULP_INVALID_SVIF_VAL -1UL
#define BNXT_ULP_GET_IPV6_VER(vtcf) \
(((vtcf) & BNXT_ULP_PARSER_IPV6_VER_MASK) >> 28)
#define BNXT_ULP_GET_IPV6_FLOWLABEL(vtcf) \
((vtcf) & BNXT_ULP_PARSER_IPV6_FLOW_LABEL)
#define BNXT_ULP_PARSER_IPV6_VER_MASK 0xf0000000
+#define BNXT_ULP_IPV6_DFLT_VER 0x60000000
#define BNXT_ULP_PARSER_IPV6_TC 0x0ff00000
#define BNXT_ULP_PARSER_IPV6_FLOW_LABEL 0x000fffff
+#define BNXT_ULP_DEFAULT_TTL 64
+
+enum bnxt_ulp_prsr_action {
+ ULP_PRSR_ACT_DEFAULT = 0,
+ ULP_PRSR_ACT_MATCH_IGNORE = 1,
+ ULP_PRSR_ACT_MASK_IGNORE = 2,
+ ULP_PRSR_ACT_SPEC_IGNORE = 4
+};
+
+void
+bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,
+ struct ulp_rte_parser_params *params,
+ enum bnxt_ulp_fdb_type flow_type);
/* Function to handle the parsing of the RTE port id. */
int32_t
/*
* Function to handle the post processing of the parsing details
*/
-int32_t
+void
bnxt_ulp_rte_parser_post_process(struct ulp_rte_parser_params *params);
/* Function to handle the parsing of RTE Flow item PF Header. */
ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,
struct ulp_rte_parser_params *params);
+/* Function to handle the parsing of RTE Flow item GRE Header. */
+int32_t
+ulp_rte_gre_hdr_handler(const struct rte_flow_item *item,
+ struct ulp_rte_parser_params *params);
+
+int32_t
+ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,
+ struct ulp_rte_parser_params *params __rte_unused);
+
+/* Function to handle the parsing of RTE Flow item ICMP Header. */
+int32_t
+ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
+ struct ulp_rte_parser_params *params);
+
+/* Function to handle the parsing of RTE Flow item ICMP6 Header. */
+int32_t
+ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
+ struct ulp_rte_parser_params *params);
+
/* Function to handle the parsing of RTE Flow item void Header. */
int32_t
ulp_rte_void_hdr_handler(const struct rte_flow_item *item,
ulp_rte_of_set_vlan_pcp_act_handler(const struct rte_flow_action *action_item,
struct ulp_rte_parser_params *params);
+/* Function to handle the parsing of RTE Flow action set ipv4 src.*/
+int32_t
+ulp_rte_set_ipv4_src_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+/* Function to handle the parsing of RTE Flow action set ipv4 dst.*/
+int32_t
+ulp_rte_set_ipv4_dst_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+/* Function to handle the parsing of RTE Flow action set tp src.*/
+int32_t
+ulp_rte_set_tp_src_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+/* Function to handle the parsing of RTE Flow action set tp dst.*/
+int32_t
+ulp_rte_set_tp_dst_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+/* Function to handle the parsing of RTE Flow action dec ttl.*/
+int32_t
+ulp_rte_dec_ttl_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+/* Function to handle the parsing of RTE Flow action JUMP .*/
+int32_t
+ulp_rte_jump_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+int32_t
+ulp_rte_sample_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+int32_t
+ulp_rte_shared_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+int32_t
+ulp_vendor_vxlan_decap_act_handler(const struct rte_flow_action *action_item,
+ struct ulp_rte_parser_params *params);
+
+int32_t
+ulp_rte_vendor_vxlan_decap_hdr_handler(const struct rte_flow_item *item,
+ struct ulp_rte_parser_params *params);
+
#endif /* _ULP_RTE_PARSER_H_ */