aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java')
-rw-r--r--framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java43
1 files changed, 37 insertions, 6 deletions
diff --git a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java
index f91e2a7e..23378e95 100644
--- a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java
+++ b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/OfOpticalSwitchImplLinc13.java
@@ -16,7 +16,13 @@
package org.onosproject.driver.handshaker;
import com.google.common.collect.ImmutableSet;
+import org.onosproject.net.ChannelSpacing;
+import org.onosproject.net.DefaultOchSignalComparator;
import org.onosproject.net.Device;
+import org.onosproject.net.GridType;
+import org.onosproject.net.OchSignal;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.LambdaQuery;
import org.onosproject.openflow.controller.OpenFlowOpticalSwitch;
import org.onosproject.openflow.controller.PortDescPropertyType;
import org.onosproject.openflow.controller.driver.AbstractOpenFlowSwitch;
@@ -42,7 +48,6 @@ import org.projectfloodlight.openflow.protocol.match.Match;
import org.projectfloodlight.openflow.protocol.match.MatchField;
import org.projectfloodlight.openflow.protocol.oxm.OFOxmExpOchSigId;
import org.projectfloodlight.openflow.types.CircuitSignalID;
-import org.projectfloodlight.openflow.types.OFPort;
import org.projectfloodlight.openflow.types.U8;
import java.io.IOException;
@@ -51,7 +56,11 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
/**
* LINC-OE Optical Emulator switch class.
@@ -65,10 +74,13 @@ import java.util.concurrent.atomic.AtomicBoolean;
* As LINC implements custom OF optical extensions (in contrast to the final standard as specified in
* ONF TS-022 (March 15, 2015), we need to rewrite flow stat requests and flow mods in {@link #sendMsg(OFMessage)}.
*
+ * LINC exposes OchSignal resources: 80 lambdas of 50 GHz around ITU-T G.694.1 center frequency 193.1 GHz.
+ *
*/
public class OfOpticalSwitchImplLinc13
- extends AbstractOpenFlowSwitch implements OpenFlowOpticalSwitch {
+ extends AbstractOpenFlowSwitch implements OpenFlowOpticalSwitch, LambdaQuery {
+ private static final int LAMBDA_COUNT = 80;
private final AtomicBoolean driverHandshakeComplete = new AtomicBoolean(false);
private long barrierXidToWaitFor = -1;
@@ -267,13 +279,13 @@ public class OfOpticalSwitchImplLinc13
/**
* Checks if given port is also part of the regular port desc stats, i.e., is the port a tap port.
*
- * @param port given OF port
+ * @param port given port number
* @return true if the port is a tap (OCh), false otherwise (OMS port)
*/
- private boolean hasPort(OFPort port) {
+ private boolean isOChPort(long port) {
for (OFPortDescStatsReply reply : this.ports) {
for (OFPortDesc p : reply.getEntries()) {
- if (p.getPortNo().equals(port)) {
+ if (p.getPortNo().getPortNumber() == port) {
return true;
}
}
@@ -328,7 +340,7 @@ public class OfOpticalSwitchImplLinc13
short signalType;
// FIXME: use constants once loxi has full optical extensions
- if (hasPort(p.getPortNo())) {
+ if (isOChPort(p.getPortNo().getPortNumber())) {
signalType = 5; // OCH port
} else {
signalType = 2; // OMS port
@@ -351,4 +363,23 @@ public class OfOpticalSwitchImplLinc13
public Set<PortDescPropertyType> getPortTypes() {
return ImmutableSet.of(PortDescPropertyType.OPTICAL_TRANSPORT);
}
+
+ @Override
+ public SortedSet<OchSignal> queryLambdas(PortNumber port) {
+ // OCh ports don't have lambdas
+ if (isOChPort(port.toLong())) {
+ return Collections.emptySortedSet();
+ }
+
+ // OMS ports expose 80 lambdas of 50GHz width, centered around the ITU-T center frequency.
+ // We report these with a spacing of 12.5 GHz.
+ List<OchSignal> lambdas = IntStream.range(0, LAMBDA_COUNT)
+ .mapToObj(x -> new OchSignal(GridType.FLEX, ChannelSpacing.CHL_12P5GHZ, x - (LAMBDA_COUNT / 2), 1))
+ .collect(Collectors.toList());
+
+ SortedSet<OchSignal> result = new TreeSet<>(new DefaultOchSignalComparator());
+ result.addAll(lambdas);
+
+ return result;
+ }
}