Commit 97f63e57a8 (ofproto: Remove soon-to-be-invalid optimizations.) changed ofproto_delete_flow() to use the general-purpose flow_mod implementation. However, the general-purpose flow_mod never matches hidden flows, which are exactly the flows that ofproto_delete_flow()'s callers want to delete.
This commit fixes the problem by allowing flow_mods that specify a priority that can only be for a hidden flow to delete a hidden flow. (This doesn't allow OpenFlow clients to meddle with hidden flows because OpenFlow uses only a 16-bit field to specify priority.) I verified that, without this commit, if I change from one controller to another with "ovs-vsctl set-controller", then the in-band rules for the old controller remain. With this commit, the old rules are removed. Reported-by: YAMAMOTO Takashi <yamam...@valinux.co.jp> Bug #19821. Reported-by: Luca Giraudo <lgira...@vwmare.com> Bug #19888. Reported-by: Ying Chen <yingc...@vmware.com> Signed-off-by: Ben Pfaff <b...@nicira.com> --- ofproto/ofproto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index cfe8d2a..fcb3bca 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -3239,7 +3239,7 @@ collect_rule(struct rule *rule, const struct rule_criteria *c, struct rule_collection *rules) OVS_REQUIRES(ofproto_mutex) { - if (ofproto_rule_is_hidden(rule)) { + if (ofproto_rule_is_hidden(rule) && c->cr.priority <= UINT16_MAX) { return 0; } else if (rule->pending) { return OFPROTO_POSTPONE; -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev