diff options
-rw-r--r-- | src/plugins/dpdk/device/dpdk.h | 53 | ||||
-rw-r--r-- | src/plugins/dpdk/device/flow.c | 8 | ||||
-rw-r--r-- | src/vnet/flow/flow.h | 60 |
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") \ |