Destroying the in-band control object didn't remove the flows related to
in-band control, so they could persist until another event caused the
flow table to be reset. Changing or removing the controller is one such
event, which would probably happen at the same time as turning off in-band
control, so this is a rather minor flaw, but it still seems good to fix it.
in_band_destroy(struct in_band *in_band)
{
if (in_band) {
+ int i;
+
+ for (i = 0; i < N_IB_RULES; i++) {
+ drop_flow(in_band, i);
+ }
+
switch_status_unregister(in_band->ss_cat);
netdev_close(in_band->local_netdev);
netdev_close(in_band->remote_netdev);
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);
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);