aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java')
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java524
1 files changed, 0 insertions, 524 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
deleted file mode 100644
index 40291f57..00000000
--- a/framework/src/onos/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.net.flow;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.List;
-import java.util.Objects;
-
-import org.onlab.packet.EthType;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.MplsLabel;
-import org.onlab.packet.TpPort;
-import org.onlab.packet.VlanId;
-import org.onosproject.core.GroupId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.IndexedLambda;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.flow.instructions.ExtensionTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions;
-import org.onosproject.net.meter.MeterId;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-/**
- * Default traffic treatment implementation.
- */
-public final class DefaultTrafficTreatment implements TrafficTreatment {
-
- private final List<Instruction> immediate;
- private final List<Instruction> deferred;
- private final List<Instruction> all;
- private final Instructions.TableTypeTransition table;
- private final Instructions.MetadataInstruction meta;
-
- private final boolean hasClear;
-
- private static final DefaultTrafficTreatment EMPTY
- = new DefaultTrafficTreatment(ImmutableList.of(Instructions.createNoAction()));
- private final Instructions.MeterInstruction meter;
-
- /**
- * Creates a new traffic treatment from the specified list of instructions.
- *
- * @param immediate immediate instructions
- */
- private DefaultTrafficTreatment(List<Instruction> immediate) {
- this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
- this.deferred = ImmutableList.of();
- this.all = this.immediate;
- this.hasClear = false;
- this.table = null;
- this.meta = null;
- this.meter = null;
- }
-
- /**
- * Creates a new traffic treatment from the specified list of instructions.
- *
- * @param deferred deferred instructions
- * @param immediate immediate instructions
- * @param table table transition instruction
- * @param clear instruction to clear the deferred actions list
- */
- private DefaultTrafficTreatment(List<Instruction> deferred,
- List<Instruction> immediate,
- Instructions.TableTypeTransition table,
- boolean clear,
- Instructions.MetadataInstruction meta,
- Instructions.MeterInstruction meter) {
- this.immediate = ImmutableList.copyOf(checkNotNull(immediate));
- this.deferred = ImmutableList.copyOf(checkNotNull(deferred));
- this.all = new ImmutableList.Builder<Instruction>()
- .addAll(immediate)
- .addAll(deferred)
- .build();
- this.table = table;
- this.meta = meta;
- this.hasClear = clear;
- this.meter = meter;
- }
-
- @Override
- public List<Instruction> deferred() {
- return deferred;
- }
-
- @Override
- public List<Instruction> immediate() {
- return immediate;
- }
-
- @Override
- public List<Instruction> allInstructions() {
- return all;
- }
-
- @Override
- public Instructions.TableTypeTransition tableTransition() {
- return table;
- }
-
- @Override
- public boolean clearedDeferred() {
- return hasClear;
- }
-
- @Override
- public Instructions.MetadataInstruction writeMetadata() {
- return meta;
- }
-
- @Override
- public Instructions.MeterInstruction metered() {
- return meter;
- }
-
- /**
- * Returns a new traffic treatment builder.
- *
- * @return traffic treatment builder
- */
- public static TrafficTreatment.Builder builder() {
- return new Builder();
- }
-
- /**
- * Returns an empty traffic treatment.
- *
- * @return empty traffic treatment
- */
- public static TrafficTreatment emptyTreatment() {
- return EMPTY;
- }
-
- /**
- * Returns a new traffic treatment builder primed to produce entities
- * patterned after the supplied treatment.
- *
- * @param treatment base treatment
- * @return traffic treatment builder
- */
- public static TrafficTreatment.Builder builder(TrafficTreatment treatment) {
- return new Builder(treatment);
- }
-
- //FIXME: Order of instructions may affect hashcode
- @Override
- public int hashCode() {
- return Objects.hash(immediate, deferred, table, meta);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof DefaultTrafficTreatment) {
- DefaultTrafficTreatment that = (DefaultTrafficTreatment) obj;
- return Objects.equals(immediate, that.immediate) &&
- Objects.equals(deferred, that.deferred) &&
- Objects.equals(table, that.table) &&
- Objects.equals(meta, that.meta);
-
- }
- return false;
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(getClass())
- .add("immediate", immediate)
- .add("deferred", deferred)
- .add("transition", table == null ? "None" : table.toString())
- .add("cleared", hasClear)
- .add("metadata", meta)
- .toString();
- }
-
- /**
- * Builds a list of treatments following the following order.
- * Modifications -&gt; Group -&gt; Output (including drop)
- */
- public static final class Builder implements TrafficTreatment.Builder {
-
- boolean clear = false;
-
- Instructions.TableTypeTransition table;
-
- Instructions.MetadataInstruction meta;
-
- Instructions.MeterInstruction meter;
-
- List<Instruction> deferred = Lists.newLinkedList();
-
- List<Instruction> immediate = Lists.newLinkedList();
-
- List<Instruction> current = immediate;
-
- // Creates a new builder
- private Builder() {
- }
-
- // Creates a new builder based off an existing treatment
- private Builder(TrafficTreatment treatment) {
- deferred();
- treatment.deferred().forEach(i -> add(i));
-
- immediate();
- treatment.immediate().stream()
- // NOACTION will get re-added if there are no other actions
- .filter(i -> i.type() != Instruction.Type.NOACTION)
- .forEach(i -> add(i));
-
- clear = treatment.clearedDeferred();
- }
-
- @Override
- public Builder add(Instruction instruction) {
-
- switch (instruction.type()) {
- case DROP:
- case NOACTION:
- case OUTPUT:
- case GROUP:
- case QUEUE:
- case L0MODIFICATION:
- case L1MODIFICATION:
- case L2MODIFICATION:
- case L3MODIFICATION:
- case L4MODIFICATION:
- case EXTENSION:
- current.add(instruction);
- break;
- case TABLE:
- table = (Instructions.TableTypeTransition) instruction;
- break;
- case METADATA:
- meta = (Instructions.MetadataInstruction) instruction;
- break;
- case METER:
- meter = (Instructions.MeterInstruction) instruction;
- break;
- default:
- throw new IllegalArgumentException("Unknown instruction type: " +
- instruction.type());
- }
-
- return this;
- }
-
- /**
- * Add a NOACTION when DROP instruction is explicitly specified.
- *
- * @return the traffic treatment builder
- */
- @Override
- public Builder drop() {
- return add(Instructions.createNoAction());
- }
-
- /**
- * Add a NOACTION when no instruction is specified.
- *
- * @return the traffic treatment builder
- */
- private Builder noAction() {
- return add(Instructions.createNoAction());
- }
-
- @Override
- public Builder punt() {
- return add(Instructions.createOutput(PortNumber.CONTROLLER));
- }
-
- @Override
- public Builder setOutput(PortNumber number) {
- return add(Instructions.createOutput(number));
- }
-
- @Override
- public Builder setEthSrc(MacAddress addr) {
- return add(Instructions.modL2Src(addr));
- }
-
- @Override
- public Builder setEthDst(MacAddress addr) {
- return add(Instructions.modL2Dst(addr));
- }
-
- @Override
- public Builder setVlanId(VlanId id) {
- return add(Instructions.modVlanId(id));
- }
-
- @Override
- public Builder setVlanPcp(Byte pcp) {
- return add(Instructions.modVlanPcp(pcp));
- }
-
- @Override
- public Builder setIpSrc(IpAddress addr) {
- return add(Instructions.modL3Src(addr));
- }
-
- @Override
- public Builder setIpDst(IpAddress addr) {
- return add(Instructions.modL3Dst(addr));
- }
-
- @Override
- public Builder decNwTtl() {
- return add(Instructions.decNwTtl());
- }
-
- @Override
- public Builder copyTtlIn() {
- return add(Instructions.copyTtlIn());
- }
-
- @Override
- public Builder copyTtlOut() {
- return add(Instructions.copyTtlOut());
- }
-
- @Override
- public Builder pushMpls() {
- return add(Instructions.pushMpls());
- }
-
- @Override
- public Builder popMpls() {
- return add(Instructions.popMpls());
- }
-
- @Override
- public Builder popMpls(int etherType) {
- return add(Instructions.popMpls(new EthType(etherType)));
- }
-
- @Override
- public Builder popMpls(EthType etherType) {
- return add(Instructions.popMpls(etherType));
- }
-
- @Override
- public Builder setMpls(MplsLabel mplsLabel) {
- return add(Instructions.modMplsLabel(mplsLabel));
- }
-
- @Override
- public Builder setMplsBos(boolean mplsBos) {
- return add(Instructions.modMplsBos(mplsBos));
- }
-
- @Override
- public Builder decMplsTtl() {
- return add(Instructions.decMplsTtl());
- }
-
- @Deprecated
- @Override
- public Builder setLambda(short lambda) {
- return add(Instructions.modL0Lambda(new IndexedLambda(lambda)));
- }
-
- @Override
- public Builder group(GroupId groupId) {
- return add(Instructions.createGroup(groupId));
- }
-
- @Override
- public Builder setQueue(long queueId) {
- return add(Instructions.setQueue(queueId, null));
- }
-
- @Override
- public Builder setQueue(long queueId, PortNumber port) {
- return add(Instructions.setQueue(queueId, port));
- }
-
- @Override
- public TrafficTreatment.Builder meter(MeterId meterId) {
- return add(Instructions.meterTraffic(meterId));
- }
-
- @Override
- public Builder popVlan() {
- return add(Instructions.popVlan());
- }
-
- @Override
- public Builder pushVlan() {
- return add(Instructions.pushVlan());
- }
-
- @Override
- public Builder transition(Integer tableId) {
- return add(Instructions.transition(tableId));
- }
-
- @Override
- public Builder immediate() {
- current = immediate;
- return this;
- }
-
- @Override
- public Builder deferred() {
- current = deferred;
- return this;
- }
-
- @Override
- public Builder wipeDeferred() {
- clear = true;
- return this;
- }
-
- @Override
- public Builder writeMetadata(long metadata, long metadataMask) {
- return add(Instructions.writeMetadata(metadata, metadataMask));
- }
-
- @Override
- public Builder setTunnelId(long tunnelId) {
- return add(Instructions.modTunnelId(tunnelId));
- }
-
- @Deprecated
- @Override
- public TrafficTreatment.Builder setTcpSrc(short port) {
- return setTcpSrc(TpPort.tpPort(port));
- }
-
- @Override
- public TrafficTreatment.Builder setTcpSrc(TpPort port) {
- return add(Instructions.modTcpSrc(port));
- }
-
- @Deprecated
- @Override
- public TrafficTreatment.Builder setTcpDst(short port) {
- return setTcpDst(TpPort.tpPort(port));
- }
-
- @Override
- public TrafficTreatment.Builder setTcpDst(TpPort port) {
- return add(Instructions.modTcpDst(port));
- }
-
- @Deprecated
- @Override
- public TrafficTreatment.Builder setUdpSrc(short port) {
- return setUdpSrc(TpPort.tpPort(port));
- }
-
- @Override
- public TrafficTreatment.Builder setUdpSrc(TpPort port) {
- return add(Instructions.modUdpSrc(port));
- }
-
- @Deprecated
- @Override
- public TrafficTreatment.Builder setUdpDst(short port) {
- return setUdpDst(TpPort.tpPort(port));
- }
-
- @Override
- public TrafficTreatment.Builder setUdpDst(TpPort port) {
- return add(Instructions.modUdpDst(port));
- }
-
- @Override
- public Builder setArpSpa(IpAddress addr) {
- return add(Instructions.modArpSpa(addr));
- }
-
- @Override
- public Builder setArpSha(MacAddress addr) {
- return add(Instructions.modArpSha(addr));
- }
-
- @Override
- public Builder setArpOp(short op) {
- return add(Instructions.modL3ArpOp(op));
- }
-
- @Override
- public TrafficTreatment.Builder extension(ExtensionTreatment extension,
- DeviceId deviceId) {
- return add(Instructions.extension(extension, deviceId));
- }
-
- @Override
- public TrafficTreatment build() {
- if (deferred.size() == 0 && immediate.size() == 0
- && table == null && !clear) {
- immediate();
- noAction();
- }
- return new DefaultTrafficTreatment(deferred, immediate, table, clear, meta, meter);
- }
-
- }
-
-}