Upgrade of Lumentum driver for supporting FLEX_GRID.
- patch 1: first commit
- patch 2: checkstyle
- patch 3: checkstyle
Change-Id: I9eee6ee1aa6619d11fc7552d20b74a4221a3512d
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java
index 1d29f13..224184f 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumFlowRule.java
@@ -122,9 +122,6 @@
.findAny()
.orElse(null);
- checkArgument(ochSignal.slotGranularity() == 4 || ochSignal.slotGranularity() == 8,
- "Lumentum device, only supports 50 GHz and 100 GHz frequency slots");
-
inputPort = criteria.stream()
.filter(c -> c instanceof PortCriterion)
.map(c -> ((PortCriterion) c).port())
@@ -155,7 +152,7 @@
isAddRule = false;
}
- connectionName = "inPort" + inputPort.toString() + "-ochSig-" + ochSignal.centralFrequency().toString();
+ connectionName = "inPort-" + getOchPort().toString() + "-centralFreq-" + ochSignal.centralFrequency().asGHz();
}
public PortNumber addDrop() {
@@ -178,6 +175,14 @@
return outputPort;
}
+ public PortNumber getOchPort() {
+ if (isAddRule) {
+ return inputPort;
+ } else {
+ return outputPort;
+ }
+ }
+
public String getConnectionName() {
return connectionName;
}
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java
index 6b8fdf1..34655d47 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmDiscovery.java
@@ -34,6 +34,8 @@
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
import org.onosproject.net.AnnotationKeys;
+import org.onosproject.net.OduSignalType;
+import org.onosproject.net.OchSignal;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DefaultPortDescription;
import org.onosproject.net.device.DeviceDescription;
@@ -53,6 +55,7 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onosproject.net.optical.device.OmsPortHelper.omsPortDescription;
+import static org.onosproject.net.optical.device.OchPortHelper.ochPortDescription;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -328,12 +331,21 @@
(annotations.build().value(AnnotationKeys.PORT_NAME)).contains(LINE_PORT_NAME))) {
//These are the ports supporting OchSignals
- portDescriptions.add(omsPortDescription(portNum,
- isEnabled,
- START_CENTER_FREQ_50,
- END_CENTER_FREQ_50,
- CHANNEL_SPACING_50.frequency(),
- annotations.build()));
+ if (portNum.toLong() != 3001) {
+ portDescriptions.add(ochPortDescription(portNum,
+ isEnabled,
+ OduSignalType.ODU4,
+ true,
+ OchSignal.newDwdmSlot(ChannelSpacing.CHL_50GHZ, 1),
+ annotations.build()));
+ } else {
+ portDescriptions.add(omsPortDescription(portNum,
+ isEnabled,
+ START_CENTER_FREQ_50,
+ END_CENTER_FREQ_50,
+ CHANNEL_SPACING_50.frequency(),
+ annotations.build()));
+ }
} else {
//These are COPPER ports, or FIBER ports not supporting OchSignals
DefaultPortDescription.Builder portDescriptionBuilder = DefaultPortDescription.builder();
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java
index d119cfa..940eac8 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumNetconfRoadmFlowRuleProgrammable.java
@@ -25,19 +25,15 @@
import org.onosproject.drivers.utilities.XmlConfigParser;
import org.onosproject.net.PortNumber;
import org.onosproject.net.OchSignal;
-import org.onosproject.net.OchSignalType;
import org.onosproject.net.DeviceId;
import org.onosproject.net.ChannelSpacing;
import org.onosproject.net.GridType;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.net.flow.DefaultFlowEntry;
-import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.FlowEntry;
import org.onosproject.net.flow.FlowRule;
import org.onosproject.net.flow.FlowRuleProgrammable;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.criteria.Criteria;
import org.onosproject.netconf.NetconfController;
import org.onosproject.netconf.NetconfException;
import org.onosproject.netconf.NetconfSession;
@@ -103,7 +99,7 @@
.collect(Collectors.toList());
//Print out number of rules actually found on the device that are also included in the cache
- log.debug("Device {} getFlowEntries fetched connections {}", did(), fetched.size());
+ log.info("Device {} getFlowEntries fetched connections {}", did(), fetched.size());
return fetched;
}
@@ -130,12 +126,13 @@
if (rpcAddConnection(lumFlowRule)) {
added.add(lumFlowRule);
getConnectionCache().add(did(), lumFlowRule.getConnectionName(), lumFlowRule);
- log.debug("Adding connection with selector {}", lumFlowRule.selector());
+ log.info("Adding connection with selector {}", lumFlowRule.selector());
+ log.info("Adding connection with name {}", lumFlowRule.getConnectionName());
}
}
//Print out number of rules sent to the device (without receiving errors)
- log.debug("Device {} applyFlowRules added {}", did(), added.size());
+ log.info("Device {} applyFlowRules added {}", did(), added.size());
return added;
}
@@ -163,7 +160,7 @@
}
//Print out number of removed rules from the device (without receiving errors)
- log.debug("Device {} removeFlowRules removed {}", did(), removed.size());
+ log.info("Device {} removeFlowRules removed {}", did(), removed.size());
return removed;
}
@@ -250,42 +247,30 @@
return null;
}
- log.debug("Lumentum NETCONF - retrieved FlowRule module {} connection {}", moduleId, connId);
+ log.info("Lumentum NETCONF - retrieved FlowRule module {} connection {}", moduleId, connId);
HierarchicalConfiguration config = connection.configurationAt(CONFIG);
double startFreq = config.getDouble(START_FREQ);
double endFreq = config.getDouble(END_FREQ);
- String inputPortReference = config.getString(INPUT_PORT_REFERENCE);
- String outputPortReference = config.getString(OUTPUT_PORT_REFERENCE);
+ String inputPort = config.getString(INPUT_PORT_REFERENCE);
+ String outputPort = config.getString(OUTPUT_PORT_REFERENCE);
HierarchicalConfiguration state = connection.configurationAt(STATE);
double attenuation = state.getDouble(CHANNEL_ATTENUATION);
double inputPower = state.getDouble(CHANNEL_INPUT_POWER);
double outputPower = state.getDouble(CHANNEL_OUTPUT_POWER);
- PortNumber portNumber = getPortNumber(moduleId, inputPortReference, outputPortReference);
+ OchSignal signal = toOchSignal(startFreq, endFreq);
- //If rule is on module 1 it means input port in the Flow rule is contained in portNumber.
- //Otherwise the input port in the Flow rule must is the line port.
- TrafficSelector selector = DefaultTrafficSelector.builder()
- .matchInPort(moduleId == 1 ? portNumber : LINE_PORT_NUMBER)
- .add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID))
- .add(Criteria.matchLambda(toOchSignal(startFreq, endFreq)))
- .build();
+ PortNumber portNumber = getPortNumber(moduleId, inputPort, outputPort);
+ double central = signal.centralFrequency().asGHz();
- log.debug("Lumentum NETCONF - retrieved FlowRule startFreq {} endFreq {}", startFreq, endFreq);
- log.debug("Lumentum NETCONF - retrieved FlowRule selector {}", selector);
+ String connectionName = "inPort-" + portNumber.toStringWithoutName() + "-centralFreq-" + central;
+ log.info("Lumentum NETCONF - retrieved connection with name {}", connectionName);
+ log.info("Lumentum NETCONF - retrieved connection startFreq {} endFreq {}", startFreq, endFreq);
- //Lookup of connection
- //Retrieved rules, cached rules are considered equal if the selector is equal
FlowRule cacheRule = null;
- if (getConnectionCache().size(did()) != 0) {
- cacheRule = getConnectionCache().get(did()).stream()
- .filter(r -> (r.selector().equals(selector)))
- .findFirst()
- .orElse(null);
- }
-
+ cacheRule = getConnectionCache().get(did(), connectionName);
if (cacheRule == null) {
//TODO consider a way to keep "external" FlowRules
@@ -294,7 +279,7 @@
return null;
} else {
//Update monitored values
- log.debug("Attenuation retrieved {} dB for connection {}",
+ log.info("Attenuation retrieved {} dB for connection {}",
attenuation, ((LumentumFlowRule) cacheRule).getConnectionId());
((LumentumFlowRule) cacheRule).setAttenuation(attenuation);
((LumentumFlowRule) cacheRule).setInputPower(inputPower);
@@ -360,15 +345,15 @@
String module = pair.getLeft().toString();
String connectionId = pair.getRight().toString();
- log.debug("Lumentum driver new connection sent moduleId {} connId {}",
+ log.info("Lumentum driver new connection sent moduleId {} connId {}",
xc.getConnectionModule(),
xc.getConnectionId());
//Conversion of ochSignal format (center frequency + diameter) to Lumentum frequency slot format (start - end)
- Frequency freqRadius = Frequency.ofHz(xc.ochSignal().channelSpacing().frequency().asHz() / 2);
+ Frequency freqRadius = Frequency.ofGHz(xc.ochSignal().slotWidth().asGHz() / 2);
Frequency center = xc.ochSignal().centralFrequency();
- String startFreq = String.valueOf(center.subtract(freqRadius).asHz() / GHZ);
- String endFreq = String.valueOf(center.add(freqRadius).asHz() / GHZ);
+ String startFreq = String.valueOf(center.subtract(freqRadius).asGHz());
+ String endFreq = String.valueOf(center.add(freqRadius).asGHz());
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<rpc xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">" + "\n");
@@ -397,7 +382,7 @@
stringBuilder.append("</rpc>" + "\n");
log.info("Lumentum ROADM20 - RPC add-connection sent to device {}", did());
- log.debug("Lumentum ROADM20 - RPC add-connection sent to device {} {}", did(), stringBuilder);
+ log.info("Lumentum ROADM20 - RPC add-connection sent to device {} {}", did(), stringBuilder);
return editCrossConnect(stringBuilder.toString());
}
@@ -434,7 +419,7 @@
stringBuilder.append("</rpc>" + "\n");
log.info("Lumentum ROADM20 - edit-connection sent to device {}", did());
- log.debug("Lumentum ROADM20 - edit-connection sent to device {} {}", did(), stringBuilder);
+ log.info("Lumentum ROADM20 - edit-connection sent to device {} {}", did(), stringBuilder);
return editCrossConnect(stringBuilder.toString());
}
@@ -467,7 +452,7 @@
stringBuilder.append("</rpc>" + " \n");
log.info("Lumentum ROADM20 - RPC delete-connection sent to device {}", did());
- log.debug("Lumentum ROADM20 - - RPC delete-connection sent to device {} {}", did(), stringBuilder);
+ log.info("Lumentum ROADM20 - - RPC delete-connection sent to device {} {}", did(), stringBuilder);
return editCrossConnect(stringBuilder.toString());
}
@@ -485,7 +470,7 @@
stringBuilder.append("</rpc>" + "\n");
log.info("Lumentum ROADM20 - RPC delete-external-connection sent to device {}", did());
- log.debug("Lumentum ROADM20 - - RPC delete-external-connection sent to device {} {}", did(), stringBuilder);
+ log.info("Lumentum ROADM20 - - RPC delete-external-connection sent to device {} {}", did(), stringBuilder);
return editCrossConnect(stringBuilder.toString());
}
@@ -503,7 +488,7 @@
} catch (NetconfException e) {
log.error("Failed to edit the CrossConnect edit-cfg for device {}",
handler().data().deviceId(), e);
- log.debug("Failed configuration {}", xcString);
+ log.info("Failed configuration {}", xcString);
return false;
}
}
@@ -522,7 +507,7 @@
int slots = (int) ((end - start) / ChannelSpacing.CHL_12P5GHZ.frequency().asGHz());
int multiplier = 0;
- //Conversion for 50 GHz slots
+ /*//Conversion for 50 GHz slots
if (end - start == 50) {
multiplier = (int) (((end - start) / 2 + start - Spectrum.CENTER_FREQUENCY.asGHz())
/ ChannelSpacing.CHL_50GHZ.frequency().asGHz());
@@ -536,9 +521,15 @@
/ ChannelSpacing.CHL_100GHZ.frequency().asGHz());
return new OchSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, multiplier, slots);
- }
+ }*/
- return null;
+ multiplier = (int) (((end - start) / 2 + start - Spectrum.CENTER_FREQUENCY.asGHz())
+ / ChannelSpacing.CHL_6P25GHZ.frequency().asGHz());
+
+ return new OchSignal(GridType.FLEX, ChannelSpacing.CHL_6P25GHZ, multiplier, slots);
+
+
+ //return null;
}
/**