1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019 Intel Corporation 3 */ 4 5 #ifndef _IAVF_GENERIC_FLOW_H_ 6 #define _IAVF_GENERIC_FLOW_H_ 7 8 #include <rte_flow_driver.h> 9 10 /* protocol */ 11 12 #define IAVF_PROT_MAC_INNER (1ULL << 1) 13 #define IAVF_PROT_MAC_OUTER (1ULL << 2) 14 #define IAVF_PROT_VLAN_INNER (1ULL << 3) 15 #define IAVF_PROT_VLAN_OUTER (1ULL << 4) 16 #define IAVF_PROT_IPV4_INNER (1ULL << 5) 17 #define IAVF_PROT_IPV4_OUTER (1ULL << 6) 18 #define IAVF_PROT_IPV6_INNER (1ULL << 7) 19 #define IAVF_PROT_IPV6_OUTER (1ULL << 8) 20 #define IAVF_PROT_TCP_INNER (1ULL << 9) 21 #define IAVF_PROT_TCP_OUTER (1ULL << 10) 22 #define IAVF_PROT_UDP_INNER (1ULL << 11) 23 #define IAVF_PROT_UDP_OUTER (1ULL << 12) 24 #define IAVF_PROT_SCTP_INNER (1ULL << 13) 25 #define IAVF_PROT_SCTP_OUTER (1ULL << 14) 26 #define IAVF_PROT_ICMP4_INNER (1ULL << 15) 27 #define IAVF_PROT_ICMP4_OUTER (1ULL << 16) 28 #define IAVF_PROT_ICMP6_INNER (1ULL << 17) 29 #define IAVF_PROT_ICMP6_OUTER (1ULL << 18) 30 #define IAVF_PROT_VXLAN (1ULL << 19) 31 #define IAVF_PROT_NVGRE (1ULL << 20) 32 #define IAVF_PROT_GTPU (1ULL << 21) 33 #define IAVF_PROT_ESP (1ULL << 22) 34 #define IAVF_PROT_AH (1ULL << 23) 35 #define IAVF_PROT_L2TPV3OIP (1ULL << 24) 36 #define IAVF_PROT_PFCP (1ULL << 25) 37 #define IAVF_PROT_ECPRI (1ULL << 26) 38 #define IAVF_PROT_L2TPV2 (1ULL << 27) 39 40 41 /* field */ 42 43 #define IAVF_SMAC (1ULL << 63) 44 #define IAVF_DMAC (1ULL << 62) 45 #define IAVF_ETHERTYPE (1ULL << 61) 46 #define IAVF_IP_SRC (1ULL << 60) 47 #define IAVF_IP_DST (1ULL << 59) 48 #define IAVF_IP_PROTO (1ULL << 58) 49 #define IAVF_IP_TTL (1ULL << 57) 50 #define IAVF_IP_TOS (1ULL << 56) 51 #define IAVF_SPORT (1ULL << 55) 52 #define IAVF_DPORT (1ULL << 54) 53 #define IAVF_ICMP_TYPE (1ULL << 53) 54 #define IAVF_ICMP_CODE (1ULL << 52) 55 #define IAVF_VXLAN_VNI (1ULL << 51) 56 #define IAVF_NVGRE_TNI (1ULL << 50) 57 #define IAVF_GTPU_TEID (1ULL << 49) 58 #define IAVF_GTPU_QFI (1ULL << 48) 59 #define IAVF_ESP_SPI (1ULL << 47) 60 #define IAVF_AH_SPI (1ULL << 46) 61 #define IAVF_L2TPV3OIP_SESSION_ID (1ULL << 45) 62 #define IAVF_PFCP_S_FIELD (1ULL << 44) 63 #define IAVF_PFCP_SEID (1ULL << 43) 64 #define IAVF_ECPRI_PC_RTC_ID (1ULL << 42) 65 #define IAVF_IP_PKID (1ULL << 41) 66 #define IAVF_L2TPV2_SESSION_ID (1ULL << 40) 67 68 /* input set */ 69 70 #define IAVF_INSET_NONE 0ULL 71 72 /* non-tunnel */ 73 74 #define IAVF_INSET_SMAC (IAVF_PROT_MAC_OUTER | IAVF_SMAC) 75 #define IAVF_INSET_DMAC (IAVF_PROT_MAC_OUTER | IAVF_DMAC) 76 #define IAVF_INSET_VLAN_INNER (IAVF_PROT_VLAN_INNER) 77 #define IAVF_INSET_VLAN_OUTER (IAVF_PROT_VLAN_OUTER) 78 #define IAVF_INSET_ETHERTYPE (IAVF_ETHERTYPE) 79 80 #define IAVF_INSET_IPV4_SRC \ 81 (IAVF_PROT_IPV4_OUTER | IAVF_IP_SRC) 82 #define IAVF_INSET_IPV4_DST \ 83 (IAVF_PROT_IPV4_OUTER | IAVF_IP_DST) 84 #define IAVF_INSET_IPV4_TOS \ 85 (IAVF_PROT_IPV4_OUTER | IAVF_IP_TOS) 86 #define IAVF_INSET_IPV4_PROTO \ 87 (IAVF_PROT_IPV4_OUTER | IAVF_IP_PROTO) 88 #define IAVF_INSET_IPV4_TTL \ 89 (IAVF_PROT_IPV4_OUTER | IAVF_IP_TTL) 90 #define IAVF_INSET_IPV4_ID \ 91 (IAVF_PROT_IPV4_OUTER | IAVF_IP_PKID) 92 #define IAVF_INSET_IPV6_SRC \ 93 (IAVF_PROT_IPV6_OUTER | IAVF_IP_SRC) 94 #define IAVF_INSET_IPV6_DST \ 95 (IAVF_PROT_IPV6_OUTER | IAVF_IP_DST) 96 #define IAVF_INSET_IPV6_NEXT_HDR \ 97 (IAVF_PROT_IPV6_OUTER | IAVF_IP_PROTO) 98 #define IAVF_INSET_IPV6_HOP_LIMIT \ 99 (IAVF_PROT_IPV6_OUTER | IAVF_IP_TTL) 100 #define IAVF_INSET_IPV6_TC \ 101 (IAVF_PROT_IPV6_OUTER | IAVF_IP_TOS) 102 #define IAVF_INSET_IPV6_ID \ 103 (IAVF_PROT_IPV6_OUTER | IAVF_IP_PKID) 104 105 #define IAVF_INSET_TUN_IPV4_SRC \ 106 (IAVF_PROT_IPV4_INNER | IAVF_IP_SRC) 107 #define IAVF_INSET_TUN_IPV4_DST \ 108 (IAVF_PROT_IPV4_INNER | IAVF_IP_DST) 109 #define IAVF_INSET_TUN_IPV4_TOS \ 110 (IAVF_PROT_IPV4_INNER | IAVF_IP_TOS) 111 #define IAVF_INSET_TUN_IPV4_PROTO \ 112 (IAVF_PROT_IPV4_INNER | IAVF_IP_PROTO) 113 #define IAVF_INSET_TUN_IPV4_TTL \ 114 (IAVF_PROT_IPV4_INNER | IAVF_IP_TTL) 115 #define IAVF_INSET_TUN_IPV6_SRC \ 116 (IAVF_PROT_IPV6_INNER | IAVF_IP_SRC) 117 #define IAVF_INSET_TUN_IPV6_DST \ 118 (IAVF_PROT_IPV6_INNER | IAVF_IP_DST) 119 #define IAVF_INSET_TUN_IPV6_NEXT_HDR \ 120 (IAVF_PROT_IPV6_INNER | IAVF_IP_PROTO) 121 #define IAVF_INSET_TUN_IPV6_HOP_LIMIT \ 122 (IAVF_PROT_IPV6_INNER | IAVF_IP_TTL) 123 #define IAVF_INSET_TUN_IPV6_TC \ 124 (IAVF_PROT_IPV6_INNER | IAVF_IP_TOS) 125 126 #define IAVF_INSET_TCP_SRC_PORT \ 127 (IAVF_PROT_TCP_OUTER | IAVF_SPORT) 128 #define IAVF_INSET_TCP_DST_PORT \ 129 (IAVF_PROT_TCP_OUTER | IAVF_DPORT) 130 #define IAVF_INSET_UDP_SRC_PORT \ 131 (IAVF_PROT_UDP_OUTER | IAVF_SPORT) 132 #define IAVF_INSET_UDP_DST_PORT \ 133 (IAVF_PROT_UDP_OUTER | IAVF_DPORT) 134 135 #define IAVF_INSET_TUN_TCP_SRC_PORT \ 136 (IAVF_PROT_TCP_INNER | IAVF_SPORT) 137 #define IAVF_INSET_TUN_TCP_DST_PORT \ 138 (IAVF_PROT_TCP_INNER | IAVF_DPORT) 139 #define IAVF_INSET_TUN_UDP_SRC_PORT \ 140 (IAVF_PROT_UDP_INNER | IAVF_SPORT) 141 #define IAVF_INSET_TUN_UDP_DST_PORT \ 142 (IAVF_PROT_UDP_INNER | IAVF_DPORT) 143 144 #define IAVF_INSET_SCTP_SRC_PORT \ 145 (IAVF_PROT_SCTP_OUTER | IAVF_SPORT) 146 #define IAVF_INSET_SCTP_DST_PORT \ 147 (IAVF_PROT_SCTP_OUTER | IAVF_DPORT) 148 #define IAVF_INSET_ICMP4_SRC_PORT \ 149 (IAVF_PROT_ICMP4_OUTER | IAVF_SPORT) 150 #define IAVF_INSET_ICMP4_DST_PORT \ 151 (IAVF_PROT_ICMP4_OUTER | IAVF_DPORT) 152 #define IAVF_INSET_ICMP6_SRC_PORT \ 153 (IAVF_PROT_ICMP6_OUTER | IAVF_SPORT) 154 #define IAVF_INSET_ICMP6_DST_PORT \ 155 (IAVF_PROT_ICMP6_OUTER | IAVF_DPORT) 156 #define IAVF_INSET_ICMP4_TYPE \ 157 (IAVF_PROT_ICMP4_OUTER | IAVF_ICMP_TYPE) 158 #define IAVF_INSET_ICMP4_CODE \ 159 (IAVF_PROT_ICMP4_OUTER | IAVF_ICMP_CODE) 160 #define IAVF_INSET_ICMP6_TYPE \ 161 (IAVF_PROT_ICMP6_OUTER | IAVF_ICMP_TYPE) 162 #define IAVF_INSET_ICMP6_CODE \ 163 (IAVF_PROT_ICMP6_OUTER | IAVF_ICMP_CODE) 164 #define IAVF_INSET_GTPU_TEID \ 165 (IAVF_PROT_GTPU | IAVF_GTPU_TEID) 166 #define IAVF_INSET_GTPU_QFI \ 167 (IAVF_PROT_GTPU | IAVF_GTPU_QFI) 168 #define IAVF_INSET_ESP_SPI \ 169 (IAVF_PROT_ESP | IAVF_ESP_SPI) 170 #define IAVF_INSET_AH_SPI \ 171 (IAVF_PROT_AH | IAVF_AH_SPI) 172 #define IAVF_INSET_L2TPV3OIP_SESSION_ID \ 173 (IAVF_PROT_L2TPV3OIP | IAVF_L2TPV3OIP_SESSION_ID) 174 #define IAVF_INSET_PFCP_S_FIELD \ 175 (IAVF_PROT_PFCP | IAVF_PFCP_S_FIELD) 176 #define IAVF_INSET_PFCP_SEID \ 177 (IAVF_PROT_PFCP | IAVF_PFCP_S_FIELD | IAVF_PFCP_SEID) 178 #define IAVF_INSET_ECPRI \ 179 (IAVF_PROT_ECPRI | IAVF_ECPRI_PC_RTC_ID) 180 #define IAVF_INSET_L2TPV2 \ 181 (IAVF_PROT_L2TPV2 | IAVF_L2TPV2_SESSION_ID) 182 183 /* empty pattern */ 184 extern enum rte_flow_item_type iavf_pattern_empty[]; 185 186 /* L2 */ 187 extern enum rte_flow_item_type iavf_pattern_ethertype[]; 188 extern enum rte_flow_item_type iavf_pattern_ethertype_vlan[]; 189 extern enum rte_flow_item_type iavf_pattern_ethertype_qinq[]; 190 191 /* ARP */ 192 extern enum rte_flow_item_type iavf_pattern_eth_arp[]; 193 194 /* non-tunnel IPv4 */ 195 extern enum rte_flow_item_type iavf_pattern_eth_ipv4[]; 196 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv4[]; 197 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv4[]; 198 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp[]; 199 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv4_udp[]; 200 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv4_udp[]; 201 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_tcp[]; 202 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv4_tcp[]; 203 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv4_tcp[]; 204 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_sctp[]; 205 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv4_sctp[]; 206 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv4_sctp[]; 207 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_icmp[]; 208 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv4_icmp[]; 209 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv4_icmp[]; 210 211 /* non-tunnel IPv6 */ 212 extern enum rte_flow_item_type iavf_pattern_eth_ipv6[]; 213 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6[]; 214 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6[]; 215 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_frag_ext[]; 216 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6_frag_ext[]; 217 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6_frag_ext[]; 218 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp[]; 219 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6_udp[]; 220 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6_udp[]; 221 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_tcp[]; 222 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6_tcp[]; 223 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6_tcp[]; 224 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_sctp[]; 225 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6_sctp[]; 226 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6_sctp[]; 227 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_icmp6[]; 228 extern enum rte_flow_item_type iavf_pattern_eth_vlan_ipv6_icmp6[]; 229 extern enum rte_flow_item_type iavf_pattern_eth_qinq_ipv6_icmp6[]; 230 231 /* IPv4 GTPC */ 232 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpc[]; 233 234 /* IPv4 GTPU (EH) */ 235 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu[]; 236 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh[]; 237 238 /* IPv6 GTPC */ 239 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpc[]; 240 241 /* IPv6 GTPU (EH) */ 242 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu[]; 243 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh[]; 244 245 /* IPv4 GTPU IPv4 */ 246 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv4[]; 247 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv4_udp[]; 248 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv4_tcp[]; 249 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv4_icmp[]; 250 251 /* IPv4 GRE IPv4 UDP GTPU IPv4 */ 252 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu[]; 253 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4[]; 254 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4_udp[]; 255 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv4_tcp[]; 256 257 /* IPv4 GRE IPv4 UDP GTPU IPv6 */ 258 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6[]; 259 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6_udp[]; 260 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_ipv6_tcp[]; 261 262 /* IPv4 GRE IPv6 UDP GTPU IPv4 */ 263 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu[]; 264 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4[]; 265 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4_udp[]; 266 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv4_tcp[]; 267 268 /* IPv4 GRE IPv6 UDP GTPU IPv6 */ 269 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6[]; 270 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6_udp[]; 271 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_ipv6_tcp[]; 272 273 /* IPv6 GRE IPv4 UDP GTPU IPv4 */ 274 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu[]; 275 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4[]; 276 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4_udp[]; 277 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv4_tcp[]; 278 279 /* IPv6 GRE IPv4 UDP GTPU IPv6 */ 280 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6[]; 281 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6_udp[]; 282 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_ipv6_tcp[]; 283 284 /* IPv6 GRE IPv6 UDP GTPU IPv4 */ 285 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu[]; 286 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4[]; 287 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4_udp[]; 288 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv4_tcp[]; 289 290 /* IPv6 GRE IPv6 UDP GTPU IPv6 */ 291 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6[]; 292 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6_udp[]; 293 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_ipv6_tcp[]; 294 295 /* IPv4 GRE IPv4 UDP GTPU EH IPv4 */ 296 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh[]; 297 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4[]; 298 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4_udp[]; 299 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv4_tcp[]; 300 301 /* IPv4 GRE IPv4 UDP GTPU EH IPv6 */ 302 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6[]; 303 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6_udp[]; 304 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_gtpu_eh_ipv6_tcp[]; 305 306 /* IPv4 GRE IPv6 UDP GTPU EH IPv4 */ 307 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh[]; 308 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4[]; 309 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4_udp[]; 310 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv4_tcp[]; 311 312 /* IPv4 GRE IPv6 UDP GTPU EH IPv6 */ 313 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6[]; 314 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6_udp[]; 315 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_gtpu_eh_ipv6_tcp[]; 316 317 /* IPv6 GRE IPv4 UDP GTPU EH IPv4 */ 318 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh[]; 319 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4[]; 320 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4_udp[]; 321 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv4_tcp[]; 322 323 /* IPv6 GRE IPv4 UDP GTPU EH IPv6 */ 324 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6[]; 325 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6_udp[]; 326 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_gtpu_eh_ipv6_tcp[]; 327 328 /* IPv6 GRE IPv6 UDP GTPU EH IPv4 */ 329 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh[]; 330 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4[]; 331 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4_udp[]; 332 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv4_tcp[]; 333 334 /* IPv6 GRE IPv6 UDP GTPU EH IPv6 */ 335 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6[]; 336 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6_udp[]; 337 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_gtpu_eh_ipv6_tcp[]; 338 339 /* IPv4 GTPU IPv6 */ 340 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv6[]; 341 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv6_udp[]; 342 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv6_tcp[]; 343 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_ipv6_icmp[]; 344 345 /* IPv6 GTPU IPv4 */ 346 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv4[]; 347 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv4_udp[]; 348 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv4_tcp[]; 349 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv4_icmp[]; 350 351 /* IPv6 GTPU IPv6 */ 352 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv6[]; 353 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv6_udp[]; 354 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv6_tcp[]; 355 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_ipv6_icmp[]; 356 357 /* IPv4 GTPU EH IPv4 */ 358 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv4[]; 359 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv4_udp[]; 360 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv4_tcp[]; 361 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv4_icmp[]; 362 363 /* IPv4 GTPU EH IPv6 */ 364 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv6[]; 365 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv6_udp[]; 366 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv6_tcp[]; 367 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gtpu_eh_ipv6_icmp[]; 368 369 /* IPv6 GTPU EH IPv4 */ 370 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv4[]; 371 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv4_udp[]; 372 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv4_tcp[]; 373 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv4_icmp[]; 374 375 /* IPv6 GTPU EH IPv6 */ 376 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv6[]; 377 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv6_udp[]; 378 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv6_tcp[]; 379 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gtpu_eh_ipv6_icmp[]; 380 381 /* ESP */ 382 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_esp[]; 383 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_esp[]; 384 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_esp[]; 385 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_esp[]; 386 387 /* AH */ 388 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_ah[]; 389 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_ah[]; 390 391 /* L2TPV3 */ 392 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_l2tpv3[]; 393 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_l2tpv3[]; 394 395 /* PFCP */ 396 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_pfcp[]; 397 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_pfcp[]; 398 399 /* ECPRI */ 400 extern enum rte_flow_item_type iavf_pattern_eth_ecpri[]; 401 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_ecpri[]; 402 403 /* GRE */ 404 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4[]; 405 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6[]; 406 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4[]; 407 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6[]; 408 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_tcp[]; 409 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_tcp[]; 410 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv4_udp[]; 411 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_gre_ipv6_udp[]; 412 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_tcp[]; 413 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_tcp[]; 414 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv4_udp[]; 415 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_gre_ipv6_udp[]; 416 417 /* L2TPv2 */ 418 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2[]; 419 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp[]; 420 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2[]; 421 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp[]; 422 423 /* PPPoL2TPv2oUDP */ 424 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4[]; 425 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6[]; 426 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_udp[]; 427 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_tcp[]; 428 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_udp[]; 429 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp[]; 430 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4[]; 431 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6[]; 432 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_udp[]; 433 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_tcp[]; 434 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_udp[]; 435 extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_tcp[]; 436 437 438 extern const struct rte_flow_ops iavf_flow_ops; 439 440 /* pattern structure */ 441 struct iavf_pattern_match_item { 442 enum rte_flow_item_type *pattern_list; 443 /* pattern_list must end with RTE_FLOW_ITEM_TYPE_END */ 444 uint64_t input_set_mask; 445 void *meta; 446 }; 447 448 typedef int (*engine_init_t)(struct iavf_adapter *ad); 449 typedef void (*engine_uninit_t)(struct iavf_adapter *ad); 450 typedef int (*engine_validation_t)(struct iavf_adapter *ad, 451 struct rte_flow *flow, 452 void *meta, 453 struct rte_flow_error *error); 454 typedef int (*engine_create_t)(struct iavf_adapter *ad, 455 struct rte_flow *flow, 456 void *meta, 457 struct rte_flow_error *error); 458 typedef int (*engine_destroy_t)(struct iavf_adapter *ad, 459 struct rte_flow *flow, 460 struct rte_flow_error *error); 461 typedef int (*engine_query_t)(struct iavf_adapter *ad, 462 struct rte_flow *flow, 463 struct rte_flow_query_count *count, 464 struct rte_flow_error *error); 465 typedef void (*engine_free_t) (struct rte_flow *flow); 466 typedef int (*parse_pattern_action_t)(struct iavf_adapter *ad, 467 struct iavf_pattern_match_item *array, 468 uint32_t array_len, 469 const struct rte_flow_item pattern[], 470 const struct rte_flow_action actions[], 471 void **meta, 472 struct rte_flow_error *error); 473 474 /* engine types. */ 475 enum iavf_flow_engine_type { 476 IAVF_FLOW_ENGINE_NONE = 0, 477 IAVF_FLOW_ENGINE_IPSEC_CRYPTO, 478 IAVF_FLOW_ENGINE_FDIR, 479 IAVF_FLOW_ENGINE_HASH, 480 IAVF_FLOW_ENGINE_MAX, 481 }; 482 483 /** 484 * classification stages. 485 * for non-pipeline mode, we have two classification stages: Distributor/RSS 486 * for pipeline-mode we have three classification stages: 487 * Permission/Distributor/RSS 488 */ 489 enum iavf_flow_classification_stage { 490 IAVF_FLOW_STAGE_NONE = 0, 491 IAVF_FLOW_STAGE_IPSEC_CRYPTO, 492 IAVF_FLOW_STAGE_RSS, 493 IAVF_FLOW_STAGE_DISTRIBUTOR, 494 IAVF_FLOW_STAGE_MAX, 495 }; 496 497 /* Struct to store engine created. */ 498 struct iavf_flow_engine { 499 TAILQ_ENTRY(iavf_flow_engine) node; 500 engine_init_t init; 501 engine_uninit_t uninit; 502 engine_validation_t validation; 503 engine_create_t create; 504 engine_destroy_t destroy; 505 engine_query_t query_count; 506 engine_free_t free; 507 enum iavf_flow_engine_type type; 508 }; 509 510 TAILQ_HEAD(iavf_engine_list, iavf_flow_engine); 511 512 /* Struct to store flow created. */ 513 struct rte_flow { 514 TAILQ_ENTRY(rte_flow) node; 515 struct iavf_flow_engine *engine; 516 void *rule; 517 }; 518 519 struct iavf_flow_parser { 520 struct iavf_flow_engine *engine; 521 struct iavf_pattern_match_item *array; 522 uint32_t array_len; 523 parse_pattern_action_t parse_pattern_action; 524 enum iavf_flow_classification_stage stage; 525 }; 526 527 /* Struct to store parser created. */ 528 struct iavf_flow_parser_node { 529 TAILQ_ENTRY(iavf_flow_parser_node) node; 530 struct iavf_flow_parser *parser; 531 }; 532 533 void iavf_register_flow_engine(struct iavf_flow_engine *engine); 534 int iavf_flow_init(struct iavf_adapter *ad); 535 void iavf_flow_uninit(struct iavf_adapter *ad); 536 int iavf_flow_flush(struct rte_eth_dev *dev, 537 struct rte_flow_error *error); 538 int iavf_register_parser(struct iavf_flow_parser *parser, 539 struct iavf_adapter *ad); 540 void iavf_unregister_parser(struct iavf_flow_parser *parser, 541 struct iavf_adapter *ad); 542 struct iavf_pattern_match_item * 543 iavf_search_pattern_match_item(const struct rte_flow_item pattern[], 544 struct iavf_pattern_match_item *array, 545 uint32_t array_len, 546 struct rte_flow_error *error); 547 #endif 548