import org.projectfloodlight.openflow.types.U8; //導入依賴的package包/類
@Override
public OFAction mapInstruction(OFFactory factory, ExtensionTreatment extensionTreatment) {
ExtensionTreatmentType type = extensionTreatment.type();
if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_MPLS_TYPE.type())) {
short mplsType = ((Ofdpa3SetMplsType) extensionTreatment).mplsType();
return factory.actions().setField(factory.oxms().ofdpaMplsType(
U16.ofRaw(mplsType)));
} else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_OVID.type())) {
// OFDPA requires isPresent bit set to 1 for OVID.
VlanId vlanId = ((Ofdpa3SetOvid) extensionTreatment).vlanId();
short mask = (short) 0x1000;
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());
} else if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.OFDPA_SET_QOS_INDEX.type())) {
Integer qosIndex = ((Ofdpa3SetQosIndex) extensionTreatment).qosIndex();
/*
* Qos index is a single byte [0...255]
*/
if (qosIndex >= 0 && qosIndex <= 255) {
return factory.actions().setField(
factory.oxms().ofdpaQosIndex(U8.ofRaw((byte) (qosIndex & 0xFF)))
);
}
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());
}