[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