fixes for Meter Service
Change-Id: I83d5b8a2e0a955c050f7afe96761d5709d4f9f18
diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java
index a3a4fc2..58a2476 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.net.meter;
+import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkArgument;
/**
@@ -24,13 +25,14 @@
private final Type type;
private final long rate;
- private final long burstSize;
- private final short prec;
+ //TODO: should be made optional
+ private final Long burstSize;
+ private final Short prec;
private long packets;
private long bytes;
public DefaultBand(Type type, long rate,
- long burstSize, short prec) {
+ Long burstSize, Short prec) {
this.type = type;
this.rate = rate;
this.burstSize = burstSize;
@@ -77,6 +79,15 @@
this.bytes = bytes;
}
+ @Override
+ public String toString() {
+ return toStringHelper(this)
+ .add("rate", rate)
+ .add("burst-size", burstSize)
+ .add("type", type)
+ .add("drop-precedence", prec).toString();
+ }
+
public static Builder builder() {
return new Builder();
}
@@ -84,7 +95,7 @@
public static final class Builder implements Band.Builder {
private long rate;
- private long burstSize;
+ private Long burstSize;
private Short prec;
private Type type;
@@ -114,7 +125,7 @@
@Override
public DefaultBand build() {
- checkArgument(prec != null && type == Type.REMARK,
+ checkArgument(type != Type.REMARK && prec == null,
"Only REMARK bands can have a precendence.");
return new DefaultBand(type, rate, burstSize, prec);
diff --git a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java
index 611a23e..ab6b444 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java
@@ -15,12 +15,13 @@
*/
package org.onosproject.net.meter;
+import com.google.common.collect.ImmutableSet;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.DeviceId;
import java.util.Collection;
-import java.util.Collections;
+import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -138,6 +139,18 @@
this.bytes = bytes;
}
+ @Override
+ public String toString() {
+ return toStringHelper(this)
+ .add("device", deviceId)
+ .add("id", id)
+ .add("appId", appId.name())
+ .add("unit", unit)
+ .add("isBurst", burst)
+ .add("state", state)
+ .add("bands", bands).toString();
+ }
+
public static final class Builder implements Meter.Builder {
private MeterId id;
@@ -155,8 +168,8 @@
}
@Override
- public Meter.Builder withId(long id) {
- this.id = MeterId.meterId(id);
+ public Meter.Builder withId(MeterId id) {
+ this.id = id;
return this;
}
@@ -180,7 +193,7 @@
@Override
public Meter.Builder withBands(Collection<Band> bands) {
- this.bands = Collections.unmodifiableCollection(bands);
+ this.bands = ImmutableSet.copyOf(bands);
return this;
}
diff --git a/core/api/src/main/java/org/onosproject/net/meter/Meter.java b/core/api/src/main/java/org/onosproject/net/meter/Meter.java
index 5181c92..8ea04b0 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/Meter.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/Meter.java
@@ -130,10 +130,10 @@
/**
* Assigns the id to this meter.
*
- * @param id a long
+ * @param id a meter id
* @return this
*/
- Builder withId(long id);
+ Builder withId(MeterId id);
/**
* Assigns the application that built this meter.
diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterId.java b/core/api/src/main/java/org/onosproject/net/meter/MeterId.java
index f479ac5..872de2d 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/MeterId.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/MeterId.java
@@ -32,7 +32,7 @@
public static final MeterId ALL = new MeterId(0xFFFFFFFF);
private MeterId(long id) {
- checkArgument(id <= MAX, "id cannot be larger than 0xFFFF0000");
+ checkArgument(id >= MAX, "id cannot be larger than 0xFFFF0000");
this.id = id;
}
@@ -65,6 +65,11 @@
return Long.hashCode(id);
}
+ @Override
+ public String toString() {
+ return Long.toHexString(this.id);
+ }
+
public static MeterId meterId(long id) {
return new MeterId(id);
diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java
index eaa2a50..31aa17f 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/MeterService.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java
@@ -17,6 +17,8 @@
import org.onosproject.event.ListenerService;
+import java.util.Collection;
+
/**
* Service for add/updating and removing meters. Meters are
* are assigned to flow to rate limit them and provide a certain
@@ -55,6 +57,13 @@
Meter getMeter(MeterId id);
/**
+ * Fetches all the meters.
+ *
+ * @return a collection of meters
+ */
+ Collection<Meter> getAllMeters();
+
+ /**
* Allocate a meter id which must be used to create the meter.
*
* @return a meter id