Bidirectional optical intents (ONOS-2055).
Removed dead code.
Bugfix in device resource store.
Change-Id: Ic81e0b6985813d8dd696440610bee967a9fc2fc7
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
index 4da6d4f..fc62b25 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/compiler/OpticalCircuitIntentCompiler.java
@@ -136,15 +136,23 @@
.src(srcCP)
.dst(dstCP)
.signalType(OduSignalType.ODU4)
+ .bidirectional(intent.isBidirectional())
.build();
intents.add(connIntent);
}
// Create optical circuit intent
- circuitIntent = new FlowRuleIntent(
- appId,
- createRules(src, connIntent.getSrc(), dst, connIntent.getDst()),
- intent.resources());
+ List<FlowRule> rules = new LinkedList<>();
+ rules.add(connectPorts(src, connIntent.getSrc()));
+ rules.add(connectPorts(connIntent.getDst(), dst));
+
+ // Create flow rules for reverse path
+ if (intent.isBidirectional()) {
+ rules.add(connectPorts(connIntent.getSrc(), src));
+ rules.add(connectPorts(dst, connIntent.getDst()));
+ }
+
+ circuitIntent = new FlowRuleIntent(appId, rules, intent.resources());
// Save circuit to connectivity intent mapping
deviceResourceService.requestMapping(connIntent.id(), circuitIntent.id());
@@ -236,25 +244,25 @@
}
/**
- * Builds flow rules for mapping between ODU and OCh ports.
+ * Builds flow rule for mapping between two ports.
*
- * @param srcOdu
- * @param dstOdu
- * @return
+ * @param src source port
+ * @param dst destination port
+ * @return flow rules
*/
- private List<FlowRule> createRules(ConnectPoint srcOdu, ConnectPoint srcOch,
- ConnectPoint dstOdu, ConnectPoint dstOch) {
+ private FlowRule connectPorts(ConnectPoint src, ConnectPoint dst) {
+ checkArgument(src.deviceId().equals(dst.deviceId()));
+
TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder();
TrafficTreatment.Builder treatmentBuilder = DefaultTrafficTreatment.builder();
- // Source flow rule
- selectorBuilder.matchInPort(srcOdu.port());
+ selectorBuilder.matchInPort(src.port());
//selectorBuilder.add(Criteria.matchCltSignalType)
- treatmentBuilder.setOutput(srcOch.port());
+ treatmentBuilder.setOutput(dst.port());
//treatmentBuilder.add(Instructions.modL1OduSignalType)
- FlowRule srcRule = DefaultFlowRule.builder()
- .forDevice(srcOdu.deviceId())
+ FlowRule flowRule = DefaultFlowRule.builder()
+ .forDevice(src.deviceId())
.withSelector(selectorBuilder.build())
.withTreatment(treatmentBuilder.build())
.withPriority(100)
@@ -262,21 +270,6 @@
.makePermanent()
.build();
- // Destination flow rule
- selectorBuilder.matchInPort(dstOch.port());
- //selectorBuilder.add(Criteria.matchOduSignalType)
- treatmentBuilder.setOutput(dstOdu.port());
- //treatmentBuilder.add(Instructions.modL1CltSignalType)
-
- FlowRule dstRule = DefaultFlowRule.builder()
- .forDevice(dstOdu.deviceId())
- .withSelector(selectorBuilder.build())
- .withTreatment(treatmentBuilder.build())
- .withPriority(100)
- .fromApp(appId)
- .makePermanent()
- .build();
-
- return Arrays.<FlowRule>asList(srcRule, dstRule);
+ return flowRule;
}
}