- enum ofperr error = ofpact_check__(a, flow, max_ports, &dl_type);
+ enum ofperr error;
+
+ /* If the dl_type was changed by an action then its new value
+ * should be present in the flow passed to ofpact_check__(). */
+ if (flow->dl_type != dl_type) {
+ /* Only copy flow at most once */
+ if (flow != &updated_flow) {
+ updated_flow = *flow;
+ flow = &updated_flow;
+ }
+ updated_flow.dl_type = dl_type;
+ }
+
+ error = ofpact_check__(a, flow, max_ports, &dl_type);