2 * Copyright IBM Corporation, 2013. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
11 import java.util.ArrayList;
12 import java.util.List;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter32;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter64;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.DurationBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.MeterBandStatsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
49 * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
51 * @author avishnoi@in.ibm.com
54 public class MeterStatsResponseConvertor {
57 * Method converts list of OF Meter Stats to SAL Meter Stats.
58 * @param allMeterStats
59 * @return List of MeterStats
61 public List<MeterStats> toSALMeterStatsList(
62 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
63 .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats> allMeterStats){
64 List<MeterStats> convertedSALMeters = new ArrayList<MeterStats>();
65 for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
66 multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meter: allMeterStats){
67 convertedSALMeters.add(toSALMeterStats(meter));
69 return convertedSALMeters;
74 * Method convert MeterStats message from library to MD SAL defined MeterStats
75 * @param meterStats MeterStats from library
76 * @return MeterStats -- MeterStats defined in MD-SAL
78 public MeterStats toSALMeterStats(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
79 .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats){
81 MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
82 salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
84 DurationBuilder time = new DurationBuilder();
85 time.setSecond(new Counter32(meterStats.getDurationSec()));
86 time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
87 salMeterStats.setDuration(time.build());
89 salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
90 salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
91 salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
92 salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId()));
94 List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
96 MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
97 List<BandStat> listAllBandStats = new ArrayList<BandStat>();
99 for(MeterBandStats meterBandStats : allMeterBandStats){
100 BandStatBuilder bandStatBuilder = new BandStatBuilder();
101 bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
102 bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
103 BandId bandId = new BandId((long) bandKey);
104 bandStatBuilder.setKey(new BandStatKey(bandId));
105 bandStatBuilder.setBandId(bandId);
107 listAllBandStats.add(bandStatBuilder.build());
109 meterBandStatsBuilder.setBandStat(listAllBandStats);
110 salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
111 return salMeterStats.build();
115 * Method convert list of OF Meter config Stats to SAL Meter Config stats
116 * @param allMeterConfigs
117 * @return list of MeterConfigStats
119 public List<MeterConfigStats> toSALMeterConfigList(List<MeterConfig> allMeterConfigs){
121 List<MeterConfigStats> listMeterConfigStats = new ArrayList<MeterConfigStats>();
122 for( MeterConfig meterConfig : allMeterConfigs){
123 MeterConfigStatsBuilder meterConfigStatsBuilder = new MeterConfigStatsBuilder();
124 meterConfigStatsBuilder.setMeterId(new MeterId(meterConfig.getMeterId().getValue()));
125 meterConfigStatsBuilder.setKey(new MeterConfigStatsKey(meterConfigStatsBuilder.getMeterId()));
127 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
128 List<Bands> bands = meterConfig.getBands();
130 List<MeterBandHeader> listBandHeaders = new ArrayList<MeterBandHeader>();
132 for(Bands band : bands){
133 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
134 if(band.getMeterBand() instanceof MeterBandDropCase){
135 MeterBandDropCase dropCaseBand = (MeterBandDropCase)band.getMeterBand();
136 MeterBandDrop dropBand = dropCaseBand.getMeterBandDrop();
137 DropBuilder dropBuilder = new DropBuilder();
138 dropBuilder.setDropBurstSize(dropBand.getBurstSize());
139 dropBuilder.setDropRate(dropBand.getRate());
140 meterBandHeaderBuilder.setBandType(dropBuilder.build());
142 meterBandHeaderBuilder.setBandBurstSize(dropBand.getBurstSize());
143 meterBandHeaderBuilder.setBandRate(dropBand.getRate());
144 BandId bandId = new BandId((long)bandKey);
145 meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
146 meterBandHeaderBuilder.setBandId(bandId);
148 MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
149 meterBandTypesBuilder.setFlags(new MeterBandType(true,false,false));
150 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
152 listBandHeaders.add(meterBandHeaderBuilder.build());
153 }else if (band.getMeterBand() instanceof MeterBandDscpRemarkCase){
154 MeterBandDscpRemarkCase dscpRemarkCaseBand = (MeterBandDscpRemarkCase)band.getMeterBand();
155 MeterBandDscpRemark dscpRemarkBand = dscpRemarkCaseBand.getMeterBandDscpRemark();
156 DscpRemarkBuilder dscpRemarkBuilder = new DscpRemarkBuilder();
157 dscpRemarkBuilder.setDscpRemarkBurstSize(dscpRemarkBand.getBurstSize());
158 dscpRemarkBuilder.setDscpRemarkRate(dscpRemarkBand.getRate());
159 meterBandHeaderBuilder.setBandType(dscpRemarkBuilder.build());
161 meterBandHeaderBuilder.setBandBurstSize(dscpRemarkBand.getBurstSize());
162 meterBandHeaderBuilder.setBandRate(dscpRemarkBand.getRate());
163 BandId bandId = new BandId((long)bandKey);
164 meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
165 meterBandHeaderBuilder.setBandId(bandId);
167 MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
168 meterBandTypesBuilder.setFlags(new MeterBandType(false,true,false));
169 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
171 listBandHeaders.add(meterBandHeaderBuilder.build());
173 }else if (band.getMeterBand() instanceof MeterBandExperimenterCase){
174 MeterBandExperimenterCase experimenterCaseBand = (MeterBandExperimenterCase)band.getMeterBand();
175 MeterBandExperimenter experimenterBand = experimenterCaseBand.getMeterBandExperimenter();
176 ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder();
177 experimenterBuilder.setExperimenterBurstSize(experimenterBand.getBurstSize());
178 experimenterBuilder.setExperimenterRate(experimenterBand.getRate());
179 meterBandHeaderBuilder.setBandType(experimenterBuilder.build());
181 meterBandHeaderBuilder.setBandBurstSize(experimenterBand.getBurstSize());
182 meterBandHeaderBuilder.setBandRate(experimenterBand.getRate());
183 BandId bandId = new BandId((long)bandKey);
184 meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
185 meterBandHeaderBuilder.setBandId(bandId);
187 MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
188 meterBandTypesBuilder.setFlags(new MeterBandType(false,false,true));
189 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
191 listBandHeaders.add(meterBandHeaderBuilder.build());
196 meterBandHeadersBuilder.setMeterBandHeader(listBandHeaders);
197 meterConfigStatsBuilder.setMeterBandHeaders(meterBandHeadersBuilder.build());
198 listMeterConfigStats.add(meterConfigStatsBuilder.build());
201 return listMeterConfigStats;