Bug fixes for optical use case.
Change-Id: I62bff2ec639957043890bf06b8ba0d9abe0b6b04
diff --git a/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java b/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java
index 65499f4..8dcbeff 100644
--- a/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java
+++ b/apps/newoptical/src/main/java/org/onosproject/newoptical/OpticalPathProvisioner.java
@@ -279,6 +279,11 @@
// Search path with available cross connect points
for (Path path : paths) {
+ // Path service calculates from node to node, we're only interested in port to port
+ if (!path.src().equals(ingress) || !path.dst().equals(egress)) {
+ continue;
+ }
+
OpticalConnectivityId id = setupPath(path, bandwidth, latency);
if (id != null) {
log.info("Assigned OpticalConnectivityId: {}", id);
@@ -455,7 +460,7 @@
.src(src)
.dst(dst)
.signalType(srcOCPort.signalType())
- .bidirectional(true)
+ .bidirectional(false)
.build();
intents.add(circuitIntent);
} else if (srcPort instanceof OchPort && dstPort instanceof OchPort) {
@@ -471,7 +476,7 @@
.src(src)
.dst(dst)
.signalType(srcOchPort.signalType())
- .bidirectional(true)
+ .bidirectional(false)
.build();
intents.add(opticalIntent);
} else {
@@ -668,16 +673,14 @@
if (hasEnoughBandwidth(l.src()) && hasEnoughBandwidth(l.dst())) {
return 1.0;
} else {
- log.trace("Not enought bandwidth on {}", l);
+ log.trace("Not enough bandwidth on {}", l);
return -1.0;
}
} else {
- // TODO needs to differentiate optical and packet?
- if (l.type() == Link.Type.OPTICAL) {
- // Transport links
- return 1.0;
+ // Use everything except our own indirect links
+ if (l.type() == Link.Type.INDIRECT) {
+ return -1.0;
} else {
- // Packet links
return 1.0;
}
}
@@ -844,7 +847,8 @@
BasicLinkConfig.class);
lnkCfg.isAllowed(true);
lnkCfg.isDurable(true);
- lnkCfg.type(Link.Type.DIRECT);
+ lnkCfg.type(Link.Type.INDIRECT);
+ lnkCfg.isBidirectional(false);
lnkCfg.apply();
} catch (Exception ex) {
log.error("Applying BasicLinkConfig failed", ex);
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java
index 8b17246..614ab90 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java
@@ -123,7 +123,7 @@
for (Link link : intent.path().links()) {
TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder();
- if (!isTransparent(link.src().deviceId())) {
+ if (!isTransparent(current.deviceId())) {
treatmentBuilder.add(Instructions.modL0Lambda(intent.lambda()));
}
treatmentBuilder.setOutput(link.src().port());
@@ -136,6 +136,7 @@
.fromApp(appId)
.makePermanent()
.build();
+ selectorBuilder = DefaultTrafficSelector.builder();
if (!isNoFlowRule(current.deviceId())) {
rules.add(rule);
@@ -143,7 +144,7 @@
current = link.dst();
selectorBuilder.matchInPort(link.dst().port());
- if (!isTransparent(link.dst().deviceId())) {
+ if (!isTransparent(current.deviceId())) {
selectorBuilder.add(Criteria.matchLambda(intent.lambda()));
selectorBuilder.add(Criteria.matchOchSignalType(intent.signalType()));
}
@@ -184,7 +185,7 @@
for (Link link : Lists.reverse(intent.path().links())) {
TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder();
- if (isTransparent(link.dst().deviceId())) {
+ if (!isTransparent(current.deviceId())) {
treatmentBuilder.add(Instructions.modL0Lambda(intent.lambda()));
}
treatmentBuilder.setOutput(link.dst().port());
@@ -197,6 +198,7 @@
.fromApp(appId)
.makePermanent()
.build();
+ selectorBuilder = DefaultTrafficSelector.builder();
if (!isNoFlowRule(current.deviceId())) {
rules.add(rule);
@@ -204,7 +206,7 @@
current = link.src();
selectorBuilder.matchInPort(link.src().port());
- if (isTransparent(link.src().deviceId())) {
+ if (!isTransparent(current.deviceId())) {
selectorBuilder.add(Criteria.matchLambda(intent.lambda()));
selectorBuilder.add(Criteria.matchOchSignalType(intent.signalType()));
}
diff --git a/drivers/lumentum/src/main/resources/lumentum-drivers.xml b/drivers/lumentum/src/main/resources/lumentum-drivers.xml
index 230cc34..d8ec9cd 100644
--- a/drivers/lumentum/src/main/resources/lumentum-drivers.xml
+++ b/drivers/lumentum/src/main/resources/lumentum-drivers.xml
@@ -32,6 +32,9 @@
impl="org.onosproject.drivers.lumentum.LumentumWaveReadyDiscovery"/>
<behaviour api="org.onosproject.net.optical.OpticalDevice"
impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
+ <behaviour api="org.onosproject.net.flow.FlowRuleProgrammable"
+ impl="org.onosproject.driver.optical.config.ConfigFlowRuleProgrammable"/>
+
</driver>
</drivers>