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