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-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7de2cdffcadaca5f62003f9c115052aa295aa70;p=openvswitch 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 f3cd02b8..8e7f4307 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 0746bc98..ba9ef190 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);