From: Ben Pfaff Date: Tue, 6 Apr 2010 22:24:38 +0000 (-0700) Subject: in-band: Drop in-band flows when turning off in-band control. X-Git-Tag: v1.0.0~112 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=f7de2cdffcadaca5f62003f9c115052aa295aa70;p=sliver-openvswitch.git in-band: Drop in-band flows when turning off in-band control. 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. --- diff --git a/ofproto/in-band.c b/ofproto/in-band.c index f3cd02b88..8e7f43073 100644 --- a/ofproto/in-band.c +++ b/ofproto/in-band.c @@ -645,6 +645,12 @@ void 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); diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 0746bc983..ba9ef1903 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -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);