[ovs-dev,09/10] userspace: Complete Packet In handling

Message ID AM2PR07MB10424781AA1125277398BF1F8A190@AM2PR07MB1042.eurprd07.prod.outlook.com
State Deferred
Headers show

Commit Message

Zoltán Balogh April 18, 2017, 11:20 a.m.
From: Jan Scheurich <jan.scheurich@ericsson.com>

Send packet_in for non-Ethernet packets.
Include packet_type in Packet In for ptap bridges.

Signed-off-by: Jan Scheurich <jan.scheurich@ericsson.com>
---
 lib/flow.c                   |  4 ++++
 ofproto/ofproto-dpif-xlate.c | 10 +++++-----
 2 files changed, 9 insertions(+), 5 deletions(-)

Patch

diff --git a/lib/flow.c b/lib/flow.c
index 81824e0..bd0b36e 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -993,6 +993,10 @@  flow_get_metadata(const struct flow *flow, struct match *flow_metadata)
     }
 
     match_set_in_port(flow_metadata, flow->in_port.ofp_port);
+    if (flow->packet_type != htonl(PT_ETH)) {
+        match_set_packet_type(flow_metadata, flow->packet_type);
+    }
+
     if (flow->ct_state != 0) {
         match_set_ct_state(flow_metadata, flow->ct_state);
         if (is_ct_valid(flow, NULL, NULL) && flow->ct_nw_proto != 0) {
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 5039758..8625445 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -4278,11 +4278,6 @@  execute_controller_action(struct xlate_ctx *ctx, int len,
         return;
     }
 
-    if (packet->packet_type != htonl(PT_ETH)) {
-        dp_packet_delete(packet);
-        return;
-    }
-
     /* A packet sent by an action in a table-miss rule is considered an
      * explicit table miss.  OpenFlow before 1.3 doesn't have that concept so
      * it will get translated back to OFPR_ACTION for those versions. */
@@ -4316,6 +4311,11 @@  execute_controller_action(struct xlate_ctx *ctx, int len,
     };
     flow_get_metadata(&ctx->xin->flow, &am->pin.up.public.flow_metadata);
 
+    /* Send packet_type only from packet-type-aware bridges. */
+    if (!ctx->xbridge->packet_type_aware) {
+        am->pin.up.public.flow_metadata.wc.masks.packet_type = 0;
+    }
+
     /* Async messages are only sent once, so if we send one now, no
      * xlate cache entry is created.  */
     if (ctx->xin->allow_side_effects) {