---
 ofproto/ofproto-provider.h |   55 +++++++++++++++++++++++++------------------
 ofproto/ofproto.c          |    2 +-
 ofproto/ofproto.h          |    1 -
 3 files changed, 33 insertions(+), 25 deletions(-)

diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h
index 0e08d19..72c8c4b 100644
--- a/ofproto/ofproto-provider.h
+++ b/ofproto/ofproto-provider.h
@@ -1339,34 +1339,43 @@ struct ofproto_class {
                        ofp_port_t realdev_ofp_port, int vid);
 
 /* ## ------------------------ ## */
-/* ## OpenFlow Meter Functions ## */
+/* ## OpenFlow meter functions ## */
 /* ## ------------------------ ## */
 
     /* These functions should be NULL if an implementation does not support
-     * them.  If meter_get_features is non-NULL, then the rest must also
-     * be non-NULL. */
-    void (*meter_get_features)(const struct ofproto *,
-                               struct ofputil_meter_features *);
-    /* Modifies an existing meter, if the 'ofproto_meter_id *' points to
-     * a value other than UINT32_MAX, otherwise adds a new meter.  On success
-     * a provider meter id is stored at 'ofproto_meter_id *'.  All further
-     * references to the meter will be made with the returned provider meter id
-     * rather than the OpenFlow meter id.  The caller does not try to interpret
-     * the provider meter id (other than UINT32_MAX signifying an invalid
-     * provider meter id), giving the implementation the freedom to either use
-     * the OpenFlow meter_id value provided in the meter configuration, or any
-     * other value suitable for the implementation.
-     * If a meter modification fails, the existing meter configuration is left
-     * intact. */
-    enum ofperr (*meter_set)(struct ofproto *, ofproto_meter_id *,
-                             const struct ofputil_meter_config *);
+     * them.  They must be all null or all non-null.. */
+
+    /* Initializes 'features' to describe the metering features supported by
+     * 'ofproto'. */
+    void (*meter_get_features)(const struct ofproto *ofproto,
+                               struct ofputil_meter_features *features);
+
+    /* If '*id' is UINT32_MAX, adds a new meter with the given 'config'.  On
+     * success the function must store a provider meter ID other than
+     * UINT32_MAX in '*id'.  All further references to the meter will be made
+     * with the returned provider meter id rather than the OpenFlow meter id.
+     * The caller does not try to interpret the provider meter id, giving the
+     * implementation the freedom to either use the OpenFlow meter_id value
+     * provided in the meter configuration, or any other value suitable for the
+     * implementation.
+     *
+     * If '*id' is a value other than UINT32_MAX, modifies the existing meter
+     * with that meter provider ID to have configuration 'config'.  On failure,
+     * the existing meter configuration is left intact.  Regardless of success,
+     * any change to '*id' updates the provider meter id used for this
+     * meter. */
+    enum ofperr (*meter_set)(struct ofproto *ofproto, ofproto_meter_id *id,
+                             const struct ofputil_meter_config *config);
+
     /* Gets the meter and meter band packet and byte counts for maximum of
-     * 'stats->n_bands' bands.  The caller fills in the other stats values.
-     * The band stats are copied to memory at 'stats->bands' provided by the
-     * caller.  The number of returned band stats is returned in
-     * 'stats->n_bands'. */
-    enum ofperr (*meter_get)(const struct ofproto *, ofproto_meter_id,
+     * 'stats->n_bands' bands for the meter with provider ID 'id' within
+     * 'ofproto'.  The caller fills in the other stats values.  The band stats
+     * are copied to memory at 'stats->bands' provided by the caller.  The
+     * number of returned band stats is returned in 'stats->n_bands'. */
+    enum ofperr (*meter_get)(const struct ofproto *ofproto,
+                             ofproto_meter_id id,
                              struct ofputil_meter_stats *stats);
+
     /* Deletes a meter, making the 'ofproto_meter_id' invalid for any
      * further calls. */
     void (*meter_del)(struct ofproto *, ofproto_meter_id);
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index f5be583..b09735a 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -4353,7 +4353,7 @@ handle_meter_mod(struct ofconn *ofconn, const struct 
ofp_header *oh)
         for (meter_id = first; meter_id <= last; ++meter_id) {
             struct meter *meter = ofproto->meters[meter_id];
             if (!meter) {
-                continue; /* Skip non-existing meters. */
+                continue;
             }
 
             if (!list_is_empty(&meter->rules)) {
diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h
index 5c8cb03..792df89 100644
--- a/ofproto/ofproto.h
+++ b/ofproto/ofproto.h
@@ -430,7 +430,6 @@ bool ofproto_has_vlan_usage_changed(const struct ofproto *);
 int ofproto_port_set_realdev(struct ofproto *, ofp_port_t vlandev_ofp_port,
                              ofp_port_t realdev_ofp_port, int vid);
 
-/* Returns UINT32_MAX if the given of_meter_id is invalid. */
 uint32_t ofproto_get_provider_meter_id(const struct ofproto *,
                                        uint32_t of_meter_id);
 
-- 
1.7.2.5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to