dpdk/drivers/net/ice/ice_generic_flow.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2019 Intel Corporation
   3 */
   4
   5#ifndef _ICE_GENERIC_FLOW_H_
   6#define _ICE_GENERIC_FLOW_H_
   7
   8#include <rte_flow_driver.h>
   9
  10/* protocol */
  11
  12#define ICE_PROT_MAC_INNER         (1ULL << 1)
  13#define ICE_PROT_MAC_OUTER         (1ULL << 2)
  14#define ICE_PROT_VLAN_INNER        (1ULL << 3)
  15#define ICE_PROT_VLAN_OUTER        (1ULL << 4)
  16#define ICE_PROT_IPV4_INNER        (1ULL << 5)
  17#define ICE_PROT_IPV4_OUTER        (1ULL << 6)
  18#define ICE_PROT_IPV6_INNER        (1ULL << 7)
  19#define ICE_PROT_IPV6_OUTER        (1ULL << 8)
  20#define ICE_PROT_TCP_INNER         (1ULL << 9)
  21#define ICE_PROT_TCP_OUTER         (1ULL << 10)
  22#define ICE_PROT_UDP_INNER         (1ULL << 11)
  23#define ICE_PROT_UDP_OUTER         (1ULL << 12)
  24#define ICE_PROT_SCTP_INNER        (1ULL << 13)
  25#define ICE_PROT_SCTP_OUTER        (1ULL << 14)
  26#define ICE_PROT_ICMP4_INNER       (1ULL << 15)
  27#define ICE_PROT_ICMP4_OUTER       (1ULL << 16)
  28#define ICE_PROT_ICMP6_INNER       (1ULL << 17)
  29#define ICE_PROT_ICMP6_OUTER       (1ULL << 18)
  30#define ICE_PROT_VXLAN             (1ULL << 19)
  31#define ICE_PROT_NVGRE             (1ULL << 20)
  32#define ICE_PROT_GTPU              (1ULL << 21)
  33#define ICE_PROT_PPPOE_S           (1ULL << 22)
  34#define ICE_PROT_ESP               (1ULL << 23)
  35#define ICE_PROT_AH                (1ULL << 24)
  36#define ICE_PROT_L2TPV3OIP         (1ULL << 25)
  37#define ICE_PROT_PFCP              (1ULL << 26)
  38
  39/* field */
  40
  41#define ICE_SMAC                   (1ULL << 63)
  42#define ICE_DMAC                   (1ULL << 62)
  43#define ICE_ETHERTYPE              (1ULL << 61)
  44#define ICE_IP_SRC                 (1ULL << 60)
  45#define ICE_IP_DST                 (1ULL << 59)
  46#define ICE_IP_PROTO               (1ULL << 58)
  47#define ICE_IP_TTL                 (1ULL << 57)
  48#define ICE_IP_TOS                 (1ULL << 56)
  49#define ICE_SPORT                  (1ULL << 55)
  50#define ICE_DPORT                  (1ULL << 54)
  51#define ICE_ICMP_TYPE              (1ULL << 53)
  52#define ICE_ICMP_CODE              (1ULL << 52)
  53#define ICE_VXLAN_VNI              (1ULL << 51)
  54#define ICE_NVGRE_TNI              (1ULL << 50)
  55#define ICE_GTPU_TEID              (1ULL << 49)
  56#define ICE_GTPU_QFI               (1ULL << 48)
  57#define ICE_PPPOE_SESSION          (1ULL << 47)
  58#define ICE_PPPOE_PROTO            (1ULL << 46)
  59#define ICE_ESP_SPI                (1ULL << 45)
  60#define ICE_AH_SPI                 (1ULL << 44)
  61#define ICE_L2TPV3OIP_SESSION_ID   (1ULL << 43)
  62#define ICE_PFCP_SEID              (1ULL << 42)
  63#define ICE_PFCP_S_FIELD           (1ULL << 41)
  64
  65/* input set */
  66
  67#define ICE_INSET_NONE             0ULL
  68
  69/* non-tunnel */
  70
  71#define ICE_INSET_SMAC         (ICE_PROT_MAC_OUTER | ICE_SMAC)
  72#define ICE_INSET_DMAC         (ICE_PROT_MAC_OUTER | ICE_DMAC)
  73#define ICE_INSET_VLAN_INNER   (ICE_PROT_VLAN_INNER)
  74#define ICE_INSET_VLAN_OUTER   (ICE_PROT_VLAN_OUTER)
  75#define ICE_INSET_ETHERTYPE    (ICE_ETHERTYPE)
  76
  77#define ICE_INSET_IPV4_SRC \
  78        (ICE_PROT_IPV4_OUTER | ICE_IP_SRC)
  79#define ICE_INSET_IPV4_DST \
  80        (ICE_PROT_IPV4_OUTER | ICE_IP_DST)
  81#define ICE_INSET_IPV4_TOS \
  82        (ICE_PROT_IPV4_OUTER | ICE_IP_TOS)
  83#define ICE_INSET_IPV4_PROTO \
  84        (ICE_PROT_IPV4_OUTER | ICE_IP_PROTO)
  85#define ICE_INSET_IPV4_TTL \
  86        (ICE_PROT_IPV4_OUTER | ICE_IP_TTL)
  87#define ICE_INSET_IPV6_SRC \
  88        (ICE_PROT_IPV6_OUTER | ICE_IP_SRC)
  89#define ICE_INSET_IPV6_DST \
  90        (ICE_PROT_IPV6_OUTER | ICE_IP_DST)
  91#define ICE_INSET_IPV6_NEXT_HDR \
  92        (ICE_PROT_IPV6_OUTER | ICE_IP_PROTO)
  93#define ICE_INSET_IPV6_HOP_LIMIT \
  94        (ICE_PROT_IPV6_OUTER | ICE_IP_TTL)
  95#define ICE_INSET_IPV6_TC \
  96        (ICE_PROT_IPV6_OUTER | ICE_IP_TOS)
  97
  98#define ICE_INSET_TCP_SRC_PORT \
  99        (ICE_PROT_TCP_OUTER | ICE_SPORT)
 100#define ICE_INSET_TCP_DST_PORT \
 101        (ICE_PROT_TCP_OUTER | ICE_DPORT)
 102#define ICE_INSET_UDP_SRC_PORT \
 103        (ICE_PROT_UDP_OUTER | ICE_SPORT)
 104#define ICE_INSET_UDP_DST_PORT \
 105        (ICE_PROT_UDP_OUTER | ICE_DPORT)
 106#define ICE_INSET_SCTP_SRC_PORT \
 107        (ICE_PROT_SCTP_OUTER | ICE_SPORT)
 108#define ICE_INSET_SCTP_DST_PORT \
 109        (ICE_PROT_SCTP_OUTER | ICE_DPORT)
 110#define ICE_INSET_ICMP4_SRC_PORT \
 111        (ICE_PROT_ICMP4_OUTER | ICE_SPORT)
 112#define ICE_INSET_ICMP4_DST_PORT \
 113        (ICE_PROT_ICMP4_OUTER | ICE_DPORT)
 114#define ICE_INSET_ICMP6_SRC_PORT \
 115        (ICE_PROT_ICMP6_OUTER | ICE_SPORT)
 116#define ICE_INSET_ICMP6_DST_PORT \
 117        (ICE_PROT_ICMP6_OUTER | ICE_DPORT)
 118#define ICE_INSET_ICMP4_TYPE \
 119        (ICE_PROT_ICMP4_OUTER | ICE_ICMP_TYPE)
 120#define ICE_INSET_ICMP4_CODE \
 121        (ICE_PROT_ICMP4_OUTER | ICE_ICMP_CODE)
 122#define ICE_INSET_ICMP6_TYPE \
 123        (ICE_PROT_ICMP6_OUTER | ICE_ICMP_TYPE)
 124#define ICE_INSET_ICMP6_CODE \
 125        (ICE_PROT_ICMP6_OUTER | ICE_ICMP_CODE)
 126
 127/* tunnel */
 128
 129#define ICE_INSET_TUN_SMAC \
 130        (ICE_PROT_MAC_INNER | ICE_SMAC)
 131#define ICE_INSET_TUN_DMAC \
 132        (ICE_PROT_MAC_INNER | ICE_DMAC)
 133
 134#define ICE_INSET_TUN_IPV4_SRC \
 135        (ICE_PROT_IPV4_INNER | ICE_IP_SRC)
 136#define ICE_INSET_TUN_IPV4_DST \
 137        (ICE_PROT_IPV4_INNER | ICE_IP_DST)
 138#define ICE_INSET_TUN_IPV4_TTL \
 139        (ICE_PROT_IPV4_INNER | ICE_IP_TTL)
 140#define ICE_INSET_TUN_IPV4_PROTO \
 141        (ICE_PROT_IPV4_INNER | ICE_IP_PROTO)
 142#define ICE_INSET_TUN_IPV4_TOS \
 143        (ICE_PROT_IPV4_INNER | ICE_IP_TOS)
 144#define ICE_INSET_TUN_IPV6_SRC \
 145        (ICE_PROT_IPV6_INNER | ICE_IP_SRC)
 146#define ICE_INSET_TUN_IPV6_DST \
 147        (ICE_PROT_IPV6_INNER | ICE_IP_DST)
 148#define ICE_INSET_TUN_IPV6_HOP_LIMIT \
 149        (ICE_PROT_IPV6_INNER | ICE_IP_TTL)
 150#define ICE_INSET_TUN_IPV6_NEXT_HDR \
 151        (ICE_PROT_IPV6_INNER | ICE_IP_PROTO)
 152#define ICE_INSET_TUN_IPV6_TC \
 153        (ICE_PROT_IPV6_INNER | ICE_IP_TOS)
 154
 155#define ICE_INSET_TUN_TCP_SRC_PORT \
 156        (ICE_PROT_TCP_INNER | ICE_SPORT)
 157#define ICE_INSET_TUN_TCP_DST_PORT \
 158        (ICE_PROT_TCP_INNER | ICE_DPORT)
 159#define ICE_INSET_TUN_UDP_SRC_PORT \
 160        (ICE_PROT_UDP_INNER | ICE_SPORT)
 161#define ICE_INSET_TUN_UDP_DST_PORT \
 162        (ICE_PROT_UDP_INNER | ICE_DPORT)
 163#define ICE_INSET_TUN_SCTP_SRC_PORT \
 164        (ICE_PROT_SCTP_INNER | ICE_SPORT)
 165#define ICE_INSET_TUN_SCTP_DST_PORT \
 166        (ICE_PROT_SCTP_INNER | ICE_DPORT)
 167#define ICE_INSET_TUN_ICMP4_SRC_PORT \
 168        (ICE_PROT_ICMP4_INNER | ICE_SPORT)
 169#define ICE_INSET_TUN_ICMP4_DST_PORT \
 170        (ICE_PROT_ICMP4_INNER | ICE_DPORT)
 171#define ICE_INSET_TUN_ICMP6_SRC_PORT \
 172        (ICE_PROT_ICMP6_INNER | ICE_SPORT)
 173#define ICE_INSET_TUN_ICMP6_DST_PORT \
 174        (ICE_PROT_ICMP6_INNER | ICE_DPORT)
 175#define ICE_INSET_TUN_ICMP4_TYPE \
 176        (ICE_PROT_ICMP4_INNER | ICE_ICMP_TYPE)
 177#define ICE_INSET_TUN_ICMP4_CODE \
 178        (ICE_PROT_ICMP4_INNER | ICE_ICMP_CODE)
 179#define ICE_INSET_TUN_ICMP6_TYPE \
 180        (ICE_PROT_ICMP6_INNER | ICE_ICMP_TYPE)
 181#define ICE_INSET_TUN_ICMP6_CODE \
 182        (ICE_PROT_ICMP6_INNER | ICE_ICMP_CODE)
 183
 184#define ICE_INSET_TUN_VXLAN_VNI \
 185        (ICE_PROT_VXLAN | ICE_VXLAN_VNI)
 186#define ICE_INSET_TUN_NVGRE_TNI \
 187        (ICE_PROT_NVGRE | ICE_NVGRE_TNI)
 188#define ICE_INSET_GTPU_TEID \
 189        (ICE_PROT_GTPU | ICE_GTPU_TEID)
 190#define ICE_INSET_GTPU_QFI \
 191        (ICE_PROT_GTPU | ICE_GTPU_QFI)
 192#define ICE_INSET_PPPOE_SESSION \
 193        (ICE_PROT_PPPOE_S | ICE_PPPOE_SESSION)
 194#define ICE_INSET_PPPOE_PROTO \
 195        (ICE_PROT_PPPOE_S | ICE_PPPOE_PROTO)
 196#define ICE_INSET_ESP_SPI \
 197        (ICE_PROT_ESP | ICE_ESP_SPI)
 198#define ICE_INSET_AH_SPI \
 199        (ICE_PROT_AH | ICE_AH_SPI)
 200#define ICE_INSET_L2TPV3OIP_SESSION_ID \
 201        (ICE_PROT_L2TPV3OIP | ICE_L2TPV3OIP_SESSION_ID)
 202#define ICE_INSET_PFCP_S_FIELD \
 203        (ICE_PROT_PFCP | ICE_PFCP_S_FIELD)
 204#define ICE_INSET_PFCP_SEID \
 205        (ICE_PROT_PFCP | ICE_PFCP_S_FIELD | ICE_PFCP_SEID)
 206
 207/* empty pattern */
 208extern enum rte_flow_item_type pattern_empty[];
 209
 210/* L2 */
 211extern enum rte_flow_item_type pattern_ethertype[];
 212extern enum rte_flow_item_type pattern_ethertype_vlan[];
 213extern enum rte_flow_item_type pattern_ethertype_qinq[];
 214
 215/* ARP */
 216extern enum rte_flow_item_type pattern_eth_arp[];
 217
 218/* non-tunnel IPv4 */
 219extern enum rte_flow_item_type pattern_eth_ipv4[];
 220extern enum rte_flow_item_type pattern_eth_vlan_ipv4[];
 221extern enum rte_flow_item_type pattern_eth_qinq_ipv4[];
 222extern enum rte_flow_item_type pattern_eth_ipv4_udp[];
 223extern enum rte_flow_item_type pattern_eth_vlan_ipv4_udp[];
 224extern enum rte_flow_item_type pattern_eth_qinq_ipv4_udp[];
 225extern enum rte_flow_item_type pattern_eth_ipv4_tcp[];
 226extern enum rte_flow_item_type pattern_eth_vlan_ipv4_tcp[];
 227extern enum rte_flow_item_type pattern_eth_qinq_ipv4_tcp[];
 228extern enum rte_flow_item_type pattern_eth_ipv4_sctp[];
 229extern enum rte_flow_item_type pattern_eth_vlan_ipv4_sctp[];
 230extern enum rte_flow_item_type pattern_eth_qinq_ipv4_sctp[];
 231extern enum rte_flow_item_type pattern_eth_ipv4_icmp[];
 232extern enum rte_flow_item_type pattern_eth_vlan_ipv4_icmp[];
 233extern enum rte_flow_item_type pattern_eth_qinq_ipv4_icmp[];
 234
 235/* non-tunnel IPv6 */
 236extern enum rte_flow_item_type pattern_eth_ipv6[];
 237extern enum rte_flow_item_type pattern_eth_vlan_ipv6[];
 238extern enum rte_flow_item_type pattern_eth_qinq_ipv6[];
 239extern enum rte_flow_item_type pattern_eth_ipv6_udp[];
 240extern enum rte_flow_item_type pattern_eth_vlan_ipv6_udp[];
 241extern enum rte_flow_item_type pattern_eth_qinq_ipv6_udp[];
 242extern enum rte_flow_item_type pattern_eth_ipv6_tcp[];
 243extern enum rte_flow_item_type pattern_eth_vlan_ipv6_tcp[];
 244extern enum rte_flow_item_type pattern_eth_qinq_ipv6_tcp[];
 245extern enum rte_flow_item_type pattern_eth_ipv6_sctp[];
 246extern enum rte_flow_item_type pattern_eth_vlan_ipv6_sctp[];
 247extern enum rte_flow_item_type pattern_eth_qinq_ipv6_sctp[];
 248extern enum rte_flow_item_type pattern_eth_ipv6_icmp6[];
 249extern enum rte_flow_item_type pattern_eth_vlan_ipv6_icmp6[];
 250extern enum rte_flow_item_type pattern_eth_qinq_ipv6_icmp6[];
 251
 252/* IPv4 VXLAN IPv4 */
 253extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4[];
 254extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_udp[];
 255extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[];
 256extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[];
 257extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[];
 258
 259/* IPv4 VXLAN MAC IPv4 */
 260extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[];
 261extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[];
 262extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp[];
 263extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp[];
 264extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_icmp[];
 265
 266/* IPv6 VXLAN IPv4 */
 267extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4[];
 268extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_tcp[];
 269extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_udp[];
 270extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_sctp[];
 271extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_icmp[];
 272
 273/* IPv6 VXLAN MAC IPv4 */
 274extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4[];
 275extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_tcp[];
 276extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_udp[];
 277extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_sctp[];
 278extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_icmp[];
 279
 280/* IPv4 VXLAN IPv6 */
 281extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6[];
 282extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_udp[];
 283extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_tcp[];
 284extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_sctp[];
 285extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_icmp6[];
 286
 287/* IPv4 VXLAN MAC IPv6 */
 288extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6[];
 289extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_udp[];
 290extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_tcp[];
 291extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_sctp[];
 292extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_icmp6[];
 293
 294/* IPv6 VXLAN IPv6 */
 295extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6[];
 296extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_tcp[];
 297extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_udp[];
 298extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_sctp[];
 299extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_icmp6[];
 300
 301/* IPv6 VXLAN MAC IPv6 */
 302extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6[];
 303extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_tcp[];
 304extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_udp[];
 305extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_sctp[];
 306extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_icmp6[];
 307
 308/* IPv4 NVGRE IPv4 */
 309extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4[];
 310extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_udp[];
 311extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_tcp[];
 312extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_sctp[];
 313extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_icmp[];
 314
 315/* IPv4 NVGRE MAC IPv4 */
 316extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4[];
 317extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_udp[];
 318extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_tcp[];
 319extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_sctp[];
 320extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_icmp[];
 321
 322/* IPv6 NVGRE IPv4 */
 323extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4[];
 324extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_tcp[];
 325extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_udp[];
 326extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_sctp[];
 327extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_icmp[];
 328
 329/* IPv6 NVGRE MAC IPv4 */
 330extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4[];
 331extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_tcp[];
 332extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_udp[];
 333extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_sctp[];
 334extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_icmp[];
 335
 336/* IPv4 NVGRE IPv6 */
 337extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6[];
 338extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_udp[];
 339extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_tcp[];
 340extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_sctp[];
 341extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_icmp6[];
 342
 343/* IPv4 NVGRE MAC IPv6 */
 344extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6[];
 345extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_udp[];
 346extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_tcp[];
 347extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_sctp[];
 348extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_icmp6[];
 349
 350/* IPv6 NVGRE IPv6 */
 351extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6[];
 352extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_tcp[];
 353extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_udp[];
 354extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_sctp[];
 355extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_icmp6[];
 356
 357/* IPv6 NVGRE MAC IPv6 */
 358extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6[];
 359extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_tcp[];
 360extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[];
 361extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[];
 362extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[];
 363
 364/* IPv4 GTPU (EH) */
 365extern enum rte_flow_item_type pattern_eth_ipv4_gtpu[];
 366extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[];
 367
 368/* IPv6 GTPU (EH) */
 369extern enum rte_flow_item_type pattern_eth_ipv6_gtpu[];
 370extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[];
 371
 372/* IPv4 GTPU IPv4 */
 373extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[];
 374extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[];
 375extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[];
 376extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[];
 377
 378/* IPv4 GTPU IPv6 */
 379extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[];
 380extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[];
 381extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[];
 382extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[];
 383
 384/* IPv6 GTPU IPv4 */
 385extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[];
 386extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[];
 387extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[];
 388extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[];
 389
 390/* IPv6 GTPU IPv6 */
 391extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[];
 392extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[];
 393extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[];
 394extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[];
 395
 396/* IPv4 GTPU EH IPv4 */
 397extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[];
 398extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[];
 399extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[];
 400extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[];
 401
 402/* IPv4 GTPU EH IPv6 */
 403extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[];
 404extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[];
 405extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[];
 406extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[];
 407
 408/* IPv6 GTPU EH IPv4 */
 409extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[];
 410extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[];
 411extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[];
 412extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[];
 413
 414/* IPv6 GTPU EH IPv6 */
 415extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[];
 416extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[];
 417extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[];
 418extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[];
 419
 420/* PPPoE */
 421extern enum rte_flow_item_type pattern_eth_pppoed[];
 422extern enum rte_flow_item_type pattern_eth_vlan_pppoed[];
 423extern enum rte_flow_item_type pattern_eth_qinq_pppoed[];
 424extern enum rte_flow_item_type pattern_eth_pppoes[];
 425extern enum rte_flow_item_type pattern_eth_pppoes_proto[];
 426extern enum rte_flow_item_type pattern_eth_vlan_pppoes[];
 427extern enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[];
 428extern enum rte_flow_item_type pattern_eth_qinq_pppoes[];
 429extern enum rte_flow_item_type pattern_eth_pppoes_ipv4[];
 430extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[];
 431extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4[];
 432extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_udp[];
 433extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_udp[];
 434extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_udp[];
 435extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_tcp[];
 436extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_tcp[];
 437extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_tcp[];
 438extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_sctp[];
 439extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_sctp[];
 440extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_sctp[];
 441extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_icmp[];
 442extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_icmp[];
 443extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_icmp[];
 444extern enum rte_flow_item_type pattern_eth_pppoes_ipv6[];
 445extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6[];
 446extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6[];
 447extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_udp[];
 448extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_udp[];
 449extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_udp[];
 450extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_tcp[];
 451extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_tcp[];
 452extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_tcp[];
 453extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_sctp[];
 454extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_sctp[];
 455extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_sctp[];
 456extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[];
 457extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[];
 458extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[];
 459
 460/* ESP */
 461extern enum rte_flow_item_type pattern_eth_ipv4_esp[];
 462extern enum rte_flow_item_type pattern_eth_ipv4_udp_esp[];
 463extern enum rte_flow_item_type pattern_eth_ipv6_esp[];
 464extern enum rte_flow_item_type pattern_eth_ipv6_udp_esp[];
 465
 466/* AH */
 467extern enum rte_flow_item_type pattern_eth_ipv4_ah[];
 468extern enum rte_flow_item_type pattern_eth_ipv6_ah[];
 469extern enum rte_flow_item_type pattern_eth_ipv6_udp_ah[];
 470
 471/* L2TP */
 472extern enum rte_flow_item_type pattern_eth_ipv4_l2tp[];
 473extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[];
 474
 475/* PFCP */
 476extern enum rte_flow_item_type pattern_eth_ipv4_pfcp[];
 477extern enum rte_flow_item_type pattern_eth_ipv6_pfcp[];
 478
 479struct ice_adapter;
 480
 481extern const struct rte_flow_ops ice_flow_ops;
 482
 483/* engine types. */
 484enum ice_flow_engine_type {
 485        ICE_FLOW_ENGINE_NONE = 0,
 486        ICE_FLOW_ENGINE_FDIR,
 487        ICE_FLOW_ENGINE_SWITCH,
 488        ICE_FLOW_ENGINE_HASH,
 489        ICE_FLOW_ENGINE_ACL,
 490        ICE_FLOW_ENGINE_MAX,
 491};
 492
 493/**
 494 * classification stages.
 495 * for non-pipeline mode, we have two classification stages: Distributor/RSS
 496 * for pipeline-mode we have three classification stages:
 497 * Permission/Distributor/RSS
 498 */
 499enum ice_flow_classification_stage {
 500        ICE_FLOW_STAGE_NONE = 0,
 501        ICE_FLOW_STAGE_RSS,
 502        ICE_FLOW_STAGE_PERMISSION,
 503        ICE_FLOW_STAGE_DISTRIBUTOR,
 504        ICE_FLOW_STAGE_MAX,
 505};
 506/* pattern structure */
 507struct ice_pattern_match_item {
 508        enum rte_flow_item_type *pattern_list;
 509        /* pattern_list must end with RTE_FLOW_ITEM_TYPE_END */
 510        uint64_t input_set_mask;
 511        void *meta;
 512};
 513
 514enum ice_flow_redirect_type {
 515        ICE_FLOW_REDIRECT_VSI,
 516};
 517
 518struct ice_flow_redirect {
 519        enum ice_flow_redirect_type type;
 520        union {
 521                struct {
 522                        uint16_t vsi_handle;
 523                        uint16_t new_vsi_num;
 524                };
 525        };
 526};
 527
 528typedef int (*engine_init_t)(struct ice_adapter *ad);
 529typedef void (*engine_uninit_t)(struct ice_adapter *ad);
 530typedef int (*engine_create_t)(struct ice_adapter *ad,
 531                struct rte_flow *flow,
 532                void *meta,
 533                struct rte_flow_error *error);
 534typedef int (*engine_destroy_t)(struct ice_adapter *ad,
 535                struct rte_flow *flow,
 536                struct rte_flow_error *error);
 537typedef int (*engine_query_t)(struct ice_adapter *ad,
 538                struct rte_flow *flow,
 539                struct rte_flow_query_count *count,
 540                struct rte_flow_error *error);
 541typedef int(*engine_redirect_t)(struct ice_adapter *ad,
 542                                struct rte_flow *flow,
 543                                struct ice_flow_redirect *redirect);
 544typedef void (*engine_free_t) (struct rte_flow *flow);
 545typedef int (*parse_pattern_action_t)(struct ice_adapter *ad,
 546                struct ice_pattern_match_item *array,
 547                uint32_t array_len,
 548                const struct rte_flow_item pattern[],
 549                const struct rte_flow_action actions[],
 550                void **meta,
 551                struct rte_flow_error *error);
 552
 553/* Struct to store engine created. */
 554struct ice_flow_engine {
 555        TAILQ_ENTRY(ice_flow_engine) node;
 556        engine_init_t init;
 557        engine_uninit_t uninit;
 558        engine_create_t create;
 559        engine_destroy_t destroy;
 560        engine_query_t query_count;
 561        engine_redirect_t redirect;
 562        engine_free_t free;
 563        enum ice_flow_engine_type type;
 564};
 565TAILQ_HEAD(ice_engine_list, ice_flow_engine);
 566
 567/* Struct to store flow created. */
 568struct rte_flow {
 569        TAILQ_ENTRY(rte_flow) node;
 570        struct ice_flow_engine *engine;
 571        void *rule;
 572};
 573
 574struct ice_flow_parser {
 575        struct ice_flow_engine *engine;
 576        struct ice_pattern_match_item *array;
 577        uint32_t array_len;
 578        parse_pattern_action_t parse_pattern_action;
 579        enum ice_flow_classification_stage stage;
 580};
 581
 582/* Struct to store parser created. */
 583struct ice_flow_parser_node {
 584        TAILQ_ENTRY(ice_flow_parser_node) node;
 585        struct ice_flow_parser *parser;
 586};
 587
 588void ice_register_flow_engine(struct ice_flow_engine *engine);
 589int ice_flow_init(struct ice_adapter *ad);
 590void ice_flow_uninit(struct ice_adapter *ad);
 591int ice_register_parser(struct ice_flow_parser *parser,
 592                struct ice_adapter *ad);
 593void ice_unregister_parser(struct ice_flow_parser *parser,
 594                struct ice_adapter *ad);
 595struct ice_pattern_match_item *
 596ice_search_pattern_match_item(const struct rte_flow_item pattern[],
 597                struct ice_pattern_match_item *array,
 598                uint32_t array_len,
 599                struct rte_flow_error *error);
 600int
 601ice_flow_redirect(struct ice_adapter *ad,
 602                  struct ice_flow_redirect *rd);
 603#endif
 604