xref: /dpdk/drivers/net/ntnic/include/create_elements.h (revision effa04693274e59d82b24907c5ee4d1f8eef3cd7)
1ed01e436SSerhii Iliushyk /*
2ed01e436SSerhii Iliushyk  * SPDX-License-Identifier: BSD-3-Clause
3ed01e436SSerhii Iliushyk  * Copyright(c) 2023 Napatech A/S
4ed01e436SSerhii Iliushyk  */
5ed01e436SSerhii Iliushyk 
6ed01e436SSerhii Iliushyk #ifndef __CREATE_ELEMENTS_H__
7ed01e436SSerhii Iliushyk #define __CREATE_ELEMENTS_H__
8ed01e436SSerhii Iliushyk 
9e526adf1SSerhii Iliushyk #include "stdint.h"
10ed01e436SSerhii Iliushyk 
11ed01e436SSerhii Iliushyk #include "stream_binary_flow_api.h"
12ed01e436SSerhii Iliushyk #include <rte_flow.h>
13ed01e436SSerhii Iliushyk 
14e526adf1SSerhii Iliushyk #define MAX_ELEMENTS 64
15e526adf1SSerhii Iliushyk #define MAX_ACTIONS 32
16e526adf1SSerhii Iliushyk 
17e526adf1SSerhii Iliushyk struct cnv_match_s {
18e526adf1SSerhii Iliushyk 	struct rte_flow_item rte_flow_item[MAX_ELEMENTS];
19e526adf1SSerhii Iliushyk };
20e526adf1SSerhii Iliushyk 
21e526adf1SSerhii Iliushyk struct cnv_attr_s {
22e526adf1SSerhii Iliushyk 	struct cnv_match_s match;
23e526adf1SSerhii Iliushyk 	struct rte_flow_attr attr;
24e526adf1SSerhii Iliushyk 	uint16_t forced_vlan_vid;
25e526adf1SSerhii Iliushyk 	uint16_t caller_id;
26e526adf1SSerhii Iliushyk };
27e526adf1SSerhii Iliushyk 
28e526adf1SSerhii Iliushyk struct cnv_action_s {
29e526adf1SSerhii Iliushyk 	struct rte_flow_action flow_actions[MAX_ACTIONS];
308eed292bSSerhii Iliushyk 	struct rte_flow_action_rss flow_rss;
31c6821abfSDanylo Vodopianov 	struct flow_action_raw_encap encap;
32c6821abfSDanylo Vodopianov 	struct flow_action_raw_decap decap;
33e526adf1SSerhii Iliushyk 	struct rte_flow_action_queue queue;
34e526adf1SSerhii Iliushyk };
35e526adf1SSerhii Iliushyk 
36e526adf1SSerhii Iliushyk /*
37e526adf1SSerhii Iliushyk  * Only needed because it eases the use of statistics through NTAPI
38e526adf1SSerhii Iliushyk  * for faster integration into NTAPI version of driver
39e526adf1SSerhii Iliushyk  * Therefore, this is only a good idea when running on a temporary NTAPI
40e526adf1SSerhii Iliushyk  * The query() functionality must go to flow engine, when moved to Open Source driver
41e526adf1SSerhii Iliushyk  */
42e526adf1SSerhii Iliushyk 
43e526adf1SSerhii Iliushyk struct rte_flow {
44e526adf1SSerhii Iliushyk 	void *flw_hdl;
45e526adf1SSerhii Iliushyk 	int used;
46e526adf1SSerhii Iliushyk 
47e526adf1SSerhii Iliushyk 	uint32_t flow_stat_id;
48e526adf1SSerhii Iliushyk 
49*effa0469SDanylo Vodopianov 	uint64_t stat_pkts;
50*effa0469SDanylo Vodopianov 	uint64_t stat_bytes;
51*effa0469SDanylo Vodopianov 	uint8_t stat_tcp_flags;
52*effa0469SDanylo Vodopianov 
53e526adf1SSerhii Iliushyk 	uint16_t caller_id;
54e526adf1SSerhii Iliushyk };
55e526adf1SSerhii Iliushyk 
56e526adf1SSerhii Iliushyk enum nt_rte_flow_item_type {
57e526adf1SSerhii Iliushyk 	NT_RTE_FLOW_ITEM_TYPE_END = INT_MIN,
58e526adf1SSerhii Iliushyk 	NT_RTE_FLOW_ITEM_TYPE_TUNNEL,
59e526adf1SSerhii Iliushyk };
60e526adf1SSerhii Iliushyk 
61e526adf1SSerhii Iliushyk extern rte_spinlock_t flow_lock;
62c6821abfSDanylo Vodopianov 
63c6821abfSDanylo Vodopianov int interpret_raw_data(uint8_t *data, uint8_t *preserve, int size, struct rte_flow_item *out);
64e526adf1SSerhii Iliushyk int convert_error(struct rte_flow_error *error, struct rte_flow_error *rte_flow_error);
65e526adf1SSerhii Iliushyk int create_attr(struct cnv_attr_s *attribute, const struct rte_flow_attr *attr);
66e526adf1SSerhii Iliushyk int create_match_elements(struct cnv_match_s *match, const struct rte_flow_item items[],
67e526adf1SSerhii Iliushyk 	int max_elem);
68e526adf1SSerhii Iliushyk int create_action_elements_inline(struct cnv_action_s *action,
69e526adf1SSerhii Iliushyk 	const struct rte_flow_action actions[],
70e526adf1SSerhii Iliushyk 	int max_elem,
71e526adf1SSerhii Iliushyk 	uint32_t queue_offset);
72e526adf1SSerhii Iliushyk 
73ed01e436SSerhii Iliushyk #endif	/* __CREATE_ELEMENTS_H__ */
74