1*99a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
2*99a2dd95SBruce Richardson  * Copyright(c) 2017 Intel Corporation
3*99a2dd95SBruce Richardson  */
4*99a2dd95SBruce Richardson 
5*99a2dd95SBruce Richardson #ifndef _RTE_FLOW_CLASSIFY_PARSE_H_
6*99a2dd95SBruce Richardson #define _RTE_FLOW_CLASSIFY_PARSE_H_
7*99a2dd95SBruce Richardson 
8*99a2dd95SBruce Richardson #include <rte_ethdev.h>
9*99a2dd95SBruce Richardson #include <rte_flow.h>
10*99a2dd95SBruce Richardson #include <stdbool.h>
11*99a2dd95SBruce Richardson 
12*99a2dd95SBruce Richardson #ifdef __cplusplus
13*99a2dd95SBruce Richardson extern "C" {
14*99a2dd95SBruce Richardson #endif
15*99a2dd95SBruce Richardson 
16*99a2dd95SBruce Richardson extern enum rte_flow_classify_table_type table_type;
17*99a2dd95SBruce Richardson 
18*99a2dd95SBruce Richardson struct classify_action {
19*99a2dd95SBruce Richardson 	/* Flow action mask */
20*99a2dd95SBruce Richardson 	uint64_t action_mask;
21*99a2dd95SBruce Richardson 
22*99a2dd95SBruce Richardson 	struct action {
23*99a2dd95SBruce Richardson 		/** Integer value to return with packets */
24*99a2dd95SBruce Richardson 		struct rte_flow_action_mark mark;
25*99a2dd95SBruce Richardson 		/** Flow rule counter */
26*99a2dd95SBruce Richardson 		struct rte_flow_query_count counter;
27*99a2dd95SBruce Richardson 	} act;
28*99a2dd95SBruce Richardson };
29*99a2dd95SBruce Richardson 
30*99a2dd95SBruce Richardson typedef int (*parse_filter_t)(const struct rte_flow_attr *attr,
31*99a2dd95SBruce Richardson 			      const struct rte_flow_item pattern[],
32*99a2dd95SBruce Richardson 			      const struct rte_flow_action actions[],
33*99a2dd95SBruce Richardson 			      struct rte_eth_ntuple_filter *filter,
34*99a2dd95SBruce Richardson 			      struct rte_flow_error *error);
35*99a2dd95SBruce Richardson 
36*99a2dd95SBruce Richardson /* Skip all VOID items of the pattern */
37*99a2dd95SBruce Richardson void
38*99a2dd95SBruce Richardson classify_pattern_skip_void_item(struct rte_flow_item *items,
39*99a2dd95SBruce Richardson 			    const struct rte_flow_item *pattern);
40*99a2dd95SBruce Richardson 
41*99a2dd95SBruce Richardson /* Find the first VOID or non-VOID item pointer */
42*99a2dd95SBruce Richardson const struct rte_flow_item *
43*99a2dd95SBruce Richardson classify_find_first_item(const struct rte_flow_item *item, bool is_void);
44*99a2dd95SBruce Richardson 
45*99a2dd95SBruce Richardson 
46*99a2dd95SBruce Richardson /* Find if there's parse filter function matched */
47*99a2dd95SBruce Richardson parse_filter_t
48*99a2dd95SBruce Richardson classify_find_parse_filter_func(struct rte_flow_item *pattern);
49*99a2dd95SBruce Richardson 
50*99a2dd95SBruce Richardson /* get action data */
51*99a2dd95SBruce Richardson struct classify_action *
52*99a2dd95SBruce Richardson classify_get_flow_action(void);
53*99a2dd95SBruce Richardson 
54*99a2dd95SBruce Richardson #ifdef __cplusplus
55*99a2dd95SBruce Richardson }
56*99a2dd95SBruce Richardson #endif
57*99a2dd95SBruce Richardson 
58*99a2dd95SBruce Richardson #endif /* _RTE_FLOW_CLASSIFY_PARSE_H_ */
59