1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019 Intel Corporation 3 */ 4 5 #ifndef _ICE_GENERIC_FLOW_H_ 6 #define _ICE_GENERIC_FLOW_H_ 7 8 #include <rte_flow_driver.h> 9 10 struct ice_flow_pattern { 11 enum rte_flow_item_type *items; 12 uint64_t sw_fields; 13 }; 14 15 #define ICE_INSET_NONE 0x00000000000000000ULL 16 17 /* bit0 ~ bit 7 */ 18 #define ICE_INSET_SMAC 0x0000000000000001ULL 19 #define ICE_INSET_DMAC 0x0000000000000002ULL 20 #define ICE_INSET_ETHERTYPE 0x0000000000000020ULL 21 22 /* bit 8 ~ bit 15 */ 23 #define ICE_INSET_IPV4_SRC 0x0000000000000100ULL 24 #define ICE_INSET_IPV4_DST 0x0000000000000200ULL 25 #define ICE_INSET_IPV6_SRC 0x0000000000000400ULL 26 #define ICE_INSET_IPV6_DST 0x0000000000000800ULL 27 #define ICE_INSET_SRC_PORT 0x0000000000001000ULL 28 #define ICE_INSET_DST_PORT 0x0000000000002000ULL 29 #define ICE_INSET_ARP 0x0000000000004000ULL 30 31 /* bit 16 ~ bit 31 */ 32 #define ICE_INSET_IPV4_TOS 0x0000000000010000ULL 33 #define ICE_INSET_IPV4_PROTO 0x0000000000020000ULL 34 #define ICE_INSET_IPV4_TTL 0x0000000000040000ULL 35 #define ICE_INSET_IPV6_TOS 0x0000000000100000ULL 36 #define ICE_INSET_IPV6_PROTO 0x0000000000200000ULL 37 #define ICE_INSET_IPV6_HOP_LIMIT 0x0000000000400000ULL 38 #define ICE_INSET_ICMP 0x0000000001000000ULL 39 #define ICE_INSET_ICMP6 0x0000000002000000ULL 40 41 /* bit 32 ~ bit 47, tunnel fields */ 42 #define ICE_INSET_TUN_SMAC 0x0000000100000000ULL 43 #define ICE_INSET_TUN_DMAC 0x0000000200000000ULL 44 #define ICE_INSET_TUN_IPV4_SRC 0x0000000400000000ULL 45 #define ICE_INSET_TUN_IPV4_DST 0x0000000800000000ULL 46 #define ICE_INSET_TUN_IPV4_TTL 0x0000001000000000ULL 47 #define ICE_INSET_TUN_IPV4_PROTO 0x0000002000000000ULL 48 #define ICE_INSET_TUN_IPV6_SRC 0x0000004000000000ULL 49 #define ICE_INSET_TUN_IPV6_DST 0x0000008000000000ULL 50 #define ICE_INSET_TUN_IPV6_TTL 0x0000010000000000ULL 51 #define ICE_INSET_TUN_IPV6_PROTO 0x0000020000000000ULL 52 #define ICE_INSET_TUN_SRC_PORT 0x0000040000000000ULL 53 #define ICE_INSET_TUN_DST_PORT 0x0000080000000000ULL 54 #define ICE_INSET_TUN_ID 0x0000100000000000ULL 55 56 /* bit 48 ~ bit 55 */ 57 #define ICE_INSET_LAST_ETHER_TYPE 0x0001000000000000ULL 58 59 #define ICE_FLAG_VLAN_INNER 0x00000001ULL 60 #define ICE_FLAG_VLAN_OUTER 0x00000002ULL 61 62 #define INSET_ETHER ( \ 63 ICE_INSET_DMAC | ICE_INSET_SMAC | ICE_INSET_ETHERTYPE) 64 #define INSET_MAC_IPV4 ( \ 65 ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \ 66 ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS) 67 #define INSET_MAC_IPV4_L4 ( \ 68 ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \ 69 ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS | ICE_INSET_DST_PORT | \ 70 ICE_INSET_SRC_PORT) 71 #define INSET_MAC_IPV4_ICMP ( \ 72 ICE_INSET_DMAC | ICE_INSET_IPV4_DST | ICE_INSET_IPV4_SRC | \ 73 ICE_INSET_IPV4_TTL | ICE_INSET_IPV4_TOS | ICE_INSET_ICMP) 74 #define INSET_MAC_IPV6 ( \ 75 ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \ 76 ICE_INSET_IPV6_TOS | ICE_INSET_IPV6_HOP_LIMIT) 77 #define INSET_MAC_IPV6_L4 ( \ 78 ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \ 79 ICE_INSET_IPV6_HOP_LIMIT | ICE_INSET_IPV6_TOS | \ 80 ICE_INSET_DST_PORT | ICE_INSET_SRC_PORT) 81 #define INSET_MAC_IPV6_ICMP ( \ 82 ICE_INSET_DMAC | ICE_INSET_IPV6_DST | ICE_INSET_IPV6_SRC | \ 83 ICE_INSET_IPV6_HOP_LIMIT | ICE_INSET_IPV6_TOS | ICE_INSET_ICMP6) 84 #define INSET_TUNNEL_IPV4_TYPE1 ( \ 85 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \ 86 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO) 87 #define INSET_TUNNEL_IPV4_TYPE2 ( \ 88 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \ 89 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_TUN_IPV4_PROTO | \ 90 ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT) 91 #define INSET_TUNNEL_IPV4_TYPE3 ( \ 92 ICE_INSET_TUN_IPV4_SRC | ICE_INSET_TUN_IPV4_DST | \ 93 ICE_INSET_TUN_IPV4_TTL | ICE_INSET_ICMP) 94 #define INSET_TUNNEL_IPV6_TYPE1 ( \ 95 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \ 96 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO) 97 #define INSET_TUNNEL_IPV6_TYPE2 ( \ 98 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \ 99 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_TUN_IPV6_PROTO | \ 100 ICE_INSET_TUN_SRC_PORT | ICE_INSET_TUN_DST_PORT) 101 #define INSET_TUNNEL_IPV6_TYPE3 ( \ 102 ICE_INSET_TUN_IPV6_SRC | ICE_INSET_TUN_IPV6_DST | \ 103 ICE_INSET_TUN_IPV6_TTL | ICE_INSET_ICMP6) 104 105 /* L2 */ 106 static enum rte_flow_item_type pattern_ethertype[] = { 107 RTE_FLOW_ITEM_TYPE_ETH, 108 RTE_FLOW_ITEM_TYPE_END, 109 }; 110 111 /* non-tunnel IPv4 */ 112 static enum rte_flow_item_type pattern_ipv4[] = { 113 RTE_FLOW_ITEM_TYPE_ETH, 114 RTE_FLOW_ITEM_TYPE_IPV4, 115 RTE_FLOW_ITEM_TYPE_END, 116 }; 117 118 static enum rte_flow_item_type pattern_ipv4_udp[] = { 119 RTE_FLOW_ITEM_TYPE_ETH, 120 RTE_FLOW_ITEM_TYPE_IPV4, 121 RTE_FLOW_ITEM_TYPE_UDP, 122 RTE_FLOW_ITEM_TYPE_END, 123 }; 124 125 static enum rte_flow_item_type pattern_ipv4_tcp[] = { 126 RTE_FLOW_ITEM_TYPE_ETH, 127 RTE_FLOW_ITEM_TYPE_IPV4, 128 RTE_FLOW_ITEM_TYPE_TCP, 129 RTE_FLOW_ITEM_TYPE_END, 130 }; 131 132 static enum rte_flow_item_type pattern_ipv4_sctp[] = { 133 RTE_FLOW_ITEM_TYPE_ETH, 134 RTE_FLOW_ITEM_TYPE_IPV4, 135 RTE_FLOW_ITEM_TYPE_SCTP, 136 RTE_FLOW_ITEM_TYPE_END, 137 }; 138 139 static enum rte_flow_item_type pattern_ipv4_icmp[] = { 140 RTE_FLOW_ITEM_TYPE_ETH, 141 RTE_FLOW_ITEM_TYPE_IPV4, 142 RTE_FLOW_ITEM_TYPE_ICMP, 143 RTE_FLOW_ITEM_TYPE_END, 144 }; 145 146 /* non-tunnel IPv6 */ 147 static enum rte_flow_item_type pattern_ipv6[] = { 148 RTE_FLOW_ITEM_TYPE_ETH, 149 RTE_FLOW_ITEM_TYPE_IPV6, 150 RTE_FLOW_ITEM_TYPE_END, 151 }; 152 153 static enum rte_flow_item_type pattern_ipv6_udp[] = { 154 RTE_FLOW_ITEM_TYPE_ETH, 155 RTE_FLOW_ITEM_TYPE_IPV6, 156 RTE_FLOW_ITEM_TYPE_UDP, 157 RTE_FLOW_ITEM_TYPE_END, 158 }; 159 160 static enum rte_flow_item_type pattern_ipv6_tcp[] = { 161 RTE_FLOW_ITEM_TYPE_ETH, 162 RTE_FLOW_ITEM_TYPE_IPV6, 163 RTE_FLOW_ITEM_TYPE_TCP, 164 RTE_FLOW_ITEM_TYPE_END, 165 }; 166 167 static enum rte_flow_item_type pattern_ipv6_sctp[] = { 168 RTE_FLOW_ITEM_TYPE_ETH, 169 RTE_FLOW_ITEM_TYPE_IPV6, 170 RTE_FLOW_ITEM_TYPE_SCTP, 171 RTE_FLOW_ITEM_TYPE_END, 172 }; 173 174 static enum rte_flow_item_type pattern_ipv6_icmp6[] = { 175 RTE_FLOW_ITEM_TYPE_ETH, 176 RTE_FLOW_ITEM_TYPE_IPV6, 177 RTE_FLOW_ITEM_TYPE_ICMP6, 178 RTE_FLOW_ITEM_TYPE_END, 179 }; 180 181 /* IPv4 VXLAN IPv4 */ 182 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4[] = { 183 RTE_FLOW_ITEM_TYPE_ETH, 184 RTE_FLOW_ITEM_TYPE_IPV4, 185 RTE_FLOW_ITEM_TYPE_UDP, 186 RTE_FLOW_ITEM_TYPE_VXLAN, 187 RTE_FLOW_ITEM_TYPE_IPV4, 188 RTE_FLOW_ITEM_TYPE_END, 189 }; 190 191 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_udp[] = { 192 RTE_FLOW_ITEM_TYPE_ETH, 193 RTE_FLOW_ITEM_TYPE_IPV4, 194 RTE_FLOW_ITEM_TYPE_UDP, 195 RTE_FLOW_ITEM_TYPE_VXLAN, 196 RTE_FLOW_ITEM_TYPE_IPV4, 197 RTE_FLOW_ITEM_TYPE_UDP, 198 RTE_FLOW_ITEM_TYPE_END, 199 }; 200 201 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_tcp[] = { 202 RTE_FLOW_ITEM_TYPE_ETH, 203 RTE_FLOW_ITEM_TYPE_IPV4, 204 RTE_FLOW_ITEM_TYPE_UDP, 205 RTE_FLOW_ITEM_TYPE_VXLAN, 206 RTE_FLOW_ITEM_TYPE_IPV4, 207 RTE_FLOW_ITEM_TYPE_TCP, 208 RTE_FLOW_ITEM_TYPE_END, 209 }; 210 211 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_sctp[] = { 212 RTE_FLOW_ITEM_TYPE_ETH, 213 RTE_FLOW_ITEM_TYPE_IPV4, 214 RTE_FLOW_ITEM_TYPE_UDP, 215 RTE_FLOW_ITEM_TYPE_VXLAN, 216 RTE_FLOW_ITEM_TYPE_IPV4, 217 RTE_FLOW_ITEM_TYPE_SCTP, 218 RTE_FLOW_ITEM_TYPE_END, 219 }; 220 221 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv4_icmp[] = { 222 RTE_FLOW_ITEM_TYPE_ETH, 223 RTE_FLOW_ITEM_TYPE_IPV4, 224 RTE_FLOW_ITEM_TYPE_UDP, 225 RTE_FLOW_ITEM_TYPE_VXLAN, 226 RTE_FLOW_ITEM_TYPE_IPV4, 227 RTE_FLOW_ITEM_TYPE_ICMP, 228 RTE_FLOW_ITEM_TYPE_END, 229 }; 230 231 /* IPv4 VXLAN MAC IPv4 */ 232 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4[] = { 233 RTE_FLOW_ITEM_TYPE_ETH, 234 RTE_FLOW_ITEM_TYPE_IPV4, 235 RTE_FLOW_ITEM_TYPE_UDP, 236 RTE_FLOW_ITEM_TYPE_VXLAN, 237 RTE_FLOW_ITEM_TYPE_ETH, 238 RTE_FLOW_ITEM_TYPE_IPV4, 239 RTE_FLOW_ITEM_TYPE_END, 240 }; 241 242 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_udp[] = { 243 RTE_FLOW_ITEM_TYPE_ETH, 244 RTE_FLOW_ITEM_TYPE_IPV4, 245 RTE_FLOW_ITEM_TYPE_UDP, 246 RTE_FLOW_ITEM_TYPE_VXLAN, 247 RTE_FLOW_ITEM_TYPE_ETH, 248 RTE_FLOW_ITEM_TYPE_IPV4, 249 RTE_FLOW_ITEM_TYPE_UDP, 250 RTE_FLOW_ITEM_TYPE_END, 251 }; 252 253 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_tcp[] = { 254 RTE_FLOW_ITEM_TYPE_ETH, 255 RTE_FLOW_ITEM_TYPE_IPV4, 256 RTE_FLOW_ITEM_TYPE_UDP, 257 RTE_FLOW_ITEM_TYPE_VXLAN, 258 RTE_FLOW_ITEM_TYPE_ETH, 259 RTE_FLOW_ITEM_TYPE_IPV4, 260 RTE_FLOW_ITEM_TYPE_TCP, 261 RTE_FLOW_ITEM_TYPE_END, 262 }; 263 264 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_sctp[] = { 265 RTE_FLOW_ITEM_TYPE_ETH, 266 RTE_FLOW_ITEM_TYPE_IPV4, 267 RTE_FLOW_ITEM_TYPE_UDP, 268 RTE_FLOW_ITEM_TYPE_VXLAN, 269 RTE_FLOW_ITEM_TYPE_ETH, 270 RTE_FLOW_ITEM_TYPE_IPV4, 271 RTE_FLOW_ITEM_TYPE_SCTP, 272 RTE_FLOW_ITEM_TYPE_END, 273 }; 274 275 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv4_icmp[] = { 276 RTE_FLOW_ITEM_TYPE_ETH, 277 RTE_FLOW_ITEM_TYPE_IPV4, 278 RTE_FLOW_ITEM_TYPE_UDP, 279 RTE_FLOW_ITEM_TYPE_VXLAN, 280 RTE_FLOW_ITEM_TYPE_ETH, 281 RTE_FLOW_ITEM_TYPE_IPV4, 282 RTE_FLOW_ITEM_TYPE_ICMP, 283 RTE_FLOW_ITEM_TYPE_END, 284 }; 285 286 /* IPv4 VXLAN IPv6 */ 287 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6[] = { 288 RTE_FLOW_ITEM_TYPE_ETH, 289 RTE_FLOW_ITEM_TYPE_IPV4, 290 RTE_FLOW_ITEM_TYPE_UDP, 291 RTE_FLOW_ITEM_TYPE_VXLAN, 292 RTE_FLOW_ITEM_TYPE_IPV6, 293 RTE_FLOW_ITEM_TYPE_END, 294 }; 295 296 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_udp[] = { 297 RTE_FLOW_ITEM_TYPE_ETH, 298 RTE_FLOW_ITEM_TYPE_IPV4, 299 RTE_FLOW_ITEM_TYPE_UDP, 300 RTE_FLOW_ITEM_TYPE_VXLAN, 301 RTE_FLOW_ITEM_TYPE_IPV6, 302 RTE_FLOW_ITEM_TYPE_UDP, 303 RTE_FLOW_ITEM_TYPE_END, 304 }; 305 306 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_tcp[] = { 307 RTE_FLOW_ITEM_TYPE_ETH, 308 RTE_FLOW_ITEM_TYPE_IPV4, 309 RTE_FLOW_ITEM_TYPE_UDP, 310 RTE_FLOW_ITEM_TYPE_VXLAN, 311 RTE_FLOW_ITEM_TYPE_IPV6, 312 RTE_FLOW_ITEM_TYPE_TCP, 313 RTE_FLOW_ITEM_TYPE_END, 314 }; 315 316 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_sctp[] = { 317 RTE_FLOW_ITEM_TYPE_ETH, 318 RTE_FLOW_ITEM_TYPE_IPV4, 319 RTE_FLOW_ITEM_TYPE_UDP, 320 RTE_FLOW_ITEM_TYPE_VXLAN, 321 RTE_FLOW_ITEM_TYPE_IPV6, 322 RTE_FLOW_ITEM_TYPE_SCTP, 323 RTE_FLOW_ITEM_TYPE_END, 324 }; 325 326 static enum rte_flow_item_type pattern_ipv4_vxlan_ipv6_icmp[] = { 327 RTE_FLOW_ITEM_TYPE_ETH, 328 RTE_FLOW_ITEM_TYPE_IPV4, 329 RTE_FLOW_ITEM_TYPE_UDP, 330 RTE_FLOW_ITEM_TYPE_VXLAN, 331 RTE_FLOW_ITEM_TYPE_IPV6, 332 RTE_FLOW_ITEM_TYPE_ICMP, 333 RTE_FLOW_ITEM_TYPE_END, 334 }; 335 336 /* IPv4 VXLAN MAC IPv6 */ 337 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6[] = { 338 RTE_FLOW_ITEM_TYPE_ETH, 339 RTE_FLOW_ITEM_TYPE_IPV4, 340 RTE_FLOW_ITEM_TYPE_UDP, 341 RTE_FLOW_ITEM_TYPE_VXLAN, 342 RTE_FLOW_ITEM_TYPE_ETH, 343 RTE_FLOW_ITEM_TYPE_IPV6, 344 RTE_FLOW_ITEM_TYPE_END, 345 }; 346 347 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_udp[] = { 348 RTE_FLOW_ITEM_TYPE_ETH, 349 RTE_FLOW_ITEM_TYPE_IPV4, 350 RTE_FLOW_ITEM_TYPE_UDP, 351 RTE_FLOW_ITEM_TYPE_VXLAN, 352 RTE_FLOW_ITEM_TYPE_ETH, 353 RTE_FLOW_ITEM_TYPE_IPV6, 354 RTE_FLOW_ITEM_TYPE_UDP, 355 RTE_FLOW_ITEM_TYPE_END, 356 }; 357 358 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_tcp[] = { 359 RTE_FLOW_ITEM_TYPE_ETH, 360 RTE_FLOW_ITEM_TYPE_IPV4, 361 RTE_FLOW_ITEM_TYPE_UDP, 362 RTE_FLOW_ITEM_TYPE_VXLAN, 363 RTE_FLOW_ITEM_TYPE_ETH, 364 RTE_FLOW_ITEM_TYPE_IPV6, 365 RTE_FLOW_ITEM_TYPE_TCP, 366 RTE_FLOW_ITEM_TYPE_END, 367 }; 368 369 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_sctp[] = { 370 RTE_FLOW_ITEM_TYPE_ETH, 371 RTE_FLOW_ITEM_TYPE_IPV4, 372 RTE_FLOW_ITEM_TYPE_UDP, 373 RTE_FLOW_ITEM_TYPE_VXLAN, 374 RTE_FLOW_ITEM_TYPE_ETH, 375 RTE_FLOW_ITEM_TYPE_IPV6, 376 RTE_FLOW_ITEM_TYPE_SCTP, 377 RTE_FLOW_ITEM_TYPE_END, 378 }; 379 380 static enum rte_flow_item_type pattern_ipv4_vxlan_eth_ipv6_icmp[] = { 381 RTE_FLOW_ITEM_TYPE_ETH, 382 RTE_FLOW_ITEM_TYPE_IPV4, 383 RTE_FLOW_ITEM_TYPE_UDP, 384 RTE_FLOW_ITEM_TYPE_VXLAN, 385 RTE_FLOW_ITEM_TYPE_ETH, 386 RTE_FLOW_ITEM_TYPE_IPV6, 387 RTE_FLOW_ITEM_TYPE_ICMP, 388 RTE_FLOW_ITEM_TYPE_END, 389 }; 390 391 /* IPv4 NVGRE IPv4 */ 392 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4[] = { 393 RTE_FLOW_ITEM_TYPE_ETH, 394 RTE_FLOW_ITEM_TYPE_IPV4, 395 RTE_FLOW_ITEM_TYPE_NVGRE, 396 RTE_FLOW_ITEM_TYPE_IPV4, 397 RTE_FLOW_ITEM_TYPE_END, 398 }; 399 400 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_udp[] = { 401 RTE_FLOW_ITEM_TYPE_ETH, 402 RTE_FLOW_ITEM_TYPE_IPV4, 403 RTE_FLOW_ITEM_TYPE_NVGRE, 404 RTE_FLOW_ITEM_TYPE_IPV4, 405 RTE_FLOW_ITEM_TYPE_UDP, 406 RTE_FLOW_ITEM_TYPE_END, 407 }; 408 409 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_tcp[] = { 410 RTE_FLOW_ITEM_TYPE_ETH, 411 RTE_FLOW_ITEM_TYPE_IPV4, 412 RTE_FLOW_ITEM_TYPE_NVGRE, 413 RTE_FLOW_ITEM_TYPE_IPV4, 414 RTE_FLOW_ITEM_TYPE_TCP, 415 RTE_FLOW_ITEM_TYPE_END, 416 }; 417 418 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_sctp[] = { 419 RTE_FLOW_ITEM_TYPE_ETH, 420 RTE_FLOW_ITEM_TYPE_IPV4, 421 RTE_FLOW_ITEM_TYPE_NVGRE, 422 RTE_FLOW_ITEM_TYPE_IPV4, 423 RTE_FLOW_ITEM_TYPE_SCTP, 424 RTE_FLOW_ITEM_TYPE_END, 425 }; 426 427 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv4_icmp[] = { 428 RTE_FLOW_ITEM_TYPE_ETH, 429 RTE_FLOW_ITEM_TYPE_IPV4, 430 RTE_FLOW_ITEM_TYPE_NVGRE, 431 RTE_FLOW_ITEM_TYPE_IPV4, 432 RTE_FLOW_ITEM_TYPE_ICMP, 433 RTE_FLOW_ITEM_TYPE_END, 434 }; 435 436 /* IPv4 NVGRE MAC IPv4 */ 437 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4[] = { 438 RTE_FLOW_ITEM_TYPE_ETH, 439 RTE_FLOW_ITEM_TYPE_IPV4, 440 RTE_FLOW_ITEM_TYPE_NVGRE, 441 RTE_FLOW_ITEM_TYPE_ETH, 442 RTE_FLOW_ITEM_TYPE_IPV4, 443 RTE_FLOW_ITEM_TYPE_END, 444 }; 445 446 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_udp[] = { 447 RTE_FLOW_ITEM_TYPE_ETH, 448 RTE_FLOW_ITEM_TYPE_IPV4, 449 RTE_FLOW_ITEM_TYPE_NVGRE, 450 RTE_FLOW_ITEM_TYPE_ETH, 451 RTE_FLOW_ITEM_TYPE_IPV4, 452 RTE_FLOW_ITEM_TYPE_UDP, 453 RTE_FLOW_ITEM_TYPE_END, 454 }; 455 456 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_tcp[] = { 457 RTE_FLOW_ITEM_TYPE_ETH, 458 RTE_FLOW_ITEM_TYPE_IPV4, 459 RTE_FLOW_ITEM_TYPE_NVGRE, 460 RTE_FLOW_ITEM_TYPE_ETH, 461 RTE_FLOW_ITEM_TYPE_IPV4, 462 RTE_FLOW_ITEM_TYPE_TCP, 463 RTE_FLOW_ITEM_TYPE_END, 464 }; 465 466 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_sctp[] = { 467 RTE_FLOW_ITEM_TYPE_ETH, 468 RTE_FLOW_ITEM_TYPE_IPV4, 469 RTE_FLOW_ITEM_TYPE_NVGRE, 470 RTE_FLOW_ITEM_TYPE_ETH, 471 RTE_FLOW_ITEM_TYPE_IPV4, 472 RTE_FLOW_ITEM_TYPE_SCTP, 473 RTE_FLOW_ITEM_TYPE_END, 474 }; 475 476 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv4_icmp[] = { 477 RTE_FLOW_ITEM_TYPE_ETH, 478 RTE_FLOW_ITEM_TYPE_IPV4, 479 RTE_FLOW_ITEM_TYPE_NVGRE, 480 RTE_FLOW_ITEM_TYPE_ETH, 481 RTE_FLOW_ITEM_TYPE_IPV4, 482 RTE_FLOW_ITEM_TYPE_ICMP, 483 RTE_FLOW_ITEM_TYPE_END, 484 }; 485 486 /* IPv4 NVGRE IPv6 */ 487 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6[] = { 488 RTE_FLOW_ITEM_TYPE_ETH, 489 RTE_FLOW_ITEM_TYPE_IPV4, 490 RTE_FLOW_ITEM_TYPE_NVGRE, 491 RTE_FLOW_ITEM_TYPE_IPV6, 492 RTE_FLOW_ITEM_TYPE_END, 493 }; 494 495 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_udp[] = { 496 RTE_FLOW_ITEM_TYPE_ETH, 497 RTE_FLOW_ITEM_TYPE_IPV4, 498 RTE_FLOW_ITEM_TYPE_NVGRE, 499 RTE_FLOW_ITEM_TYPE_IPV6, 500 RTE_FLOW_ITEM_TYPE_UDP, 501 RTE_FLOW_ITEM_TYPE_END, 502 }; 503 504 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_tcp[] = { 505 RTE_FLOW_ITEM_TYPE_ETH, 506 RTE_FLOW_ITEM_TYPE_IPV4, 507 RTE_FLOW_ITEM_TYPE_NVGRE, 508 RTE_FLOW_ITEM_TYPE_IPV6, 509 RTE_FLOW_ITEM_TYPE_TCP, 510 RTE_FLOW_ITEM_TYPE_END, 511 }; 512 513 static enum rte_flow_item_type pattern_ipv4_nvgre_ipv6_sctp[] = { 514 RTE_FLOW_ITEM_TYPE_ETH, 515 RTE_FLOW_ITEM_TYPE_IPV4, 516 RTE_FLOW_ITEM_TYPE_NVGRE, 517 RTE_FLOW_ITEM_TYPE_IPV6, 518 RTE_FLOW_ITEM_TYPE_SCTP, 519 RTE_FLOW_ITEM_TYPE_END, 520 }; 521 522 523 /* IPv4 NVGRE MAC IPv6 */ 524 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6[] = { 525 RTE_FLOW_ITEM_TYPE_ETH, 526 RTE_FLOW_ITEM_TYPE_IPV4, 527 RTE_FLOW_ITEM_TYPE_NVGRE, 528 RTE_FLOW_ITEM_TYPE_ETH, 529 RTE_FLOW_ITEM_TYPE_IPV6, 530 RTE_FLOW_ITEM_TYPE_END, 531 }; 532 533 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_udp[] = { 534 RTE_FLOW_ITEM_TYPE_ETH, 535 RTE_FLOW_ITEM_TYPE_IPV4, 536 RTE_FLOW_ITEM_TYPE_NVGRE, 537 RTE_FLOW_ITEM_TYPE_ETH, 538 RTE_FLOW_ITEM_TYPE_IPV6, 539 RTE_FLOW_ITEM_TYPE_UDP, 540 RTE_FLOW_ITEM_TYPE_END, 541 }; 542 543 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_tcp[] = { 544 RTE_FLOW_ITEM_TYPE_ETH, 545 RTE_FLOW_ITEM_TYPE_IPV4, 546 RTE_FLOW_ITEM_TYPE_NVGRE, 547 RTE_FLOW_ITEM_TYPE_ETH, 548 RTE_FLOW_ITEM_TYPE_IPV6, 549 RTE_FLOW_ITEM_TYPE_TCP, 550 RTE_FLOW_ITEM_TYPE_END, 551 }; 552 553 static enum rte_flow_item_type pattern_ipv4_nvgre_eth_ipv6_sctp[] = { 554 RTE_FLOW_ITEM_TYPE_ETH, 555 RTE_FLOW_ITEM_TYPE_IPV4, 556 RTE_FLOW_ITEM_TYPE_NVGRE, 557 RTE_FLOW_ITEM_TYPE_ETH, 558 RTE_FLOW_ITEM_TYPE_IPV6, 559 RTE_FLOW_ITEM_TYPE_SCTP, 560 RTE_FLOW_ITEM_TYPE_END, 561 }; 562 563 static struct ice_flow_pattern ice_supported_patterns[] = { 564 {pattern_ethertype, INSET_ETHER}, 565 {pattern_ipv4, INSET_MAC_IPV4}, 566 {pattern_ipv4_udp, INSET_MAC_IPV4_L4}, 567 {pattern_ipv4_sctp, INSET_MAC_IPV4_L4}, 568 {pattern_ipv4_tcp, INSET_MAC_IPV4_L4}, 569 {pattern_ipv4_icmp, INSET_MAC_IPV4_ICMP}, 570 {pattern_ipv6, INSET_MAC_IPV6}, 571 {pattern_ipv6_udp, INSET_MAC_IPV6_L4}, 572 {pattern_ipv6_sctp, INSET_MAC_IPV6_L4}, 573 {pattern_ipv6_tcp, INSET_MAC_IPV6_L4}, 574 {pattern_ipv6_icmp6, INSET_MAC_IPV6_ICMP}, 575 {pattern_ipv4_vxlan_ipv4, INSET_TUNNEL_IPV4_TYPE1}, 576 {pattern_ipv4_vxlan_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2}, 577 {pattern_ipv4_vxlan_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2}, 578 {pattern_ipv4_vxlan_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2}, 579 {pattern_ipv4_vxlan_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3}, 580 {pattern_ipv4_vxlan_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1}, 581 {pattern_ipv4_vxlan_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2}, 582 {pattern_ipv4_vxlan_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2}, 583 {pattern_ipv4_vxlan_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2}, 584 {pattern_ipv4_vxlan_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3}, 585 {pattern_ipv4_vxlan_ipv6, INSET_TUNNEL_IPV6_TYPE1}, 586 {pattern_ipv4_vxlan_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2}, 587 {pattern_ipv4_vxlan_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2}, 588 {pattern_ipv4_vxlan_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2}, 589 {pattern_ipv4_vxlan_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3}, 590 {pattern_ipv4_vxlan_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1}, 591 {pattern_ipv4_vxlan_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2}, 592 {pattern_ipv4_vxlan_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2}, 593 {pattern_ipv4_vxlan_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2}, 594 {pattern_ipv4_vxlan_eth_ipv6_icmp, INSET_TUNNEL_IPV6_TYPE3}, 595 {pattern_ipv4_nvgre_ipv4, INSET_TUNNEL_IPV4_TYPE1}, 596 {pattern_ipv4_nvgre_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2}, 597 {pattern_ipv4_nvgre_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2}, 598 {pattern_ipv4_nvgre_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2}, 599 {pattern_ipv4_nvgre_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3}, 600 {pattern_ipv4_nvgre_eth_ipv4, INSET_TUNNEL_IPV4_TYPE1}, 601 {pattern_ipv4_nvgre_eth_ipv4_udp, INSET_TUNNEL_IPV4_TYPE2}, 602 {pattern_ipv4_nvgre_eth_ipv4_tcp, INSET_TUNNEL_IPV4_TYPE2}, 603 {pattern_ipv4_nvgre_eth_ipv4_sctp, INSET_TUNNEL_IPV4_TYPE2}, 604 {pattern_ipv4_nvgre_eth_ipv4_icmp, INSET_TUNNEL_IPV4_TYPE3}, 605 {pattern_ipv4_nvgre_ipv6, INSET_TUNNEL_IPV6_TYPE1}, 606 {pattern_ipv4_nvgre_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2}, 607 {pattern_ipv4_nvgre_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2}, 608 {pattern_ipv4_nvgre_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2}, 609 {pattern_ipv4_nvgre_eth_ipv6, INSET_TUNNEL_IPV6_TYPE1}, 610 {pattern_ipv4_nvgre_eth_ipv6_udp, INSET_TUNNEL_IPV6_TYPE2}, 611 {pattern_ipv4_nvgre_eth_ipv6_tcp, INSET_TUNNEL_IPV6_TYPE2}, 612 {pattern_ipv4_nvgre_eth_ipv6_sctp, INSET_TUNNEL_IPV6_TYPE2}, 613 }; 614 615 #endif 616