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 */ 125 extern enum rte_flow_item_type pattern_empty[]; 126 127 /* any pattern */ 128 extern enum rte_flow_item_type pattern_any[]; 129 130 /* raw pattern */ 131 extern enum rte_flow_item_type pattern_raw[]; 132 133 /* L2 */ 134 extern enum rte_flow_item_type pattern_ethertype[]; 135 extern enum rte_flow_item_type pattern_ethertype_vlan[]; 136 extern enum rte_flow_item_type pattern_ethertype_qinq[]; 137 138 /* ARP */ 139 extern enum rte_flow_item_type pattern_eth_arp[]; 140 141 /* non-tunnel IPv4 */ 142 extern enum rte_flow_item_type pattern_eth_ipv4[]; 143 extern enum rte_flow_item_type pattern_eth_vlan_ipv4[]; 144 extern enum rte_flow_item_type pattern_eth_qinq_ipv4[]; 145 extern enum rte_flow_item_type pattern_eth_ipv4_udp[]; 146 extern enum rte_flow_item_type pattern_eth_vlan_ipv4_udp[]; 147 extern enum rte_flow_item_type pattern_eth_qinq_ipv4_udp[]; 148 extern enum rte_flow_item_type pattern_eth_ipv4_tcp[]; 149 extern enum rte_flow_item_type pattern_eth_vlan_ipv4_tcp[]; 150 extern enum rte_flow_item_type pattern_eth_qinq_ipv4_tcp[]; 151 extern enum rte_flow_item_type pattern_eth_ipv4_sctp[]; 152 extern enum rte_flow_item_type pattern_eth_vlan_ipv4_sctp[]; 153 extern enum rte_flow_item_type pattern_eth_qinq_ipv4_sctp[]; 154 extern enum rte_flow_item_type pattern_eth_ipv4_icmp[]; 155 extern enum rte_flow_item_type pattern_eth_vlan_ipv4_icmp[]; 156 extern enum rte_flow_item_type pattern_eth_qinq_ipv4_icmp[]; 157 158 /* non-tunnel IPv6 */ 159 extern enum rte_flow_item_type pattern_eth_ipv6[]; 160 extern enum rte_flow_item_type pattern_eth_vlan_ipv6[]; 161 extern enum rte_flow_item_type pattern_eth_qinq_ipv6[]; 162 extern enum rte_flow_item_type pattern_eth_ipv6_frag_ext[]; 163 extern enum rte_flow_item_type pattern_eth_vlan_ipv6_frag_ext[]; 164 extern enum rte_flow_item_type pattern_eth_qinq_ipv6_frag_ext[]; 165 extern enum rte_flow_item_type pattern_eth_ipv6_udp[]; 166 extern enum rte_flow_item_type pattern_eth_vlan_ipv6_udp[]; 167 extern enum rte_flow_item_type pattern_eth_qinq_ipv6_udp[]; 168 extern enum rte_flow_item_type pattern_eth_ipv6_tcp[]; 169 extern enum rte_flow_item_type pattern_eth_vlan_ipv6_tcp[]; 170 extern enum rte_flow_item_type pattern_eth_qinq_ipv6_tcp[]; 171 extern enum rte_flow_item_type pattern_eth_ipv6_sctp[]; 172 extern enum rte_flow_item_type pattern_eth_vlan_ipv6_sctp[]; 173 extern enum rte_flow_item_type pattern_eth_qinq_ipv6_sctp[]; 174 extern enum rte_flow_item_type pattern_eth_ipv6_icmp6[]; 175 extern enum rte_flow_item_type pattern_eth_vlan_ipv6_icmp6[]; 176 extern enum rte_flow_item_type pattern_eth_qinq_ipv6_icmp6[]; 177 178 /* IPv4 VXLAN IPv4 */ 179 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4[]; 180 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_udp[]; 181 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_tcp[]; 182 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_sctp[]; 183 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv4_icmp[]; 184 185 /* IPv4 VXLAN MAC IPv4 */ 186 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4[]; 187 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_udp[]; 188 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_tcp[]; 189 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_sctp[]; 190 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv4_icmp[]; 191 192 /* IPv6 VXLAN IPv4 */ 193 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4[]; 194 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_tcp[]; 195 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_udp[]; 196 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_sctp[]; 197 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv4_icmp[]; 198 199 /* IPv6 VXLAN MAC IPv4 */ 200 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4[]; 201 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_tcp[]; 202 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_udp[]; 203 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_sctp[]; 204 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv4_icmp[]; 205 206 /* IPv4 VXLAN IPv6 */ 207 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6[]; 208 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_udp[]; 209 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_tcp[]; 210 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_sctp[]; 211 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_ipv6_icmp6[]; 212 213 /* IPv4 VXLAN MAC IPv6 */ 214 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6[]; 215 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_udp[]; 216 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_tcp[]; 217 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_sctp[]; 218 extern enum rte_flow_item_type pattern_eth_ipv4_udp_vxlan_eth_ipv6_icmp6[]; 219 220 /* IPv6 VXLAN IPv6 */ 221 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6[]; 222 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_tcp[]; 223 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_udp[]; 224 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_sctp[]; 225 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_ipv6_icmp6[]; 226 227 /* IPv6 VXLAN MAC IPv6 */ 228 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6[]; 229 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_tcp[]; 230 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_udp[]; 231 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_sctp[]; 232 extern enum rte_flow_item_type pattern_eth_ipv6_udp_vxlan_eth_ipv6_icmp6[]; 233 234 /* IPv4 NVGRE IPv4 */ 235 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4[]; 236 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_udp[]; 237 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_tcp[]; 238 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_sctp[]; 239 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv4_icmp[]; 240 241 /* IPv4 NVGRE MAC IPv4 */ 242 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4[]; 243 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_udp[]; 244 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_tcp[]; 245 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_sctp[]; 246 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv4_icmp[]; 247 248 /* IPv6 NVGRE IPv4 */ 249 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4[]; 250 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_tcp[]; 251 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_udp[]; 252 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_sctp[]; 253 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv4_icmp[]; 254 255 /* IPv6 NVGRE MAC IPv4 */ 256 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4[]; 257 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_tcp[]; 258 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_udp[]; 259 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_sctp[]; 260 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv4_icmp[]; 261 262 /* IPv4 NVGRE IPv6 */ 263 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6[]; 264 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_udp[]; 265 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_tcp[]; 266 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_sctp[]; 267 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_ipv6_icmp6[]; 268 269 /* IPv4 NVGRE MAC IPv6 */ 270 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6[]; 271 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_udp[]; 272 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_tcp[]; 273 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_sctp[]; 274 extern enum rte_flow_item_type pattern_eth_ipv4_nvgre_eth_ipv6_icmp6[]; 275 276 /* IPv6 NVGRE IPv6 */ 277 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6[]; 278 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_tcp[]; 279 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_udp[]; 280 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_sctp[]; 281 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_ipv6_icmp6[]; 282 283 /* IPv6 NVGRE MAC IPv6 */ 284 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6[]; 285 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_tcp[]; 286 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[]; 287 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[]; 288 extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[]; 289 290 /* IPv4 GTPU (EH) */ 291 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu[]; 292 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[]; 293 294 /* IPv6 GTPU (EH) */ 295 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu[]; 296 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[]; 297 298 /* IPv4 GTPU IPv4 */ 299 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[]; 300 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[]; 301 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[]; 302 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[]; 303 304 /* IPv4 GTPU IPv6 */ 305 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[]; 306 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[]; 307 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[]; 308 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[]; 309 310 /* IPv6 GTPU IPv4 */ 311 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[]; 312 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[]; 313 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[]; 314 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[]; 315 316 /* IPv6 GTPU IPv6 */ 317 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[]; 318 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[]; 319 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[]; 320 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[]; 321 322 /* IPv4 GTPU EH IPv4 */ 323 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[]; 324 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[]; 325 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[]; 326 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[]; 327 328 /* IPv4 GTPU EH IPv6 */ 329 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[]; 330 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[]; 331 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[]; 332 extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[]; 333 334 /* IPv6 GTPU EH IPv4 */ 335 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[]; 336 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[]; 337 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[]; 338 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[]; 339 340 /* IPv6 GTPU EH IPv6 */ 341 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[]; 342 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[]; 343 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[]; 344 extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[]; 345 346 /* PPPoE */ 347 extern enum rte_flow_item_type pattern_eth_pppoed[]; 348 extern enum rte_flow_item_type pattern_eth_vlan_pppoed[]; 349 extern enum rte_flow_item_type pattern_eth_qinq_pppoed[]; 350 extern enum rte_flow_item_type pattern_eth_pppoes[]; 351 extern enum rte_flow_item_type pattern_eth_pppoes_proto[]; 352 extern enum rte_flow_item_type pattern_eth_vlan_pppoes[]; 353 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[]; 354 extern enum rte_flow_item_type pattern_eth_qinq_pppoes[]; 355 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_proto[]; 356 extern enum rte_flow_item_type pattern_eth_pppoes_ipv4[]; 357 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[]; 358 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4[]; 359 extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_udp[]; 360 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_udp[]; 361 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_udp[]; 362 extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_tcp[]; 363 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_tcp[]; 364 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_tcp[]; 365 extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_sctp[]; 366 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_sctp[]; 367 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_sctp[]; 368 extern enum rte_flow_item_type pattern_eth_pppoes_ipv4_icmp[]; 369 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4_icmp[]; 370 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv4_icmp[]; 371 extern enum rte_flow_item_type pattern_eth_pppoes_ipv6[]; 372 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6[]; 373 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6[]; 374 extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_udp[]; 375 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_udp[]; 376 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_udp[]; 377 extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_tcp[]; 378 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_tcp[]; 379 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_tcp[]; 380 extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_sctp[]; 381 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_sctp[]; 382 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_sctp[]; 383 extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[]; 384 extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[]; 385 extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[]; 386 387 /* ESP */ 388 extern enum rte_flow_item_type pattern_eth_ipv4_esp[]; 389 extern enum rte_flow_item_type pattern_eth_ipv4_udp_esp[]; 390 extern enum rte_flow_item_type pattern_eth_ipv6_esp[]; 391 extern enum rte_flow_item_type pattern_eth_ipv6_udp_esp[]; 392 393 /* AH */ 394 extern enum rte_flow_item_type pattern_eth_ipv4_ah[]; 395 extern enum rte_flow_item_type pattern_eth_ipv6_ah[]; 396 extern enum rte_flow_item_type pattern_eth_ipv6_udp_ah[]; 397 398 /* L2TP */ 399 extern enum rte_flow_item_type pattern_eth_ipv4_l2tp[]; 400 extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[]; 401 402 /* PFCP */ 403 extern enum rte_flow_item_type pattern_eth_ipv4_pfcp[]; 404 extern enum rte_flow_item_type pattern_eth_ipv6_pfcp[]; 405 406 struct ice_adapter; 407 408 extern const struct rte_flow_ops ice_flow_ops; 409 410 /* engine types. */ 411 enum 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 * We have two classification stages: Distributor/RSS 423 * Permission/Distributor/RSS 424 */ 425 enum ice_flow_classification_stage { 426 ICE_FLOW_STAGE_NONE = 0, 427 ICE_FLOW_STAGE_RSS, 428 ICE_FLOW_STAGE_DISTRIBUTOR, 429 ICE_FLOW_STAGE_MAX, 430 }; 431 /* pattern structure */ 432 struct ice_pattern_match_item { 433 enum rte_flow_item_type *pattern_list; 434 /* pattern_list must end with RTE_FLOW_ITEM_TYPE_END */ 435 uint64_t input_set_mask_o; /* used for tunnel outer or non tunnel fields */ 436 uint64_t input_set_mask_i; /* only used for tunnel inner fields */ 437 void *meta; 438 }; 439 440 enum ice_flow_redirect_type { 441 ICE_FLOW_REDIRECT_VSI, 442 }; 443 444 struct ice_flow_redirect { 445 enum ice_flow_redirect_type type; 446 union { 447 struct { 448 uint16_t vsi_handle; 449 uint16_t new_vsi_num; 450 }; 451 }; 452 }; 453 454 typedef int (*engine_init_t)(struct ice_adapter *ad); 455 typedef void (*engine_uninit_t)(struct ice_adapter *ad); 456 typedef int (*engine_create_t)(struct ice_adapter *ad, 457 struct rte_flow *flow, 458 void *meta, 459 struct rte_flow_error *error); 460 typedef int (*engine_destroy_t)(struct ice_adapter *ad, 461 struct rte_flow *flow, 462 struct rte_flow_error *error); 463 typedef int (*engine_query_t)(struct ice_adapter *ad, 464 struct rte_flow *flow, 465 struct rte_flow_query_count *count, 466 struct rte_flow_error *error); 467 typedef int(*engine_redirect_t)(struct ice_adapter *ad, 468 struct rte_flow *flow, 469 struct ice_flow_redirect *redirect); 470 typedef void (*engine_free_t) (struct rte_flow *flow); 471 typedef int (*parse_pattern_action_t)(struct ice_adapter *ad, 472 struct ice_pattern_match_item *array, 473 uint32_t array_len, 474 const struct rte_flow_item pattern[], 475 const struct rte_flow_action actions[], 476 uint32_t priority, 477 void **meta, 478 struct rte_flow_error *error); 479 480 /* Struct to store engine created. */ 481 struct ice_flow_engine { 482 TAILQ_ENTRY(ice_flow_engine) node; 483 engine_init_t init; 484 engine_uninit_t uninit; 485 engine_create_t create; 486 engine_destroy_t destroy; 487 engine_query_t query_count; 488 engine_redirect_t redirect; 489 engine_free_t free; 490 enum ice_flow_engine_type type; 491 }; 492 TAILQ_HEAD(ice_engine_list, ice_flow_engine); 493 494 /* Struct to store flow created. */ 495 struct rte_flow { 496 TAILQ_ENTRY(rte_flow) node; 497 struct ice_flow_engine *engine; 498 void *rule; 499 }; 500 501 struct ice_flow_parser { 502 struct ice_flow_engine *engine; 503 struct ice_pattern_match_item *array; 504 uint32_t array_len; 505 parse_pattern_action_t parse_pattern_action; 506 enum ice_flow_classification_stage stage; 507 }; 508 509 /* Struct to store parser created. */ 510 struct ice_flow_parser_node { 511 TAILQ_ENTRY(ice_flow_parser_node) node; 512 struct ice_flow_parser *parser; 513 }; 514 515 void ice_register_flow_engine(struct ice_flow_engine *engine); 516 int ice_flow_init(struct ice_adapter *ad); 517 void ice_flow_uninit(struct ice_adapter *ad); 518 struct ice_pattern_match_item * 519 ice_search_pattern_match_item(struct ice_adapter *ad, 520 const struct rte_flow_item pattern[], 521 struct ice_pattern_match_item *array, 522 uint32_t array_len, 523 struct rte_flow_error *error); 524 int 525 ice_flow_redirect(struct ice_adapter *ad, 526 struct ice_flow_redirect *rd); 527 528 extern struct ice_flow_parser ice_switch_parser; 529 extern struct ice_flow_parser ice_acl_parser; 530 extern struct ice_flow_parser ice_fdir_parser; 531 extern struct ice_flow_parser ice_hash_parser; 532 #endif 533