Adding wavelenght to port view and MHz to command
Change-Id: Iecdf46c82cd2df4fe1b46f759d32a1c49a7dd9d6
(cherry picked from commit 02e2eb4ee23b7032e4d3f56b5087d169edac2e46)
diff --git a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java
index 191f608..d6812ba 100644
--- a/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java
+++ b/apps/roadm/app/src/main/java/org/onosproject/roadm/RoadmManager.java
@@ -17,6 +17,7 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Range;
+import org.onlab.util.Frequency;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.net.ChannelSpacing;
@@ -48,7 +49,9 @@
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.flow.criteria.Criteria;
+import org.onosproject.net.flow.instructions.Instruction;
import org.onosproject.net.flow.instructions.Instructions;
+import org.onosproject.net.flow.instructions.L0ModificationInstruction;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
@@ -64,6 +67,7 @@
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
+import java.util.stream.StreamSupport;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onosproject.net.optical.OpticalAnnotations.INPUT_PORT_STATUS;
@@ -375,8 +379,8 @@
@Override
public FlowId createConnection(DeviceId deviceId, int priority, boolean isPermanent,
- int timeout, PortNumber inPort, PortNumber outPort,
- OchSignal ochSignal, Double attenuation) {
+ int timeout, PortNumber inPort, PortNumber outPort,
+ OchSignal ochSignal, Double attenuation) {
checkNotNull(deviceId);
checkNotNull(inPort);
checkNotNull(outPort);
@@ -386,6 +390,39 @@
}
@Override
+ public Frequency getWavelength(DeviceId deviceId, PortNumber portNumber) {
+ checkNotNull(deviceId);
+ checkNotNull(portNumber);
+ Optional<FlowEntry> optFlow = StreamSupport
+ .stream(flowRuleService.getFlowEntries(deviceId).spliterator(), false)
+ .filter(flow -> {
+ return flow.treatment().allInstructions().stream().filter(instr -> {
+ if (instr.type().equals(Instruction.Type.OUTPUT)) {
+ return ((Instructions.OutputInstruction) instr).port().equals(portNumber);
+ } else if (instr.type().equals(Instruction.Type.L0MODIFICATION)) {
+ return ((L0ModificationInstruction) instr).subtype()
+ .equals(L0ModificationInstruction.L0SubType.OCH);
+ }
+ return false;
+ }).count() == 2;
+ }).findFirst();
+ if (optFlow.isPresent()) {
+ Optional<Instruction> instruction = optFlow.get().treatment().allInstructions().stream().filter(instr -> {
+ if (instr.type().equals(Instruction.Type.L0MODIFICATION)) {
+ return ((L0ModificationInstruction) instr).subtype()
+ .equals(L0ModificationInstruction.L0SubType.OCH);
+ }
+ return false;
+ }).findAny();
+ if (instruction.isPresent()) {
+ return ((L0ModificationInstruction.ModOchSignalInstruction) instruction.get()).lambda()
+ .centralFrequency();
+ }
+ }
+ return null;
+ }
+
+ @Override
public void removeConnection(DeviceId deviceId, FlowId flowId) {
checkNotNull(deviceId);
checkNotNull(flowId);