import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
-
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public final class MeterConvertor {
+ private static final Logger logger = LoggerFactory.getLogger(MeterConvertor.class);
+ private static final String PREFIX_SEPARATOR = "/";
private MeterConvertor() {
MeterFlags flags = null;
if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput)
meterModInputBuilder.setCommand(MeterModCommand.OFPMCADD);
- if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput)
+ else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput)
meterModInputBuilder.setCommand(MeterModCommand.OFPMCDELETE);
- if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput)
+ else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput)
meterModInputBuilder.setCommand(MeterModCommand.OFPMCMODIFY);
meterModInputBuilder.setMeterId(new MeterId(source.getMeterId().getValue()));
- meterModInputBuilder.setFlags(flags = new MeterFlags(source.getFlags().isMeterBurst(), source.getFlags()
- .isMeterKbps(), source.getFlags().isMeterPktps(), source.getFlags().isMeterStats()));
- getBandsFromSAL(source.getMeterBandHeaders(), bands);
+ if (source.getFlags() != null) {
+ meterModInputBuilder.setFlags(flags = new MeterFlags(source.getFlags().isMeterBurst(), source.getFlags()
+ .isMeterKbps(), source.getFlags().isMeterPktps(), source.getFlags().isMeterStats()));
+ } else {
+
+ /*
+ * As per 0F1.3.1,The rate field indicates the rate value above
+ * which the corresponding band may apply to packets (see 5.7.1).
+ * The rate value is in kilobit per seconds, unless the flags eld
+ * includes OFPMF_PKTPS, in which case the rate is in packets per
+ * seconds.
+ */
+
+ meterModInputBuilder.setFlags(flags = new MeterFlags(false, false, true, false));
+ }
+ if (source.getMeterBandHeaders() != null) {
+ getBandsFromSAL(source.getMeterBandHeaders(), bands);
+ } else {
+ logger.error("For this meter Id" + source.getMeterId().getValue() + ",no associated band data found!");
+ }
+
meterModInputBuilder.setBands(bands);
meterModInputBuilder.setVersion(version);
return meterModInputBuilder.build();
meterBandHeader = bandHeadersIterator.next();
MeterBand meterBandItem = null;
// The band types :drop,DSCP_Remark or experimenter.
-
- if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDrop()) {
-
- MeterBandDropBuilder meterBandDropBuilder = new MeterBandDropBuilder();
- meterBandDropBuilder.setType(MeterBandType.OFPMBTDROP);
-
- Drop drop = (Drop) meterBandHeader.getBandType();
-
- meterBandDropBuilder.setBurstSize(drop.getRate());
- meterBandDropBuilder.setRate(drop.getBurstSize());
- meterBandItem = meterBandDropBuilder.build();
-
- } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDscpRemark()) {
- MeterBandDscpRemarkBuilder meterBandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder();
- meterBandDscpRemarkBuilder.setType(MeterBandType.OFPMBTDSCPREMARK);
-
- DscpRemark dscpRemark = (DscpRemark) meterBandHeader.getBandType();
-
- meterBandDscpRemarkBuilder.setBurstSize(dscpRemark.getBurstSize());
- meterBandDscpRemarkBuilder.setRate(dscpRemark.getRate());
- meterBandDscpRemarkBuilder.setPrecLevel(dscpRemark.getPercLevel());
- meterBandItem = meterBandDscpRemarkBuilder.build();
-
- } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtExperimenter()) {
- MeterBandExperimenterBuilder meterBandExperimenterBuilder = new MeterBandExperimenterBuilder();
- meterBandExperimenterBuilder.setType(MeterBandType.OFPMBTEXPERIMENTER);
- Experimenter experimenter = (Experimenter) meterBandHeader.getBandType();
- meterBandExperimenterBuilder.setBurstSize(experimenter.getBurstSize());
- meterBandExperimenterBuilder.setRate(experimenter.getRate());
- meterBandExperimenterBuilder.setExperimenter(experimenter.getExperimenter());
- meterBandItem = meterBandExperimenterBuilder.build();
-
+ if (null != meterBandHeader.getMeterBandTypes() && null != meterBandHeader.getMeterBandTypes().getFlags()) {
+
+ if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDrop()) {
+ if (meterBandHeader.getBandType() != null) {
+ MeterBandDropBuilder meterBandDropBuilder = new MeterBandDropBuilder();
+ meterBandDropBuilder.setType(MeterBandType.OFPMBTDROP);
+
+ Drop drop = (Drop) meterBandHeader.getBandType();
+
+ meterBandDropBuilder.setBurstSize(drop.getRate());
+ meterBandDropBuilder.setRate(drop.getBurstSize());
+ meterBandItem = meterBandDropBuilder.build();
+ bandsB = new BandsBuilder();
+ bandsB.setMeterBand(meterBandItem).build();
+
+ bands.add(bandsB.build()); // Bands list
+
+ } else {
+ logger.error("BandType: " + MeterBandType.OFPMBTDROP + "No Band Data found");
+ }
+ } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDscpRemark()) {
+ if (meterBandHeader.getBandType() != null) {
+ MeterBandDscpRemarkBuilder meterBandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder();
+ meterBandDscpRemarkBuilder.setType(MeterBandType.OFPMBTDSCPREMARK);
+
+ DscpRemark dscpRemark = (DscpRemark) meterBandHeader.getBandType();
+
+ meterBandDscpRemarkBuilder.setBurstSize(dscpRemark.getBurstSize());
+ meterBandDscpRemarkBuilder.setRate(dscpRemark.getRate());
+ meterBandDscpRemarkBuilder.setPrecLevel(dscpRemark.getPercLevel());
+ meterBandItem = meterBandDscpRemarkBuilder.build();
+ bandsB = new BandsBuilder();
+ bandsB.setMeterBand(meterBandItem).build();
+
+ bands.add(bandsB.build()); // Bands list
+
+ } else {
+ logger.error("BandType: " + MeterBandType.OFPMBTDSCPREMARK + "No Band Data found");
+ }
+ } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtExperimenter()) {
+ if (meterBandHeader.getBandType() != null) {
+ MeterBandExperimenterBuilder meterBandExperimenterBuilder = new MeterBandExperimenterBuilder();
+ meterBandExperimenterBuilder.setType(MeterBandType.OFPMBTEXPERIMENTER);
+ Experimenter experimenter = (Experimenter) meterBandHeader.getBandType();
+ meterBandExperimenterBuilder.setBurstSize(experimenter.getBurstSize());
+ meterBandExperimenterBuilder.setRate(experimenter.getRate());
+ meterBandExperimenterBuilder.setExperimenter(experimenter.getExperimenter());
+ meterBandItem = meterBandExperimenterBuilder.build();
+ bandsB = new BandsBuilder();
+ bandsB.setMeterBand(meterBandItem).build();
+
+ bands.add(bandsB.build()); // Bands list
+
+ } else {
+ logger.error("BandType: " + MeterBandType.OFPMBTEXPERIMENTER + "No Band Data found");
+ }
+ }
+
+ } else {
+ logger.error("Invalid meter band data found.");
}
-
- bandsB = new BandsBuilder();
- bandsB.setMeterBand(meterBandItem).build();
-
- bands.add(bandsB.build()); // Bands list
-
}
}
MeterBandType bandFlag2 = new MeterBandType(false, false, true);
meterBandTypesB2.setFlags(bandFlag2);
+ ExperimenterBuilder exp = new ExperimenterBuilder();
+ exp.setBurstSize(12L);
+ exp.setRate(22L);
+ exp.setExperimenter(23L);
+ Experimenter experimenter = exp.build();
+ meterBandHeaderBuilder2.setBandType(experimenter);
+ meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
+ MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
+
+ List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
+ meterBandList.add(0, meterBH);
+ meterBandList.add(1, meterBH1);
+ meterBandList.add(2, meterBH2);
+
+ // Constructing List of Bands
+ MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
+ meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
+
+ MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
+
+ AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+ addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
+ // added to the
+ // meter command.
+ Long temp = 10L;
+
+ // NodeKey key = new NodeKey(new NodeId("24"));
+ // InstanceIdentifier<Node> path =
+ // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+ // key).toInstance();
+
+ addMeterFromSAL
+ .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+ MeterFlags flagV = new MeterFlags(true, true, true, true);
+ addMeterFromSAL.setFlags(flagV);
+
+ AddMeterInput meterInputCommand = addMeterFromSAL.build();
+ MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
+
+ Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+ Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
+ Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
+ // BandInformation starts here:
+
+ List<Bands> bands = outMeterModInput.getBands();
+ for (Bands currentBand : bands) {
+ MeterBand meterBand = currentBand.getMeterBand();
+ if (meterBand instanceof MeterBandDrop) {
+
+ Assert.assertEquals(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
+ ((MeterBandDrop) meterBand).getType());
+ Assert.assertEquals((long) 20, (long) ((MeterBandDrop) meterBand).getBurstSize());
+ Assert.assertEquals((long) 10, (long) ((MeterBandDrop) meterBand).getRate());
+
+ }
+ if (meterBand instanceof MeterBandDscpRemark) {
+ Assert.assertEquals(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
+ ((MeterBandDscpRemark) meterBand).getType());
+ Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemark) meterBand).getBurstSize());
+ Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemark) meterBand).getRate());
+ Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemark) meterBand).getPrecLevel());
+
+ }
+ if (meterBand instanceof MeterBandExperimenter) {
+ Assert.assertEquals(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
+ ((MeterBandExperimenter) meterBand).getType());
+ Assert.assertEquals((long) 12, (long) ((MeterBandExperimenter) meterBand).getBurstSize());
+ Assert.assertEquals((long) 22, (long) ((MeterBandExperimenter) meterBand).getRate());
+ Assert.assertEquals((long) 23, (long) ((MeterBandExperimenter) meterBand).getExperimenter());
+
+ }
+
+ }
+
+ }
+ @Test
+ public void testMeterModCommandConvertorwithNoFlags() {
+
+ // / DROP Band
+ MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+ MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
+
+ MeterBandType bandFlag = new MeterBandType(true, false, false);
+ meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
+ DropBuilder drop = new DropBuilder();
+ drop.setBurstSize(10L);
+ drop.setRate(20L);
+ Drop drp = drop.build();
+ meterBandHeaderBuilder.setBandType(drp);
+ meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
+
+ MeterBandHeader meterBH = meterBandHeaderBuilder.build();
+
+ // DSCP Mark
+ MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
+ MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
+ MeterBandType bandFlag1 = new MeterBandType(false, true, false);
+
+ meterBandTypesB1.setFlags(bandFlag1);
+ DscpRemarkBuilder dscp = new DscpRemarkBuilder();
+ dscp.setBurstSize(11L);
+ dscp.setRate(21L);
+ dscp.setPercLevel((short) 1);
+ DscpRemark dscpRemark = dscp.build();
+ meterBandHeaderBuilder1.setBandType(dscpRemark);
+ meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
+
+ MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
+
+ // Experimental
+
+ MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
+ MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
+ MeterBandType bandFlag2 = new MeterBandType(false, false, true);
+ meterBandTypesB2.setFlags(bandFlag2);
+
+ ExperimenterBuilder exp = new ExperimenterBuilder();
+ exp.setBurstSize(12L);
+ exp.setRate(22L);
+ exp.setExperimenter(23L);
+ Experimenter experimenter = exp.build();
+ meterBandHeaderBuilder2.setBandType(experimenter);
+ meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
+ MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
+
+ List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
+ meterBandList.add(0, meterBH);
+ meterBandList.add(1, meterBH1);
+ meterBandList.add(2, meterBH2);
+
+ // Constructing List of Bands
+ MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
+ meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
+
+ MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
+
+ AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+ addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
+ // added to the
+ // meter command.
+ Long temp = 10L;
+
+ // NodeKey key = new NodeKey(new NodeId("24"));
+ // InstanceIdentifier<Node> path =
+ // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+ // key).toInstance();
+
+ addMeterFromSAL
+ .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+
+
+ AddMeterInput meterInputCommand = addMeterFromSAL.build();
+ MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
+
+ Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+ Assert.assertFalse(outMeterModInput.getFlags().isOFPMFBURST());
+ Assert.assertTrue(outMeterModInput.getFlags().isOFPMFPKTPS());
+ Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
+ // BandInformation starts here:
+
+ List<Bands> bands = outMeterModInput.getBands();
+ for (Bands currentBand : bands) {
+ MeterBand meterBand = currentBand.getMeterBand();
+ if (meterBand instanceof MeterBandDrop) {
+
+ Assert.assertEquals(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
+ ((MeterBandDrop) meterBand).getType());
+ Assert.assertEquals((long) 20, (long) ((MeterBandDrop) meterBand).getBurstSize());
+ Assert.assertEquals((long) 10, (long) ((MeterBandDrop) meterBand).getRate());
+
+ }
+ if (meterBand instanceof MeterBandDscpRemark) {
+ Assert.assertEquals(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
+ ((MeterBandDscpRemark) meterBand).getType());
+ Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemark) meterBand).getBurstSize());
+ Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemark) meterBand).getRate());
+ Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemark) meterBand).getPrecLevel());
+
+ }
+ if (meterBand instanceof MeterBandExperimenter) {
+ Assert.assertEquals(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
+ ((MeterBandExperimenter) meterBand).getType());
+ Assert.assertEquals((long) 12, (long) ((MeterBandExperimenter) meterBand).getBurstSize());
+ Assert.assertEquals((long) 22, (long) ((MeterBandExperimenter) meterBand).getRate());
+ Assert.assertEquals((long) 23, (long) ((MeterBandExperimenter) meterBand).getExperimenter());
+
+ }
+
+ }
+
+ }
+ @Test
+ public void testMeterModCommandConvertorBandDataisNULL() {
+
+
+ AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+ Long temp = 10L;
+
+ // NodeKey key = new NodeKey(new NodeId("24"));
+ // InstanceIdentifier<Node> path =
+ // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+ // key).toInstance();
+
+ addMeterFromSAL
+ .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+ MeterFlags flagV = new MeterFlags(true, true, true, true);
+ addMeterFromSAL.setFlags(flagV);
+
+ AddMeterInput meterInputCommand = addMeterFromSAL.build();
+ MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
+
+ Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+ Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
+ Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
+ }
+
+ @Test
+ public void testMeterModCommandConvertorNoValidBandData() {
+
+ // / DROP Band
+ MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+ MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
+
+ MeterBandType bandFlag = new MeterBandType(true, false, false);
+ meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
+
+ meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
+
+ MeterBandHeader meterBH = meterBandHeaderBuilder.build();
+
+ // DSCP Mark
+ MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
+ MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
+ MeterBandType bandFlag1 = new MeterBandType(false, true, false);
+
+ meterBandTypesB1.setFlags(bandFlag1);
+ DscpRemarkBuilder dscp = new DscpRemarkBuilder();
+ dscp.setBurstSize(11L);
+ dscp.setRate(21L);
+ dscp.setPercLevel((short) 1);
+ DscpRemark dscpRemark = dscp.build();
+ meterBandHeaderBuilder1.setBandType(dscpRemark);
+ meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
+
+ MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
+
+ // Experimental
+
+ MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
+ MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
+
+
ExperimenterBuilder exp = new ExperimenterBuilder();
exp.setBurstSize(12L);
exp.setRate(22L);
}
-}
+}
\ No newline at end of file