ethdev: tunnel filter
authorJijiang Liu <jijiang.liu@intel.com>
Thu, 23 Oct 2014 13:18:56 +0000 (21:18 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 27 Oct 2014 13:37:34 +0000 (14:37 +0100)
Add definitions of the data structures of tunneling packet filter.

Signed-off-by: Jijiang Liu <jijiang.liu@intel.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
Tested-by: Yong Liu <yong.liu@intel.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
lib/librte_ether/rte_eth_ctrl.h

index 9a90d19..b4ab731 100644 (file)
@@ -51,6 +51,7 @@ extern "C" {
  */
 enum rte_filter_type {
        RTE_ETH_FILTER_NONE = 0,
+       RTE_ETH_FILTER_TUNNEL,
        RTE_ETH_FILTER_MAX
 };
 
@@ -83,6 +84,54 @@ enum rte_eth_tunnel_type {
        RTE_TUNNEL_TYPE_MAX,
 };
 
+/**
+ * filter type of tunneling packet
+ */
+#define ETH_TUNNEL_FILTER_OMAC  0x01 /**< filter by outer MAC addr */
+#define ETH_TUNNEL_FILTER_OIP   0x02 /**< filter by outer IP Addr */
+#define ETH_TUNNEL_FILTER_TENID 0x04 /**< filter by tenant ID */
+#define ETH_TUNNEL_FILTER_IMAC  0x08 /**< filter by inner MAC addr */
+#define ETH_TUNNEL_FILTER_IVLAN 0x10 /**< filter by inner VLAN ID */
+#define ETH_TUNNEL_FILTER_IIP   0x20 /**< filter by inner IP addr */
+
+#define RTE_TUNNEL_FILTER_IMAC_IVLAN (ETH_TUNNEL_FILTER_IMAC | \
+                                       ETH_TUNNEL_FILTER_IVLAN)
+#define RTE_TUNNEL_FILTER_IMAC_IVLAN_TENID (ETH_TUNNEL_FILTER_IMAC | \
+                                       ETH_TUNNEL_FILTER_IVLAN | \
+                                       ETH_TUNNEL_FILTER_TENID)
+#define RTE_TUNNEL_FILTER_IMAC_TENID (ETH_TUNNEL_FILTER_IMAC | \
+                                       ETH_TUNNEL_FILTER_TENID)
+#define RTE_TUNNEL_FILTER_OMAC_TENID_IMAC (ETH_TUNNEL_FILTER_OMAC | \
+                                       ETH_TUNNEL_FILTER_TENID | \
+                                       ETH_TUNNEL_FILTER_IMAC)
+
+/**
+ *  Select IPv4 or IPv6 for tunnel filters.
+ */
+enum rte_tunnel_iptype {
+       RTE_TUNNEL_IPTYPE_IPV4 = 0, /**< IPv4. */
+       RTE_TUNNEL_IPTYPE_IPV6,     /**< IPv6. */
+};
+
+/**
+ * Tunneling Packet filter configuration.
+ */
+struct rte_eth_tunnel_filter_conf {
+       struct ether_addr *outer_mac;  /**< Outer MAC address filter. */
+       struct ether_addr *inner_mac;  /**< Inner MAC address filter. */
+       uint16_t inner_vlan;           /**< Inner VLAN filter. */
+       enum rte_tunnel_iptype ip_type; /**< IP address type. */
+       union {
+               uint32_t ipv4_addr;    /**< IPv4 source address to match. */
+               uint32_t ipv6_addr[4]; /**< IPv6 source address to match. */
+       } ip_addr; /**< IPv4/IPv6 source address to match (union of above). */
+
+       uint16_t filter_type;   /**< Filter type. */
+       enum rte_eth_tunnel_type tunnel_type; /**< Tunnel Type. */
+       uint32_t tenant_id;     /** < Tenant number. */
+       uint16_t queue_id;      /** < queue number. */
+};
+
 #ifdef __cplusplus
 }
 #endif