alshabib
Committed by Gerrit Code Review

added treatment support and conversion to an instruction

moved to meter api to onos-api

Change-Id: I0504f06fdc503953fa7696224d97edda43596d6e
Showing 35 changed files with 177 additions and 65 deletions
...@@ -28,6 +28,7 @@ import org.onosproject.net.IndexedLambda; ...@@ -28,6 +28,7 @@ import org.onosproject.net.IndexedLambda;
28 import org.onosproject.net.PortNumber; 28 import org.onosproject.net.PortNumber;
29 import org.onosproject.net.flow.instructions.Instruction; 29 import org.onosproject.net.flow.instructions.Instruction;
30 import org.onosproject.net.flow.instructions.Instructions; 30 import org.onosproject.net.flow.instructions.Instructions;
31 +import org.onosproject.net.meter.MeterId;
31 32
32 import java.util.Collections; 33 import java.util.Collections;
33 import java.util.List; 34 import java.util.List;
...@@ -50,6 +51,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -50,6 +51,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
50 51
51 private static final DefaultTrafficTreatment EMPTY 52 private static final DefaultTrafficTreatment EMPTY
52 = new DefaultTrafficTreatment(Collections.emptyList()); 53 = new DefaultTrafficTreatment(Collections.emptyList());
54 + private final Instructions.MeterInstruction meter;
53 55
54 /** 56 /**
55 * Creates a new traffic treatment from the specified list of instructions. 57 * Creates a new traffic treatment from the specified list of instructions.
...@@ -63,6 +65,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -63,6 +65,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
63 this.hasClear = false; 65 this.hasClear = false;
64 this.table = null; 66 this.table = null;
65 this.meta = null; 67 this.meta = null;
68 + this.meter = null;
66 } 69 }
67 70
68 /** 71 /**
...@@ -77,7 +80,8 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -77,7 +80,8 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
77 List<Instruction> immediate, 80 List<Instruction> immediate,
78 Instructions.TableTypeTransition table, 81 Instructions.TableTypeTransition table,
79 boolean clear, 82 boolean clear,
80 - Instructions.MetadataInstruction meta) { 83 + Instructions.MetadataInstruction meta,
84 + Instructions.MeterInstruction meter) {
81 this.immediate = ImmutableList.copyOf(checkNotNull(immediate)); 85 this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
82 this.deferred = ImmutableList.copyOf(checkNotNull(deferred)); 86 this.deferred = ImmutableList.copyOf(checkNotNull(deferred));
83 this.all = new ImmutableList.Builder<Instruction>() 87 this.all = new ImmutableList.Builder<Instruction>()
...@@ -87,6 +91,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -87,6 +91,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
87 this.table = table; 91 this.table = table;
88 this.meta = meta; 92 this.meta = meta;
89 this.hasClear = clear; 93 this.hasClear = clear;
94 + this.meter = meter;
90 } 95 }
91 96
92 @Override 97 @Override
...@@ -119,6 +124,11 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -119,6 +124,11 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
119 return meta; 124 return meta;
120 } 125 }
121 126
127 + @Override
128 + public Instructions.MeterInstruction metered() {
129 + return meter;
130 + }
131 +
122 /** 132 /**
123 * Returns a new traffic treatment builder. 133 * Returns a new traffic treatment builder.
124 * 134 *
...@@ -193,12 +203,16 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -193,12 +203,16 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
193 203
194 Instructions.MetadataInstruction meta; 204 Instructions.MetadataInstruction meta;
195 205
206 + Instructions.MeterInstruction meter;
207 +
196 List<Instruction> deferred = Lists.newLinkedList(); 208 List<Instruction> deferred = Lists.newLinkedList();
197 209
198 List<Instruction> immediate = Lists.newLinkedList(); 210 List<Instruction> immediate = Lists.newLinkedList();
199 211
200 List<Instruction> current = immediate; 212 List<Instruction> current = immediate;
201 213
214 +
215 +
202 // Creates a new builder 216 // Creates a new builder
203 private Builder() { 217 private Builder() {
204 } 218 }
...@@ -233,6 +247,8 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -233,6 +247,8 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
233 case METADATA: 247 case METADATA:
234 meta = (Instructions.MetadataInstruction) instruction; 248 meta = (Instructions.MetadataInstruction) instruction;
235 break; 249 break;
250 + case METER:
251 + meter = (Instructions.MeterInstruction) instruction;
236 default: 252 default:
237 throw new IllegalArgumentException("Unknown instruction type: " + 253 throw new IllegalArgumentException("Unknown instruction type: " +
238 instruction.type()); 254 instruction.type());
...@@ -343,6 +359,11 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -343,6 +359,11 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
343 } 359 }
344 360
345 @Override 361 @Override
362 + public TrafficTreatment.Builder meter(MeterId meterId) {
363 + return add(Instructions.meterTraffic(meterId));
364 + }
365 +
366 + @Override
346 public Builder popVlan() { 367 public Builder popVlan() {
347 return add(Instructions.popVlan()); 368 return add(Instructions.popVlan());
348 } 369 }
...@@ -420,7 +441,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment { ...@@ -420,7 +441,7 @@ public final class DefaultTrafficTreatment implements TrafficTreatment {
420 // && table == null && !clear) { 441 // && table == null && !clear) {
421 // drop(); 442 // drop();
422 //} 443 //}
423 - return new DefaultTrafficTreatment(deferred, immediate, table, clear, meta); 444 + return new DefaultTrafficTreatment(deferred, immediate, table, clear, meta, meter);
424 } 445 }
425 446
426 } 447 }
......
...@@ -24,6 +24,7 @@ import org.onosproject.core.GroupId; ...@@ -24,6 +24,7 @@ import org.onosproject.core.GroupId;
24 import org.onosproject.net.PortNumber; 24 import org.onosproject.net.PortNumber;
25 import org.onosproject.net.flow.instructions.Instruction; 25 import org.onosproject.net.flow.instructions.Instruction;
26 import org.onosproject.net.flow.instructions.Instructions; 26 import org.onosproject.net.flow.instructions.Instructions;
27 +import org.onosproject.net.meter.MeterId;
27 28
28 import java.util.List; 29 import java.util.List;
29 30
...@@ -75,6 +76,13 @@ public interface TrafficTreatment { ...@@ -75,6 +76,13 @@ public interface TrafficTreatment {
75 Instructions.MetadataInstruction writeMetadata(); 76 Instructions.MetadataInstruction writeMetadata();
76 77
77 /** 78 /**
79 + * Returns the meter instruction if there is one.
80 + *
81 + * @return a meter instruction that may be null
82 + */
83 + Instructions.MeterInstruction metered();
84 +
85 + /**
78 * Builder of traffic treatment entities. 86 * Builder of traffic treatment entities.
79 */ 87 */
80 interface Builder { 88 interface Builder {
...@@ -243,6 +251,13 @@ public interface TrafficTreatment { ...@@ -243,6 +251,13 @@ public interface TrafficTreatment {
243 */ 251 */
244 Builder group(GroupId groupId); 252 Builder group(GroupId groupId);
245 253
254 + /**
255 + * Sets a meter to be used by this flow.
256 + *
257 + * @param meterId a meter id
258 + * @return a treatment builder
259 + */
260 + Builder meter(MeterId meterId);
246 261
247 /** 262 /**
248 * Sets the next table type to transition to. 263 * Sets the next table type to transition to.
......
...@@ -40,6 +40,11 @@ public interface Instruction { ...@@ -40,6 +40,11 @@ public interface Instruction {
40 GROUP, 40 GROUP,
41 41
42 /** 42 /**
43 + * Signifies that traffic should be metered according to a meter.
44 + */
45 + METER,
46 +
47 + /**
43 * Signifies that the traffic should be modified in L0 way. 48 * Signifies that the traffic should be modified in L0 way.
44 */ 49 */
45 L0MODIFICATION, 50 L0MODIFICATION,
......
...@@ -34,6 +34,7 @@ import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6Fl ...@@ -34,6 +34,7 @@ import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6Fl
34 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModTtlInstruction; 34 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModTtlInstruction;
35 import org.onosproject.net.flow.instructions.L4ModificationInstruction.L4SubType; 35 import org.onosproject.net.flow.instructions.L4ModificationInstruction.L4SubType;
36 import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction; 36 import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction;
37 +import org.onosproject.net.meter.MeterId;
37 38
38 import java.util.Objects; 39 import java.util.Objects;
39 40
...@@ -81,6 +82,11 @@ public final class Instructions { ...@@ -81,6 +82,11 @@ public final class Instructions {
81 return new GroupInstruction(groupId); 82 return new GroupInstruction(groupId);
82 } 83 }
83 84
85 + public static MeterInstruction meterTraffic(final MeterId meterId) {
86 + checkNotNull(meterId, "meter id cannot be null");
87 + return new MeterInstruction(meterId);
88 + }
89 +
84 /** 90 /**
85 * Creates a l0 modification. 91 * Creates a l0 modification.
86 * 92 *
...@@ -528,6 +534,50 @@ public final class Instructions { ...@@ -528,6 +534,50 @@ public final class Instructions {
528 } 534 }
529 535
530 /** 536 /**
537 + * A meter instruction.
538 + */
539 + public static final class MeterInstruction implements Instruction {
540 + private final MeterId meterId;
541 +
542 + private MeterInstruction(MeterId meterId) {
543 + this.meterId = meterId;
544 + }
545 +
546 + public MeterId meterId() {
547 + return meterId;
548 + }
549 +
550 + @Override
551 + public Type type() {
552 + return Type.METER;
553 + }
554 +
555 + @Override
556 + public String toString() {
557 + return toStringHelper(type().toString())
558 + .add("meter ID", meterId.id()).toString();
559 + }
560 +
561 + @Override
562 + public int hashCode() {
563 + return Objects.hash(type().ordinal(), meterId);
564 + }
565 +
566 + @Override
567 + public boolean equals(Object obj) {
568 + if (this == obj) {
569 + return true;
570 + }
571 + if (obj instanceof MeterInstruction) {
572 + MeterInstruction that = (MeterInstruction) obj;
573 + return Objects.equals(meterId, that.meterId);
574 +
575 + }
576 + return false;
577 + }
578 + }
579 +
580 + /**
531 * Transition instruction. 581 * Transition instruction.
532 */ 582 */
533 public static class TableTypeTransition implements Instruction { 583 public static class TableTypeTransition implements Instruction {
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 /** 18 /**
19 * Represents a band used within a meter. 19 * Represents a band used within a meter.
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 /** 18 /**
19 * Represents a stored band. 19 * Represents a stored band.
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import static com.google.common.base.Preconditions.checkArgument; 18 import static com.google.common.base.Preconditions.checkArgument;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.core.ApplicationId; 18 import org.onosproject.core.ApplicationId;
19 import org.onosproject.net.DeviceId; 19 import org.onosproject.net.DeviceId;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.core.ApplicationId; 18 import org.onosproject.core.ApplicationId;
19 import org.onosproject.net.DeviceId; 19 import org.onosproject.net.DeviceId;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 /** 18 /**
19 * A context permitting the application to be notified when the 19 * A context permitting the application to be notified when the
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 /** 18 /**
19 * Represents a stored meter. 19 * Represents a stored meter.
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.event.AbstractEvent; 18 import org.onosproject.event.AbstractEvent;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 /** 18 /**
19 * Enum used to represent a meter failure condition. 19 * Enum used to represent a meter failure condition.
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import static com.google.common.base.Preconditions.checkArgument; 18 import static com.google.common.base.Preconditions.checkArgument;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.event.EventListener; 18 import org.onosproject.event.EventListener;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import com.google.common.base.MoreObjects; 18 import com.google.common.base.MoreObjects;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import com.google.common.collect.ImmutableList; 18 import com.google.common.collect.ImmutableList;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.net.DeviceId; 18 import org.onosproject.net.DeviceId;
19 import org.onosproject.net.provider.Provider; 19 import org.onosproject.net.provider.Provider;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 18
19 import org.onosproject.net.provider.ProviderRegistry; 19 import org.onosproject.net.provider.ProviderRegistry;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.net.DeviceId; 18 import org.onosproject.net.DeviceId;
19 import org.onosproject.net.provider.ProviderService; 19 import org.onosproject.net.provider.ProviderService;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.event.ListenerService; 18 import org.onosproject.event.ListenerService;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 /** 18 /**
19 * Represents the state of the meter as seen by the store. 19 * Represents the state of the meter as seen by the store.
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.store.Store; 18 import org.onosproject.store.Store;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import org.onosproject.store.StoreDelegate; 18 import org.onosproject.store.StoreDelegate;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.incubator.net.meter; 16 +package org.onosproject.net.meter;
17 17
18 import java.util.Optional; 18 import java.util.Optional;
19 19
......
...@@ -17,4 +17,4 @@ ...@@ -17,4 +17,4 @@
17 /** 17 /**
18 * Flow meter model and related services. 18 * Flow meter model and related services.
19 */ 19 */
20 -package org.onosproject.incubator.net.meter;
...\ No newline at end of file ...\ No newline at end of file
20 +package org.onosproject.net.meter;
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -124,6 +124,11 @@ public class IntentTestsMocks { ...@@ -124,6 +124,11 @@ public class IntentTestsMocks {
124 public MetadataInstruction writeMetadata() { 124 public MetadataInstruction writeMetadata() {
125 return null; 125 return null;
126 } 126 }
127 +
128 + @Override
129 + public Instructions.MeterInstruction metered() {
130 + return null;
131 + }
127 } 132 }
128 133
129 /** 134 /**
......
...@@ -610,6 +610,11 @@ public class FlowRuleManagerTest { ...@@ -610,6 +610,11 @@ public class FlowRuleManagerTest {
610 return null; 610 return null;
611 } 611 }
612 612
613 + @Override
614 + public Instructions.MeterInstruction metered() {
615 + return null;
616 + }
617 +
613 } 618 }
614 619
615 public class TestApplicationId extends DefaultApplicationId { 620 public class TestApplicationId extends DefaultApplicationId {
......
...@@ -160,6 +160,7 @@ import org.onosproject.net.intent.constraint.ObstacleConstraint; ...@@ -160,6 +160,7 @@ import org.onosproject.net.intent.constraint.ObstacleConstraint;
160 import org.onosproject.net.intent.constraint.PartialFailureConstraint; 160 import org.onosproject.net.intent.constraint.PartialFailureConstraint;
161 import org.onosproject.net.intent.constraint.WaypointConstraint; 161 import org.onosproject.net.intent.constraint.WaypointConstraint;
162 import org.onosproject.net.link.DefaultLinkDescription; 162 import org.onosproject.net.link.DefaultLinkDescription;
163 +import org.onosproject.net.meter.MeterId;
163 import org.onosproject.net.newresource.ResourceAllocation; 164 import org.onosproject.net.newresource.ResourceAllocation;
164 import org.onosproject.net.newresource.ResourcePath; 165 import org.onosproject.net.newresource.ResourcePath;
165 import org.onosproject.net.packet.DefaultOutboundPacket; 166 import org.onosproject.net.packet.DefaultOutboundPacket;
...@@ -271,6 +272,8 @@ public final class KryoNamespaces { ...@@ -271,6 +272,8 @@ public final class KryoNamespaces {
271 .register(MISC) 272 .register(MISC)
272 .nextId(KryoNamespace.INITIAL_ID + 30 + 10) 273 .nextId(KryoNamespace.INITIAL_ID + 30 + 10)
273 .register( 274 .register(
275 + Instructions.MeterInstruction.class,
276 + MeterId.class,
274 Version.class, 277 Version.class,
275 ControllerNode.State.class, 278 ControllerNode.State.class,
276 ApplicationState.class, 279 ApplicationState.class,
......
...@@ -22,21 +22,21 @@ import org.apache.felix.scr.annotations.Reference; ...@@ -22,21 +22,21 @@ import org.apache.felix.scr.annotations.Reference;
22 import org.apache.felix.scr.annotations.ReferenceCardinality; 22 import org.apache.felix.scr.annotations.ReferenceCardinality;
23 import org.apache.felix.scr.annotations.Service; 23 import org.apache.felix.scr.annotations.Service;
24 import org.onlab.util.TriConsumer; 24 import org.onlab.util.TriConsumer;
25 -import org.onosproject.incubator.net.meter.DefaultMeter; 25 +import org.onosproject.net.meter.DefaultMeter;
26 -import org.onosproject.incubator.net.meter.Meter; 26 +import org.onosproject.net.meter.Meter;
27 -import org.onosproject.incubator.net.meter.MeterEvent; 27 +import org.onosproject.net.meter.MeterEvent;
28 -import org.onosproject.incubator.net.meter.MeterFailReason; 28 +import org.onosproject.net.meter.MeterFailReason;
29 -import org.onosproject.incubator.net.meter.MeterId; 29 +import org.onosproject.net.meter.MeterId;
30 -import org.onosproject.incubator.net.meter.MeterListener; 30 +import org.onosproject.net.meter.MeterListener;
31 -import org.onosproject.incubator.net.meter.MeterOperation; 31 +import org.onosproject.net.meter.MeterOperation;
32 -import org.onosproject.incubator.net.meter.MeterProvider; 32 +import org.onosproject.net.meter.MeterProvider;
33 -import org.onosproject.incubator.net.meter.MeterProviderRegistry; 33 +import org.onosproject.net.meter.MeterProviderRegistry;
34 -import org.onosproject.incubator.net.meter.MeterProviderService; 34 +import org.onosproject.net.meter.MeterProviderService;
35 -import org.onosproject.incubator.net.meter.MeterService; 35 +import org.onosproject.net.meter.MeterService;
36 -import org.onosproject.incubator.net.meter.MeterState; 36 +import org.onosproject.net.meter.MeterState;
37 -import org.onosproject.incubator.net.meter.MeterStore; 37 +import org.onosproject.net.meter.MeterStore;
38 -import org.onosproject.incubator.net.meter.MeterStoreDelegate; 38 +import org.onosproject.net.meter.MeterStoreDelegate;
39 -import org.onosproject.incubator.net.meter.MeterStoreResult; 39 +import org.onosproject.net.meter.MeterStoreResult;
40 import org.onosproject.net.DeviceId; 40 import org.onosproject.net.DeviceId;
41 import org.onosproject.net.provider.AbstractListenerProviderRegistry; 41 import org.onosproject.net.provider.AbstractListenerProviderRegistry;
42 import org.onosproject.net.provider.AbstractProviderService; 42 import org.onosproject.net.provider.AbstractProviderService;
......
...@@ -23,16 +23,16 @@ import org.apache.felix.scr.annotations.Reference; ...@@ -23,16 +23,16 @@ import org.apache.felix.scr.annotations.Reference;
23 import org.apache.felix.scr.annotations.ReferenceCardinality; 23 import org.apache.felix.scr.annotations.ReferenceCardinality;
24 import org.onosproject.cluster.ClusterService; 24 import org.onosproject.cluster.ClusterService;
25 import org.onosproject.cluster.NodeId; 25 import org.onosproject.cluster.NodeId;
26 -import org.onosproject.incubator.net.meter.DefaultMeter; 26 +import org.onosproject.net.meter.DefaultMeter;
27 -import org.onosproject.incubator.net.meter.Meter; 27 +import org.onosproject.net.meter.Meter;
28 -import org.onosproject.incubator.net.meter.MeterEvent; 28 +import org.onosproject.net.meter.MeterEvent;
29 -import org.onosproject.incubator.net.meter.MeterFailReason; 29 +import org.onosproject.net.meter.MeterFailReason;
30 -import org.onosproject.incubator.net.meter.MeterId; 30 +import org.onosproject.net.meter.MeterId;
31 -import org.onosproject.incubator.net.meter.MeterOperation; 31 +import org.onosproject.net.meter.MeterOperation;
32 -import org.onosproject.incubator.net.meter.MeterState; 32 +import org.onosproject.net.meter.MeterState;
33 -import org.onosproject.incubator.net.meter.MeterStore; 33 +import org.onosproject.net.meter.MeterStore;
34 -import org.onosproject.incubator.net.meter.MeterStoreDelegate; 34 +import org.onosproject.net.meter.MeterStoreDelegate;
35 -import org.onosproject.incubator.net.meter.MeterStoreResult; 35 +import org.onosproject.net.meter.MeterStoreResult;
36 import org.onosproject.mastership.MastershipService; 36 import org.onosproject.mastership.MastershipService;
37 import org.onosproject.store.AbstractStore; 37 import org.onosproject.store.AbstractStore;
38 import org.onosproject.store.serializers.KryoNamespaces; 38 import org.onosproject.store.serializers.KryoNamespaces;
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
16 package org.onosproject.incubator.store.meter.impl; 16 package org.onosproject.incubator.store.meter.impl;
17 17
18 import org.onosproject.cluster.NodeId; 18 import org.onosproject.cluster.NodeId;
19 -import org.onosproject.incubator.net.meter.Meter; 19 +import org.onosproject.net.meter.Meter;
20 -import org.onosproject.incubator.net.meter.MeterFailReason; 20 +import org.onosproject.net.meter.MeterFailReason;
21 21
22 import java.util.Optional; 22 import java.util.Optional;
23 23
......
...@@ -161,6 +161,9 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -161,6 +161,9 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
161 if (treatment.writeMetadata() != null) { 161 if (treatment.writeMetadata() != null) {
162 instructions.add(buildMetadata(treatment.writeMetadata())); 162 instructions.add(buildMetadata(treatment.writeMetadata()));
163 } 163 }
164 + if (treatment.metered() != null) {
165 + instructions.add(buildMeter(treatment.metered()));
166 + }
164 167
165 long cookie = flowRule().id().value(); 168 long cookie = flowRule().id().value();
166 169
...@@ -263,6 +266,11 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -263,6 +266,11 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
263 return instruction; 266 return instruction;
264 } 267 }
265 268
269 + private OFInstruction buildMeter(Instructions.MeterInstruction metered) {
270 + return factory().instructions().meter(metered.meterId().id());
271 + }
272 +
273 +
266 private OFAction buildL0Modification(Instruction i) { 274 private OFAction buildL0Modification(Instruction i) {
267 L0ModificationInstruction l0m = (L0ModificationInstruction) i; 275 L0ModificationInstruction l0m = (L0ModificationInstruction) i;
268 switch (l0m.subtype()) { 276 switch (l0m.subtype()) {
......
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
15 */ 15 */
16 package org.onosproject.provider.of.meter.impl; 16 package org.onosproject.provider.of.meter.impl;
17 17
18 -import org.onosproject.incubator.net.meter.Band; 18 +import org.onosproject.net.meter.Band;
19 -import org.onosproject.incubator.net.meter.Meter; 19 +import org.onosproject.net.meter.Meter;
20 -import org.onosproject.incubator.net.meter.MeterId; 20 +import org.onosproject.net.meter.MeterId;
21 import org.projectfloodlight.openflow.protocol.OFFactory; 21 import org.projectfloodlight.openflow.protocol.OFFactory;
22 import org.projectfloodlight.openflow.protocol.OFMeterFlags; 22 import org.projectfloodlight.openflow.protocol.OFMeterFlags;
23 import org.projectfloodlight.openflow.protocol.OFMeterMod; 23 import org.projectfloodlight.openflow.protocol.OFMeterMod;
......
...@@ -28,17 +28,17 @@ import org.apache.felix.scr.annotations.Deactivate; ...@@ -28,17 +28,17 @@ import org.apache.felix.scr.annotations.Deactivate;
28 import org.apache.felix.scr.annotations.Reference; 28 import org.apache.felix.scr.annotations.Reference;
29 import org.apache.felix.scr.annotations.ReferenceCardinality; 29 import org.apache.felix.scr.annotations.ReferenceCardinality;
30 import org.onosproject.core.CoreService; 30 import org.onosproject.core.CoreService;
31 -import org.onosproject.incubator.net.meter.Band; 31 +import org.onosproject.net.meter.Band;
32 -import org.onosproject.incubator.net.meter.DefaultBand; 32 +import org.onosproject.net.meter.DefaultBand;
33 -import org.onosproject.incubator.net.meter.DefaultMeter; 33 +import org.onosproject.net.meter.DefaultMeter;
34 -import org.onosproject.incubator.net.meter.Meter; 34 +import org.onosproject.net.meter.Meter;
35 -import org.onosproject.incubator.net.meter.MeterFailReason; 35 +import org.onosproject.net.meter.MeterFailReason;
36 -import org.onosproject.incubator.net.meter.MeterOperation; 36 +import org.onosproject.net.meter.MeterOperation;
37 -import org.onosproject.incubator.net.meter.MeterOperations; 37 +import org.onosproject.net.meter.MeterOperations;
38 -import org.onosproject.incubator.net.meter.MeterProvider; 38 +import org.onosproject.net.meter.MeterProvider;
39 -import org.onosproject.incubator.net.meter.MeterProviderRegistry; 39 +import org.onosproject.net.meter.MeterProviderRegistry;
40 -import org.onosproject.incubator.net.meter.MeterProviderService; 40 +import org.onosproject.net.meter.MeterProviderService;
41 -import org.onosproject.incubator.net.meter.MeterState; 41 +import org.onosproject.net.meter.MeterState;
42 import org.onosproject.net.DeviceId; 42 import org.onosproject.net.DeviceId;
43 import org.onosproject.net.provider.AbstractProvider; 43 import org.onosproject.net.provider.AbstractProvider;
44 import org.onosproject.net.provider.ProviderId; 44 import org.onosproject.net.provider.ProviderId;
......