Add direct packets to specific flow action in dpdk flow 12/18912/3
authorSimon Zhang <yuwei1.zhang@intel.com>
Tue, 16 Apr 2019 14:00:15 +0000 (22:00 +0800)
committerDamjan Marion <dmarion@me.com>
Tue, 16 Apr 2019 15:54:15 +0000 (15:54 +0000)
Change-Id: I48cd8052f9509efdf13f64ab279edb66a2d4a0a9
Signed-off-by: Simon Zhang <yuwei1.zhang@intel.com>
src/plugins/dpdk/device/flow.c
src/plugins/dpdk/device/init.c

index 3f95531..1b8b590 100644 (file)
@@ -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;
index eaeda32..13dc7de 100644 (file)
@@ -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;