1*c1d14583SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 2*c1d14583SBruce Richardson * Copyright(c) 2019 Intel Corporation 3*c1d14583SBruce Richardson */ 4*c1d14583SBruce Richardson 5*c1d14583SBruce Richardson #include <sys/queue.h> 6*c1d14583SBruce Richardson #include <stdio.h> 7*c1d14583SBruce Richardson #include <errno.h> 8*c1d14583SBruce Richardson #include <stdint.h> 9*c1d14583SBruce Richardson #include <string.h> 10*c1d14583SBruce Richardson #include <unistd.h> 11*c1d14583SBruce Richardson #include <stdarg.h> 12*c1d14583SBruce Richardson 13*c1d14583SBruce Richardson #include <rte_ether.h> 14*c1d14583SBruce Richardson #include <ethdev_driver.h> 15*c1d14583SBruce Richardson #include <rte_malloc.h> 16*c1d14583SBruce Richardson #include <rte_tailq.h> 17*c1d14583SBruce Richardson 18*c1d14583SBruce Richardson #include "ice_ethdev.h" 19*c1d14583SBruce Richardson #include "ice_generic_flow.h" 20*c1d14583SBruce Richardson 21*c1d14583SBruce Richardson #define ICE_FLOW_ENGINE_DISABLED(mask, type) ((mask) & BIT(type)) 22*c1d14583SBruce Richardson 23*c1d14583SBruce Richardson static struct ice_engine_list engine_list = 24*c1d14583SBruce Richardson TAILQ_HEAD_INITIALIZER(engine_list); 25*c1d14583SBruce Richardson 26*c1d14583SBruce Richardson static int ice_flow_validate(struct rte_eth_dev *dev, 27*c1d14583SBruce Richardson const struct rte_flow_attr *attr, 28*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 29*c1d14583SBruce Richardson const struct rte_flow_action actions[], 30*c1d14583SBruce Richardson struct rte_flow_error *error); 31*c1d14583SBruce Richardson static struct rte_flow *ice_flow_create(struct rte_eth_dev *dev, 32*c1d14583SBruce Richardson const struct rte_flow_attr *attr, 33*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 34*c1d14583SBruce Richardson const struct rte_flow_action actions[], 35*c1d14583SBruce Richardson struct rte_flow_error *error); 36*c1d14583SBruce Richardson static int ice_flow_destroy(struct rte_eth_dev *dev, 37*c1d14583SBruce Richardson struct rte_flow *flow, 38*c1d14583SBruce Richardson struct rte_flow_error *error); 39*c1d14583SBruce Richardson static int ice_flow_flush(struct rte_eth_dev *dev, 40*c1d14583SBruce Richardson struct rte_flow_error *error); 41*c1d14583SBruce Richardson static int ice_flow_query(struct rte_eth_dev *dev, 42*c1d14583SBruce Richardson struct rte_flow *flow, 43*c1d14583SBruce Richardson const struct rte_flow_action *actions, 44*c1d14583SBruce Richardson void *data, 45*c1d14583SBruce Richardson struct rte_flow_error *error); 46*c1d14583SBruce Richardson 47*c1d14583SBruce Richardson const struct rte_flow_ops ice_flow_ops = { 48*c1d14583SBruce Richardson .validate = ice_flow_validate, 49*c1d14583SBruce Richardson .create = ice_flow_create, 50*c1d14583SBruce Richardson .destroy = ice_flow_destroy, 51*c1d14583SBruce Richardson .flush = ice_flow_flush, 52*c1d14583SBruce Richardson .query = ice_flow_query, 53*c1d14583SBruce Richardson }; 54*c1d14583SBruce Richardson 55*c1d14583SBruce Richardson /* empty */ 56*c1d14583SBruce Richardson enum rte_flow_item_type pattern_empty[] = { 57*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 58*c1d14583SBruce Richardson }; 59*c1d14583SBruce Richardson 60*c1d14583SBruce Richardson enum rte_flow_item_type pattern_any[] = { 61*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ANY, 62*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 63*c1d14583SBruce Richardson }; 64*c1d14583SBruce Richardson 65*c1d14583SBruce Richardson /* raw */ 66*c1d14583SBruce Richardson enum rte_flow_item_type pattern_raw[] = { 67*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_RAW, 68*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 69*c1d14583SBruce Richardson }; 70*c1d14583SBruce Richardson 71*c1d14583SBruce Richardson /* L2 */ 72*c1d14583SBruce Richardson enum rte_flow_item_type pattern_ethertype[] = { 73*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 74*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 75*c1d14583SBruce Richardson }; 76*c1d14583SBruce Richardson enum rte_flow_item_type pattern_ethertype_vlan[] = { 77*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 78*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 79*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 80*c1d14583SBruce Richardson }; 81*c1d14583SBruce Richardson enum rte_flow_item_type pattern_ethertype_qinq[] = { 82*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 83*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 84*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 85*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 86*c1d14583SBruce Richardson }; 87*c1d14583SBruce Richardson 88*c1d14583SBruce Richardson /* ARP */ 89*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_arp[] = { 90*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 91*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4, 92*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 93*c1d14583SBruce Richardson }; 94*c1d14583SBruce Richardson 95*c1d14583SBruce Richardson /* non-tunnel IPv4 */ 96*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4[] = { 97*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 98*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 99*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 100*c1d14583SBruce Richardson }; 101*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv4[] = { 102*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 103*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 104*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 105*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 106*c1d14583SBruce Richardson }; 107*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv4[] = { 108*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 109*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 110*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 111*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 112*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 113*c1d14583SBruce Richardson }; 114*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp[] = { 115*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 116*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 117*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 118*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 119*c1d14583SBruce Richardson }; 120*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv4_udp[] = { 121*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 122*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 123*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 124*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 125*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 126*c1d14583SBruce Richardson }; 127*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv4_udp[] = { 128*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 129*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 130*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 131*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 132*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 133*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 134*c1d14583SBruce Richardson }; 135*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_tcp[] = { 136*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 137*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 138*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 139*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 140*c1d14583SBruce Richardson }; 141*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv4_tcp[] = { 142*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 143*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 144*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 145*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 146*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 147*c1d14583SBruce Richardson }; 148*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv4_tcp[] = { 149*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 150*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 151*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 152*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 153*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 154*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 155*c1d14583SBruce Richardson }; 156*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_sctp[] = { 157*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 158*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 159*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 160*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 161*c1d14583SBruce Richardson }; 162*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv4_sctp[] = { 163*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 164*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 165*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 166*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 167*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 168*c1d14583SBruce Richardson }; 169*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv4_sctp[] = { 170*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 171*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 172*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 173*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 174*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 175*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 176*c1d14583SBruce Richardson }; 177*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_icmp[] = { 178*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 179*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 180*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 181*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 182*c1d14583SBruce Richardson }; 183*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv4_icmp[] = { 184*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 185*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 186*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 187*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 188*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 189*c1d14583SBruce Richardson }; 190*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv4_icmp[] = { 191*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 192*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 193*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 194*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 195*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 196*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 197*c1d14583SBruce Richardson }; 198*c1d14583SBruce Richardson 199*c1d14583SBruce Richardson /* non-tunnel IPv6 */ 200*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6[] = { 201*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 202*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 203*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 204*c1d14583SBruce Richardson }; 205*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv6[] = { 206*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 207*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 208*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 209*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 210*c1d14583SBruce Richardson }; 211*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv6[] = { 212*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 213*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 214*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 215*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 216*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 217*c1d14583SBruce Richardson }; 218*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_frag_ext[] = { 219*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 220*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 221*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT, 222*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 223*c1d14583SBruce Richardson }; 224*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv6_frag_ext[] = { 225*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 226*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 227*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 228*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT, 229*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 230*c1d14583SBruce Richardson }; 231*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv6_frag_ext[] = { 232*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 233*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 234*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 235*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 236*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT, 237*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 238*c1d14583SBruce Richardson }; 239*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp[] = { 240*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 241*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 242*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 243*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 244*c1d14583SBruce Richardson }; 245*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv6_udp[] = { 246*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 247*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 248*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 249*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 250*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 251*c1d14583SBruce Richardson }; 252*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv6_udp[] = { 253*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 254*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 255*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 256*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 257*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 258*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 259*c1d14583SBruce Richardson }; 260*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_tcp[] = { 261*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 262*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 263*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 264*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 265*c1d14583SBruce Richardson }; 266*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv6_tcp[] = { 267*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 268*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 269*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 270*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 271*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 272*c1d14583SBruce Richardson }; 273*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv6_tcp[] = { 274*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 275*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 276*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 277*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 278*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 279*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 280*c1d14583SBruce Richardson }; 281*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_sctp[] = { 282*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 283*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 284*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 285*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 286*c1d14583SBruce Richardson }; 287*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv6_sctp[] = { 288*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 289*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 290*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 291*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 292*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 293*c1d14583SBruce Richardson }; 294*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv6_sctp[] = { 295*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 296*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 297*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 298*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 299*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 300*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 301*c1d14583SBruce Richardson }; 302*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_icmp6[] = { 303*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 304*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 305*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 306*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 307*c1d14583SBruce Richardson }; 308*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_ipv6_icmp6[] = { 309*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 310*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 311*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 312*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 313*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 314*c1d14583SBruce Richardson }; 315*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_ipv6_icmp6[] = { 316*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 317*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 318*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 319*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 320*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 321*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 322*c1d14583SBruce Richardson }; 323*c1d14583SBruce Richardson 324*c1d14583SBruce Richardson /* IPv4 VXLAN IPv4 */ 325*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4[] = { 326*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 327*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 328*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 329*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 330*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 331*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 332*c1d14583SBruce Richardson }; 333*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_udp[] = { 334*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 335*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 336*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 337*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 338*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 339*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 340*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 341*c1d14583SBruce Richardson }; 342*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[] = { 343*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 344*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 345*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 346*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 347*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 348*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 349*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 350*c1d14583SBruce Richardson }; 351*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[] = { 352*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 353*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 354*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 355*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 356*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 357*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 358*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 359*c1d14583SBruce Richardson }; 360*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[] = { 361*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 362*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 363*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 364*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 365*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 366*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 367*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 368*c1d14583SBruce Richardson }; 369*c1d14583SBruce Richardson 370*c1d14583SBruce Richardson /* IPv4 VXLAN MAC IPv4 */ 371*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[] = { 372*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 373*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 374*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 375*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 376*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 377*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 378*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 379*c1d14583SBruce Richardson }; 380*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[] = { 381*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 382*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 383*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 384*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 385*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 386*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 387*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 388*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 389*c1d14583SBruce Richardson }; 390*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp[] = { 391*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 392*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 393*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 394*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 395*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 396*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 397*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 398*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 399*c1d14583SBruce Richardson }; 400*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp[] = { 401*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 402*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 403*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 404*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 405*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 406*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 407*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 408*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 409*c1d14583SBruce Richardson }; 410*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_icmp[] = { 411*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 412*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 413*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 414*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 415*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 416*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 417*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 418*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 419*c1d14583SBruce Richardson }; 420*c1d14583SBruce Richardson 421*c1d14583SBruce Richardson /* IPv6 VXLAN IPv4 */ 422*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4[] = { 423*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 424*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 425*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 426*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 427*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 428*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 429*c1d14583SBruce Richardson }; 430*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_tcp[] = { 431*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 432*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 433*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 434*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 435*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 436*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 437*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 438*c1d14583SBruce Richardson }; 439*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_udp[] = { 440*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 441*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 442*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 443*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 444*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 445*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 446*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 447*c1d14583SBruce Richardson }; 448*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_sctp[] = { 449*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 450*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 451*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 452*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 453*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 454*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 455*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 456*c1d14583SBruce Richardson }; 457*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_icmp[] = { 458*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 459*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 460*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 461*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 462*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 463*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 464*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 465*c1d14583SBruce Richardson }; 466*c1d14583SBruce Richardson 467*c1d14583SBruce Richardson /* IPv6 VXLAN MAC IPv4 */ 468*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4[] = { 469*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 470*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 471*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 472*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 473*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 474*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 475*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 476*c1d14583SBruce Richardson }; 477*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_tcp[] = { 478*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 479*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 480*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 481*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 482*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 483*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 484*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 485*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 486*c1d14583SBruce Richardson }; 487*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_udp[] = { 488*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 489*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 490*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 491*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 492*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 493*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 494*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 495*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 496*c1d14583SBruce Richardson }; 497*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_sctp[] = { 498*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 499*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 500*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 501*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 502*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 503*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 504*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 505*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 506*c1d14583SBruce Richardson }; 507*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_icmp[] = { 508*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 509*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 510*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 511*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 512*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 513*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 514*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 515*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 516*c1d14583SBruce Richardson }; 517*c1d14583SBruce Richardson 518*c1d14583SBruce Richardson /* IPv4 VXLAN IPv6 */ 519*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6[] = { 520*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 521*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 522*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 523*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 524*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 525*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 526*c1d14583SBruce Richardson }; 527*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_udp[] = { 528*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 529*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 530*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 531*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 532*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 533*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 534*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 535*c1d14583SBruce Richardson }; 536*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_tcp[] = { 537*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 538*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 539*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 540*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 541*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 542*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 543*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 544*c1d14583SBruce Richardson }; 545*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_sctp[] = { 546*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 547*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 548*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 549*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 550*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 551*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 552*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 553*c1d14583SBruce Richardson }; 554*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_icmp6[] = { 555*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 556*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 557*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 558*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 559*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 560*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 561*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 562*c1d14583SBruce Richardson }; 563*c1d14583SBruce Richardson 564*c1d14583SBruce Richardson /* IPv4 VXLAN MAC IPv6 */ 565*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6[] = { 566*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 567*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 568*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 569*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 570*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 571*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 572*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 573*c1d14583SBruce Richardson }; 574*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_udp[] = { 575*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 576*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 577*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 578*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 579*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 580*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 581*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 582*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 583*c1d14583SBruce Richardson }; 584*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_tcp[] = { 585*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 586*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 587*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 588*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 589*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 590*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 591*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 592*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 593*c1d14583SBruce Richardson }; 594*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_sctp[] = { 595*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 596*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 597*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 598*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 599*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 600*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 601*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 602*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 603*c1d14583SBruce Richardson }; 604*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_icmp6[] = { 605*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 606*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 607*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 608*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 609*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 610*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 611*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 612*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 613*c1d14583SBruce Richardson }; 614*c1d14583SBruce Richardson 615*c1d14583SBruce Richardson /* IPv6 VXLAN IPv6 */ 616*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6[] = { 617*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 618*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 619*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 620*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 621*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 622*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 623*c1d14583SBruce Richardson }; 624*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_tcp[] = { 625*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 626*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 627*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 628*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 629*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 630*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 631*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 632*c1d14583SBruce Richardson }; 633*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_udp[] = { 634*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 635*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 636*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 637*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 638*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 639*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 640*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 641*c1d14583SBruce Richardson }; 642*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_sctp[] = { 643*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 644*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 645*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 646*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 647*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 648*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 649*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 650*c1d14583SBruce Richardson }; 651*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_icmp6[] = { 652*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 653*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 654*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 655*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 656*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 657*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 658*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 659*c1d14583SBruce Richardson }; 660*c1d14583SBruce Richardson 661*c1d14583SBruce Richardson /* IPv6 VXLAN MAC IPv6 */ 662*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6[] = { 663*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 664*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 665*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 666*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 667*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 668*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 669*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 670*c1d14583SBruce Richardson }; 671*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_tcp[] = { 672*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 673*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 674*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 675*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 676*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 677*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 678*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 679*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 680*c1d14583SBruce Richardson }; 681*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_udp[] = { 682*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 683*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 684*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 685*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 686*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 687*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 688*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 689*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 690*c1d14583SBruce Richardson }; 691*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_sctp[] = { 692*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 693*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 694*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 695*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 696*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 697*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 698*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 699*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 700*c1d14583SBruce Richardson }; 701*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_icmp6[] = { 702*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 703*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 704*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 705*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VXLAN, 706*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 707*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 708*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 709*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 710*c1d14583SBruce Richardson }; 711*c1d14583SBruce Richardson 712*c1d14583SBruce Richardson /* IPv4 NVGRE IPv4 */ 713*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4[] = { 714*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 715*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 716*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 717*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 718*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 719*c1d14583SBruce Richardson }; 720*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_udp[] = { 721*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 722*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 723*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 724*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 725*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 726*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 727*c1d14583SBruce Richardson }; 728*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_tcp[] = { 729*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 730*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 731*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 732*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 733*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 734*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 735*c1d14583SBruce Richardson }; 736*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_sctp[] = { 737*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 738*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 739*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 740*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 741*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 742*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 743*c1d14583SBruce Richardson }; 744*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_icmp[] = { 745*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 746*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 747*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 748*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 749*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 750*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 751*c1d14583SBruce Richardson }; 752*c1d14583SBruce Richardson 753*c1d14583SBruce Richardson /* IPv4 NVGRE MAC IPv4 */ 754*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4[] = { 755*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 756*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 757*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 758*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 759*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 760*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 761*c1d14583SBruce Richardson }; 762*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_udp[] = { 763*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 764*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 765*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 766*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 767*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 768*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 769*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 770*c1d14583SBruce Richardson }; 771*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_tcp[] = { 772*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 773*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 774*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 775*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 776*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 777*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 778*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 779*c1d14583SBruce Richardson }; 780*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_sctp[] = { 781*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 782*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 783*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 784*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 785*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 786*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 787*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 788*c1d14583SBruce Richardson }; 789*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_icmp[] = { 790*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 791*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 792*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 793*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 794*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 795*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 796*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 797*c1d14583SBruce Richardson }; 798*c1d14583SBruce Richardson 799*c1d14583SBruce Richardson /* IPv6 NVGRE IPv4 */ 800*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4[] = { 801*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 802*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 803*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 804*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 805*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 806*c1d14583SBruce Richardson }; 807*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_tcp[] = { 808*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 809*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 810*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 811*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 812*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 813*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 814*c1d14583SBruce Richardson }; 815*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_udp[] = { 816*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 817*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 818*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 819*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 820*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 821*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 822*c1d14583SBruce Richardson }; 823*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_sctp[] = { 824*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 825*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 826*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 827*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 828*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 829*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 830*c1d14583SBruce Richardson }; 831*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_icmp[] = { 832*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 833*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 834*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 835*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 836*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 837*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 838*c1d14583SBruce Richardson }; 839*c1d14583SBruce Richardson 840*c1d14583SBruce Richardson /* IPv6 NVGRE MAC IPv4 */ 841*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4[] = { 842*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 843*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 844*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 845*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 846*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 847*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 848*c1d14583SBruce Richardson }; 849*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_tcp[] = { 850*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 851*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 852*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 853*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 854*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 855*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 856*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 857*c1d14583SBruce Richardson }; 858*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_udp[] = { 859*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 860*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 861*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 862*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 863*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 864*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 865*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 866*c1d14583SBruce Richardson }; 867*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_sctp[] = { 868*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 869*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 870*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 871*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 872*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 873*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 874*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 875*c1d14583SBruce Richardson }; 876*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_icmp[] = { 877*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 878*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 879*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 880*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 881*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 882*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 883*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 884*c1d14583SBruce Richardson }; 885*c1d14583SBruce Richardson 886*c1d14583SBruce Richardson /* IPv4 NVGRE IPv6 */ 887*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6[] = { 888*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 889*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 890*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 891*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 892*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 893*c1d14583SBruce Richardson }; 894*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_udp[] = { 895*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 896*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 897*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 898*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 899*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 900*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 901*c1d14583SBruce Richardson }; 902*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_tcp[] = { 903*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 904*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 905*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 906*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 907*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 908*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 909*c1d14583SBruce Richardson }; 910*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_sctp[] = { 911*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 912*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 913*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 914*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 915*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 916*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 917*c1d14583SBruce Richardson }; 918*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_icmp6[] = { 919*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 920*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 921*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 922*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 923*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 924*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 925*c1d14583SBruce Richardson }; 926*c1d14583SBruce Richardson 927*c1d14583SBruce Richardson /* IPv4 NVGRE MAC IPv6 */ 928*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6[] = { 929*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 930*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 931*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 932*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 933*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 934*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 935*c1d14583SBruce Richardson }; 936*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_udp[] = { 937*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 938*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 939*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 940*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 941*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 942*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 943*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 944*c1d14583SBruce Richardson }; 945*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_tcp[] = { 946*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 947*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 948*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 949*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 950*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 951*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 952*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 953*c1d14583SBruce Richardson }; 954*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_sctp[] = { 955*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 956*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 957*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 958*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 959*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 960*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 961*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 962*c1d14583SBruce Richardson }; 963*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_icmp6[] = { 964*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 965*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 966*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 967*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 968*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 969*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 970*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 971*c1d14583SBruce Richardson }; 972*c1d14583SBruce Richardson 973*c1d14583SBruce Richardson /* IPv6 NVGRE IPv6 */ 974*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6[] = { 975*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 976*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 977*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 978*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 979*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 980*c1d14583SBruce Richardson }; 981*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_tcp[] = { 982*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 983*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 984*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 985*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 986*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 987*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 988*c1d14583SBruce Richardson }; 989*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_udp[] = { 990*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 991*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 992*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 993*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 994*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 995*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 996*c1d14583SBruce Richardson }; 997*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_sctp[] = { 998*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 999*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1000*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1001*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1002*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1003*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1004*c1d14583SBruce Richardson }; 1005*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_icmp6[] = { 1006*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1007*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1008*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1009*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1010*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 1011*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1012*c1d14583SBruce Richardson }; 1013*c1d14583SBruce Richardson 1014*c1d14583SBruce Richardson /* IPv6 NVGRE MAC IPv6 */ 1015*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6[] = { 1016*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1017*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1018*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1019*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1020*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1021*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1022*c1d14583SBruce Richardson }; 1023*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_tcp[] = { 1024*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1025*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1026*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1027*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1028*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1029*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1030*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1031*c1d14583SBruce Richardson }; 1032*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[] = { 1033*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1034*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1035*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1036*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1037*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1038*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1039*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1040*c1d14583SBruce Richardson }; 1041*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[] = { 1042*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1043*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1044*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1045*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1046*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1047*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1048*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1049*c1d14583SBruce Richardson }; 1050*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[] = { 1051*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1052*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1053*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_NVGRE, 1054*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1055*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1056*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 1057*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1058*c1d14583SBruce Richardson }; 1059*c1d14583SBruce Richardson 1060*c1d14583SBruce Richardson /*IPv4 GTPU (EH) */ 1061*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu[] = { 1062*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1063*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1064*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1065*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1066*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1067*c1d14583SBruce Richardson }; 1068*c1d14583SBruce Richardson 1069*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[] = { 1070*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1071*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1072*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1073*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1074*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1075*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1076*c1d14583SBruce Richardson }; 1077*c1d14583SBruce Richardson 1078*c1d14583SBruce Richardson /*IPv6 GTPU (EH) */ 1079*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu[] = { 1080*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1081*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1082*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1083*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1084*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1085*c1d14583SBruce Richardson }; 1086*c1d14583SBruce Richardson 1087*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[] = { 1088*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1089*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1090*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1091*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1092*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1093*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1094*c1d14583SBruce Richardson }; 1095*c1d14583SBruce Richardson 1096*c1d14583SBruce Richardson /*IPv4 GTPU IPv4 */ 1097*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[] = { 1098*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1099*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1100*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1101*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1102*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1103*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1104*c1d14583SBruce Richardson }; 1105*c1d14583SBruce Richardson 1106*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[] = { 1107*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1108*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1109*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1110*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1111*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1112*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1113*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1114*c1d14583SBruce Richardson }; 1115*c1d14583SBruce Richardson 1116*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[] = { 1117*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1118*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1119*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1120*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1121*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1122*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1123*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1124*c1d14583SBruce Richardson }; 1125*c1d14583SBruce Richardson 1126*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[] = { 1127*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1128*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1129*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1130*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1131*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1132*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1133*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1134*c1d14583SBruce Richardson }; 1135*c1d14583SBruce Richardson 1136*c1d14583SBruce Richardson /*IPv4 GTPU IPv6 */ 1137*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[] = { 1138*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1139*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1140*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1141*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1142*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1143*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1144*c1d14583SBruce Richardson }; 1145*c1d14583SBruce Richardson 1146*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[] = { 1147*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1148*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1149*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1150*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1151*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1152*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1153*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1154*c1d14583SBruce Richardson }; 1155*c1d14583SBruce Richardson 1156*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[] = { 1157*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1158*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1159*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1160*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1161*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1162*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1163*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1164*c1d14583SBruce Richardson }; 1165*c1d14583SBruce Richardson 1166*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[] = { 1167*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1168*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1169*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1170*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1171*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1172*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1173*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1174*c1d14583SBruce Richardson }; 1175*c1d14583SBruce Richardson 1176*c1d14583SBruce Richardson /*IPv6 GTPU IPv4 */ 1177*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[] = { 1178*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1179*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1180*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1181*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1182*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1183*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1184*c1d14583SBruce Richardson }; 1185*c1d14583SBruce Richardson 1186*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[] = { 1187*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1188*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1189*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1190*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1191*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1192*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1193*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1194*c1d14583SBruce Richardson }; 1195*c1d14583SBruce Richardson 1196*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[] = { 1197*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1198*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1199*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1200*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1201*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1202*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1203*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1204*c1d14583SBruce Richardson }; 1205*c1d14583SBruce Richardson 1206*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[] = { 1207*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1208*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1209*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1210*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1211*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1212*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1213*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1214*c1d14583SBruce Richardson }; 1215*c1d14583SBruce Richardson 1216*c1d14583SBruce Richardson /*IPv6 GTPU IPv6 */ 1217*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[] = { 1218*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1219*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1220*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1221*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1222*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1223*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1224*c1d14583SBruce Richardson }; 1225*c1d14583SBruce Richardson 1226*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[] = { 1227*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1228*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1229*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1230*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1231*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1232*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1233*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1234*c1d14583SBruce Richardson }; 1235*c1d14583SBruce Richardson 1236*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[] = { 1237*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1238*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1239*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1240*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1241*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1242*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1243*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1244*c1d14583SBruce Richardson }; 1245*c1d14583SBruce Richardson 1246*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[] = { 1247*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1248*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1249*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1250*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1251*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1252*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1253*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1254*c1d14583SBruce Richardson }; 1255*c1d14583SBruce Richardson 1256*c1d14583SBruce Richardson /*IPv4 GTPU EH IPv4 */ 1257*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[] = { 1258*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1259*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1260*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1261*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1262*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1263*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1264*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1265*c1d14583SBruce Richardson }; 1266*c1d14583SBruce Richardson 1267*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[] = { 1268*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1269*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1270*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1271*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1272*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1273*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1274*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1275*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1276*c1d14583SBruce Richardson }; 1277*c1d14583SBruce Richardson 1278*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[] = { 1279*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1280*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1281*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1282*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1283*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1284*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1285*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1286*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1287*c1d14583SBruce Richardson }; 1288*c1d14583SBruce Richardson 1289*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[] = { 1290*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1291*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1292*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1293*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1294*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1295*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1296*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1297*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1298*c1d14583SBruce Richardson }; 1299*c1d14583SBruce Richardson 1300*c1d14583SBruce Richardson /*IPv4 GTPU EH IPv6 */ 1301*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[] = { 1302*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1303*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1304*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1305*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1306*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1307*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1308*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1309*c1d14583SBruce Richardson }; 1310*c1d14583SBruce Richardson 1311*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[] = { 1312*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1313*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1314*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1315*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1316*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1317*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1318*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1319*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1320*c1d14583SBruce Richardson }; 1321*c1d14583SBruce Richardson 1322*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[] = { 1323*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1324*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1325*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1326*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1327*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1328*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1329*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1330*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1331*c1d14583SBruce Richardson }; 1332*c1d14583SBruce Richardson 1333*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[] = { 1334*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1335*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1336*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1337*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1338*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1339*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1340*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1341*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1342*c1d14583SBruce Richardson }; 1343*c1d14583SBruce Richardson 1344*c1d14583SBruce Richardson /*IPv6 GTPU EH IPv4 */ 1345*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[] = { 1346*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1347*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1348*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1349*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1350*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1351*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1352*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1353*c1d14583SBruce Richardson }; 1354*c1d14583SBruce Richardson 1355*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[] = { 1356*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1357*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1358*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1359*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1360*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1361*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1362*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1363*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1364*c1d14583SBruce Richardson }; 1365*c1d14583SBruce Richardson 1366*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[] = { 1367*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1368*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1369*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1370*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1371*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1372*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1373*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1374*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1375*c1d14583SBruce Richardson }; 1376*c1d14583SBruce Richardson 1377*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[] = { 1378*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1379*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1380*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1381*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1382*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1383*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1384*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1385*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1386*c1d14583SBruce Richardson }; 1387*c1d14583SBruce Richardson 1388*c1d14583SBruce Richardson /*IPv6 GTPU EH IPv6 */ 1389*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[] = { 1390*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1391*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1392*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1393*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1394*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1395*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1396*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1397*c1d14583SBruce Richardson }; 1398*c1d14583SBruce Richardson 1399*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[] = { 1400*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1401*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1402*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1403*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1404*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1405*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1406*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1407*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1408*c1d14583SBruce Richardson }; 1409*c1d14583SBruce Richardson 1410*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[] = { 1411*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1412*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1413*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1414*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1415*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1416*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1417*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1418*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1419*c1d14583SBruce Richardson }; 1420*c1d14583SBruce Richardson 1421*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[] = { 1422*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1423*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1424*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1425*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTPU, 1426*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_GTP_PSC, 1427*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1428*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1429*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1430*c1d14583SBruce Richardson }; 1431*c1d14583SBruce Richardson 1432*c1d14583SBruce Richardson /* PPPoE */ 1433*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoed[] = { 1434*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1435*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOED, 1436*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1437*c1d14583SBruce Richardson }; 1438*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoed[] = { 1439*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1440*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1441*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOED, 1442*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1443*c1d14583SBruce Richardson }; 1444*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoed[] = { 1445*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1446*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1447*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1448*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOED, 1449*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1450*c1d14583SBruce Richardson }; 1451*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes[] = { 1452*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1453*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1454*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1455*c1d14583SBruce Richardson }; 1456*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_proto[] = { 1457*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1458*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1459*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID, 1460*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1461*c1d14583SBruce Richardson }; 1462*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes[] = { 1463*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1464*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1465*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1466*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1467*c1d14583SBruce Richardson }; 1468*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[] = { 1469*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1470*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1471*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1472*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID, 1473*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1474*c1d14583SBruce Richardson }; 1475*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes[] = { 1476*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1477*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1478*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1479*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1480*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1481*c1d14583SBruce Richardson }; 1482*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_proto[] = { 1483*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1484*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1485*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1486*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1487*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOE_PROTO_ID, 1488*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1489*c1d14583SBruce Richardson }; 1490*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv4[] = { 1491*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1492*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1493*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1494*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1495*c1d14583SBruce Richardson }; 1496*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[] = { 1497*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1498*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1499*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1500*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1501*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1502*c1d14583SBruce Richardson }; 1503*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4[] = { 1504*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1505*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1506*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1507*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1508*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1509*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1510*c1d14583SBruce Richardson }; 1511*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv4_udp[] = { 1512*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1513*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1514*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1515*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1516*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1517*c1d14583SBruce Richardson }; 1518*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_udp[] = { 1519*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1520*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1521*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1522*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1523*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1524*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1525*c1d14583SBruce Richardson }; 1526*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_udp[] = { 1527*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1528*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1529*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1530*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1531*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1532*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1533*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1534*c1d14583SBruce Richardson }; 1535*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv4_tcp[] = { 1536*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1537*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1538*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1539*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1540*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1541*c1d14583SBruce Richardson }; 1542*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_tcp[] = { 1543*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1544*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1545*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1546*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1547*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1548*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1549*c1d14583SBruce Richardson }; 1550*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_tcp[] = { 1551*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1552*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1553*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1554*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1555*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1556*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1557*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1558*c1d14583SBruce Richardson }; 1559*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv4_sctp[] = { 1560*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1561*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1562*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1563*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1564*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1565*c1d14583SBruce Richardson }; 1566*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_sctp[] = { 1567*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1568*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1569*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1570*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1571*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1572*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1573*c1d14583SBruce Richardson }; 1574*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_sctp[] = { 1575*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1576*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1577*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1578*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1579*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1580*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1581*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1582*c1d14583SBruce Richardson }; 1583*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv4_icmp[] = { 1584*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1585*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1586*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1587*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1588*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1589*c1d14583SBruce Richardson }; 1590*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_icmp[] = { 1591*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1592*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1593*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1594*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1595*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1596*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1597*c1d14583SBruce Richardson }; 1598*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_icmp[] = { 1599*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1600*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1601*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1602*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1603*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1604*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP, 1605*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1606*c1d14583SBruce Richardson }; 1607*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv6[] = { 1608*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1609*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1610*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1611*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1612*c1d14583SBruce Richardson }; 1613*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6[] = { 1614*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1615*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1616*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1617*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1618*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1619*c1d14583SBruce Richardson }; 1620*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6[] = { 1621*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1622*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1623*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1624*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1625*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1626*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1627*c1d14583SBruce Richardson }; 1628*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv6_udp[] = { 1629*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1630*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1631*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1632*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1633*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1634*c1d14583SBruce Richardson }; 1635*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_udp[] = { 1636*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1637*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1638*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1639*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1640*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1641*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1642*c1d14583SBruce Richardson }; 1643*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_udp[] = { 1644*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1645*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1646*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1647*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1648*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1649*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1650*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1651*c1d14583SBruce Richardson }; 1652*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv6_tcp[] = { 1653*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1654*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1655*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1656*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1657*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1658*c1d14583SBruce Richardson }; 1659*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_tcp[] = { 1660*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1661*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1662*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1663*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1664*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1665*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1666*c1d14583SBruce Richardson }; 1667*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_tcp[] = { 1668*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1669*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1670*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1671*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1672*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1673*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_TCP, 1674*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1675*c1d14583SBruce Richardson }; 1676*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv6_sctp[] = { 1677*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1678*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1679*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1680*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1681*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1682*c1d14583SBruce Richardson }; 1683*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_sctp[] = { 1684*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1685*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1686*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1687*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1688*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1689*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1690*c1d14583SBruce Richardson }; 1691*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_sctp[] = { 1692*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1693*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1694*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1695*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1696*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1697*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_SCTP, 1698*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1699*c1d14583SBruce Richardson }; 1700*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[] = { 1701*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1702*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1703*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1704*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 1705*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1706*c1d14583SBruce Richardson }; 1707*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[] = { 1708*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1709*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1710*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1711*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1712*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 1713*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1714*c1d14583SBruce Richardson }; 1715*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[] = { 1716*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1717*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1718*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_VLAN, 1719*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PPPOES, 1720*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1721*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ICMP6, 1722*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1723*c1d14583SBruce Richardson }; 1724*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_esp[] = { 1725*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1726*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1727*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ESP, 1728*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1729*c1d14583SBruce Richardson }; 1730*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_esp[] = { 1731*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1732*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1733*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ESP, 1734*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1735*c1d14583SBruce Richardson }; 1736*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_ah[] = { 1737*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1738*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1739*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_AH, 1740*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1741*c1d14583SBruce Richardson }; 1742*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_ah[] = { 1743*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1744*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1745*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_AH, 1746*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1747*c1d14583SBruce Richardson }; 1748*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_udp_esp[] = { 1749*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1750*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1751*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1752*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ESP, 1753*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1754*c1d14583SBruce Richardson }; 1755*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_esp[] = { 1756*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1757*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1758*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1759*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ESP, 1760*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1761*c1d14583SBruce Richardson }; 1762*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_udp_ah[] = { 1763*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1764*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1765*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1766*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_AH, 1767*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1768*c1d14583SBruce Richardson }; 1769*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_l2tp[] = { 1770*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1771*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1772*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_L2TPV3OIP, 1773*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1774*c1d14583SBruce Richardson }; 1775*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_l2tp[] = { 1776*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1777*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1778*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_L2TPV3OIP, 1779*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1780*c1d14583SBruce Richardson }; 1781*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv4_pfcp[] = { 1782*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1783*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV4, 1784*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1785*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PFCP, 1786*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1787*c1d14583SBruce Richardson }; 1788*c1d14583SBruce Richardson enum rte_flow_item_type pattern_eth_ipv6_pfcp[] = { 1789*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_ETH, 1790*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_IPV6, 1791*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_UDP, 1792*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_PFCP, 1793*c1d14583SBruce Richardson RTE_FLOW_ITEM_TYPE_END, 1794*c1d14583SBruce Richardson }; 1795*c1d14583SBruce Richardson 1796*c1d14583SBruce Richardson typedef bool (*parse_engine_t)(struct ice_adapter *ad, 1797*c1d14583SBruce Richardson struct rte_flow *flow, 1798*c1d14583SBruce Richardson struct ice_flow_parser *parser, 1799*c1d14583SBruce Richardson uint32_t priority, 1800*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 1801*c1d14583SBruce Richardson const struct rte_flow_action actions[], 1802*c1d14583SBruce Richardson struct rte_flow_error *error); 1803*c1d14583SBruce Richardson 1804*c1d14583SBruce Richardson void 1805*c1d14583SBruce Richardson ice_register_flow_engine(struct ice_flow_engine *engine) 1806*c1d14583SBruce Richardson { 1807*c1d14583SBruce Richardson TAILQ_INSERT_TAIL(&engine_list, engine, node); 1808*c1d14583SBruce Richardson } 1809*c1d14583SBruce Richardson 1810*c1d14583SBruce Richardson int 1811*c1d14583SBruce Richardson ice_flow_init(struct ice_adapter *ad) 1812*c1d14583SBruce Richardson { 1813*c1d14583SBruce Richardson int ret; 1814*c1d14583SBruce Richardson struct ice_pf *pf = &ad->pf; 1815*c1d14583SBruce Richardson void *temp; 1816*c1d14583SBruce Richardson struct ice_flow_engine *engine; 1817*c1d14583SBruce Richardson 1818*c1d14583SBruce Richardson TAILQ_INIT(&pf->flow_list); 1819*c1d14583SBruce Richardson rte_spinlock_init(&pf->flow_ops_lock); 1820*c1d14583SBruce Richardson 1821*c1d14583SBruce Richardson if (ice_parser_create(&ad->hw, &ad->psr) != ICE_SUCCESS) 1822*c1d14583SBruce Richardson PMD_INIT_LOG(WARNING, "Failed to initialize DDP parser, raw packet filter will not be supported"); 1823*c1d14583SBruce Richardson 1824*c1d14583SBruce Richardson if (ad->psr) { 1825*c1d14583SBruce Richardson if (ice_is_dvm_ena(&ad->hw)) 1826*c1d14583SBruce Richardson ice_parser_dvm_set(ad->psr, true); 1827*c1d14583SBruce Richardson else 1828*c1d14583SBruce Richardson ice_parser_dvm_set(ad->psr, false); 1829*c1d14583SBruce Richardson } 1830*c1d14583SBruce Richardson 1831*c1d14583SBruce Richardson RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { 1832*c1d14583SBruce Richardson if (engine->init == NULL) { 1833*c1d14583SBruce Richardson PMD_INIT_LOG(ERR, "Invalid engine type (%d)", 1834*c1d14583SBruce Richardson engine->type); 1835*c1d14583SBruce Richardson return -ENOTSUP; 1836*c1d14583SBruce Richardson } 1837*c1d14583SBruce Richardson 1838*c1d14583SBruce Richardson if (ICE_FLOW_ENGINE_DISABLED(ad->disabled_engine_mask, engine->type)) { 1839*c1d14583SBruce Richardson PMD_INIT_LOG(INFO, "Engine %d disabled", engine->type); 1840*c1d14583SBruce Richardson continue; 1841*c1d14583SBruce Richardson } 1842*c1d14583SBruce Richardson 1843*c1d14583SBruce Richardson ret = engine->init(ad); 1844*c1d14583SBruce Richardson if (ret) { 1845*c1d14583SBruce Richardson PMD_INIT_LOG(ERR, "Failed to initialize engine %d", 1846*c1d14583SBruce Richardson engine->type); 1847*c1d14583SBruce Richardson return ret; 1848*c1d14583SBruce Richardson } 1849*c1d14583SBruce Richardson } 1850*c1d14583SBruce Richardson return 0; 1851*c1d14583SBruce Richardson } 1852*c1d14583SBruce Richardson 1853*c1d14583SBruce Richardson void 1854*c1d14583SBruce Richardson ice_flow_uninit(struct ice_adapter *ad) 1855*c1d14583SBruce Richardson { 1856*c1d14583SBruce Richardson struct ice_pf *pf = &ad->pf; 1857*c1d14583SBruce Richardson struct ice_flow_engine *engine; 1858*c1d14583SBruce Richardson struct rte_flow *p_flow; 1859*c1d14583SBruce Richardson void *temp; 1860*c1d14583SBruce Richardson 1861*c1d14583SBruce Richardson RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { 1862*c1d14583SBruce Richardson if (ICE_FLOW_ENGINE_DISABLED(ad->disabled_engine_mask, engine->type)) { 1863*c1d14583SBruce Richardson PMD_DRV_LOG(DEBUG, "Engine %d disabled skip it", engine->type); 1864*c1d14583SBruce Richardson continue; 1865*c1d14583SBruce Richardson } 1866*c1d14583SBruce Richardson 1867*c1d14583SBruce Richardson if (engine->uninit) 1868*c1d14583SBruce Richardson engine->uninit(ad); 1869*c1d14583SBruce Richardson } 1870*c1d14583SBruce Richardson 1871*c1d14583SBruce Richardson /* Remove all flows */ 1872*c1d14583SBruce Richardson while ((p_flow = TAILQ_FIRST(&pf->flow_list))) { 1873*c1d14583SBruce Richardson TAILQ_REMOVE(&pf->flow_list, p_flow, node); 1874*c1d14583SBruce Richardson if (p_flow->engine->free) 1875*c1d14583SBruce Richardson p_flow->engine->free(p_flow); 1876*c1d14583SBruce Richardson rte_free(p_flow); 1877*c1d14583SBruce Richardson } 1878*c1d14583SBruce Richardson 1879*c1d14583SBruce Richardson if (ad->psr != NULL) { 1880*c1d14583SBruce Richardson ice_parser_destroy(ad->psr); 1881*c1d14583SBruce Richardson ad->psr = NULL; 1882*c1d14583SBruce Richardson } 1883*c1d14583SBruce Richardson } 1884*c1d14583SBruce Richardson 1885*c1d14583SBruce Richardson static int 1886*c1d14583SBruce Richardson ice_flow_valid_attr(const struct rte_flow_attr *attr, 1887*c1d14583SBruce Richardson struct rte_flow_error *error) 1888*c1d14583SBruce Richardson { 1889*c1d14583SBruce Richardson /* Must be input direction */ 1890*c1d14583SBruce Richardson if (!attr->ingress) { 1891*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 1892*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ATTR_INGRESS, 1893*c1d14583SBruce Richardson attr, "Only support ingress."); 1894*c1d14583SBruce Richardson return -rte_errno; 1895*c1d14583SBruce Richardson } 1896*c1d14583SBruce Richardson 1897*c1d14583SBruce Richardson /* Not supported */ 1898*c1d14583SBruce Richardson if (attr->egress) { 1899*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 1900*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ATTR_EGRESS, 1901*c1d14583SBruce Richardson attr, "Not support egress."); 1902*c1d14583SBruce Richardson return -rte_errno; 1903*c1d14583SBruce Richardson } 1904*c1d14583SBruce Richardson 1905*c1d14583SBruce Richardson /* Not supported */ 1906*c1d14583SBruce Richardson if (attr->transfer) { 1907*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 1908*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ATTR_TRANSFER, 1909*c1d14583SBruce Richardson attr, "Not support transfer."); 1910*c1d14583SBruce Richardson return -rte_errno; 1911*c1d14583SBruce Richardson } 1912*c1d14583SBruce Richardson 1913*c1d14583SBruce Richardson if (attr->priority > 1) { 1914*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 1915*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ATTR_PRIORITY, 1916*c1d14583SBruce Richardson attr, "Only support priority 0 and 1."); 1917*c1d14583SBruce Richardson return -rte_errno; 1918*c1d14583SBruce Richardson } 1919*c1d14583SBruce Richardson 1920*c1d14583SBruce Richardson return 0; 1921*c1d14583SBruce Richardson } 1922*c1d14583SBruce Richardson 1923*c1d14583SBruce Richardson /* Find the first VOID or non-VOID item pointer */ 1924*c1d14583SBruce Richardson static const struct rte_flow_item * 1925*c1d14583SBruce Richardson ice_find_first_item(const struct rte_flow_item *item, bool is_void) 1926*c1d14583SBruce Richardson { 1927*c1d14583SBruce Richardson bool is_find; 1928*c1d14583SBruce Richardson 1929*c1d14583SBruce Richardson while (item->type != RTE_FLOW_ITEM_TYPE_END) { 1930*c1d14583SBruce Richardson if (is_void) 1931*c1d14583SBruce Richardson is_find = item->type == RTE_FLOW_ITEM_TYPE_VOID; 1932*c1d14583SBruce Richardson else 1933*c1d14583SBruce Richardson is_find = item->type != RTE_FLOW_ITEM_TYPE_VOID; 1934*c1d14583SBruce Richardson if (is_find) 1935*c1d14583SBruce Richardson break; 1936*c1d14583SBruce Richardson item++; 1937*c1d14583SBruce Richardson } 1938*c1d14583SBruce Richardson return item; 1939*c1d14583SBruce Richardson } 1940*c1d14583SBruce Richardson 1941*c1d14583SBruce Richardson /* Skip all VOID items of the pattern */ 1942*c1d14583SBruce Richardson static void 1943*c1d14583SBruce Richardson ice_pattern_skip_void_item(struct rte_flow_item *items, 1944*c1d14583SBruce Richardson const struct rte_flow_item *pattern) 1945*c1d14583SBruce Richardson { 1946*c1d14583SBruce Richardson uint32_t cpy_count = 0; 1947*c1d14583SBruce Richardson const struct rte_flow_item *pb = pattern, *pe = pattern; 1948*c1d14583SBruce Richardson 1949*c1d14583SBruce Richardson for (;;) { 1950*c1d14583SBruce Richardson /* Find a non-void item first */ 1951*c1d14583SBruce Richardson pb = ice_find_first_item(pb, false); 1952*c1d14583SBruce Richardson if (pb->type == RTE_FLOW_ITEM_TYPE_END) { 1953*c1d14583SBruce Richardson pe = pb; 1954*c1d14583SBruce Richardson break; 1955*c1d14583SBruce Richardson } 1956*c1d14583SBruce Richardson 1957*c1d14583SBruce Richardson /* Find a void item */ 1958*c1d14583SBruce Richardson pe = ice_find_first_item(pb + 1, true); 1959*c1d14583SBruce Richardson 1960*c1d14583SBruce Richardson cpy_count = pe - pb; 1961*c1d14583SBruce Richardson rte_memcpy(items, pb, sizeof(struct rte_flow_item) * cpy_count); 1962*c1d14583SBruce Richardson 1963*c1d14583SBruce Richardson items += cpy_count; 1964*c1d14583SBruce Richardson 1965*c1d14583SBruce Richardson if (pe->type == RTE_FLOW_ITEM_TYPE_END) { 1966*c1d14583SBruce Richardson break; 1967*c1d14583SBruce Richardson } 1968*c1d14583SBruce Richardson 1969*c1d14583SBruce Richardson pb = pe + 1; 1970*c1d14583SBruce Richardson } 1971*c1d14583SBruce Richardson /* Copy the END item. */ 1972*c1d14583SBruce Richardson rte_memcpy(items, pe, sizeof(struct rte_flow_item)); 1973*c1d14583SBruce Richardson } 1974*c1d14583SBruce Richardson 1975*c1d14583SBruce Richardson /* Check if the pattern matches a supported item type array */ 1976*c1d14583SBruce Richardson static bool 1977*c1d14583SBruce Richardson ice_match_pattern(enum rte_flow_item_type *item_array, 1978*c1d14583SBruce Richardson const struct rte_flow_item *pattern) 1979*c1d14583SBruce Richardson { 1980*c1d14583SBruce Richardson const struct rte_flow_item *item = pattern; 1981*c1d14583SBruce Richardson 1982*c1d14583SBruce Richardson while ((*item_array == item->type) && 1983*c1d14583SBruce Richardson (*item_array != RTE_FLOW_ITEM_TYPE_END)) { 1984*c1d14583SBruce Richardson item_array++; 1985*c1d14583SBruce Richardson item++; 1986*c1d14583SBruce Richardson } 1987*c1d14583SBruce Richardson 1988*c1d14583SBruce Richardson return (*item_array == RTE_FLOW_ITEM_TYPE_END && 1989*c1d14583SBruce Richardson item->type == RTE_FLOW_ITEM_TYPE_END); 1990*c1d14583SBruce Richardson } 1991*c1d14583SBruce Richardson 1992*c1d14583SBruce Richardson struct ice_ptype_match { 1993*c1d14583SBruce Richardson enum rte_flow_item_type *pattern_list; 1994*c1d14583SBruce Richardson uint16_t hw_ptype; 1995*c1d14583SBruce Richardson }; 1996*c1d14583SBruce Richardson 1997*c1d14583SBruce Richardson static struct ice_ptype_match ice_ptype_map[] = { 1998*c1d14583SBruce Richardson {pattern_raw, ICE_PTYPE_IPV4_PAY}, 1999*c1d14583SBruce Richardson {pattern_any, ICE_PTYPE_IPV4_PAY}, 2000*c1d14583SBruce Richardson {pattern_eth_ipv4, ICE_PTYPE_IPV4_PAY}, 2001*c1d14583SBruce Richardson {pattern_eth_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY}, 2002*c1d14583SBruce Richardson {pattern_eth_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY}, 2003*c1d14583SBruce Richardson {pattern_eth_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY}, 2004*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu, ICE_MAC_IPV4_GTPU}, 2005*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh, ICE_MAC_IPV4_GTPU}, 2006*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY}, 2007*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY}, 2008*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP}, 2009*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY}, 2010*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY}, 2011*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP}, 2012*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh_ipv4, ICE_MAC_IPV4_GTPU_IPV4_PAY}, 2013*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_MAC_IPV4_GTPU_IPV4_UDP_PAY}, 2014*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_MAC_IPV4_GTPU_IPV4_TCP}, 2015*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh_ipv6, ICE_MAC_IPV4_GTPU_IPV6_PAY}, 2016*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_MAC_IPV4_GTPU_IPV6_UDP_PAY}, 2017*c1d14583SBruce Richardson {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_MAC_IPV4_GTPU_IPV6_TCP}, 2018*c1d14583SBruce Richardson {pattern_eth_ipv4_esp, ICE_MAC_IPV4_ESP}, 2019*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_esp, ICE_MAC_IPV4_NAT_T_ESP}, 2020*c1d14583SBruce Richardson {pattern_eth_ipv4_ah, ICE_MAC_IPV4_AH}, 2021*c1d14583SBruce Richardson {pattern_eth_ipv4_l2tp, ICE_MAC_IPV4_L2TPV3}, 2022*c1d14583SBruce Richardson {pattern_eth_ipv4_pfcp, ICE_MAC_IPV4_PFCP_SESSION}, 2023*c1d14583SBruce Richardson {pattern_eth_ipv6, ICE_PTYPE_IPV6_PAY}, 2024*c1d14583SBruce Richardson {pattern_eth_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY}, 2025*c1d14583SBruce Richardson {pattern_eth_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY}, 2026*c1d14583SBruce Richardson {pattern_eth_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY}, 2027*c1d14583SBruce Richardson {pattern_eth_ipv6_frag_ext, ICE_PTYPE_IPV6FRAG_PAY}, 2028*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu, ICE_MAC_IPV6_GTPU}, 2029*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh, ICE_MAC_IPV6_GTPU}, 2030*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY}, 2031*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY}, 2032*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP}, 2033*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY}, 2034*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY}, 2035*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP}, 2036*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh_ipv4, ICE_MAC_IPV6_GTPU_IPV4_PAY}, 2037*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_MAC_IPV6_GTPU_IPV4_UDP_PAY}, 2038*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_MAC_IPV6_GTPU_IPV4_TCP}, 2039*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh_ipv6, ICE_MAC_IPV6_GTPU_IPV6_PAY}, 2040*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_MAC_IPV6_GTPU_IPV6_UDP_PAY}, 2041*c1d14583SBruce Richardson {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_MAC_IPV6_GTPU_IPV6_TCP}, 2042*c1d14583SBruce Richardson {pattern_eth_ipv6_esp, ICE_MAC_IPV6_ESP}, 2043*c1d14583SBruce Richardson {pattern_eth_ipv6_udp_esp, ICE_MAC_IPV6_NAT_T_ESP}, 2044*c1d14583SBruce Richardson {pattern_eth_ipv6_ah, ICE_MAC_IPV6_AH}, 2045*c1d14583SBruce Richardson {pattern_eth_ipv6_l2tp, ICE_MAC_IPV6_L2TPV3}, 2046*c1d14583SBruce Richardson {pattern_eth_ipv6_pfcp, ICE_MAC_IPV6_PFCP_SESSION}, 2047*c1d14583SBruce Richardson {pattern_ethertype, ICE_PTYPE_MAC_PAY}, 2048*c1d14583SBruce Richardson {pattern_ethertype_vlan, ICE_PTYPE_MAC_PAY}, 2049*c1d14583SBruce Richardson {pattern_ethertype_qinq, ICE_PTYPE_MAC_PAY}, 2050*c1d14583SBruce Richardson {pattern_eth_arp, ICE_PTYPE_MAC_PAY}, 2051*c1d14583SBruce Richardson {pattern_eth_vlan_ipv4, ICE_PTYPE_IPV4_PAY}, 2052*c1d14583SBruce Richardson {pattern_eth_qinq_ipv4, ICE_PTYPE_IPV4_PAY}, 2053*c1d14583SBruce Richardson {pattern_eth_qinq_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY}, 2054*c1d14583SBruce Richardson {pattern_eth_qinq_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY}, 2055*c1d14583SBruce Richardson {pattern_eth_vlan_ipv4_udp, ICE_PTYPE_IPV4_UDP_PAY}, 2056*c1d14583SBruce Richardson {pattern_eth_vlan_ipv4_tcp, ICE_PTYPE_IPV4_TCP_PAY}, 2057*c1d14583SBruce Richardson {pattern_eth_vlan_ipv4_sctp, ICE_PTYPE_IPV4_SCTP_PAY}, 2058*c1d14583SBruce Richardson {pattern_eth_vlan_ipv6, ICE_PTYPE_IPV6_PAY}, 2059*c1d14583SBruce Richardson {pattern_eth_qinq_ipv6, ICE_PTYPE_IPV6_PAY}, 2060*c1d14583SBruce Richardson {pattern_eth_qinq_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY}, 2061*c1d14583SBruce Richardson {pattern_eth_qinq_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY}, 2062*c1d14583SBruce Richardson {pattern_eth_vlan_ipv6_udp, ICE_PTYPE_IPV6_UDP_PAY}, 2063*c1d14583SBruce Richardson {pattern_eth_vlan_ipv6_tcp, ICE_PTYPE_IPV6_TCP_PAY}, 2064*c1d14583SBruce Richardson {pattern_eth_vlan_ipv6_sctp, ICE_PTYPE_IPV6_SCTP_PAY}, 2065*c1d14583SBruce Richardson {pattern_eth_pppoes, ICE_MAC_PPPOE_PAY}, 2066*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes, ICE_MAC_PPPOE_PAY}, 2067*c1d14583SBruce Richardson {pattern_eth_qinq_pppoes, ICE_MAC_PPPOE_PAY}, 2068*c1d14583SBruce Richardson {pattern_eth_pppoes_proto, ICE_MAC_PPPOE_PAY}, 2069*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_proto, ICE_MAC_PPPOE_PAY}, 2070*c1d14583SBruce Richardson {pattern_eth_qinq_pppoes_proto, ICE_MAC_PPPOE_PAY}, 2071*c1d14583SBruce Richardson {pattern_eth_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY}, 2072*c1d14583SBruce Richardson {pattern_eth_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY}, 2073*c1d14583SBruce Richardson {pattern_eth_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP}, 2074*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY}, 2075*c1d14583SBruce Richardson {pattern_eth_qinq_pppoes_ipv4, ICE_MAC_PPPOE_IPV4_PAY}, 2076*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_ipv4_tcp, ICE_MAC_PPPOE_IPV4_TCP}, 2077*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_ipv4_udp, ICE_MAC_PPPOE_IPV4_UDP_PAY}, 2078*c1d14583SBruce Richardson {pattern_eth_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY}, 2079*c1d14583SBruce Richardson {pattern_eth_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY}, 2080*c1d14583SBruce Richardson {pattern_eth_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP}, 2081*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY}, 2082*c1d14583SBruce Richardson {pattern_eth_qinq_pppoes_ipv6, ICE_MAC_PPPOE_IPV6_PAY}, 2083*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_ipv6_tcp, ICE_MAC_PPPOE_IPV6_TCP}, 2084*c1d14583SBruce Richardson {pattern_eth_vlan_pppoes_ipv6_udp, ICE_MAC_PPPOE_IPV6_UDP_PAY}, 2085*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, 2086*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, 2087*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, 2088*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP}, 2089*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, 2090*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, 2091*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, 2092*c1d14583SBruce Richardson {pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp, ICE_MAC_IPV4_TUN_IPV4_SCTP}, 2093*c1d14583SBruce Richardson {pattern_eth_ipv4_nvgre_eth_ipv4, ICE_MAC_IPV4_TUN_IPV4_PAY}, 2094*c1d14583SBruce Richardson {pattern_eth_ipv4_nvgre_eth_ipv4_udp, ICE_MAC_IPV4_TUN_IPV4_UDP_PAY}, 2095*c1d14583SBruce Richardson {pattern_eth_ipv4_nvgre_eth_ipv4_tcp, ICE_MAC_IPV4_TUN_IPV4_TCP}, 2096*c1d14583SBruce Richardson {pattern_empty, 0}, 2097*c1d14583SBruce Richardson }; 2098*c1d14583SBruce Richardson 2099*c1d14583SBruce Richardson static bool 2100*c1d14583SBruce Richardson ice_pattern_is_supported(__rte_unused struct ice_adapter *ad, 2101*c1d14583SBruce Richardson const struct rte_flow_item *pattern) 2102*c1d14583SBruce Richardson { 2103*c1d14583SBruce Richardson uint16_t i; 2104*c1d14583SBruce Richardson 2105*c1d14583SBruce Richardson for (i = 0; i < RTE_DIM(ice_ptype_map); i++) { 2106*c1d14583SBruce Richardson if (ice_match_pattern(ice_ptype_map[i].pattern_list, 2107*c1d14583SBruce Richardson pattern)) { 2108*c1d14583SBruce Richardson return ice_hw_ptype_ena(&ad->hw, 2109*c1d14583SBruce Richardson ice_ptype_map[i].hw_ptype); 2110*c1d14583SBruce Richardson } 2111*c1d14583SBruce Richardson } 2112*c1d14583SBruce Richardson 2113*c1d14583SBruce Richardson return false; 2114*c1d14583SBruce Richardson } 2115*c1d14583SBruce Richardson 2116*c1d14583SBruce Richardson struct ice_pattern_match_item * 2117*c1d14583SBruce Richardson ice_search_pattern_match_item(struct ice_adapter *ad, 2118*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 2119*c1d14583SBruce Richardson struct ice_pattern_match_item *array, 2120*c1d14583SBruce Richardson uint32_t array_len, 2121*c1d14583SBruce Richardson struct rte_flow_error *error) 2122*c1d14583SBruce Richardson { 2123*c1d14583SBruce Richardson struct ice_pattern_match_item *pattern_match_item; 2124*c1d14583SBruce Richardson /* need free by each filter */ 2125*c1d14583SBruce Richardson struct rte_flow_item *items; /* used for pattern without VOID items */ 2126*c1d14583SBruce Richardson uint32_t item_num = 0; /* non-void item number */ 2127*c1d14583SBruce Richardson uint16_t i = 0; 2128*c1d14583SBruce Richardson 2129*c1d14583SBruce Richardson /* Get the non-void item number of pattern */ 2130*c1d14583SBruce Richardson while ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_END) { 2131*c1d14583SBruce Richardson if ((pattern + i)->type != RTE_FLOW_ITEM_TYPE_VOID) 2132*c1d14583SBruce Richardson item_num++; 2133*c1d14583SBruce Richardson i++; 2134*c1d14583SBruce Richardson } 2135*c1d14583SBruce Richardson item_num++; 2136*c1d14583SBruce Richardson 2137*c1d14583SBruce Richardson items = rte_zmalloc("ice_pattern", 2138*c1d14583SBruce Richardson item_num * sizeof(struct rte_flow_item), 0); 2139*c1d14583SBruce Richardson if (!items) { 2140*c1d14583SBruce Richardson rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ITEM_NUM, 2141*c1d14583SBruce Richardson NULL, "No memory for PMD internal items."); 2142*c1d14583SBruce Richardson return NULL; 2143*c1d14583SBruce Richardson } 2144*c1d14583SBruce Richardson pattern_match_item = rte_zmalloc("ice_pattern_match_item", 2145*c1d14583SBruce Richardson sizeof(struct ice_pattern_match_item), 0); 2146*c1d14583SBruce Richardson if (!pattern_match_item) { 2147*c1d14583SBruce Richardson rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE, 2148*c1d14583SBruce Richardson NULL, "Failed to allocate memory."); 2149*c1d14583SBruce Richardson rte_free(items); 2150*c1d14583SBruce Richardson return NULL; 2151*c1d14583SBruce Richardson } 2152*c1d14583SBruce Richardson 2153*c1d14583SBruce Richardson ice_pattern_skip_void_item(items, pattern); 2154*c1d14583SBruce Richardson 2155*c1d14583SBruce Richardson if (!ice_pattern_is_supported(ad, pattern)) 2156*c1d14583SBruce Richardson goto unsupported; 2157*c1d14583SBruce Richardson 2158*c1d14583SBruce Richardson for (i = 0; i < array_len; i++) { 2159*c1d14583SBruce Richardson if (ice_match_pattern(array[i].pattern_list, 2160*c1d14583SBruce Richardson items)) { 2161*c1d14583SBruce Richardson pattern_match_item->input_set_mask_o = 2162*c1d14583SBruce Richardson array[i].input_set_mask_o; 2163*c1d14583SBruce Richardson pattern_match_item->input_set_mask_i = 2164*c1d14583SBruce Richardson array[i].input_set_mask_i; 2165*c1d14583SBruce Richardson pattern_match_item->pattern_list = 2166*c1d14583SBruce Richardson array[i].pattern_list; 2167*c1d14583SBruce Richardson pattern_match_item->meta = array[i].meta; 2168*c1d14583SBruce Richardson rte_free(items); 2169*c1d14583SBruce Richardson return pattern_match_item; 2170*c1d14583SBruce Richardson } 2171*c1d14583SBruce Richardson } 2172*c1d14583SBruce Richardson 2173*c1d14583SBruce Richardson unsupported: 2174*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM, 2175*c1d14583SBruce Richardson pattern, "Unsupported pattern"); 2176*c1d14583SBruce Richardson rte_free(items); 2177*c1d14583SBruce Richardson rte_free(pattern_match_item); 2178*c1d14583SBruce Richardson return NULL; 2179*c1d14583SBruce Richardson } 2180*c1d14583SBruce Richardson 2181*c1d14583SBruce Richardson static bool 2182*c1d14583SBruce Richardson ice_parse_engine_create(struct ice_adapter *ad, 2183*c1d14583SBruce Richardson struct rte_flow *flow, 2184*c1d14583SBruce Richardson struct ice_flow_parser *parser, 2185*c1d14583SBruce Richardson uint32_t priority, 2186*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 2187*c1d14583SBruce Richardson const struct rte_flow_action actions[], 2188*c1d14583SBruce Richardson struct rte_flow_error *error) 2189*c1d14583SBruce Richardson { 2190*c1d14583SBruce Richardson void *meta = NULL; 2191*c1d14583SBruce Richardson 2192*c1d14583SBruce Richardson if (ICE_FLOW_ENGINE_DISABLED(ad->disabled_engine_mask, 2193*c1d14583SBruce Richardson parser->engine->type)) { 2194*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2195*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_UNSPECIFIED, 2196*c1d14583SBruce Richardson NULL, "engine is not enabled."); 2197*c1d14583SBruce Richardson return false; 2198*c1d14583SBruce Richardson } 2199*c1d14583SBruce Richardson 2200*c1d14583SBruce Richardson if (parser->parse_pattern_action(ad, 2201*c1d14583SBruce Richardson parser->array, 2202*c1d14583SBruce Richardson parser->array_len, 2203*c1d14583SBruce Richardson pattern, actions, priority, &meta, error) < 0) 2204*c1d14583SBruce Richardson return false; 2205*c1d14583SBruce Richardson 2206*c1d14583SBruce Richardson RTE_ASSERT(parser->engine->create != NULL); 2207*c1d14583SBruce Richardson 2208*c1d14583SBruce Richardson return parser->engine->create(ad, flow, meta, error) == 0; 2209*c1d14583SBruce Richardson } 2210*c1d14583SBruce Richardson 2211*c1d14583SBruce Richardson static bool 2212*c1d14583SBruce Richardson ice_parse_engine_validate(struct ice_adapter *ad, 2213*c1d14583SBruce Richardson struct rte_flow *flow __rte_unused, 2214*c1d14583SBruce Richardson struct ice_flow_parser *parser, 2215*c1d14583SBruce Richardson uint32_t priority, 2216*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 2217*c1d14583SBruce Richardson const struct rte_flow_action actions[], 2218*c1d14583SBruce Richardson struct rte_flow_error *error) 2219*c1d14583SBruce Richardson { 2220*c1d14583SBruce Richardson 2221*c1d14583SBruce Richardson if (ICE_FLOW_ENGINE_DISABLED(ad->disabled_engine_mask, 2222*c1d14583SBruce Richardson parser->engine->type)) { 2223*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2224*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_UNSPECIFIED, 2225*c1d14583SBruce Richardson NULL, "engine is not enabled."); 2226*c1d14583SBruce Richardson return false; 2227*c1d14583SBruce Richardson } 2228*c1d14583SBruce Richardson 2229*c1d14583SBruce Richardson return parser->parse_pattern_action(ad, 2230*c1d14583SBruce Richardson parser->array, 2231*c1d14583SBruce Richardson parser->array_len, 2232*c1d14583SBruce Richardson pattern, actions, priority, 2233*c1d14583SBruce Richardson NULL, error) >= 0; 2234*c1d14583SBruce Richardson } 2235*c1d14583SBruce Richardson 2236*c1d14583SBruce Richardson static struct ice_flow_parser *get_flow_parser(uint32_t group) 2237*c1d14583SBruce Richardson { 2238*c1d14583SBruce Richardson switch (group) { 2239*c1d14583SBruce Richardson case 0: 2240*c1d14583SBruce Richardson return &ice_switch_parser; 2241*c1d14583SBruce Richardson case 1: 2242*c1d14583SBruce Richardson return &ice_acl_parser; 2243*c1d14583SBruce Richardson case 2: 2244*c1d14583SBruce Richardson return &ice_fdir_parser; 2245*c1d14583SBruce Richardson default: 2246*c1d14583SBruce Richardson return NULL; 2247*c1d14583SBruce Richardson } 2248*c1d14583SBruce Richardson } 2249*c1d14583SBruce Richardson 2250*c1d14583SBruce Richardson static int 2251*c1d14583SBruce Richardson ice_flow_process_filter(struct rte_eth_dev *dev, 2252*c1d14583SBruce Richardson struct rte_flow *flow, 2253*c1d14583SBruce Richardson const struct rte_flow_attr *attr, 2254*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 2255*c1d14583SBruce Richardson const struct rte_flow_action actions[], 2256*c1d14583SBruce Richardson struct ice_flow_engine **engine, 2257*c1d14583SBruce Richardson parse_engine_t ice_parse_engine, 2258*c1d14583SBruce Richardson struct rte_flow_error *error) 2259*c1d14583SBruce Richardson { 2260*c1d14583SBruce Richardson int ret = ICE_ERR_NOT_SUPPORTED; 2261*c1d14583SBruce Richardson struct ice_adapter *ad = 2262*c1d14583SBruce Richardson ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); 2263*c1d14583SBruce Richardson struct ice_flow_parser *parser; 2264*c1d14583SBruce Richardson 2265*c1d14583SBruce Richardson if (!pattern) { 2266*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ITEM_NUM, 2267*c1d14583SBruce Richardson NULL, "NULL pattern."); 2268*c1d14583SBruce Richardson return -rte_errno; 2269*c1d14583SBruce Richardson } 2270*c1d14583SBruce Richardson 2271*c1d14583SBruce Richardson if (!actions || actions->type == RTE_FLOW_ACTION_TYPE_END) { 2272*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2273*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ACTION_NUM, 2274*c1d14583SBruce Richardson NULL, "NULL action."); 2275*c1d14583SBruce Richardson return -rte_errno; 2276*c1d14583SBruce Richardson } 2277*c1d14583SBruce Richardson 2278*c1d14583SBruce Richardson if (!attr) { 2279*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2280*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ATTR, 2281*c1d14583SBruce Richardson NULL, "NULL attribute."); 2282*c1d14583SBruce Richardson return -rte_errno; 2283*c1d14583SBruce Richardson } 2284*c1d14583SBruce Richardson 2285*c1d14583SBruce Richardson ret = ice_flow_valid_attr(attr, error); 2286*c1d14583SBruce Richardson if (ret) 2287*c1d14583SBruce Richardson return ret; 2288*c1d14583SBruce Richardson 2289*c1d14583SBruce Richardson *engine = NULL; 2290*c1d14583SBruce Richardson /* always try hash engine first */ 2291*c1d14583SBruce Richardson if (ice_parse_engine(ad, flow, &ice_hash_parser, 2292*c1d14583SBruce Richardson attr->priority, pattern, 2293*c1d14583SBruce Richardson actions, error)) { 2294*c1d14583SBruce Richardson *engine = ice_hash_parser.engine; 2295*c1d14583SBruce Richardson return 0; 2296*c1d14583SBruce Richardson } 2297*c1d14583SBruce Richardson 2298*c1d14583SBruce Richardson parser = get_flow_parser(attr->group); 2299*c1d14583SBruce Richardson if (parser == NULL) { 2300*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2301*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ATTR, 2302*c1d14583SBruce Richardson NULL, "NULL attribute."); 2303*c1d14583SBruce Richardson return -rte_errno; 2304*c1d14583SBruce Richardson } 2305*c1d14583SBruce Richardson 2306*c1d14583SBruce Richardson if (ice_parse_engine(ad, flow, parser, attr->priority, 2307*c1d14583SBruce Richardson pattern, actions, error)) { 2308*c1d14583SBruce Richardson *engine = parser->engine; 2309*c1d14583SBruce Richardson return 0; 2310*c1d14583SBruce Richardson } else { 2311*c1d14583SBruce Richardson return -rte_errno; 2312*c1d14583SBruce Richardson } 2313*c1d14583SBruce Richardson } 2314*c1d14583SBruce Richardson 2315*c1d14583SBruce Richardson static int 2316*c1d14583SBruce Richardson ice_flow_validate(struct rte_eth_dev *dev, 2317*c1d14583SBruce Richardson const struct rte_flow_attr *attr, 2318*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 2319*c1d14583SBruce Richardson const struct rte_flow_action actions[], 2320*c1d14583SBruce Richardson struct rte_flow_error *error) 2321*c1d14583SBruce Richardson { 2322*c1d14583SBruce Richardson struct ice_flow_engine *engine; 2323*c1d14583SBruce Richardson 2324*c1d14583SBruce Richardson return ice_flow_process_filter(dev, NULL, attr, pattern, actions, 2325*c1d14583SBruce Richardson &engine, ice_parse_engine_validate, error); 2326*c1d14583SBruce Richardson } 2327*c1d14583SBruce Richardson 2328*c1d14583SBruce Richardson static struct rte_flow * 2329*c1d14583SBruce Richardson ice_flow_create(struct rte_eth_dev *dev, 2330*c1d14583SBruce Richardson const struct rte_flow_attr *attr, 2331*c1d14583SBruce Richardson const struct rte_flow_item pattern[], 2332*c1d14583SBruce Richardson const struct rte_flow_action actions[], 2333*c1d14583SBruce Richardson struct rte_flow_error *error) 2334*c1d14583SBruce Richardson { 2335*c1d14583SBruce Richardson struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private); 2336*c1d14583SBruce Richardson struct rte_flow *flow = NULL; 2337*c1d14583SBruce Richardson int ret; 2338*c1d14583SBruce Richardson struct ice_flow_engine *engine = NULL; 2339*c1d14583SBruce Richardson 2340*c1d14583SBruce Richardson flow = rte_zmalloc("ice_flow", sizeof(struct rte_flow), 0); 2341*c1d14583SBruce Richardson if (!flow) { 2342*c1d14583SBruce Richardson rte_flow_error_set(error, ENOMEM, 2343*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_HANDLE, NULL, 2344*c1d14583SBruce Richardson "Failed to allocate memory"); 2345*c1d14583SBruce Richardson return flow; 2346*c1d14583SBruce Richardson } 2347*c1d14583SBruce Richardson 2348*c1d14583SBruce Richardson rte_spinlock_lock(&pf->flow_ops_lock); 2349*c1d14583SBruce Richardson 2350*c1d14583SBruce Richardson ret = ice_flow_process_filter(dev, flow, attr, pattern, actions, 2351*c1d14583SBruce Richardson &engine, ice_parse_engine_create, error); 2352*c1d14583SBruce Richardson if (ret < 0) { 2353*c1d14583SBruce Richardson PMD_DRV_LOG(ERR, "Failed to create flow"); 2354*c1d14583SBruce Richardson rte_free(flow); 2355*c1d14583SBruce Richardson flow = NULL; 2356*c1d14583SBruce Richardson goto out; 2357*c1d14583SBruce Richardson } 2358*c1d14583SBruce Richardson 2359*c1d14583SBruce Richardson flow->engine = engine; 2360*c1d14583SBruce Richardson TAILQ_INSERT_TAIL(&pf->flow_list, flow, node); 2361*c1d14583SBruce Richardson PMD_DRV_LOG(INFO, "Succeeded to create (%d) flow", engine->type); 2362*c1d14583SBruce Richardson 2363*c1d14583SBruce Richardson out: 2364*c1d14583SBruce Richardson rte_spinlock_unlock(&pf->flow_ops_lock); 2365*c1d14583SBruce Richardson return flow; 2366*c1d14583SBruce Richardson } 2367*c1d14583SBruce Richardson 2368*c1d14583SBruce Richardson static int 2369*c1d14583SBruce Richardson ice_flow_destroy(struct rte_eth_dev *dev, 2370*c1d14583SBruce Richardson struct rte_flow *flow, 2371*c1d14583SBruce Richardson struct rte_flow_error *error) 2372*c1d14583SBruce Richardson { 2373*c1d14583SBruce Richardson struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private); 2374*c1d14583SBruce Richardson struct ice_adapter *ad = 2375*c1d14583SBruce Richardson ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); 2376*c1d14583SBruce Richardson int ret = 0; 2377*c1d14583SBruce Richardson 2378*c1d14583SBruce Richardson if (!flow || !flow->engine || !flow->engine->destroy) { 2379*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2380*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_HANDLE, 2381*c1d14583SBruce Richardson NULL, "Invalid flow"); 2382*c1d14583SBruce Richardson return -rte_errno; 2383*c1d14583SBruce Richardson } 2384*c1d14583SBruce Richardson 2385*c1d14583SBruce Richardson rte_spinlock_lock(&pf->flow_ops_lock); 2386*c1d14583SBruce Richardson 2387*c1d14583SBruce Richardson ret = flow->engine->destroy(ad, flow, error); 2388*c1d14583SBruce Richardson if (!ret) { 2389*c1d14583SBruce Richardson TAILQ_REMOVE(&pf->flow_list, flow, node); 2390*c1d14583SBruce Richardson rte_free(flow); 2391*c1d14583SBruce Richardson } else { 2392*c1d14583SBruce Richardson PMD_DRV_LOG(ERR, "Failed to destroy flow"); 2393*c1d14583SBruce Richardson } 2394*c1d14583SBruce Richardson 2395*c1d14583SBruce Richardson rte_spinlock_unlock(&pf->flow_ops_lock); 2396*c1d14583SBruce Richardson 2397*c1d14583SBruce Richardson return ret; 2398*c1d14583SBruce Richardson } 2399*c1d14583SBruce Richardson 2400*c1d14583SBruce Richardson static int 2401*c1d14583SBruce Richardson ice_flow_flush(struct rte_eth_dev *dev, 2402*c1d14583SBruce Richardson struct rte_flow_error *error) 2403*c1d14583SBruce Richardson { 2404*c1d14583SBruce Richardson struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private); 2405*c1d14583SBruce Richardson struct rte_flow *p_flow; 2406*c1d14583SBruce Richardson void *temp; 2407*c1d14583SBruce Richardson int ret = 0; 2408*c1d14583SBruce Richardson 2409*c1d14583SBruce Richardson RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { 2410*c1d14583SBruce Richardson ret = ice_flow_destroy(dev, p_flow, error); 2411*c1d14583SBruce Richardson if (ret) { 2412*c1d14583SBruce Richardson PMD_DRV_LOG(ERR, "Failed to flush flows"); 2413*c1d14583SBruce Richardson if (ret != -EAGAIN) 2414*c1d14583SBruce Richardson ret = -EINVAL; 2415*c1d14583SBruce Richardson return ret; 2416*c1d14583SBruce Richardson } 2417*c1d14583SBruce Richardson } 2418*c1d14583SBruce Richardson 2419*c1d14583SBruce Richardson return ret; 2420*c1d14583SBruce Richardson } 2421*c1d14583SBruce Richardson 2422*c1d14583SBruce Richardson static int 2423*c1d14583SBruce Richardson ice_flow_query(struct rte_eth_dev *dev, 2424*c1d14583SBruce Richardson struct rte_flow *flow, 2425*c1d14583SBruce Richardson const struct rte_flow_action *actions, 2426*c1d14583SBruce Richardson void *data, 2427*c1d14583SBruce Richardson struct rte_flow_error *error) 2428*c1d14583SBruce Richardson { 2429*c1d14583SBruce Richardson int ret = -EINVAL; 2430*c1d14583SBruce Richardson struct ice_adapter *ad = 2431*c1d14583SBruce Richardson ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); 2432*c1d14583SBruce Richardson struct rte_flow_query_count *count = data; 2433*c1d14583SBruce Richardson struct ice_pf *pf = &ad->pf; 2434*c1d14583SBruce Richardson 2435*c1d14583SBruce Richardson if (!flow || !flow->engine || !flow->engine->query_count) { 2436*c1d14583SBruce Richardson rte_flow_error_set(error, EINVAL, 2437*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_HANDLE, 2438*c1d14583SBruce Richardson NULL, "Invalid flow"); 2439*c1d14583SBruce Richardson return -rte_errno; 2440*c1d14583SBruce Richardson } 2441*c1d14583SBruce Richardson 2442*c1d14583SBruce Richardson rte_spinlock_lock(&pf->flow_ops_lock); 2443*c1d14583SBruce Richardson 2444*c1d14583SBruce Richardson for (; actions->type != RTE_FLOW_ACTION_TYPE_END; actions++) { 2445*c1d14583SBruce Richardson switch (actions->type) { 2446*c1d14583SBruce Richardson case RTE_FLOW_ACTION_TYPE_VOID: 2447*c1d14583SBruce Richardson break; 2448*c1d14583SBruce Richardson case RTE_FLOW_ACTION_TYPE_COUNT: 2449*c1d14583SBruce Richardson ret = flow->engine->query_count(ad, flow, count, error); 2450*c1d14583SBruce Richardson break; 2451*c1d14583SBruce Richardson default: 2452*c1d14583SBruce Richardson ret = rte_flow_error_set(error, ENOTSUP, 2453*c1d14583SBruce Richardson RTE_FLOW_ERROR_TYPE_ACTION, 2454*c1d14583SBruce Richardson actions, 2455*c1d14583SBruce Richardson "action not supported"); 2456*c1d14583SBruce Richardson goto out; 2457*c1d14583SBruce Richardson } 2458*c1d14583SBruce Richardson } 2459*c1d14583SBruce Richardson 2460*c1d14583SBruce Richardson out: 2461*c1d14583SBruce Richardson rte_spinlock_unlock(&pf->flow_ops_lock); 2462*c1d14583SBruce Richardson return ret; 2463*c1d14583SBruce Richardson } 2464*c1d14583SBruce Richardson 2465*c1d14583SBruce Richardson int 2466*c1d14583SBruce Richardson ice_flow_redirect(struct ice_adapter *ad, 2467*c1d14583SBruce Richardson struct ice_flow_redirect *rd) 2468*c1d14583SBruce Richardson { 2469*c1d14583SBruce Richardson struct ice_pf *pf = &ad->pf; 2470*c1d14583SBruce Richardson struct rte_flow *p_flow; 2471*c1d14583SBruce Richardson void *temp; 2472*c1d14583SBruce Richardson int ret = 0; 2473*c1d14583SBruce Richardson 2474*c1d14583SBruce Richardson rte_spinlock_lock(&pf->flow_ops_lock); 2475*c1d14583SBruce Richardson 2476*c1d14583SBruce Richardson RTE_TAILQ_FOREACH_SAFE(p_flow, &pf->flow_list, node, temp) { 2477*c1d14583SBruce Richardson if (!p_flow->engine->redirect) 2478*c1d14583SBruce Richardson continue; 2479*c1d14583SBruce Richardson ret = p_flow->engine->redirect(ad, p_flow, rd); 2480*c1d14583SBruce Richardson if (ret) { 2481*c1d14583SBruce Richardson PMD_DRV_LOG(ERR, "Failed to redirect flows"); 2482*c1d14583SBruce Richardson break; 2483*c1d14583SBruce Richardson } 2484*c1d14583SBruce Richardson } 2485*c1d14583SBruce Richardson 2486*c1d14583SBruce Richardson rte_spinlock_unlock(&pf->flow_ops_lock); 2487*c1d14583SBruce Richardson 2488*c1d14583SBruce Richardson return ret; 2489*c1d14583SBruce Richardson } 2490