Ben pointed out off list that controllers will expect the flow metadata to be cleared when traversing a patch port.
--- ofproto/ofproto-dpif.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index d5bd0b4..d75a63c 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -5508,6 +5508,10 @@ compose_output_action__(struct action_xlate_ctx *ctx, uint16_t ofp_port, struct priority_to_dscp *pdscp; uint32_t out_port, odp_port; + /* If 'struct flow' gets additional metadata, we'll need to zero it out + * before traversing a patch port. */ + BUILD_ASSERT_DECL(FLOW_WC_SEQ == 18); + if (!ofport) { xlate_report(ctx, "Nonexistent output port"); return; @@ -5537,6 +5541,9 @@ compose_output_action__(struct action_xlate_ctx *ctx, uint16_t ofp_port, ctx->ofproto = ofproto_dpif_cast(peer->up.ofproto); ctx->flow.in_port = peer->up.ofp_port; + ctx->flow.metadata = htonll(0); + memset(&ctx->flow.tunnel, 0, sizeof ctx->flow.tunnel); + memset(ctx->flow.regs, 0, sizeof ctx->flow.regs); xlate_table_action(ctx, ctx->flow.in_port, 0, true); ctx->flow = old_flow; ctx->ofproto = ofproto_dpif_cast(ofport->up.ofproto); -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev