-
- private static List<Bands> bands;
- private static MeterModInputBuilder meterModInputBuilder;
- private static MeterFlags flags;
- private MeterConvertor(){
-
- }
-
- //Get all the data for the meter from the Yang/SAL-Layer
- /**
- * @param Yang Data source
- * @return MeterModInput required by OF Library
- */
- public static MeterModInput toMeterModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter source ) {
-
- meterModInputBuilder = new MeterModInputBuilder();
-
-
- 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)
- meterModInputBuilder.setCommand(MeterModCommand.OFPMCDELETE);
- 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()));
-
- getFlagsFromSAL(source.getFlags());
- meterModInputBuilder.setFlags(flags);
- getBandsFromSAL(source.getMeterBandHeaders());
- meterModInputBuilder.setBands(bands);
- return meterModInputBuilder.build();
- }
-
-
-
- private static void getBandsFromSAL(MeterBandHeaders meterBandHeaders) {
-
- Iterator <MeterBandHeader> bandHeadersIterator = meterBandHeaders.getMeterBandHeader().iterator();
- MeterBandHeader meterBandHeader;
-
- BandsBuilder bandsB = null;
- //MeterBandHeaderBuilder meterBandHeaderBuilder = null ;
- bands = new ArrayList<Bands>();
- while(bandHeadersIterator.hasNext())
- {
- meterBandHeader = bandHeadersIterator.next();
- MeterBand meterBandItem = null;
- //The band types :drop,DSCP_Remark or experimenter.
- //meterBandHeaderBuilder = new MeterBandHeaderBuilder();
-
-
- 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();
-
- }
-
- bandsB = new BandsBuilder();
- bandsB.setMeterBand(meterBandItem).build();
-
- bands.add(bandsB.build()); //Bands list
-
-
- }
-
- }
-
- //get it from plugin(SAL) layer
- private static void getFlagsFromSAL(Flags flags2) {
- boolean meterBurst_SAL = false;
- boolean meterKbps_SAL = false;
- boolean meterPktps_SAL = false;
- boolean meterStats_SAL = false;
-
-
- if(flags2.isMeterBurst()) meterBurst_SAL = true;
- if(flags2.isMeterKbps()) meterKbps_SAL = true;
- if(flags2.isMeterPktps()) meterPktps_SAL = true;
- if(flags2.isMeterStats()) meterStats_SAL = true;
-
- flags = new MeterFlags(meterBurst_SAL,meterKbps_SAL,meterPktps_SAL,meterStats_SAL);
-
-
- }
-
+ private static final Logger logger = LoggerFactory.getLogger(MeterConvertor.class);
+ private static final String PREFIX_SEPARATOR = "/";
+
+ private MeterConvertor() {
+
+ }
+
+ // Get all the data for the meter from the Yang/SAL-Layer
+ /**
+ * @param version
+ * @param Yang
+ * Data source
+ * @return MeterModInput required by OF Library
+ */
+ public static MeterModInputBuilder toMeterModInput(
+ org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter source, short version) {
+
+ MeterModInputBuilder meterModInputBuilder = new MeterModInputBuilder();
+ List<Bands> bands = new ArrayList<Bands>();
+
+ if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput) {
+ meterModInputBuilder.setCommand(MeterModCommand.OFPMCADD);
+ } else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput) {
+ meterModInputBuilder.setCommand(MeterModCommand.OFPMCDELETE);
+ } else if (source instanceof UpdatedMeter) {
+ meterModInputBuilder.setCommand(MeterModCommand.OFPMCMODIFY);
+ }
+
+ meterModInputBuilder.setMeterId(new MeterId(source.getMeterId().getValue()));
+
+ if (null != source.getFlags()) {
+ meterModInputBuilder.setFlags(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(new MeterFlags(false, false, true, false));
+ }
+ if (source.getMeterBandHeaders() != null) {
+ getBandsFromSAL(source.getMeterBandHeaders(), bands);
+ meterModInputBuilder.setBands(bands);
+ } else {
+ logger.error("For this meter Id" + source.getMeterId().getValue() + ",no associated band data found!");
+ }
+
+ meterModInputBuilder.setVersion(version);
+ return meterModInputBuilder;
+ }
+
+ private static void getBandsFromSAL(MeterBandHeaders meterBandHeaders, List<Bands> bands) {
+
+ Iterator<MeterBandHeader> bandHeadersIterator = meterBandHeaders.getMeterBandHeader().iterator();
+ MeterBandHeader meterBandHeader;
+
+ BandsBuilder bandsB = null;
+
+ while (bandHeadersIterator.hasNext()) {
+ meterBandHeader = bandHeadersIterator.next();
+ MeterBand meterBandItem = null;
+ // The band types :drop,DSCP_Remark or experimenter.
+ if (null != meterBandHeader.getMeterBandTypes() &&
+ null != meterBandHeader.getMeterBandTypes().getFlags()) {
+
+ if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDrop()) {
+ if (meterBandHeader.getBandType() != null) {
+ MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
+ MeterBandDropBuilder meterBandDropBuilder = new MeterBandDropBuilder();
+ meterBandDropBuilder.setType(MeterBandType.OFPMBTDROP);
+ Drop drop = (Drop) meterBandHeader.getBandType();
+ meterBandDropBuilder.setBurstSize(drop.getRate());
+ meterBandDropBuilder.setRate(drop.getBurstSize());
+ dropCaseBuilder.setMeterBandDrop(meterBandDropBuilder.build());
+ meterBandItem = dropCaseBuilder.build();
+ bandsB = new BandsBuilder();
+ bandsB.setMeterBand(meterBandItem);
+ 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) {
+ MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
+ 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());
+ dscpCaseBuilder.setMeterBandDscpRemark(meterBandDscpRemarkBuilder.build());
+ meterBandItem = dscpCaseBuilder.build();
+ bandsB = new BandsBuilder();
+ bandsB.setMeterBand(meterBandItem);
+ 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) {
+ MeterBandExperimenterCaseBuilder experimenterCaseBuilder = new MeterBandExperimenterCaseBuilder();
+ 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());
+ experimenterCaseBuilder.setMeterBandExperimenter(meterBandExperimenterBuilder.build());
+ meterBandItem = experimenterCaseBuilder.build();
+ bandsB = new BandsBuilder();
+ bandsB.setMeterBand(meterBandItem);
+ bands.add(bandsB.build()); // Bands list
+
+ } else {
+ logger.error("BandType: " + MeterBandType.OFPMBTEXPERIMENTER + "No Band Data found");
+ }
+ }
+
+ } else {
+ logger.error("Invalid meter band data found.");
+ }
+ }
+
+ }