@@ -994,6 +994,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) {
@@ -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));
+ char *packet = ofp_packet_to_string(
+ public->packet, public->packet_len,
+ public->flow_metadata.flow.packet_type);
ds_put_cstr(string, packet);
free(packet);
}
@@ -4259,11 +4259,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. */