Looks good, Ethan
On Thu, Aug 4, 2011 at 16:29, Ben Pfaff <b...@nicira.com> wrote: > In my opinion this makes the code slightly easier to read and write. > --- > ofproto/ofproto-provider.h | 9 +++++++++ > ofproto/ofproto.c | 19 +++++++++---------- > 2 files changed, 18 insertions(+), 10 deletions(-) > > diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h > index f46ff84..8c32e4f 100644 > --- a/ofproto/ofproto-provider.h > +++ b/ofproto/ofproto-provider.h > @@ -67,6 +67,15 @@ struct ofproto { > struct ofproto *ofproto_lookup(const char *name); > struct ofport *ofproto_get_port(const struct ofproto *, uint16_t ofp_port); > > +/* Assigns CLS to each classifier table, in turn, in OFPROTO. > + * > + * All parameters are evaluated multiple times. */ > +#define OFPROTO_FOR_EACH_TABLE(CLS, OFPROTO) \ > + for ((CLS) = (OFPROTO)->tables; \ > + (CLS) < &(OFPROTO)->tables[(OFPROTO)->n_tables]; \ > + (CLS)++) > + > + > /* An OpenFlow port within a "struct ofproto". > * > * With few exceptions, ofproto implementations may look at these fields but > diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c > index 1c765c6..11f1b20 100644 > --- a/ofproto/ofproto.c > +++ b/ofproto/ofproto.c > @@ -289,10 +289,10 @@ ofproto_create(const char *datapath_name, const char > *datapath_type, > struct ofproto **ofprotop) > { > const struct ofproto_class *class; > + struct classifier *table; > struct ofproto *ofproto; > int n_tables; > int error; > - int i; > > *ofprotop = NULL; > > @@ -350,8 +350,8 @@ ofproto_create(const char *datapath_name, const char > *datapath_type, > assert(n_tables >= 1 && n_tables <= 255); > ofproto->n_tables = n_tables; > ofproto->tables = xmalloc(n_tables * sizeof *ofproto->tables); > - for (i = 0; i < n_tables; i++) { > - classifier_init(&ofproto->tables[i]); > + OFPROTO_FOR_EACH_TABLE (table, ofproto) { > + classifier_init(table); > } > > ofproto->datapath_id = pick_datapath_id(ofproto); > @@ -675,8 +675,7 @@ ofproto_flush__(struct ofproto *ofproto) > } > > group = ofopgroup_create(ofproto); > - for (table = ofproto->tables; table < > &ofproto->tables[ofproto->n_tables]; > - table++) { > + OFPROTO_FOR_EACH_TABLE (table, ofproto) { > struct rule *rule, *next_rule; > struct cls_cursor cursor; > > @@ -695,7 +694,7 @@ ofproto_flush__(struct ofproto *ofproto) > static void > ofproto_destroy__(struct ofproto *ofproto) > { > - size_t i; > + struct classifier *table; > > assert(list_is_empty(&ofproto->pending)); > > @@ -712,9 +711,9 @@ ofproto_destroy__(struct ofproto *ofproto) > hmap_destroy(&ofproto->ports); > shash_destroy(&ofproto->port_by_name); > > - for (i = 0; i < ofproto->n_tables; i++) { > - assert(classifier_is_empty(&ofproto->tables[i])); > - classifier_destroy(&ofproto->tables[i]); > + OFPROTO_FOR_EACH_TABLE (table, ofproto) { > + assert(classifier_is_empty(table)); > + classifier_destroy(table); > } > free(ofproto->tables); > > @@ -1962,7 +1961,7 @@ ofproto_get_all_flows(struct ofproto *p, struct ds > *results) > { > struct classifier *cls; > > - for (cls = &p->tables[0]; cls < &p->tables[p->n_tables]; cls++) { > + OFPROTO_FOR_EACH_TABLE (cls, p) { > struct cls_cursor cursor; > struct rule *rule; > > -- > 1.7.4.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev