[CORD-545] Adds MPLS L2 Port support in ONOS core
Change-Id: I61d9b2c14580b4995fdcc96571745bfd00ee586f
diff --git a/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3ExtensionTreatmentInterpreter.java b/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3ExtensionTreatmentInterpreter.java
index afdb29f..c449702 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3ExtensionTreatmentInterpreter.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/extensions/Ofdpa3ExtensionTreatmentInterpreter.java
@@ -27,9 +27,11 @@
import org.projectfloodlight.openflow.protocol.action.OFAction;
import org.projectfloodlight.openflow.protocol.action.OFActionSetField;
import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
+import org.projectfloodlight.openflow.protocol.oxm.OFOxmOfdpaMplsL2Port;
import org.projectfloodlight.openflow.protocol.oxm.OFOxmOfdpaMplsType;
import org.projectfloodlight.openflow.protocol.oxm.OFOxmOfdpaOvid;
import org.projectfloodlight.openflow.types.U16;
+import org.projectfloodlight.openflow.types.U32;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,6 +51,9 @@
} else if (extensionTreatmentType.equals(
ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_OVID.type())) {
return true;
+ } else if (extensionTreatmentType.equals(
+ ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_MPLS_L2_PORT.type())) {
+ return true;
}
return false;
}
@@ -67,6 +72,20 @@
short oVid = (short) (mask | vlanId.toShort());
return factory.actions().setField(factory.oxms().ofdpaOvid(
U16.ofRaw(oVid)));
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_MPLS_L2_PORT.type())) {
+ Integer mplsL2Port = ((Ofdpa3SetMplsL2Port) extensionTreatment).mplsL2Port();
+ /*
+ * 0x0000XXXX UNI Interface.
+ * 0x0002XXXX NNI Interface
+ */
+ if ((mplsL2Port >= 0 && mplsL2Port <= 0x0000FFFF) ||
+ (mplsL2Port >= 0x00020000 && mplsL2Port <= 0x0002FFFF)) {
+ return factory.actions().setField(
+ factory.oxms().ofdpaMplsL2Port(U32.ofRaw(mplsL2Port))
+ );
+ }
+ throw new UnsupportedOperationException(
+ "Unexpected ExtensionTreatment: " + extensionTreatment.toString());
}
throw new UnsupportedOperationException(
"Unexpected ExtensionTreatment: " + extensionTreatment.toString());
@@ -87,6 +106,13 @@
short oVid = (short) (mask & ovid.getValue().getRaw());
VlanId vlanId = VlanId.vlanId(oVid);
return new Ofdpa3SetOvid(vlanId);
+ case OFDPA_MPLS_L2_PORT:
+ OFOxmOfdpaMplsL2Port mplsl2Port = ((OFOxmOfdpaMplsL2Port) oxm);
+ Integer mplsL2Port = mplsl2Port.getValue().getRaw();
+ if ((mplsL2Port >= 0 && mplsL2Port <= 0x0000FFFF) ||
+ (mplsL2Port >= 0x00020000 && mplsL2Port <= 0x0002FFFF)) {
+ return new Ofdpa3SetMplsL2Port(mplsL2Port);
+ }
default:
throw new UnsupportedOperationException(
"Driver does not support extension type " + oxm.getMatchField().id);
@@ -102,6 +128,8 @@
return new Ofdpa3SetMplsType();
} else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_OVID.type())) {
return new Ofdpa3SetOvid();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_MPLS_L2_PORT.type())) {
+ return new Ofdpa3SetMplsL2Port();
}
throw new UnsupportedOperationException(
"Driver does not support extension type " + type.toString());