Committed by
Gerrit Code Review
Add DataRateUnit to help specifying Bandwidth.
Change-Id: I2b83922d98cab5571408b920a89bb8b704934255
Showing
5 changed files
with
103 additions
and
7 deletions
... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
16 | package org.onosproject.net.intent.constraint; | 16 | package org.onosproject.net.intent.constraint; |
17 | 17 | ||
18 | import com.google.common.annotations.Beta; | 18 | import com.google.common.annotations.Beta; |
19 | + | ||
20 | +import org.onlab.util.DataRateUnit; | ||
19 | import org.onosproject.net.Link; | 21 | import org.onosproject.net.Link; |
20 | import org.onosproject.net.resource.link.BandwidthResource; | 22 | import org.onosproject.net.resource.link.BandwidthResource; |
21 | import org.onosproject.net.resource.link.BandwidthResourceRequest; | 23 | import org.onosproject.net.resource.link.BandwidthResourceRequest; |
... | @@ -32,7 +34,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -32,7 +34,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
32 | * Constraint that evaluates links based on available bandwidths. | 34 | * Constraint that evaluates links based on available bandwidths. |
33 | */ | 35 | */ |
34 | @Beta | 36 | @Beta |
35 | -public class BandwidthConstraint extends BooleanConstraint { | 37 | +public final class BandwidthConstraint extends BooleanConstraint { |
36 | 38 | ||
37 | private final BandwidthResource bandwidth; | 39 | private final BandwidthResource bandwidth; |
38 | 40 | ||
... | @@ -45,6 +47,17 @@ public class BandwidthConstraint extends BooleanConstraint { | ... | @@ -45,6 +47,17 @@ public class BandwidthConstraint extends BooleanConstraint { |
45 | this.bandwidth = checkNotNull(bandwidth, "Bandwidth cannot be null"); | 47 | this.bandwidth = checkNotNull(bandwidth, "Bandwidth cannot be null"); |
46 | } | 48 | } |
47 | 49 | ||
50 | + /** | ||
51 | + * Creates a new bandwidth constraint. | ||
52 | + * | ||
53 | + * @param v required amount of bandwidth | ||
54 | + * @param unit {@link DataRateUnit} of {@code v} | ||
55 | + * @return {@link BandwidthConstraint} instance with given bandwidth requirement | ||
56 | + */ | ||
57 | + public static BandwidthConstraint of(double v, DataRateUnit unit) { | ||
58 | + return new BandwidthConstraint(BandwidthResource.of(v, unit)); | ||
59 | + } | ||
60 | + | ||
48 | // Constructor for serialization | 61 | // Constructor for serialization |
49 | private BandwidthConstraint() { | 62 | private BandwidthConstraint() { |
50 | this.bandwidth = null; | 63 | this.bandwidth = null; | ... | ... |
... | @@ -16,7 +16,7 @@ | ... | @@ -16,7 +16,7 @@ |
16 | package org.onosproject.net.resource.link; | 16 | package org.onosproject.net.resource.link; |
17 | 17 | ||
18 | import org.onlab.util.Bandwidth; | 18 | import org.onlab.util.Bandwidth; |
19 | - | 19 | +import org.onlab.util.DataRateUnit; |
20 | import java.util.Objects; | 20 | import java.util.Objects; |
21 | 21 | ||
22 | import static com.google.common.base.Preconditions.checkNotNull; | 22 | import static com.google.common.base.Preconditions.checkNotNull; |
... | @@ -43,6 +43,17 @@ public final class BandwidthResource implements LinkResource { | ... | @@ -43,6 +43,17 @@ public final class BandwidthResource implements LinkResource { |
43 | } | 43 | } |
44 | 44 | ||
45 | /** | 45 | /** |
46 | + * Creates a new bandwidth resource. | ||
47 | + * | ||
48 | + * @param v amount of bandwidth to request | ||
49 | + * @param unit {@link DataRateUnit} of {@code v} | ||
50 | + * @return {@link BandwidthResource} instance with given bandwidth | ||
51 | + */ | ||
52 | + public static BandwidthResource of(double v, DataRateUnit unit) { | ||
53 | + return new BandwidthResource(Bandwidth.of(v, unit)); | ||
54 | + } | ||
55 | + | ||
56 | + /** | ||
46 | * Returns bandwidth as a double value. | 57 | * Returns bandwidth as a double value. |
47 | * | 58 | * |
48 | * @return bandwidth as a double value | 59 | * @return bandwidth as a double value | ... | ... |
... | @@ -16,14 +16,12 @@ | ... | @@ -16,14 +16,12 @@ |
16 | package org.onosproject.net.intent; | 16 | package org.onosproject.net.intent; |
17 | 17 | ||
18 | import org.junit.Test; | 18 | import org.junit.Test; |
19 | -import org.onlab.util.Bandwidth; | 19 | +import org.onlab.util.DataRateUnit; |
20 | import org.onosproject.TestApplicationId; | 20 | import org.onosproject.TestApplicationId; |
21 | import org.onosproject.core.ApplicationId; | 21 | import org.onosproject.core.ApplicationId; |
22 | import org.onosproject.net.HostId; | 22 | import org.onosproject.net.HostId; |
23 | import org.onosproject.net.flow.TrafficSelector; | 23 | import org.onosproject.net.flow.TrafficSelector; |
24 | import org.onosproject.net.intent.constraint.BandwidthConstraint; | 24 | import org.onosproject.net.intent.constraint.BandwidthConstraint; |
25 | -import org.onosproject.net.resource.link.BandwidthResource; | ||
26 | - | ||
27 | import com.google.common.collect.ImmutableList; | 25 | import com.google.common.collect.ImmutableList; |
28 | import com.google.common.testing.EqualsTester; | 26 | import com.google.common.testing.EqualsTester; |
29 | 27 | ||
... | @@ -109,8 +107,7 @@ public class HostToHostIntentTest extends IntentTest { | ... | @@ -109,8 +107,7 @@ public class HostToHostIntentTest extends IntentTest { |
109 | 107 | ||
110 | @Test | 108 | @Test |
111 | public void testImplicitConstraintsAreAdded() { | 109 | public void testImplicitConstraintsAreAdded() { |
112 | - final BandwidthConstraint other = new BandwidthConstraint( | 110 | + final Constraint other = BandwidthConstraint.of(1, DataRateUnit.GBPS); |
113 | - new BandwidthResource(Bandwidth.gbps(1))); | ||
114 | final HostToHostIntent intent = HostToHostIntent.builder() | 111 | final HostToHostIntent intent = HostToHostIntent.builder() |
115 | .appId(APPID) | 112 | .appId(APPID) |
116 | .one(id1) | 113 | .one(id1) | ... | ... |
... | @@ -42,6 +42,17 @@ public final class Bandwidth implements RichComparable<Bandwidth> { | ... | @@ -42,6 +42,17 @@ public final class Bandwidth implements RichComparable<Bandwidth> { |
42 | } | 42 | } |
43 | 43 | ||
44 | /** | 44 | /** |
45 | + * Creates a new instance with given bandwidth. | ||
46 | + * | ||
47 | + * @param v bandwidth value | ||
48 | + * @param unit {@link DataRateUnit} of {@code v} | ||
49 | + * @return {@link Bandwidth} instance with given bandwidth | ||
50 | + */ | ||
51 | + public static Bandwidth of(double v, DataRateUnit unit) { | ||
52 | + return new Bandwidth(unit.toBitsPerSecond(v)); | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
45 | * Creates a new instance with given bandwidth in bps. | 56 | * Creates a new instance with given bandwidth in bps. |
46 | * | 57 | * |
47 | * @param bps bandwidth value to be assigned | 58 | * @param bps bandwidth value to be assigned | ... | ... |
1 | +package org.onlab.util; | ||
2 | + | ||
3 | +import com.google.common.annotations.Beta; | ||
4 | + | ||
5 | +/** | ||
6 | + * Data rate unit. | ||
7 | + */ | ||
8 | +@Beta | ||
9 | +public enum DataRateUnit { | ||
10 | + /** | ||
11 | + * Bit per second. | ||
12 | + */ | ||
13 | + BPS(1L), | ||
14 | + /** | ||
15 | + * Kilobit per second. | ||
16 | + * (Decimal/SI) | ||
17 | + */ | ||
18 | + KBPS(1_000L), | ||
19 | + /** | ||
20 | + * Megabit per second. | ||
21 | + * (Decimal/SI) | ||
22 | + */ | ||
23 | + MBPS(1_000_000L), | ||
24 | + /** | ||
25 | + * Gigabit per second. | ||
26 | + * (Decimal/SI) | ||
27 | + */ | ||
28 | + GBPS(1_000_000_000L); | ||
29 | + | ||
30 | + private final long multiplier; | ||
31 | + | ||
32 | + DataRateUnit(long multiplier) { | ||
33 | + this.multiplier = multiplier; | ||
34 | + } | ||
35 | + | ||
36 | + /** | ||
37 | + * Returns the multiplier to use, when converting value of this unit to bps. | ||
38 | + * | ||
39 | + * @return multiplier | ||
40 | + */ | ||
41 | + public long multiplier() { | ||
42 | + return multiplier; | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Converts given value in this unit to bits per seconds. | ||
47 | + * | ||
48 | + * @param v data rate value | ||
49 | + * @return {@code v} in bits per seconds | ||
50 | + */ | ||
51 | + public long toBitsPerSecond(long v) { | ||
52 | + return v * multiplier; | ||
53 | + } | ||
54 | + | ||
55 | + /** | ||
56 | + * Converts given value in this unit to bits per seconds. | ||
57 | + * | ||
58 | + * @param v data rate value | ||
59 | + * @return {@code v} in bits per seconds | ||
60 | + */ | ||
61 | + public double toBitsPerSecond(double v) { | ||
62 | + return v * multiplier; | ||
63 | + } | ||
64 | +} |
-
Please register or login to post a comment