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