Sho SHIMIZU
Committed by Ray Milkey

Define an Instruction for OchSignal and its static factory method

Resolve ONOS-1873

Change-Id: Ia1d0a97fd820ce7a9b7e2b48ce8d07174bcc1af9
......@@ -21,6 +21,7 @@ import org.onlab.packet.MacAddress;
import org.onlab.packet.MplsLabel;
import org.onlab.packet.VlanId;
import org.onosproject.core.GroupId;
import org.onosproject.net.OchSignal;
import org.onosproject.net.PortNumber;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.L0SubType;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
......@@ -87,6 +88,17 @@ public final class Instructions {
}
/**
* Creates an L0 modification with the specified OCh signal.
*
* @param lambda OCh signal
* @return an L0 modification
*/
public static L0ModificationInstruction modL0OchSignal(OchSignal lambda) {
checkNotNull(lambda, "L0 OCh signal cannot be null");
return new L0ModificationInstruction.ModOchSignalInstruction(lambda);
}
/**
* Creates a l2 src modification.
*
* @param addr the mac address to modify to
......
......@@ -15,6 +15,9 @@
*/
package org.onosproject.net.flow.instructions;
import com.google.common.base.MoreObjects;
import org.onosproject.net.OchSignal;
import static com.google.common.base.MoreObjects.toStringHelper;
import java.util.Objects;
......@@ -28,9 +31,11 @@ public abstract class L0ModificationInstruction implements Instruction {
/**
* Lambda modification.
*/
LAMBDA
//TODO: remaining types
LAMBDA,
/**
* OCh (Optical Channel) modification.
*/
OCH,
}
public abstract L0SubType subtype();
......@@ -86,4 +91,49 @@ public abstract class L0ModificationInstruction implements Instruction {
return false;
}
}
/**
* Represents an L0 OCh (Optical Channel) modification instruction.
*/
public static final class ModOchSignalInstruction extends L0ModificationInstruction {
private final OchSignal lambda;
ModOchSignalInstruction(OchSignal lambda) {
this.lambda = lambda;
}
@Override
public L0SubType subtype() {
return L0SubType.OCH;
}
public OchSignal lambda() {
return lambda;
}
@Override
public int hashCode() {
return Objects.hash(lambda);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof ModOchSignalInstruction)) {
return false;
}
final ModOchSignalInstruction that = (ModOchSignalInstruction) obj;
return Objects.equals(this.lambda, that.lambda);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("lambda", lambda)
.toString();
}
}
}
......