I don't see much value in this member because there is already an assumption that there is a relatively small maximum number of meters (ofproto allocates memory proportional to the maximum number of meters).
Signed-off-by: Ben Pfaff <b...@nicira.com> --- ofproto/ofproto-provider.h | 1 - ofproto/ofproto.c | 27 ++++----------------------- 2 files changed, 4 insertions(+), 24 deletions(-) diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index 72c8c4b..7fc5e03 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -83,7 +83,6 @@ struct ofproto { * meter_id. */ struct ofputil_meter_features meter_features; struct meter **meters; /* 'meter_features.max_meter' + 1 pointers. */ - uint32_t last_meter; /* Last meter in use or 0. */ /* OpenFlow connections. */ struct connmgr *connmgr; diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index b09735a..22b5fd4 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -477,7 +477,6 @@ ofproto_create(const char *datapath_name, const char *datapath_type, } ofproto->meters = xzalloc((ofproto->meter_features.max_meters + 1) * sizeof(struct meter *)); - ofproto->last_meter = 0; /* Last meter in use or zero. */ *ofprotop = ofproto; return 0; @@ -4221,7 +4220,7 @@ uint32_t ofproto_get_provider_meter_id(const struct ofproto * ofproto, uint32_t of_meter_id) { - if (of_meter_id && of_meter_id <= ofproto->last_meter) { + if (of_meter_id && of_meter_id <= ofproto->meter_features.max_meters) { const struct meter *meter = ofproto->meters[of_meter_id]; if (meter) { return meter->provider_meter_id.uint32; @@ -4308,9 +4307,6 @@ handle_meter_mod(struct ofconn *ofconn, const struct ofp_header *oh) ovs_assert(provider_meter_id.uint32 != UINT32_MAX); ofproto->meters[meter_id] = meter_create(&mm.meter, provider_meter_id); - if (ofproto->last_meter < meter_id) { - ofproto->last_meter = meter_id; - } } break; } @@ -4337,11 +4333,9 @@ handle_meter_mod(struct ofconn *ofconn, const struct ofp_header *oh) if (meter_id == OFPM13_ALL) { first = 1; - /* 'last' is 0 when meters are not implemented by the provider. */ - last = ofproto->last_meter; + last = ofproto->meter_features.max_meters; } else { - /* True also when meters are not implemented by the provider. */ - if (!meter_id || meter_id > ofproto->last_meter) { + if (!meter_id || meter_id > ofproto->meter_features.max_meters) { return 0; } first = last = meter_id; @@ -4388,17 +4382,6 @@ handle_meter_mod(struct ofconn *ofconn, const struct ofp_header *oh) free(meter); } - if (first == last) { - /* Deleted only one meter. */ - if (ofproto->last_meter == last) { - while (--last && !ofproto->meters[last]) {} - ofproto->last_meter = last; /* Last meter or 0 */ - } - } else { - /* Deleted all meters. */ - ofproto->last_meter = 0; - } - /* Delete does not parse bands, no need to free. */ return 0; } @@ -4445,10 +4428,8 @@ handle_meter_request(struct ofconn *ofconn, const struct ofp_header *request, if (meter_id == OFPM13_ALL) { first = 1; - /* 'last' is 0 when meters are not implemented by the provider. */ - last = ofproto->last_meter; + last = ofproto->meter_features.max_meters; } else { - /* True also when meters are not implemented by the provider. */ if (!meter_id || meter_id > ofproto->meter_features.max_meters || !ofproto->meters[meter_id]) { return OFPERR_OFPMMFC_UNKNOWN_METER; -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev