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