ofproto: Use proper error code when meter_id is out of range.
authorJarno Rajahalme <jrajahalme@nicira.com>
Sun, 8 Sep 2013 01:27:08 +0000 (18:27 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 13 Sep 2013 04:18:42 +0000 (21:18 -0700)
Use OUT_OF_METERS when given meter_id is greater than what is supported
by the datapath.  Retain the INVALID_METER error code for the meter_ids
outside of the range supported by the specification.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto/ofproto.c

index 3d0d1b0..5118572 100644 (file)
@@ -4588,9 +4588,12 @@ handle_meter_mod(struct ofconn *ofconn, const struct ofp_header *oh)
 
     if (mm.command != OFPMC13_DELETE) {
         /* Fails also when meters are not implemented by the provider. */
-        if (!meter_id || meter_id > ofproto->meter_features.max_meters) {
+        if (meter_id == 0 || meter_id > OFPM13_MAX) {
             error = OFPERR_OFPMMFC_INVALID_METER;
             goto exit_free_bands;
+        } else if (meter_id > ofproto->meter_features.max_meters) {
+            error = OFPERR_OFPMMFC_OUT_OF_METERS;
+            goto exit_free_bands;
         }
         if (mm.meter.n_bands > ofproto->meter_features.max_bands) {
             error = OFPERR_OFPMMFC_OUT_OF_BANDS;