lib/flow: Retain ODPP_NONE on flow_extract().
[sliver-openvswitch.git] / ofproto / ofproto-dpif.c
index bb414f2..d131ec2 100644 (file)
@@ -3339,6 +3339,7 @@ group_destruct(struct ofgroup *group_)
 static enum ofperr
 group_modify(struct ofgroup *group_, struct ofgroup *victim_)
 {
+    struct ofproto_dpif *ofproto = ofproto_dpif_cast(group_->ofproto);
     struct group_dpif *group = group_dpif_cast(group_);
     struct group_dpif *victim = group_dpif_cast(victim_);
 
@@ -3349,6 +3350,8 @@ group_modify(struct ofgroup *group_, struct ofgroup *victim_)
     group_construct_stats(group);
     ovs_mutex_unlock(&group->stats_mutex);
 
+    ofproto->backer->need_revalidate = REV_FLOW_TABLE;
+
     return 0;
 }
 
@@ -3590,8 +3593,6 @@ trace_format_rule(struct ds *result, int level, const struct rule_dpif *rule)
     ds_put_cstr(result, "OpenFlow actions=");
     ofpacts_format(actions->ofpacts, actions->ofpacts_len, result);
     ds_put_char(result, '\n');
-
-    rule_actions_unref(actions);
 }
 
 static void
@@ -3786,14 +3787,10 @@ parse_flow_and_packet(int argc, const char *argv[],
         if (!packet->size) {
             flow_compose(packet, flow);
         } else {
-            union flow_in_port in_port = flow->in_port;
-            struct pkt_metadata md;
+            struct pkt_metadata md = PKT_METADATA_INITIALIZER_FLOW(flow);
 
             /* Use the metadata from the flow and the packet argument
              * to reconstruct the flow. */
-            pkt_metadata_init(&md, NULL, flow->skb_priority,
-                                   flow->pkt_mark, &in_port);
-
             flow_extract(packet, &md, flow);
         }
     }