Looks good, thanks. Ethan
On Fri, Jul 20, 2012 at 4:25 PM, Ben Pfaff <b...@nicira.com> wrote: > When cls_cursor_init() is given a NULL target, it can skip an expensive > step comparing the rule against the target for every table and every rule > in the classifier. collect_rule_loose() and other callers could take > advantage of this optimization, except that they actually pass in a rule > that matches everything instead of a NULL rule (e.g. for "ovs-ofctl > dump-flows <bridge>" without specifying a matching rule). > > This optimizes that case. > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > lib/classifier.c | 9 ++++++++- > lib/classifier.h | 2 ++ > 2 files changed, 10 insertions(+), 1 deletions(-) > > diff --git a/lib/classifier.c b/lib/classifier.c > index a482666..50c36dc 100644 > --- a/lib/classifier.c > +++ b/lib/classifier.c > @@ -107,6 +107,13 @@ cls_rule_format(const struct cls_rule *rule, struct ds > *s) > { > match_format(&rule->match, s, rule->priority); > } > + > +/* Returns true if 'rule' matches every packet, false otherwise. */ > +bool > +cls_rule_is_catchall(const struct cls_rule *rule) > +{ > + return flow_wildcards_is_catchall(&rule->match.wc); > +} > > /* Initializes 'cls' as a classifier that initially contains no > classification > * rules. */ > @@ -375,7 +382,7 @@ cls_cursor_init(struct cls_cursor *cursor, const struct > classifier *cls, > const struct cls_rule *target) > { > cursor->cls = cls; > - cursor->target = target; > + cursor->target = target && !cls_rule_is_catchall(target) ? target : NULL; > } > > /* Returns the first matching cls_rule in 'cursor''s iteration, or a null > diff --git a/lib/classifier.h b/lib/classifier.h > index 74f9211..34e4bdb 100644 > --- a/lib/classifier.h > +++ b/lib/classifier.h > @@ -78,6 +78,8 @@ uint32_t cls_rule_hash(const struct cls_rule *, uint32_t > basis); > > void cls_rule_format(const struct cls_rule *, struct ds *); > > +bool cls_rule_is_catchall(const struct cls_rule *); > + > bool cls_rule_is_loose_match(const struct cls_rule *rule, > const struct match *criteria); > > -- > 1.7.2.5 > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev