Incase of action execution dpif-netdev set may-steal for
a packet depending on whether it is last action or not. But
this does not work if it is last action inside a recirc action.

Signed-off-by: Pravin B Shelar <pshe...@nicira.com>
---
 lib/dpif-netdev.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 6b8201b..223e594 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2893,10 +2893,9 @@ dp_execute_cb(void *aux_, struct dpif_packet **packets, 
int cnt,
             }
             (*depth)--;
 
-            return;
+        } else {
+            VLOG_WARN("Packet dropped. Max recirculation depth exceeded.");
         }
-
-        VLOG_WARN("Packet dropped. Max recirculation depth exceeded.");
         break;
 
     case OVS_ACTION_ATTR_PUSH_VLAN:
@@ -2922,6 +2921,10 @@ dp_netdev_execute_actions(struct dp_netdev_pmd_thread 
*pmd,
 {
     struct dp_netdev_execute_aux aux = {pmd};
 
+    /* Do not steal packets inside recirc action. */
+    if (OVS_UNLIKELY(*recirc_depth_get())) {
+        may_steal = false;
+    }
     odp_execute_actions(&aux, packets, cnt, may_steal, md, actions,
                         actions_len, dp_execute_cb);
 }
-- 
1.9.3

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to