[ONOS-7208] Improves policer with rate type
Change-Id: Idf20fce19bfc071193f55609d3bb7297d2dee479
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java b/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java
index f3920b2..8313f3f 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/trafficcontrol/DefaultTokenBucket.java
@@ -18,6 +18,7 @@
import com.google.common.annotations.Beta;
import com.google.common.base.Objects;
+import org.onosproject.net.behaviour.trafficcontrol.TokenBucket.Type;
import static com.google.common.base.MoreObjects.toStringHelper;
import static com.google.common.base.Preconditions.checkArgument;
@@ -36,16 +37,18 @@
private final long burstSize;
private final Action action;
private final short dscp;
+ private final Type type;
// Mutable parameters
private long processedPackets;
private long processedBytes;
- private DefaultTokenBucket(long r, long bS, Action a, short d) {
+ private DefaultTokenBucket(long r, long bS, Action a, short d, Type t) {
rate = r;
burstSize = bS;
action = a;
dscp = d;
+ type = t;
}
@Override
@@ -69,6 +72,11 @@
}
@Override
+ public Type type() {
+ return type;
+ }
+
+ @Override
public long processedPackets() {
return processedPackets;
}
@@ -94,7 +102,8 @@
.add("rate", rate())
.add("burstSize", burstSize())
.add("action", action())
- .add("dscp", dscp()).toString();
+ .add("dscp", dscp())
+ .add("type", type()).toString();
}
@Override
@@ -109,12 +118,13 @@
return rate == that.rate &&
burstSize == that.burstSize &&
Objects.equal(action, that.action) &&
- dscp == that.dscp;
+ dscp == that.dscp &&
+ Objects.equal(type, that.type);
}
@Override
public int hashCode() {
- return Objects.hashCode(rate, burstSize, action, dscp);
+ return Objects.hashCode(rate, burstSize, action, dscp, type);
}
/**
@@ -136,6 +146,7 @@
private long burstSize = 2 * 1500;
private Action action;
private short dscp;
+ private Type type;
@Override
public TokenBucket.Builder withRate(long r) {
@@ -162,9 +173,16 @@
}
@Override
+ public TokenBucket.Builder withType(Type t) {
+ type = t;
+ return this;
+ }
+
+ @Override
public DefaultTokenBucket build() {
- // Not null condition on the action
+ // Not null condition on the action and on the type
checkNotNull(action, "Must specify an action");
+ checkNotNull(type, "Must specify a type");
// If action is based on DSCP modification
if (action == DSCP_CLASS || action == DSCP_PRECEDENCE) {
@@ -173,7 +191,7 @@
}
// Finally we build the token bucket
- return new DefaultTokenBucket(rate, burstSize, action, dscp);
+ return new DefaultTokenBucket(rate, burstSize, action, dscp, type);
}
}
}