2 * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. 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.impl.protocol.deserialization.multipart;
11 import io.netty.buffer.ByteBuf;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBand;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDrop;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDscpRemark;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBurst;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterCapability;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterKbps;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterPktps;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterStats;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
27 public class MultipartReplyMeterFeaturesDeserializer implements OFDeserializer<MultipartReplyBody> {
30 public MultipartReplyBody deserialize(ByteBuf message) {
31 return new MultipartReplyMeterFeaturesBuilder()
32 .setMaxMeter(new Counter32(message.readUnsignedInt()))
33 .setMeterBandSupported(readMeterBands(message))
34 .setMeterCapabilitiesSupported(readMeterCapabilities(message))
35 .setMaxBands(message.readUnsignedByte())
36 .setMaxColor(message.readUnsignedByte())
40 private static List<Class<? extends MeterBand>> readMeterBands(ByteBuf message) {
41 final List<Class<? extends MeterBand>> bandTypes = new ArrayList<>();
42 final long typesMask = message.readUnsignedInt();
43 final boolean mbtDrop = (typesMask & (1)) != 0;
44 final boolean mbtDscpRemark = (typesMask & (1 << 1)) != 0;
47 bandTypes.add(MeterBandDrop.class);
50 bandTypes.add(MeterBandDscpRemark.class);
56 private static List<Class<? extends MeterCapability>> readMeterCapabilities(ByteBuf message) {
57 final List<Class<? extends MeterCapability>> meterCapabilities = new ArrayList<>();
58 final long capabilitiesMask = message.readUnsignedInt();
60 final boolean mfKbps = (capabilitiesMask & (1)) != 0;
61 final boolean mfPktps = (capabilitiesMask & (1 << 1)) != 0;
62 final boolean mfBurst = (capabilitiesMask & (1 << 2)) != 0;
63 final boolean mfStats = (capabilitiesMask & (1 << 3)) != 0;
66 meterCapabilities.add(MeterKbps.class);
69 meterCapabilities.add(MeterPktps.class);
72 meterCapabilities.add(MeterBurst.class);
75 meterCapabilities.add(MeterStats.class);
78 return meterCapabilities;