11d3f62a0SOleksandr Kolomeiets /* 21d3f62a0SOleksandr Kolomeiets * SPDX-License-Identifier: BSD-3-Clause 31d3f62a0SOleksandr Kolomeiets * Copyright(c) 2023 Napatech A/S 41d3f62a0SOleksandr Kolomeiets */ 51d3f62a0SOleksandr Kolomeiets 61d3f62a0SOleksandr Kolomeiets #ifndef _STREAM_BINARY_FLOW_API_H_ 71d3f62a0SOleksandr Kolomeiets #define _STREAM_BINARY_FLOW_API_H_ 81d3f62a0SOleksandr Kolomeiets 9*effa0469SDanylo Vodopianov #include <rte_ether.h> 10ed01e436SSerhii Iliushyk #include "rte_flow.h" 11ed01e436SSerhii Iliushyk #include "rte_flow_driver.h" 12e02fdb65SSerhii Iliushyk 13e02fdb65SSerhii Iliushyk /* Max RSS hash key length in bytes */ 14e02fdb65SSerhii Iliushyk #define MAX_RSS_KEY_LEN 40 15e02fdb65SSerhii Iliushyk 167fa0bf29SDanylo Vodopianov /* NT specific MASKs for RSS configuration */ 177fa0bf29SDanylo Vodopianov /* NOTE: Masks are required for correct RSS configuration, do not modify them! */ 187fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_IPV4_MASK \ 197fa0bf29SDanylo Vodopianov (RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_NONFRAG_IPV4_OTHER | \ 207fa0bf29SDanylo Vodopianov RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_NONFRAG_IPV4_TCP | \ 217fa0bf29SDanylo Vodopianov RTE_ETH_RSS_NONFRAG_IPV4_UDP) 227fa0bf29SDanylo Vodopianov 237fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_IPV6_MASK \ 247fa0bf29SDanylo Vodopianov (RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_IPV6_EX | \ 257fa0bf29SDanylo Vodopianov RTE_ETH_RSS_IPV6_TCP_EX | RTE_ETH_RSS_IPV6_UDP_EX | RTE_ETH_RSS_NONFRAG_IPV6_OTHER | \ 267fa0bf29SDanylo Vodopianov RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_NONFRAG_IPV6_TCP | \ 277fa0bf29SDanylo Vodopianov RTE_ETH_RSS_NONFRAG_IPV6_UDP) 287fa0bf29SDanylo Vodopianov 297fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_IP_MASK \ 307fa0bf29SDanylo Vodopianov (NT_ETH_RSS_IPV4_MASK | NT_ETH_RSS_IPV6_MASK | RTE_ETH_RSS_L3_SRC_ONLY | \ 317fa0bf29SDanylo Vodopianov RTE_ETH_RSS_L3_DST_ONLY) 327fa0bf29SDanylo Vodopianov 337fa0bf29SDanylo Vodopianov /* List of all RSS flags supported for RSS calculation offload */ 347fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_OFFLOAD_MASK \ 357fa0bf29SDanylo Vodopianov (RTE_ETH_RSS_ETH | RTE_ETH_RSS_L2_PAYLOAD | RTE_ETH_RSS_IP | RTE_ETH_RSS_TCP | \ 367fa0bf29SDanylo Vodopianov RTE_ETH_RSS_UDP | RTE_ETH_RSS_SCTP | RTE_ETH_RSS_L2_SRC_ONLY | RTE_ETH_RSS_L2_DST_ONLY | \ 377fa0bf29SDanylo Vodopianov RTE_ETH_RSS_L4_SRC_ONLY | RTE_ETH_RSS_L4_DST_ONLY | RTE_ETH_RSS_L3_SRC_ONLY | \ 387fa0bf29SDanylo Vodopianov RTE_ETH_RSS_L3_DST_ONLY | RTE_ETH_RSS_VLAN | RTE_ETH_RSS_LEVEL_MASK | \ 397fa0bf29SDanylo Vodopianov RTE_ETH_RSS_IPV4_CHKSUM | RTE_ETH_RSS_L4_CHKSUM | RTE_ETH_RSS_PORT | RTE_ETH_RSS_GTPU) 407fa0bf29SDanylo Vodopianov 411d3f62a0SOleksandr Kolomeiets /* 421d3f62a0SOleksandr Kolomeiets * Flow frontend for binary programming interface 431d3f62a0SOleksandr Kolomeiets */ 441d3f62a0SOleksandr Kolomeiets 451d3f62a0SOleksandr Kolomeiets #define FLOW_MAX_QUEUES 128 461d3f62a0SOleksandr Kolomeiets 47c6821abfSDanylo Vodopianov #define RAW_ENCAP_DECAP_ELEMS_MAX 16 48*effa0469SDanylo Vodopianov 49*effa0469SDanylo Vodopianov extern uint64_t rte_tsc_freq; 50*effa0469SDanylo Vodopianov extern rte_spinlock_t hwlock; 51*effa0469SDanylo Vodopianov 52b01eb812SDanylo Vodopianov /* 53b01eb812SDanylo Vodopianov * Flow eth dev profile determines how the FPGA module resources are 54b01eb812SDanylo Vodopianov * managed and what features are available 55b01eb812SDanylo Vodopianov */ 56b01eb812SDanylo Vodopianov enum flow_eth_dev_profile { 57b01eb812SDanylo Vodopianov FLOW_ETH_DEV_PROFILE_INLINE = 0, 58b01eb812SDanylo Vodopianov }; 59b01eb812SDanylo Vodopianov 601d3f62a0SOleksandr Kolomeiets struct flow_queue_id_s { 611d3f62a0SOleksandr Kolomeiets int id; 621d3f62a0SOleksandr Kolomeiets int hw_id; 631d3f62a0SOleksandr Kolomeiets }; 641d3f62a0SOleksandr Kolomeiets 65c6821abfSDanylo Vodopianov /* 66c6821abfSDanylo Vodopianov * RTE_FLOW_ACTION_TYPE_RAW_ENCAP 67c6821abfSDanylo Vodopianov */ 68c6821abfSDanylo Vodopianov struct flow_action_raw_encap { 69c6821abfSDanylo Vodopianov uint8_t *data; 70c6821abfSDanylo Vodopianov uint8_t *preserve; 71c6821abfSDanylo Vodopianov size_t size; 72c6821abfSDanylo Vodopianov struct rte_flow_item items[RAW_ENCAP_DECAP_ELEMS_MAX]; 73c6821abfSDanylo Vodopianov int item_count; 74c6821abfSDanylo Vodopianov }; 75c6821abfSDanylo Vodopianov 76c6821abfSDanylo Vodopianov /* 77c6821abfSDanylo Vodopianov * RTE_FLOW_ACTION_TYPE_RAW_DECAP 78c6821abfSDanylo Vodopianov */ 79c6821abfSDanylo Vodopianov struct flow_action_raw_decap { 80c6821abfSDanylo Vodopianov uint8_t *data; 81c6821abfSDanylo Vodopianov size_t size; 82c6821abfSDanylo Vodopianov struct rte_flow_item items[RAW_ENCAP_DECAP_ELEMS_MAX]; 83c6821abfSDanylo Vodopianov int item_count; 84c6821abfSDanylo Vodopianov }; 85c6821abfSDanylo Vodopianov 861d3f62a0SOleksandr Kolomeiets struct flow_eth_dev; /* port device */ 87b01eb812SDanylo Vodopianov struct flow_handle; 881d3f62a0SOleksandr Kolomeiets 891d3f62a0SOleksandr Kolomeiets #endif /* _STREAM_BINARY_FLOW_API_H_ */ 90