diff options
Diffstat (limited to 'framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java')
-rw-r--r-- | framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java index df4dfa53..270008f3 100644 --- a/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java +++ b/framework/src/onos/drivers/src/main/java/org/onosproject/driver/handshaker/CalientFiberSwitchHandshaker.java @@ -17,7 +17,14 @@ package org.onosproject.driver.handshaker; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import org.onlab.util.Spectrum; +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; @@ -41,9 +48,24 @@ import java.io.IOException; import java.util.ArrayList; 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; -public class CalientFiberSwitchHandshaker extends AbstractOpenFlowSwitch implements OpenFlowOpticalSwitch { +/** + * Driver for Calient S160 Optical Circuit Switch. Untested on Calient S320 but probably works ok. + * + * Driver implements custom handshaker, and rewrites flow stats as expected by the device. Port stats are currently + * not supported. + * + * The device consists of OMS ports only, and each port exposes lambda resources covering the whole + * usable optical spectrum (U to O band, see {@link Spectrum} for spectrum definitions). + */ +public class CalientFiberSwitchHandshaker + extends AbstractOpenFlowSwitch + implements OpenFlowOpticalSwitch, LambdaQuery { private final AtomicBoolean driverHandshakeComplete = new AtomicBoolean(false); private List<OFCalientPortDescStatsEntry> fiberPorts = new ArrayList<>(); @@ -178,4 +200,22 @@ public class CalientFiberSwitchHandshaker extends AbstractOpenFlowSwitch impleme super.sendMsg(newMsg); } + + @Override + public SortedSet<OchSignal> queryLambdas(PortNumber port) { + // S160 data sheet + // Wavelength range: 1260 - 1630 nm + long startSpacingMultiplier = Spectrum.U_BAND_MIN.subtract(Spectrum.CENTER_FREQUENCY).asHz() / + ChannelSpacing.CHL_12P5GHZ.frequency().asHz(); + long stopSpacingMultiplier = Spectrum.O_BAND_MAX.subtract(Spectrum.CENTER_FREQUENCY).asHz() / + ChannelSpacing.CHL_12P5GHZ.frequency().asHz(); + List<OchSignal> lambdas = IntStream.rangeClosed((int) startSpacingMultiplier, (int) stopSpacingMultiplier) + .mapToObj(x -> new OchSignal(GridType.FLEX, ChannelSpacing.CHL_12P5GHZ, x, 1)) + .collect(Collectors.toList()); + + SortedSet<OchSignal> result = new TreeSet<>(new DefaultOchSignalComparator()); + result.addAll(lambdas); + + return result; + } } |