From: Jan Scheurich <jan.scheur...@ericsson.com> Send packet_in for non-Ethernet packets. Include packet_type in Packet In for ptap bridges.
Signed-off-by: Jan Scheurich <jan.scheur...@ericsson.com> --- lib/flow.c | 4 ++++ lib/ofp-print.c | 3 +-- ofproto/ofproto-dpif-xlate.c | 10 +++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/flow.c b/lib/flow.c index 306874363..8d3c92904 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -991,6 +991,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/lib/ofp-print.c b/lib/ofp-print.c index 423df3102..5b37ed8f4 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -218,10 +218,9 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh, } if (verbosity > 0) { - /* Packet In can only carry Ethernet packets. */ char *packet = ofp_packet_to_string(public->packet, public->packet_len, - htonl(PT_ETH)); + public->flow_metadata.flow.packet_type); ds_put_cstr(string, packet); free(packet); } diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index c22647289..8d3389b90 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -4262,11 +4262,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. */ @@ -4300,6 +4295,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) { -- 2.11.0 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev