in-band: Drop in-band flows when turning off in-band control.
[openvswitch] / ofproto / ofproto.c
index 995e6b0fe9e256936b4f7ffa05beef5aeb308172..ba9ef1903db12d59260fbd2a170010e6bfaca885 100644 (file)
@@ -718,8 +718,9 @@ ofproto_destroy(struct ofproto *p)
         return;
     }
 
-    /* Destroy fail-open early, because it touches the classifier. */
+    /* Destroy fail-open and in-band early, since they touch the classifier. */
     ofproto_set_failure(p, false);
+    ofproto_set_in_band(p, false);
 
     ofproto_flush_flows(p);
     classifier_destroy(&p->cls);
@@ -737,7 +738,6 @@ ofproto_destroy(struct ofproto *p)
     shash_destroy(&p->port_by_name);
 
     switch_status_destroy(p->switch_status);
-    in_band_destroy(p->in_band);
     discovery_destroy(p->discovery);
     pinsched_destroy(p->miss_sched);
     pinsched_destroy(p->action_sched);
@@ -1669,6 +1669,7 @@ do_put_flow(struct ofproto *ofproto, struct rule *rule, int flags,
     put->flow.key = rule->cr.flow;
     put->flow.actions = rule->odp_actions;
     put->flow.n_actions = rule->n_odp_actions;
+    put->flow.flags = 0;
     put->flags = flags;
     return dpif_flow_put(ofproto->dpif, put);
 }
@@ -1764,6 +1765,7 @@ rule_uninstall(struct ofproto *p, struct rule *rule)
         odp_flow.key = rule->cr.flow;
         odp_flow.actions = NULL;
         odp_flow.n_actions = 0;
+        odp_flow.flags = 0;
         if (!dpif_flow_del(p->dpif, &odp_flow)) {
             update_stats(p, rule, &odp_flow.stats);
         }