summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/dpdk/device/dpdk.h53
-rw-r--r--src/plugins/dpdk/device/flow.c8
-rw-r--r--src/vnet/flow/flow.h60
3 files changed, 69 insertions, 52 deletions
diff --git a/src/plugins/dpdk/device/dpdk.h b/src/plugins/dpdk/device/dpdk.h
index 66794a4e67c..9df7f398ee6 100644
--- a/src/plugins/dpdk/device/dpdk.h
+++ b/src/plugins/dpdk/device/dpdk.h
@@ -443,32 +443,33 @@ typedef enum
void dpdk_update_link_state (dpdk_device_t * xd, f64 now);
-#define foreach_dpdk_rss_hf \
- _(0, ETH_RSS_FRAG_IPV4, "ipv4-frag") \
- _(1, ETH_RSS_NONFRAG_IPV4_TCP, "ipv4-tcp") \
- _(2, ETH_RSS_NONFRAG_IPV4_UDP, "ipv4-udp") \
- _(3, ETH_RSS_NONFRAG_IPV4_SCTP, "ipv4-sctp") \
- _(4, ETH_RSS_NONFRAG_IPV4_OTHER, "ipv4-other") \
- _(5, ETH_RSS_IPV4, "ipv4") \
- _(6, ETH_RSS_IPV6_TCP_EX, "ipv6-tcp-ex") \
- _(7, ETH_RSS_IPV6_UDP_EX, "ipv6-udp-ex") \
- _(8, ETH_RSS_FRAG_IPV6, "ipv6-frag") \
- _(9, ETH_RSS_NONFRAG_IPV6_TCP, "ipv6-tcp") \
- _(10, ETH_RSS_NONFRAG_IPV6_UDP, "ipv6-udp") \
- _(11, ETH_RSS_NONFRAG_IPV6_SCTP, "ipv6-sctp") \
- _(12, ETH_RSS_NONFRAG_IPV6_OTHER, "ipv6-other") \
- _(13, ETH_RSS_IPV6_EX, "ipv6-ex") \
- _(14, ETH_RSS_IPV6, "ipv6") \
- _(15, ETH_RSS_L2_PAYLOAD, "l2-payload") \
- _(16, ETH_RSS_PORT, "port") \
- _(17, ETH_RSS_VXLAN, "vxlan") \
- _(18, ETH_RSS_GENEVE, "geneve") \
- _(19, ETH_RSS_NVGRE, "nvgre") \
- _(20, ETH_RSS_GTPU, "gtpu") \
- _(60, ETH_RSS_L4_DST_ONLY, "l4-dst-only") \
- _(61, ETH_RSS_L4_SRC_ONLY, "l4-src-only") \
- _(62, ETH_RSS_L3_DST_ONLY, "l3-dst-only") \
- _(63, ETH_RSS_L3_SRC_ONLY, "l3-src-only")
+#define foreach_dpdk_rss_hf \
+ _ (0, ETH_RSS_FRAG_IPV4, "ipv4-frag") \
+ _ (1, ETH_RSS_NONFRAG_IPV4_TCP, "ipv4-tcp") \
+ _ (2, ETH_RSS_NONFRAG_IPV4_UDP, "ipv4-udp") \
+ _ (3, ETH_RSS_NONFRAG_IPV4_SCTP, "ipv4-sctp") \
+ _ (4, ETH_RSS_NONFRAG_IPV4_OTHER, "ipv4-other") \
+ _ (5, ETH_RSS_IPV4, "ipv4") \
+ _ (6, ETH_RSS_IPV6_TCP_EX, "ipv6-tcp-ex") \
+ _ (7, ETH_RSS_IPV6_UDP_EX, "ipv6-udp-ex") \
+ _ (8, ETH_RSS_FRAG_IPV6, "ipv6-frag") \
+ _ (9, ETH_RSS_NONFRAG_IPV6_TCP, "ipv6-tcp") \
+ _ (10, ETH_RSS_NONFRAG_IPV6_UDP, "ipv6-udp") \
+ _ (11, ETH_RSS_NONFRAG_IPV6_SCTP, "ipv6-sctp") \
+ _ (12, ETH_RSS_NONFRAG_IPV6_OTHER, "ipv6-other") \
+ _ (13, ETH_RSS_IPV6_EX, "ipv6-ex") \
+ _ (14, ETH_RSS_IPV6, "ipv6") \
+ _ (15, ETH_RSS_L2_PAYLOAD, "l2-payload") \
+ _ (16, ETH_RSS_PORT, "port") \
+ _ (17, ETH_RSS_VXLAN, "vxlan") \
+ _ (18, ETH_RSS_GENEVE, "geneve") \
+ _ (19, ETH_RSS_NVGRE, "nvgre") \
+ _ (20, ETH_RSS_GTPU, "gtpu") \
+ _ (21, ETH_RSS_ESP, "esp") \
+ _ (60, ETH_RSS_L4_DST_ONLY, "l4-dst-only") \
+ _ (61, ETH_RSS_L4_SRC_ONLY, "l4-src-only") \
+ _ (62, ETH_RSS_L3_DST_ONLY, "l3-dst-only") \
+ _ (63, ETH_RSS_L3_SRC_ONLY, "l3-src-only")
format_function_t format_dpdk_device_name;
format_function_t format_dpdk_device;
diff --git a/src/plugins/dpdk/device/flow.c b/src/plugins/dpdk/device/flow.c
index a090ec0e930..850476b87c1 100644
--- a/src/plugins/dpdk/device/flow.c
+++ b/src/plugins/dpdk/device/flow.c
@@ -444,6 +444,14 @@ dpdk_flow_add (dpdk_device_t * xd, vnet_flow_t * f, dpdk_flow_entry_t * fe)
}
pattern_end:
+ if ((f->actions & VNET_FLOW_ACTION_RSS) &&
+ (f->rss_types & (1ULL << VNET_FLOW_RSS_TYPES_ESP)))
+ {
+
+ vec_add2 (items, item, 1);
+ item->type = RTE_FLOW_ITEM_TYPE_ESP;
+ }
+
vec_add2 (items, item, 1);
item->type = RTE_FLOW_ITEM_TYPE_END;
diff --git a/src/vnet/flow/flow.h b/src/vnet/flow/flow.h
index ad61677a44b..76c1df8a22f 100644
--- a/src/vnet/flow/flow.h
+++ b/src/vnet/flow/flow.h
@@ -127,32 +127,40 @@ typedef enum
_( -5, NO_SUCH_INTERFACE, "no such interface") \
_( -6, INTERNAL, "internal error")
-#define foreach_flow_rss_types \
- _(0, FRAG_IPV4, "ipv4-frag") \
- _(1, IPV4_TCP, "ipv4-tcp") \
- _(2, IPV4_UDP, "ipv4-udp") \
- _(3, IPV4_SCTP, "ipv4-sctp") \
- _(4, IPV4_OTHER, "ipv4-other") \
- _(5, IPV4, "ipv4") \
- _(6, IPV6_TCP_EX, "ipv6-tcp-ex") \
- _(7, IPV6_UDP_EX, "ipv6-udp-ex") \
- _(8, FRAG_IPV6, "ipv6-frag") \
- _(9, IPV6_TCP, "ipv6-tcp") \
- _(10, IPV6_UDP, "ipv6-udp") \
- _(11, IPV6_SCTP, "ipv6-sctp") \
- _(12, IPV6_OTHER, "ipv6-other") \
- _(13, IPV6_EX, "ipv6-ex") \
- _(14, IPV6, "ipv6") \
- _(15, L2_PAYLOAD, "l2-payload") \
- _(16, PORT, "port") \
- _(17, VXLAN, "vxlan") \
- _(18, GENEVE, "geneve") \
- _(19, NVGRE, "nvgre") \
- _(20, GTPU, "gtpu") \
- _(60, L4_DST_ONLY, "l4-dst-only") \
- _(61, L4_SRC_ONLY, "l4-src-only") \
- _(62, L3_DST_ONLY, "l3-dst-only") \
- _(63, L3_SRC_ONLY, "l3-src-only")
+#define foreach_flow_rss_types \
+ _ (0, FRAG_IPV4, "ipv4-frag") \
+ _ (1, IPV4_TCP, "ipv4-tcp") \
+ _ (2, IPV4_UDP, "ipv4-udp") \
+ _ (3, IPV4_SCTP, "ipv4-sctp") \
+ _ (4, IPV4_OTHER, "ipv4-other") \
+ _ (5, IPV4, "ipv4") \
+ _ (6, IPV6_TCP_EX, "ipv6-tcp-ex") \
+ _ (7, IPV6_UDP_EX, "ipv6-udp-ex") \
+ _ (8, FRAG_IPV6, "ipv6-frag") \
+ _ (9, IPV6_TCP, "ipv6-tcp") \
+ _ (10, IPV6_UDP, "ipv6-udp") \
+ _ (11, IPV6_SCTP, "ipv6-sctp") \
+ _ (12, IPV6_OTHER, "ipv6-other") \
+ _ (13, IPV6_EX, "ipv6-ex") \
+ _ (14, IPV6, "ipv6") \
+ _ (15, L2_PAYLOAD, "l2-payload") \
+ _ (16, PORT, "port") \
+ _ (17, VXLAN, "vxlan") \
+ _ (18, GENEVE, "geneve") \
+ _ (19, NVGRE, "nvgre") \
+ _ (20, GTPU, "gtpu") \
+ _ (21, ESP, "esp") \
+ _ (60, L4_DST_ONLY, "l4-dst-only") \
+ _ (61, L4_SRC_ONLY, "l4-src-only") \
+ _ (62, L3_DST_ONLY, "l3-dst-only") \
+ _ (63, L3_SRC_ONLY, "l3-src-only")
+
+typedef enum
+{
+#define _(v, n, s) VNET_FLOW_RSS_TYPES_##n = v,
+ foreach_flow_rss_types
+#undef _
+} vnet_flow_rss_types_t;
#define foreach_rss_function \
_(DEFAULT, "default") \