From 3cf215aab7237d44cf153b43d80a971be9300626 Mon Sep 17 00:00:00 2001 From: Simon Zhang Date: Tue, 16 Apr 2019 22:00:15 +0800 Subject: Add direct packets to specific flow action in dpdk flow Change-Id: I48cd8052f9509efdf13f64ab279edb66a2d4a0a9 Signed-off-by: Simon Zhang --- src/plugins/dpdk/device/flow.c | 20 ++++++++++++++++---- src/plugins/dpdk/device/init.c | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/plugins/dpdk/device/flow.c b/src/plugins/dpdk/device/flow.c index 3f9553105f8..1b8b5906b1c 100644 --- a/src/plugins/dpdk/device/flow.c +++ b/src/plugins/dpdk/device/flow.c @@ -41,6 +41,7 @@ dpdk_flow_add (dpdk_device_t * xd, vnet_flow_t * f, dpdk_flow_entry_t * fe) struct rte_flow_item_udp udp[2] = { }; struct rte_flow_item_tcp tcp[2] = { }; struct rte_flow_action_mark mark = { 0 }; + struct rte_flow_action_queue queue = { 0 }; struct rte_flow_item *item, *items = 0; struct rte_flow_action *action, *actions = 0; @@ -201,10 +202,21 @@ dpdk_flow_add (dpdk_device_t * xd, vnet_flow_t * f, dpdk_flow_entry_t * fe) vec_add2 (actions, action, 1); action->type = RTE_FLOW_ACTION_TYPE_PASSTHRU; - vec_add2 (actions, action, 1); - mark.id = fe->mark; - action->type = RTE_FLOW_ACTION_TYPE_MARK; - action->conf = &mark; + if (f->actions & VNET_FLOW_ACTION_REDIRECT_TO_QUEUE) + { + vec_add2 (actions, action, 1); + queue.index = f->redirect_queue; + action->type = RTE_FLOW_ACTION_TYPE_QUEUE; + action->conf = &queue; + } + + if (f->actions & VNET_FLOW_ACTION_MARK) + { + vec_add2 (actions, action, 1); + mark.id = fe->mark; + action->type = RTE_FLOW_ACTION_TYPE_MARK; + action->conf = &mark; + } vec_add2 (actions, action, 1); action->type = RTE_FLOW_ACTION_TYPE_END; diff --git a/src/plugins/dpdk/device/init.c b/src/plugins/dpdk/device/init.c index eaeda32f3b7..13dc7deb119 100644 --- a/src/plugins/dpdk/device/init.c +++ b/src/plugins/dpdk/device/init.c @@ -392,6 +392,7 @@ dpdk_lib_init (dpdk_main_t * dm) xd->port_type = port_type_from_speed_capa (&dev_info); xd->supported_flow_actions = VNET_FLOW_ACTION_MARK | VNET_FLOW_ACTION_REDIRECT_TO_NODE | + VNET_FLOW_ACTION_REDIRECT_TO_QUEUE | VNET_FLOW_ACTION_BUFFER_ADVANCE | VNET_FLOW_ACTION_COUNT | VNET_FLOW_ACTION_DROP; -- cgit 1.2.3-korg