[Emu] ODU SIGID and SIGTYPE FlowEntryBuilder and FlowModBuilder implementations
Change-Id: I6b332f98dd74250d1cdb289a00780d0d16ae7fb2
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
index 3521ca4..a3182e7 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowModBuilderVer13.java
@@ -19,6 +19,7 @@
import org.onlab.packet.Ip4Address;
import org.onlab.packet.Ip6Address;
import org.onosproject.net.OchSignal;
+import org.onosproject.net.OduSignalId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.driver.DefaultDriverData;
import org.onosproject.net.driver.DefaultDriverHandler;
@@ -35,6 +36,8 @@
import org.onosproject.net.flow.instructions.L0ModificationInstruction;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModLambdaInstruction;
import org.onosproject.net.flow.instructions.L0ModificationInstruction.ModOchSignalInstruction;
+import org.onosproject.net.flow.instructions.L1ModificationInstruction;
+import org.onosproject.net.flow.instructions.L1ModificationInstruction.ModOduSignalIdInstruction;
import org.onosproject.net.flow.instructions.L2ModificationInstruction;
import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModEtherInstruction;
import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModMplsBosInstruction;
@@ -76,6 +79,7 @@
import org.projectfloodlight.openflow.types.OFGroup;
import org.projectfloodlight.openflow.types.OFPort;
import org.projectfloodlight.openflow.types.OFVlanVidMatch;
+import org.projectfloodlight.openflow.types.OduSignalID;
import org.projectfloodlight.openflow.types.TableId;
import org.projectfloodlight.openflow.types.TransportPort;
import org.projectfloodlight.openflow.types.U32;
@@ -234,6 +238,9 @@
case L0MODIFICATION:
actions.add(buildL0Modification(i));
break;
+ case L1MODIFICATION:
+ actions.add(buildL1Modification(i));
+ break;
case L2MODIFICATION:
actions.add(buildL2Modification(i));
break;
@@ -303,20 +310,31 @@
private OFAction buildL0Modification(Instruction i) {
L0ModificationInstruction l0m = (L0ModificationInstruction) i;
+ OFOxm<?> oxm = null;
switch (l0m.subtype()) {
case LAMBDA:
return buildModLambdaInstruction((ModLambdaInstruction) i);
case OCH:
try {
- return buildModOchSignalInstruction((ModOchSignalInstruction) i);
+ ModOchSignalInstruction modOchSignalInstruction = (ModOchSignalInstruction) l0m;
+ OchSignal signal = modOchSignalInstruction.lambda();
+ byte gridType = OpenFlowValueMapper.lookupGridType(signal.gridType());
+ byte channelSpacing = OpenFlowValueMapper.lookupChannelSpacing(signal.channelSpacing());
+ oxm = factory().oxms().expOchSigId(
+ new CircuitSignalID(gridType, channelSpacing,
+ (short) signal.spacingMultiplier(), (short) signal.slotGranularity()));
} catch (NoMappingFoundException e) {
log.warn(e.getMessage());
break;
}
+ break;
default:
log.warn("Unimplemented action type {}.", l0m.subtype());
break;
}
+ if (oxm != null) {
+ return factory().actions().buildSetField().setField(oxm).build();
+ }
return null;
}
@@ -336,6 +354,31 @@
));
}
+ private OFAction buildL1Modification(Instruction i) {
+ L1ModificationInstruction l1m = (L1ModificationInstruction) i;
+ OFOxm<?> oxm = null;
+ switch (l1m.subtype()) {
+ case ODU_SIGID:
+ ModOduSignalIdInstruction modOduSignalIdInstruction = (ModOduSignalIdInstruction) l1m;
+ OduSignalId oduSignalId = modOduSignalIdInstruction.oduSignalId();
+
+ OduSignalID oduSignalID = new OduSignalID((short) oduSignalId.tributaryPortNumber(),
+ (short) oduSignalId.tributarySlotLength(),
+ oduSignalId.tributarySlotBitmap());
+
+ oxm = factory().oxms().expOduSigId(oduSignalID);
+ break;
+ default:
+ log.warn("Unimplemented action type {}.", l1m.subtype());
+ break;
+ }
+
+ if (oxm != null) {
+ return factory().actions().buildSetField().setField(oxm).build();
+ }
+ return null;
+ }
+
private OFAction buildL2Modification(Instruction i) {
L2ModificationInstruction l2m = (L2ModificationInstruction) i;
ModEtherInstruction eth;