From 10c810b1997dd1b1637647ed65765fc86cc01475 Mon Sep 17 00:00:00 2001 From: alshabib Date: Tue, 18 Aug 2015 16:59:04 -0700 Subject: [PATCH] added treatment support and conversion to an instruction moved to meter api to onos-api Change-Id: I0504f06fdc503953fa7696224d97edda43596d6e --- .../net/flow/DefaultTrafficTreatment.java | 25 +++++++++- .../net/flow/TrafficTreatment.java | 15 ++++++ .../net/flow/instructions/Instruction.java | 5 ++ .../net/flow/instructions/Instructions.java | 50 +++++++++++++++++++ .../java/org/onosproject}/net/meter/Band.java | 2 +- .../org/onosproject}/net/meter/BandEntry.java | 2 +- .../onosproject}/net/meter/DefaultBand.java | 2 +- .../onosproject}/net/meter/DefaultMeter.java | 2 +- .../org/onosproject}/net/meter/Meter.java | 2 +- .../onosproject}/net/meter/MeterContext.java | 2 +- .../onosproject}/net/meter/MeterEntry.java | 2 +- .../onosproject}/net/meter/MeterEvent.java | 2 +- .../net/meter/MeterFailReason.java | 2 +- .../org/onosproject}/net/meter/MeterId.java | 2 +- .../onosproject}/net/meter/MeterListener.java | 2 +- .../net/meter/MeterOperation.java | 2 +- .../net/meter/MeterOperations.java | 2 +- .../onosproject}/net/meter/MeterProvider.java | 2 +- .../net/meter/MeterProviderRegistry.java | 2 +- .../net/meter/MeterProviderService.java | 2 +- .../onosproject}/net/meter/MeterService.java | 2 +- .../onosproject}/net/meter/MeterState.java | 2 +- .../onosproject}/net/meter/MeterStore.java | 2 +- .../net/meter/MeterStoreDelegate.java | 2 +- .../net/meter/MeterStoreResult.java | 2 +- .../onosproject}/net/meter/package-info.java | 2 +- .../net/intent/IntentTestsMocks.java | 5 ++ .../net/flow/impl/FlowRuleManagerTest.java | 5 ++ .../store/serializers/KryoNamespaces.java | 3 ++ .../net/meter/impl/MeterManager.java | 30 +++++------ .../meter/impl/DistributedMeterStore.java | 20 ++++---- .../incubator/store/meter/impl/MeterData.java | 4 +- .../of/flow/impl/FlowModBuilderVer13.java | 8 +++ .../of/meter/impl/MeterModBuilder.java | 6 +-- .../of/meter/impl/OpenFlowMeterProvider.java | 22 ++++---- 35 files changed, 177 insertions(+), 65 deletions(-) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/Band.java (98%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/BandEntry.java (95%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/DefaultBand.java (98%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/DefaultMeter.java (99%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/Meter.java (98%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterContext.java (96%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterEntry.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterEvent.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterFailReason.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterId.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterListener.java (94%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterOperation.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterOperations.java (96%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterProvider.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterProviderRegistry.java (94%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterProviderService.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterService.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterState.java (95%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterStore.java (98%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterStoreDelegate.java (94%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/MeterStoreResult.java (97%) rename {incubator/api/src/main/java/org/onosproject/incubator => core/api/src/main/java/org/onosproject}/net/meter/package-info.java (93%) diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java index 06c49baf89..2dad08b435 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java +++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java @@ -28,6 +28,7 @@ import org.onosproject.net.IndexedLambda; import org.onosproject.net.PortNumber; import org.onosproject.net.flow.instructions.Instruction; import org.onosproject.net.flow.instructions.Instructions; +import org.onosproject.net.meter.MeterId; import java.util.Collections; import java.util.List; @@ -50,6 +51,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { private static final DefaultTrafficTreatment EMPTY = new DefaultTrafficTreatment(Collections.emptyList()); + private final Instructions.MeterInstruction meter; /** * Creates a new traffic treatment from the specified list of instructions. @@ -63,6 +65,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { this.hasClear = false; this.table = null; this.meta = null; + this.meter = null; } /** @@ -77,7 +80,8 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { List immediate, Instructions.TableTypeTransition table, boolean clear, - Instructions.MetadataInstruction meta) { + Instructions.MetadataInstruction meta, + Instructions.MeterInstruction meter) { this.immediate = ImmutableList.copyOf(checkNotNull(immediate)); this.deferred = ImmutableList.copyOf(checkNotNull(deferred)); this.all = new ImmutableList.Builder() @@ -87,6 +91,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { this.table = table; this.meta = meta; this.hasClear = clear; + this.meter = meter; } @Override @@ -119,6 +124,11 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { return meta; } + @Override + public Instructions.MeterInstruction metered() { + return meter; + } + /** * Returns a new traffic treatment builder. * @@ -193,12 +203,16 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { Instructions.MetadataInstruction meta; + Instructions.MeterInstruction meter; + List deferred = Lists.newLinkedList(); List immediate = Lists.newLinkedList(); List current = immediate; + + // Creates a new builder private Builder() { } @@ -233,6 +247,8 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { case METADATA: meta = (Instructions.MetadataInstruction) instruction; break; + case METER: + meter = (Instructions.MeterInstruction) instruction; default: throw new IllegalArgumentException("Unknown instruction type: " + instruction.type()); @@ -342,6 +358,11 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { return add(Instructions.createGroup(groupId)); } + @Override + public TrafficTreatment.Builder meter(MeterId meterId) { + return add(Instructions.meterTraffic(meterId)); + } + @Override public Builder popVlan() { return add(Instructions.popVlan()); @@ -420,7 +441,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { // && table == null && !clear) { // drop(); //} - return new DefaultTrafficTreatment(deferred, immediate, table, clear, meta); + return new DefaultTrafficTreatment(deferred, immediate, table, clear, meta, meter); } } diff --git a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java index d125a9f3c6..042aeaf6a3 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java +++ b/core/api/src/main/java/org/onosproject/net/flow/TrafficTreatment.java @@ -24,6 +24,7 @@ import org.onosproject.core.GroupId; import org.onosproject.net.PortNumber; import org.onosproject.net.flow.instructions.Instruction; import org.onosproject.net.flow.instructions.Instructions; +import org.onosproject.net.meter.MeterId; import java.util.List; @@ -74,6 +75,13 @@ public interface TrafficTreatment { */ Instructions.MetadataInstruction writeMetadata(); + /** + * Returns the meter instruction if there is one. + * + * @return a meter instruction that may be null + */ + Instructions.MeterInstruction metered(); + /** * Builder of traffic treatment entities. */ @@ -243,6 +251,13 @@ public interface TrafficTreatment { */ Builder group(GroupId groupId); + /** + * Sets a meter to be used by this flow. + * + * @param meterId a meter id + * @return a treatment builder + */ + Builder meter(MeterId meterId); /** * Sets the next table type to transition to. diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java index 7496e978c5..6f2cac6b2c 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java +++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java @@ -39,6 +39,11 @@ public interface Instruction { */ GROUP, + /** + * Signifies that traffic should be metered according to a meter. + */ + METER, + /** * Signifies that the traffic should be modified in L0 way. */ diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java index 3cacfa5988..cd9ec96b70 100644 --- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java +++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java @@ -34,6 +34,7 @@ import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6Fl import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModTtlInstruction; import org.onosproject.net.flow.instructions.L4ModificationInstruction.L4SubType; import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction; +import org.onosproject.net.meter.MeterId; import java.util.Objects; @@ -81,6 +82,11 @@ public final class Instructions { return new GroupInstruction(groupId); } + public static MeterInstruction meterTraffic(final MeterId meterId) { + checkNotNull(meterId, "meter id cannot be null"); + return new MeterInstruction(meterId); + } + /** * Creates a l0 modification. * @@ -527,6 +533,50 @@ public final class Instructions { } } + /** + * A meter instruction. + */ + public static final class MeterInstruction implements Instruction { + private final MeterId meterId; + + private MeterInstruction(MeterId meterId) { + this.meterId = meterId; + } + + public MeterId meterId() { + return meterId; + } + + @Override + public Type type() { + return Type.METER; + } + + @Override + public String toString() { + return toStringHelper(type().toString()) + .add("meter ID", meterId.id()).toString(); + } + + @Override + public int hashCode() { + return Objects.hash(type().ordinal(), meterId); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj instanceof MeterInstruction) { + MeterInstruction that = (MeterInstruction) obj; + return Objects.equals(meterId, that.meterId); + + } + return false; + } + } + /** * Transition instruction. */ diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Band.java b/core/api/src/main/java/org/onosproject/net/meter/Band.java similarity index 98% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/Band.java rename to core/api/src/main/java/org/onosproject/net/meter/Band.java index 1342a223b4..2bfafad209 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Band.java +++ b/core/api/src/main/java/org/onosproject/net/meter/Band.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; /** * Represents a band used within a meter. diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/BandEntry.java b/core/api/src/main/java/org/onosproject/net/meter/BandEntry.java similarity index 95% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/BandEntry.java rename to core/api/src/main/java/org/onosproject/net/meter/BandEntry.java index 369e1cc216..03145e9169 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/BandEntry.java +++ b/core/api/src/main/java/org/onosproject/net/meter/BandEntry.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; /** * Represents a stored band. diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultBand.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java similarity index 98% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultBand.java rename to core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java index 669dc0d30b..a3a4fc2742 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultBand.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultBand.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import static com.google.common.base.Preconditions.checkArgument; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java similarity index 99% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java rename to core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java index 177688cb57..611a23eaea 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/DefaultMeter.java +++ b/core/api/src/main/java/org/onosproject/net/meter/DefaultMeter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java b/core/api/src/main/java/org/onosproject/net/meter/Meter.java similarity index 98% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java rename to core/api/src/main/java/org/onosproject/net/meter/Meter.java index 37c11055d6..5181c92475 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/Meter.java +++ b/core/api/src/main/java/org/onosproject/net/meter/Meter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.core.ApplicationId; import org.onosproject.net.DeviceId; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java b/core/api/src/main/java/org/onosproject/net/meter/MeterContext.java similarity index 96% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterContext.java index b112b9a96f..005c41ca6e 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterContext.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterContext.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; /** * A context permitting the application to be notified when the diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEntry.java b/core/api/src/main/java/org/onosproject/net/meter/MeterEntry.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEntry.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterEntry.java index 61575786a2..178a564c6e 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEntry.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterEntry.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; /** * Represents a stored meter. diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java b/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java index 808a3e8fa7..72f0a53ac5 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterEvent.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.event.AbstractEvent; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterFailReason.java b/core/api/src/main/java/org/onosproject/net/meter/MeterFailReason.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterFailReason.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterFailReason.java index d98e44a561..8683e2a2d7 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterFailReason.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterFailReason.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; /** * Enum used to represent a meter failure condition. diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterId.java b/core/api/src/main/java/org/onosproject/net/meter/MeterId.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterId.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterId.java index 8619e1401d..f479ac5455 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterId.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterId.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import static com.google.common.base.Preconditions.checkArgument; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterListener.java b/core/api/src/main/java/org/onosproject/net/meter/MeterListener.java similarity index 94% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterListener.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterListener.java index 1cb667a9b3..0a5e203f48 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterListener.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterListener.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.event.EventListener; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java b/core/api/src/main/java/org/onosproject/net/meter/MeterOperation.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterOperation.java index 835488841d..50e6fe91f3 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperation.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterOperation.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import com.google.common.base.MoreObjects; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperations.java b/core/api/src/main/java/org/onosproject/net/meter/MeterOperations.java similarity index 96% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperations.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterOperations.java index 8dbad891fd..92b0c3aaaa 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterOperations.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterOperations.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import com.google.common.collect.ImmutableList; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProvider.java b/core/api/src/main/java/org/onosproject/net/meter/MeterProvider.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProvider.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterProvider.java index d8a743c193..4655e23496 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProvider.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterProvider.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.net.DeviceId; import org.onosproject.net.provider.Provider; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProviderRegistry.java b/core/api/src/main/java/org/onosproject/net/meter/MeterProviderRegistry.java similarity index 94% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProviderRegistry.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterProviderRegistry.java index b20e918132..019ca19a1e 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProviderRegistry.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterProviderRegistry.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.net.provider.ProviderRegistry; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProviderService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterProviderService.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProviderService.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterProviderService.java index c1dd30cb11..85c0c43ef0 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterProviderService.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterProviderService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.net.DeviceId; import org.onosproject.net.provider.ProviderService; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterService.java index c7eb93a64e..eaa2a504fd 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterService.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.event.ListenerService; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterState.java b/core/api/src/main/java/org/onosproject/net/meter/MeterState.java similarity index 95% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterState.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterState.java index a910d6d28c..3b93609915 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterState.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterState.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; /** * Represents the state of the meter as seen by the store. diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java similarity index 98% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterStore.java index 54e5658858..c5d57d5dd1 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStore.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStore.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.store.Store; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreDelegate.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStoreDelegate.java similarity index 94% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreDelegate.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterStoreDelegate.java index facb4539d9..9bfeb42f61 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreDelegate.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStoreDelegate.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import org.onosproject.store.StoreDelegate; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreResult.java b/core/api/src/main/java/org/onosproject/net/meter/MeterStoreResult.java similarity index 97% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreResult.java rename to core/api/src/main/java/org/onosproject/net/meter/MeterStoreResult.java index 8ad5aa672f..7a26746f08 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/MeterStoreResult.java +++ b/core/api/src/main/java/org/onosproject/net/meter/MeterStoreResult.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.onosproject.incubator.net.meter; +package org.onosproject.net.meter; import java.util.Optional; diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/package-info.java b/core/api/src/main/java/org/onosproject/net/meter/package-info.java similarity index 93% rename from incubator/api/src/main/java/org/onosproject/incubator/net/meter/package-info.java rename to core/api/src/main/java/org/onosproject/net/meter/package-info.java index b1cb85e1ae..258634da10 100644 --- a/incubator/api/src/main/java/org/onosproject/incubator/net/meter/package-info.java +++ b/core/api/src/main/java/org/onosproject/net/meter/package-info.java @@ -17,4 +17,4 @@ /** * Flow meter model and related services. */ -package org.onosproject.incubator.net.meter; \ No newline at end of file +package org.onosproject.net.meter; \ No newline at end of file diff --git a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java index 550406fedb..ac4ecff3bf 100644 --- a/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java +++ b/core/api/src/test/java/org/onosproject/net/intent/IntentTestsMocks.java @@ -124,6 +124,11 @@ public class IntentTestsMocks { public MetadataInstruction writeMetadata() { return null; } + + @Override + public Instructions.MeterInstruction metered() { + return null; + } } /** diff --git a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java index afd9a90de2..7ef8762c72 100644 --- a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java +++ b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java @@ -610,6 +610,11 @@ public class FlowRuleManagerTest { return null; } + @Override + public Instructions.MeterInstruction metered() { + return null; + } + } public class TestApplicationId extends DefaultApplicationId { diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java index 212d4a0423..556038a1fc 100644 --- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java +++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java @@ -160,6 +160,7 @@ import org.onosproject.net.intent.constraint.ObstacleConstraint; import org.onosproject.net.intent.constraint.PartialFailureConstraint; import org.onosproject.net.intent.constraint.WaypointConstraint; import org.onosproject.net.link.DefaultLinkDescription; +import org.onosproject.net.meter.MeterId; import org.onosproject.net.newresource.ResourceAllocation; import org.onosproject.net.newresource.ResourcePath; import org.onosproject.net.packet.DefaultOutboundPacket; @@ -271,6 +272,8 @@ public final class KryoNamespaces { .register(MISC) .nextId(KryoNamespace.INITIAL_ID + 30 + 10) .register( + Instructions.MeterInstruction.class, + MeterId.class, Version.class, ControllerNode.State.class, ApplicationState.class, diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java index 47450c72f5..a0c1dfc056 100644 --- a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java +++ b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java @@ -22,21 +22,21 @@ import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.apache.felix.scr.annotations.Service; import org.onlab.util.TriConsumer; -import org.onosproject.incubator.net.meter.DefaultMeter; -import org.onosproject.incubator.net.meter.Meter; -import org.onosproject.incubator.net.meter.MeterEvent; -import org.onosproject.incubator.net.meter.MeterFailReason; -import org.onosproject.incubator.net.meter.MeterId; -import org.onosproject.incubator.net.meter.MeterListener; -import org.onosproject.incubator.net.meter.MeterOperation; -import org.onosproject.incubator.net.meter.MeterProvider; -import org.onosproject.incubator.net.meter.MeterProviderRegistry; -import org.onosproject.incubator.net.meter.MeterProviderService; -import org.onosproject.incubator.net.meter.MeterService; -import org.onosproject.incubator.net.meter.MeterState; -import org.onosproject.incubator.net.meter.MeterStore; -import org.onosproject.incubator.net.meter.MeterStoreDelegate; -import org.onosproject.incubator.net.meter.MeterStoreResult; +import org.onosproject.net.meter.DefaultMeter; +import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterEvent; +import org.onosproject.net.meter.MeterFailReason; +import org.onosproject.net.meter.MeterId; +import org.onosproject.net.meter.MeterListener; +import org.onosproject.net.meter.MeterOperation; +import org.onosproject.net.meter.MeterProvider; +import org.onosproject.net.meter.MeterProviderRegistry; +import org.onosproject.net.meter.MeterProviderService; +import org.onosproject.net.meter.MeterService; +import org.onosproject.net.meter.MeterState; +import org.onosproject.net.meter.MeterStore; +import org.onosproject.net.meter.MeterStoreDelegate; +import org.onosproject.net.meter.MeterStoreResult; import org.onosproject.net.DeviceId; import org.onosproject.net.provider.AbstractListenerProviderRegistry; import org.onosproject.net.provider.AbstractProviderService; diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java index 6477e68fa8..ed7c9bff81 100644 --- a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java +++ b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java @@ -23,16 +23,16 @@ import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.onosproject.cluster.ClusterService; import org.onosproject.cluster.NodeId; -import org.onosproject.incubator.net.meter.DefaultMeter; -import org.onosproject.incubator.net.meter.Meter; -import org.onosproject.incubator.net.meter.MeterEvent; -import org.onosproject.incubator.net.meter.MeterFailReason; -import org.onosproject.incubator.net.meter.MeterId; -import org.onosproject.incubator.net.meter.MeterOperation; -import org.onosproject.incubator.net.meter.MeterState; -import org.onosproject.incubator.net.meter.MeterStore; -import org.onosproject.incubator.net.meter.MeterStoreDelegate; -import org.onosproject.incubator.net.meter.MeterStoreResult; +import org.onosproject.net.meter.DefaultMeter; +import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterEvent; +import org.onosproject.net.meter.MeterFailReason; +import org.onosproject.net.meter.MeterId; +import org.onosproject.net.meter.MeterOperation; +import org.onosproject.net.meter.MeterState; +import org.onosproject.net.meter.MeterStore; +import org.onosproject.net.meter.MeterStoreDelegate; +import org.onosproject.net.meter.MeterStoreResult; import org.onosproject.mastership.MastershipService; import org.onosproject.store.AbstractStore; import org.onosproject.store.serializers.KryoNamespaces; diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/MeterData.java b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/MeterData.java index cfc1402383..c72bc2e32d 100644 --- a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/MeterData.java +++ b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/MeterData.java @@ -16,8 +16,8 @@ package org.onosproject.incubator.store.meter.impl; import org.onosproject.cluster.NodeId; -import org.onosproject.incubator.net.meter.Meter; -import org.onosproject.incubator.net.meter.MeterFailReason; +import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterFailReason; import java.util.Optional; diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java index 58c19ad691..483eca979a 100644 --- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java +++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java @@ -161,6 +161,9 @@ public class FlowModBuilderVer13 extends FlowModBuilder { if (treatment.writeMetadata() != null) { instructions.add(buildMetadata(treatment.writeMetadata())); } + if (treatment.metered() != null) { + instructions.add(buildMeter(treatment.metered())); + } long cookie = flowRule().id().value(); @@ -263,6 +266,11 @@ public class FlowModBuilderVer13 extends FlowModBuilder { return instruction; } + private OFInstruction buildMeter(Instructions.MeterInstruction metered) { + return factory().instructions().meter(metered.meterId().id()); + } + + private OFAction buildL0Modification(Instruction i) { L0ModificationInstruction l0m = (L0ModificationInstruction) i; switch (l0m.subtype()) { diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java index 00ad8efeae..930042bc3b 100644 --- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java +++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterModBuilder.java @@ -15,9 +15,9 @@ */ package org.onosproject.provider.of.meter.impl; -import org.onosproject.incubator.net.meter.Band; -import org.onosproject.incubator.net.meter.Meter; -import org.onosproject.incubator.net.meter.MeterId; +import org.onosproject.net.meter.Band; +import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterId; import org.projectfloodlight.openflow.protocol.OFFactory; import org.projectfloodlight.openflow.protocol.OFMeterFlags; import org.projectfloodlight.openflow.protocol.OFMeterMod; diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java index e56a54c00a..2e1611d1f8 100644 --- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java +++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java @@ -28,17 +28,17 @@ import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.ReferenceCardinality; import org.onosproject.core.CoreService; -import org.onosproject.incubator.net.meter.Band; -import org.onosproject.incubator.net.meter.DefaultBand; -import org.onosproject.incubator.net.meter.DefaultMeter; -import org.onosproject.incubator.net.meter.Meter; -import org.onosproject.incubator.net.meter.MeterFailReason; -import org.onosproject.incubator.net.meter.MeterOperation; -import org.onosproject.incubator.net.meter.MeterOperations; -import org.onosproject.incubator.net.meter.MeterProvider; -import org.onosproject.incubator.net.meter.MeterProviderRegistry; -import org.onosproject.incubator.net.meter.MeterProviderService; -import org.onosproject.incubator.net.meter.MeterState; +import org.onosproject.net.meter.Band; +import org.onosproject.net.meter.DefaultBand; +import org.onosproject.net.meter.DefaultMeter; +import org.onosproject.net.meter.Meter; +import org.onosproject.net.meter.MeterFailReason; +import org.onosproject.net.meter.MeterOperation; +import org.onosproject.net.meter.MeterOperations; +import org.onosproject.net.meter.MeterProvider; +import org.onosproject.net.meter.MeterProviderRegistry; +import org.onosproject.net.meter.MeterProviderService; +import org.onosproject.net.meter.MeterState; import org.onosproject.net.DeviceId; import org.onosproject.net.provider.AbstractProvider; import org.onosproject.net.provider.ProviderId;