[ovs-dev] [meters 8/9] ofproto: Get rid of 'last_meter'.
Ben Pfaff
blp at nicira.com
Thu Jun 27 22:19:43 UTC 2013
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 <blp at 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
More information about the dev
mailing list