classifier: Remove OF1.0 special case from classifier_find_rule_exactly().
authorBen Pfaff <blp@nicira.com>
Tue, 26 Apr 2011 20:09:24 +0000 (13:09 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 11 May 2011 19:35:10 +0000 (12:35 -0700)
This special case should never have actually triggered in practice, because
OpenFlow 1.0 cannot set up an exact-match rule as defined by
flow_wildcards_is_exact().  (OpenFlow 1.0 will always, for example,
wildcard all NXM registers.)

OVS implements this OF1.0 special case differently, by changing flow
priority to 65535 in cls_rule_from_match() if the flow is an exact match as
defined by OpenFlow 1.0.

lib/classifier.c

index 36e294e2980944e09bee1285fa654cf109e1cf94..42a2169368b51a12a02215cceea4bf9171f30dd9 100644 (file)
@@ -760,10 +760,7 @@ classifier_lookup(const struct classifier *cls, const struct flow *flow)
 
 /* Finds and returns a rule in 'cls' with exactly the same priority and
  * matching criteria as 'target'.  Returns a null pointer if 'cls' doesn't
- * contain an exact match.
- *
- * Priority is ignored for exact-match rules (because OpenFlow 1.0 always
- * treats exact-match rules as highest priority). */
+ * contain an exact match. */
 struct cls_rule *
 classifier_find_rule_exactly(const struct classifier *cls,
                              const struct cls_rule *target)
@@ -777,9 +774,6 @@ classifier_find_rule_exactly(const struct classifier *cls,
     }
 
     head = find_equal(table, &target->flow, flow_hash(&target->flow, 0));
-    if (flow_wildcards_is_exact(&target->wc)) {
-        return head;
-    }
     FOR_EACH_RULE_IN_LIST (rule, head) {
         if (target->priority >= rule->priority) {
             return target->priority == rule->priority ? rule : NULL;