[ovs-dev] [multiple tables 6/8] ofproto: New helper macro OFPROTO_FOR_EACH_TABLE.
Ethan Jackson
ethan at nicira.com
Mon Aug 8 22:41:44 UTC 2011
Looks good,
Ethan
On Thu, Aug 4, 2011 at 16:29, Ben Pfaff <blp at 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 at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list