1*d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2*d30ea906Sjfb8856606  * Copyright(c) 2017 Intel Corporation
32bfe3f2eSlogwang  */
42bfe3f2eSlogwang 
52bfe3f2eSlogwang #ifndef _RTE_FLOW_CLASSIFY_PARSE_H_
62bfe3f2eSlogwang #define _RTE_FLOW_CLASSIFY_PARSE_H_
72bfe3f2eSlogwang 
82bfe3f2eSlogwang #include <rte_ethdev.h>
92bfe3f2eSlogwang #include <rte_ether.h>
102bfe3f2eSlogwang #include <rte_flow.h>
112bfe3f2eSlogwang #include <stdbool.h>
122bfe3f2eSlogwang 
132bfe3f2eSlogwang #ifdef __cplusplus
142bfe3f2eSlogwang extern "C" {
152bfe3f2eSlogwang #endif
162bfe3f2eSlogwang 
17*d30ea906Sjfb8856606 extern enum rte_flow_classify_table_type table_type;
18*d30ea906Sjfb8856606 
19*d30ea906Sjfb8856606 struct classify_action {
20*d30ea906Sjfb8856606 	/* Flow action mask */
21*d30ea906Sjfb8856606 	uint64_t action_mask;
22*d30ea906Sjfb8856606 
23*d30ea906Sjfb8856606 	struct action {
24*d30ea906Sjfb8856606 		/** Integer value to return with packets */
25*d30ea906Sjfb8856606 		struct rte_flow_action_mark mark;
26*d30ea906Sjfb8856606 		/** Flow rule counter */
27*d30ea906Sjfb8856606 		struct rte_flow_query_count counter;
28*d30ea906Sjfb8856606 	} act;
29*d30ea906Sjfb8856606 };
30*d30ea906Sjfb8856606 
312bfe3f2eSlogwang typedef int (*parse_filter_t)(const struct rte_flow_attr *attr,
322bfe3f2eSlogwang 			      const struct rte_flow_item pattern[],
332bfe3f2eSlogwang 			      const struct rte_flow_action actions[],
342bfe3f2eSlogwang 			      struct rte_eth_ntuple_filter *filter,
352bfe3f2eSlogwang 			      struct rte_flow_error *error);
362bfe3f2eSlogwang 
372bfe3f2eSlogwang /* Skip all VOID items of the pattern */
382bfe3f2eSlogwang void
392bfe3f2eSlogwang classify_pattern_skip_void_item(struct rte_flow_item *items,
402bfe3f2eSlogwang 			    const struct rte_flow_item *pattern);
412bfe3f2eSlogwang 
422bfe3f2eSlogwang /* Find the first VOID or non-VOID item pointer */
432bfe3f2eSlogwang const struct rte_flow_item *
442bfe3f2eSlogwang classify_find_first_item(const struct rte_flow_item *item, bool is_void);
452bfe3f2eSlogwang 
462bfe3f2eSlogwang 
472bfe3f2eSlogwang /* Find if there's parse filter function matched */
482bfe3f2eSlogwang parse_filter_t
492bfe3f2eSlogwang classify_find_parse_filter_func(struct rte_flow_item *pattern);
502bfe3f2eSlogwang 
512bfe3f2eSlogwang /* get action data */
52*d30ea906Sjfb8856606 struct classify_action *
532bfe3f2eSlogwang classify_get_flow_action(void);
542bfe3f2eSlogwang 
552bfe3f2eSlogwang #ifdef __cplusplus
562bfe3f2eSlogwang }
572bfe3f2eSlogwang #endif
582bfe3f2eSlogwang 
592bfe3f2eSlogwang #endif /* _RTE_FLOW_CLASSIFY_PARSE_H_ */
60