X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fice_generic_flow.h;h=434d2f425d8e782d594a8212664a193037ee5ccf;hb=ca5a25c5f0a8b684c9125c8ecac802d54fad2c9a;hp=b6e4ed0e175e6979f8eb806a263a6dbba6bdd171;hpb=3e4eab9c21926613797d822dccd63cde32bc7122;p=dpdk.git diff --git a/drivers/net/ice/ice_generic_flow.h b/drivers/net/ice/ice_generic_flow.h index b6e4ed0e17..434d2f425d 100644 --- a/drivers/net/ice/ice_generic_flow.h +++ b/drivers/net/ice/ice_generic_flow.h @@ -30,6 +30,11 @@ #define ICE_PROT_VXLAN (1ULL << 19) #define ICE_PROT_NVGRE (1ULL << 20) #define ICE_PROT_GTPU (1ULL << 21) +#define ICE_PROT_PPPOE_S (1ULL << 22) +#define ICE_PROT_ESP (1ULL << 23) +#define ICE_PROT_AH (1ULL << 24) +#define ICE_PROT_L2TPV3OIP (1ULL << 25) +#define ICE_PROT_PFCP (1ULL << 26) /* field */ @@ -49,6 +54,13 @@ #define ICE_NVGRE_TNI (1ULL << 50) #define ICE_GTPU_TEID (1ULL << 49) #define ICE_GTPU_QFI (1ULL << 48) +#define ICE_PPPOE_SESSION (1ULL << 47) +#define ICE_PPPOE_PROTO (1ULL << 46) +#define ICE_ESP_SPI (1ULL << 45) +#define ICE_AH_SPI (1ULL << 44) +#define ICE_L2TPV3OIP_SESSION_ID (1ULL << 43) +#define ICE_PFCP_SEID (1ULL << 42) +#define ICE_PFCP_S_FIELD (1ULL << 41) /* input set */ @@ -177,6 +189,20 @@ (ICE_PROT_GTPU | ICE_GTPU_TEID) #define ICE_INSET_GTPU_QFI \ (ICE_PROT_GTPU | ICE_GTPU_QFI) +#define ICE_INSET_PPPOE_SESSION \ + (ICE_PROT_PPPOE_S | ICE_PPPOE_SESSION) +#define ICE_INSET_PPPOE_PROTO \ + (ICE_PROT_PPPOE_S | ICE_PPPOE_PROTO) +#define ICE_INSET_ESP_SPI \ + (ICE_PROT_ESP | ICE_ESP_SPI) +#define ICE_INSET_AH_SPI \ + (ICE_PROT_AH | ICE_AH_SPI) +#define ICE_INSET_L2TPV3OIP_SESSION_ID \ + (ICE_PROT_L2TPV3OIP | ICE_L2TPV3OIP_SESSION_ID) +#define ICE_INSET_PFCP_S_FIELD \ + (ICE_PROT_PFCP | ICE_PFCP_S_FIELD) +#define ICE_INSET_PFCP_SEID \ + (ICE_PROT_PFCP | ICE_PFCP_S_FIELD | ICE_PFCP_SEID) /* empty pattern */ extern enum rte_flow_item_type pattern_empty[]; @@ -335,18 +361,70 @@ extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_udp[]; extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_sctp[]; extern enum rte_flow_item_type pattern_eth_ipv6_nvgre_eth_ipv6_icmp6[]; -/* GTPU */ +/* IPv4 GTPU (EH) */ +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh[]; + +/* IPv6 GTPU (EH) */ +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh[]; + +/* IPv4 GTPU IPv4 */ extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4[]; extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_udp[]; extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_tcp[]; extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv4_icmp[]; +/* IPv4 GTPU IPv6 */ +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_ipv6_icmp[]; + +/* IPv6 GTPU IPv4 */ +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv4_icmp[]; + +/* IPv6 GTPU IPv6 */ +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_ipv6_icmp[]; + +/* IPv4 GTPU EH IPv4 */ +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv4_icmp[]; + +/* IPv4 GTPU EH IPv6 */ +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_gtpu_eh_ipv6_icmp[]; + +/* IPv6 GTPU EH IPv4 */ +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv4_icmp[]; + +/* IPv6 GTPU EH IPv6 */ +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_udp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_tcp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_gtpu_eh_ipv6_icmp[]; + /* PPPoE */ extern enum rte_flow_item_type pattern_eth_pppoed[]; extern enum rte_flow_item_type pattern_eth_vlan_pppoed[]; extern enum rte_flow_item_type pattern_eth_qinq_pppoed[]; extern enum rte_flow_item_type pattern_eth_pppoes[]; +extern enum rte_flow_item_type pattern_eth_pppoes_proto[]; extern enum rte_flow_item_type pattern_eth_vlan_pppoes[]; +extern enum rte_flow_item_type pattern_eth_vlan_pppoes_proto[]; extern enum rte_flow_item_type pattern_eth_qinq_pppoes[]; extern enum rte_flow_item_type pattern_eth_pppoes_ipv4[]; extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv4[]; @@ -379,6 +457,25 @@ extern enum rte_flow_item_type pattern_eth_pppoes_ipv6_icmp6[]; extern enum rte_flow_item_type pattern_eth_vlan_pppoes_ipv6_icmp6[]; extern enum rte_flow_item_type pattern_eth_qinq_pppoes_ipv6_icmp6[]; +/* ESP */ +extern enum rte_flow_item_type pattern_eth_ipv4_esp[]; +extern enum rte_flow_item_type pattern_eth_ipv4_udp_esp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_esp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_udp_esp[]; + +/* AH */ +extern enum rte_flow_item_type pattern_eth_ipv4_ah[]; +extern enum rte_flow_item_type pattern_eth_ipv6_ah[]; +extern enum rte_flow_item_type pattern_eth_ipv6_udp_ah[]; + +/* L2TP */ +extern enum rte_flow_item_type pattern_eth_ipv4_l2tp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_l2tp[]; + +/* PFCP */ +extern enum rte_flow_item_type pattern_eth_ipv4_pfcp[]; +extern enum rte_flow_item_type pattern_eth_ipv6_pfcp[]; + struct ice_adapter; extern const struct rte_flow_ops ice_flow_ops; @@ -414,6 +511,20 @@ struct ice_pattern_match_item { void *meta; }; +enum ice_flow_redirect_type { + ICE_FLOW_REDIRECT_VSI, +}; + +struct ice_flow_redirect { + enum ice_flow_redirect_type type; + union { + struct { + uint16_t vsi_handle; + uint16_t new_vsi_num; + }; + }; +}; + typedef int (*engine_init_t)(struct ice_adapter *ad); typedef void (*engine_uninit_t)(struct ice_adapter *ad); typedef int (*engine_create_t)(struct ice_adapter *ad, @@ -427,6 +538,9 @@ typedef int (*engine_query_t)(struct ice_adapter *ad, struct rte_flow *flow, struct rte_flow_query_count *count, struct rte_flow_error *error); +typedef int(*engine_redirect_t)(struct ice_adapter *ad, + struct rte_flow *flow, + struct ice_flow_redirect *redirect); typedef void (*engine_free_t) (struct rte_flow *flow); typedef int (*parse_pattern_action_t)(struct ice_adapter *ad, struct ice_pattern_match_item *array, @@ -444,6 +558,7 @@ struct ice_flow_engine { engine_create_t create; engine_destroy_t destroy; engine_query_t query_count; + engine_redirect_t redirect; engine_free_t free; enum ice_flow_engine_type type; }; @@ -482,4 +597,7 @@ ice_search_pattern_match_item(const struct rte_flow_item pattern[], struct ice_pattern_match_item *array, uint32_t array_len, struct rte_flow_error *error); +int +ice_flow_redirect(struct ice_adapter *ad, + struct ice_flow_redirect *rd); #endif