@Override public ExtensionTreatment mapAction(OFAction action) throws UnsupportedOperationException { if (action.getType().equals(OFActionType.EXPERIMENTER)) { OFActionExperimenter actionExp = (OFActionExperimenter) action; if (actionExp.getExperimenter() == ATTENUATION_EXP) { OFActionOplinkAtt actionAtt = (OFActionOplinkAtt) action; return new OplinkAttenuation(((OFOxm<U32>) actionAtt.getField()).getValue().getRaw()); } } return null; }
@Override public ExtensionTreatment mapAction(OFAction action) throws UnsupportedOperationException { if (action.getType().equals(OFActionType.SET_FIELD)) { OFActionSetField setFieldAction = (OFActionSetField) action; OFOxm<?> oxm = setFieldAction.getField(); switch (oxm.getMatchField().id) { case OFDPA_MPLS_TYPE: OFOxmOfdpaMplsType mplsType = (OFOxmOfdpaMplsType) oxm; return new Ofdpa3SetMplsType(mplsType.getValue().getRaw()); case OFDPA_OVID: OFOxmOfdpaOvid ovid = ((OFOxmOfdpaOvid) oxm); short mask = (short) 0x0FFF; 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); } break; case OFDPA_QOS_INDEX: OFOxmOfdpaQosIndex qosindex = ((OFOxmOfdpaQosIndex) oxm); Integer qosIndex = (int) qosindex.getValue().getRaw(); if (qosIndex >= 0 && qosIndex <= 255) { return new Ofdpa3SetQosIndex(qosIndex); } break; default: 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()); }