In dp_netdev_input() we nevered fully covered the case where handler queues are
not there.
With this change we increment the stat counter and free the packet.

Signed-off-by: Daniele Di Proietto <ddiproie...@vmware.com>
---

I can move this logic into dp_netdev_output_userspace(), if you guys think
that's more appropriate.

---
 lib/dpif-netdev.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 4dcc268..e814645 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -2094,12 +2094,20 @@ dp_netdev_input(struct dp_netdev *dp, struct 
dpif_packet **packets, int cnt,
                 packet_batch_init(&batch, netdev_flow, packets[i], md,
                                   &key.flow);
             }
-        } else if (dp->handler_queues) {
+        } else {
+            /* Packet's flow not in datapath */
             dp_netdev_count_packet(dp, DP_STAT_MISS, 1);
-            dp_netdev_output_userspace(dp, &buf, 1,
-                                       miniflow_hash_5tuple(&key.flow, 0)
-                                       % dp->n_handlers,
-                                       DPIF_UC_MISS, &key.flow, NULL);
+
+            if (dp->handler_queues) {
+                /* Upcall */
+                dp_netdev_output_userspace(dp, &buf, 1,
+                                           miniflow_hash_5tuple(&key.flow, 0)
+                                           % dp->n_handlers,
+                                           DPIF_UC_MISS, &key.flow, NULL);
+            } else {
+                /* No upcall queue.  Freeing the packet */
+                dpif_packet_delete(packets[i]);
+            }
         }
     }
 
-- 
2.0.0

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

Reply via email to