net/i40e: support flow director for L2TPv3 over IP
[dpdk.git] / drivers / net / i40e / i40e_ethdev.h
index 295ad59..bba2b83 100644 (file)
@@ -508,24 +508,38 @@ struct i40e_raw_flow {
        uint32_t length;
 };
 
+/* A structure used to define the input for L2TPv3 over IPv4 flow */
+struct i40e_ipv4_l2tpv3oip_flow {
+       struct rte_eth_ipv4_flow ip4;
+       uint32_t session_id; /* Session ID in big endian. */
+};
+
+/* A structure used to define the input for L2TPv3 over IPv6 flow */
+struct i40e_ipv6_l2tpv3oip_flow {
+       struct rte_eth_ipv6_flow ip6;
+       uint32_t session_id; /* Session ID in big endian. */
+};
+
 /*
  * A union contains the inputs for all types of flow
  * items in flows need to be in big endian
  */
 union i40e_fdir_flow {
-       struct rte_eth_l2_flow     l2_flow;
-       struct rte_eth_udpv4_flow  udp4_flow;
-       struct rte_eth_tcpv4_flow  tcp4_flow;
-       struct rte_eth_sctpv4_flow sctp4_flow;
-       struct rte_eth_ipv4_flow   ip4_flow;
-       struct rte_eth_udpv6_flow  udp6_flow;
-       struct rte_eth_tcpv6_flow  tcp6_flow;
-       struct rte_eth_sctpv6_flow sctp6_flow;
-       struct rte_eth_ipv6_flow   ipv6_flow;
-       struct i40e_gtp_flow       gtp_flow;
-       struct i40e_gtp_ipv4_flow  gtp_ipv4_flow;
-       struct i40e_gtp_ipv6_flow  gtp_ipv6_flow;
-       struct i40e_raw_flow       raw_flow;
+       struct rte_eth_l2_flow          l2_flow;
+       struct rte_eth_udpv4_flow       udp4_flow;
+       struct rte_eth_tcpv4_flow       tcp4_flow;
+       struct rte_eth_sctpv4_flow      sctp4_flow;
+       struct rte_eth_ipv4_flow        ip4_flow;
+       struct rte_eth_udpv6_flow       udp6_flow;
+       struct rte_eth_tcpv6_flow       tcp6_flow;
+       struct rte_eth_sctpv6_flow      sctp6_flow;
+       struct rte_eth_ipv6_flow        ipv6_flow;
+       struct i40e_gtp_flow            gtp_flow;
+       struct i40e_gtp_ipv4_flow       gtp_ipv4_flow;
+       struct i40e_gtp_ipv6_flow       gtp_ipv6_flow;
+       struct i40e_raw_flow            raw_flow;
+       struct i40e_ipv4_l2tpv3oip_flow ip4_l2tpv3oip_flow;
+       struct i40e_ipv6_l2tpv3oip_flow ip6_l2tpv3oip_flow;
 };
 
 enum i40e_fdir_ip_type {
@@ -542,6 +556,7 @@ struct i40e_fdir_flow_ext {
        uint16_t dst_id; /* VF ID, available when is_vf is 1*/
        bool inner_ip;   /* If there is inner ip */
        enum i40e_fdir_ip_type iip_type; /* ip type for inner ip */
+       enum i40e_fdir_ip_type oip_type; /* ip type for outer ip */
        bool customized_pctype; /* If customized pctype is used */
        bool pkt_template; /* If raw packet template is used */
 };
@@ -897,6 +912,8 @@ enum i40e_new_pctype {
        I40E_CUSTOMIZED_GTPU_IPV4,
        I40E_CUSTOMIZED_GTPU_IPV6,
        I40E_CUSTOMIZED_GTPU,
+       I40E_CUSTOMIZED_IPV4_L2TPV3,
+       I40E_CUSTOMIZED_IPV6_L2TPV3,
        I40E_CUSTOMIZED_MAX,
 };