net/ice/base: reduce calls to get profile associations
[dpdk.git] / drivers / net / cxgbe / cxgbe_filter.h
index c7d9366..0c67d2d 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef _CXGBE_FILTER_H_
 #define _CXGBE_FILTER_H_
 
-#include "t4_msg.h"
+#include "base/t4_msg.h"
 /*
  * Defined bit width of user definable filter tuples
  */
@@ -77,6 +77,7 @@ struct ch_filter_tuple {
  * Filter specification
  */
 struct ch_filter_specification {
+       void *private;
        /* Administrative fields for filter. */
        uint32_t hitcnts:1;     /* count filter hits in TCB */
        uint32_t prio:1;        /* filter has priority over active/server */
@@ -99,10 +100,23 @@ struct ch_filter_specification {
        uint32_t iq:10;         /* ingress queue */
 
        uint32_t eport:2;       /* egress port to switch packet out */
+       uint32_t swapmac:1;     /* swap SMAC/DMAC for loopback packet */
        uint32_t newvlan:2;     /* rewrite VLAN Tag */
-       uint8_t dmac[ETHER_ADDR_LEN];   /* new destination MAC address */
+       uint8_t dmac[RTE_ETHER_ADDR_LEN];   /* new destination MAC address */
        uint16_t vlan;          /* VLAN Tag to insert */
 
+       /*
+        * Switch proxy/rewrite fields.  An ingress packet which matches a
+        * filter with "switch" set will be looped back out as an egress
+        * packet -- potentially with some header rewriting.
+        */
+       uint32_t nat_mode:3;    /* specify NAT operation mode */
+
+       uint8_t nat_lip[16];    /* local IP to use after NAT'ing */
+       uint8_t nat_fip[16];    /* foreign IP to use after NAT'ing */
+       uint16_t nat_lport;     /* local port number to use after NAT'ing */
+       uint16_t nat_fport;     /* foreign port number to use after NAT'ing */
+
        /* Filter rule value/mask pairs. */
        struct ch_filter_tuple val;
        struct ch_filter_tuple mask;
@@ -120,6 +134,17 @@ enum {
        VLAN_REWRITE
 };
 
+enum {
+       NAT_MODE_NONE = 0,      /* No NAT performed */
+       NAT_MODE_DIP,           /* NAT on Dst IP */
+       NAT_MODE_DIP_DP,        /* NAT on Dst IP, Dst Port */
+       NAT_MODE_DIP_DP_SIP,    /* NAT on Dst IP, Dst Port and Src IP */
+       NAT_MODE_DIP_DP_SP,     /* NAT on Dst IP, Dst Port and Src Port */
+       NAT_MODE_SIP_SP,        /* NAT on Src IP and Src Port */
+       NAT_MODE_DIP_SIP_SP,    /* NAT on Dst IP, Src IP and Src Port */
+       NAT_MODE_ALL            /* NAT on entire 4-tuple */
+};
+
 enum filter_type {
        FILTER_TYPE_IPV4 = 0,
        FILTER_TYPE_IPV6,
@@ -242,4 +267,6 @@ void hash_del_filter_rpl(struct adapter *adap,
 int validate_filter(struct adapter *adap, struct ch_filter_specification *fs);
 int cxgbe_get_filter_count(struct adapter *adapter, unsigned int fidx,
                           u64 *c, int hash, bool get_byte);
+int cxgbe_clear_filter_count(struct adapter *adapter, unsigned int fidx,
+                            int hash, bool clear_byte);
 #endif /* _CXGBE_FILTER_H_ */