[CORD-545] Adds ofdpa actions in ONOS core
Change-Id: I98edc27162d7309b9d21f2c939430608e3e85c6e
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 067e294..907111c 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
@@ -25,6 +25,8 @@
import org.projectfloodlight.openflow.protocol.OFActionType;
import org.projectfloodlight.openflow.protocol.OFFactory;
import org.projectfloodlight.openflow.protocol.action.OFAction;
+import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter;
+import org.projectfloodlight.openflow.protocol.action.OFActionOfdpa;
import org.projectfloodlight.openflow.protocol.action.OFActionSetField;
import org.projectfloodlight.openflow.protocol.oxm.OFOxm;
import org.projectfloodlight.openflow.protocol.oxm.OFOxmOfdpaMplsL2Port;
@@ -43,6 +45,12 @@
public class Ofdpa3ExtensionTreatmentInterpreter extends AbstractHandlerBehaviour
implements ExtensionTreatmentInterpreter, ExtensionTreatmentResolver {
+ private static final int TYPE_OFDPA = 0x1018;
+ private static final int SUB_TYPE_PUSH_L2_HEADER = 1;
+ private static final int SUB_TYPE_POP_L2_HEADER = 2;
+ private static final int SUB_TYPE_PUSH_CW = 3;
+ private static final int SUB_TYPE_POP_CW = 4;
+
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
@@ -59,6 +67,18 @@
} else if (extensionTreatmentType.equals(
ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_QOS_INDEX.type())) {
return true;
+ } else if (extensionTreatmentType.equals(
+ ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_PUSH_L2_HEADER.type())) {
+ return true;
+ } else if (extensionTreatmentType.equals(
+ ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_PUSH_CW.type())) {
+ return true;
+ } else if (extensionTreatmentType.equals(
+ ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_POP_L2_HEADER.type())) {
+ return true;
+ } else if (extensionTreatmentType.equals(
+ ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_POP_CW.type())) {
+ return true;
}
return false;
}
@@ -103,6 +123,14 @@
}
throw new UnsupportedOperationException(
"Unexpected ExtensionTreatment: " + extensionTreatment.toString());
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_PUSH_L2_HEADER.type())) {
+ return factory.actions().ofdpaPushL2Header();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_PUSH_CW.type())) {
+ return factory.actions().ofdpaPushCw();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_POP_L2_HEADER.type())) {
+ return factory.actions().ofdpaPopL2Header();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_POP_CW.type())) {
+ return factory.actions().ofdpaPopCw();
}
throw new UnsupportedOperationException(
"Unexpected ExtensionTreatment: " + extensionTreatment.toString());
@@ -142,6 +170,26 @@
throw new UnsupportedOperationException(
"Driver does not support extension type " + oxm.getMatchField().id);
}
+ } else if (action.getType().equals(OFActionType.EXPERIMENTER)) {
+ OFActionExperimenter experimenter = (OFActionExperimenter) action;
+ if (Long.valueOf(experimenter.getExperimenter()).intValue() == TYPE_OFDPA) {
+ OFActionOfdpa ofdpa = (OFActionOfdpa) experimenter;
+ switch (ofdpa.getExpType()) {
+ case SUB_TYPE_PUSH_L2_HEADER:
+ return new Ofdpa3PushL2Header();
+ case SUB_TYPE_POP_L2_HEADER:
+ return new Ofdpa3PopL2Header();
+ case SUB_TYPE_PUSH_CW:
+ return new Ofdpa3PushCw();
+ case SUB_TYPE_POP_CW:
+ return new Ofdpa3PopCw();
+ default:
+ throw new UnsupportedOperationException(
+ "Unexpected OFAction: " + action.toString());
+ }
+ }
+ throw new UnsupportedOperationException(
+ "Unexpected OFAction: " + action.toString());
}
throw new UnsupportedOperationException(
"Unexpected OFAction: " + action.toString());
@@ -157,6 +205,14 @@
return new Ofdpa3SetMplsL2Port();
} else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_QOS_INDEX.type())) {
return new Ofdpa3SetQosIndex();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_PUSH_L2_HEADER.type())) {
+ return new Ofdpa3PushL2Header();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_PUSH_CW.type())) {
+ return new Ofdpa3PushCw();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_POP_L2_HEADER.type())) {
+ return new Ofdpa3PopL2Header();
+ } else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_POP_CW.type())) {
+ return new Ofdpa3PopCw();
}
throw new UnsupportedOperationException(
"Driver does not support extension type " + type.toString());