HIGUCHI Yuta
Committed by Gerrit Code Review

Add DataRateUnit to help specifying Bandwidth.

Change-Id: I2b83922d98cab5571408b920a89bb8b704934255
......@@ -16,6 +16,8 @@
package org.onosproject.net.intent.constraint;
import com.google.common.annotations.Beta;
import org.onlab.util.DataRateUnit;
import org.onosproject.net.Link;
import org.onosproject.net.resource.link.BandwidthResource;
import org.onosproject.net.resource.link.BandwidthResourceRequest;
......@@ -32,7 +34,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
* Constraint that evaluates links based on available bandwidths.
*/
@Beta
public class BandwidthConstraint extends BooleanConstraint {
public final class BandwidthConstraint extends BooleanConstraint {
private final BandwidthResource bandwidth;
......@@ -45,6 +47,17 @@ public class BandwidthConstraint extends BooleanConstraint {
this.bandwidth = checkNotNull(bandwidth, "Bandwidth cannot be null");
}
/**
* Creates a new bandwidth constraint.
*
* @param v required amount of bandwidth
* @param unit {@link DataRateUnit} of {@code v}
* @return {@link BandwidthConstraint} instance with given bandwidth requirement
*/
public static BandwidthConstraint of(double v, DataRateUnit unit) {
return new BandwidthConstraint(BandwidthResource.of(v, unit));
}
// Constructor for serialization
private BandwidthConstraint() {
this.bandwidth = null;
......
......@@ -16,7 +16,7 @@
package org.onosproject.net.resource.link;
import org.onlab.util.Bandwidth;
import org.onlab.util.DataRateUnit;
import java.util.Objects;
import static com.google.common.base.Preconditions.checkNotNull;
......@@ -43,6 +43,17 @@ public final class BandwidthResource implements LinkResource {
}
/**
* Creates a new bandwidth resource.
*
* @param v amount of bandwidth to request
* @param unit {@link DataRateUnit} of {@code v}
* @return {@link BandwidthResource} instance with given bandwidth
*/
public static BandwidthResource of(double v, DataRateUnit unit) {
return new BandwidthResource(Bandwidth.of(v, unit));
}
/**
* Returns bandwidth as a double value.
*
* @return bandwidth as a double value
......
......@@ -16,14 +16,12 @@
package org.onosproject.net.intent;
import org.junit.Test;
import org.onlab.util.Bandwidth;
import org.onlab.util.DataRateUnit;
import org.onosproject.TestApplicationId;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.HostId;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.intent.constraint.BandwidthConstraint;
import org.onosproject.net.resource.link.BandwidthResource;
import com.google.common.collect.ImmutableList;
import com.google.common.testing.EqualsTester;
......@@ -109,8 +107,7 @@ public class HostToHostIntentTest extends IntentTest {
@Test
public void testImplicitConstraintsAreAdded() {
final BandwidthConstraint other = new BandwidthConstraint(
new BandwidthResource(Bandwidth.gbps(1)));
final Constraint other = BandwidthConstraint.of(1, DataRateUnit.GBPS);
final HostToHostIntent intent = HostToHostIntent.builder()
.appId(APPID)
.one(id1)
......
......@@ -42,6 +42,17 @@ public final class Bandwidth implements RichComparable<Bandwidth> {
}
/**
* Creates a new instance with given bandwidth.
*
* @param v bandwidth value
* @param unit {@link DataRateUnit} of {@code v}
* @return {@link Bandwidth} instance with given bandwidth
*/
public static Bandwidth of(double v, DataRateUnit unit) {
return new Bandwidth(unit.toBitsPerSecond(v));
}
/**
* Creates a new instance with given bandwidth in bps.
*
* @param bps bandwidth value to be assigned
......
package org.onlab.util;
import com.google.common.annotations.Beta;
/**
* Data rate unit.
*/
@Beta
public enum DataRateUnit {
/**
* Bit per second.
*/
BPS(1L),
/**
* Kilobit per second.
* (Decimal/SI)
*/
KBPS(1_000L),
/**
* Megabit per second.
* (Decimal/SI)
*/
MBPS(1_000_000L),
/**
* Gigabit per second.
* (Decimal/SI)
*/
GBPS(1_000_000_000L);
private final long multiplier;
DataRateUnit(long multiplier) {
this.multiplier = multiplier;
}
/**
* Returns the multiplier to use, when converting value of this unit to bps.
*
* @return multiplier
*/
public long multiplier() {
return multiplier;
}
/**
* Converts given value in this unit to bits per seconds.
*
* @param v data rate value
* @return {@code v} in bits per seconds
*/
public long toBitsPerSecond(long v) {
return v * multiplier;
}
/**
* Converts given value in this unit to bits per seconds.
*
* @param v data rate value
* @return {@code v} in bits per seconds
*/
public double toBitsPerSecond(double v) {
return v * multiplier;
}
}