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