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
8 package org.opendaylight.openflowplugin.impl.protocol.deserialization.multipart;
10 import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
11 import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
13 import com.google.common.collect.ImmutableSet;
14 import io.netty.buffer.ByteBuf;
16 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBand;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDrop;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDscpRemark;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBurst;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterCapability;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterKbps;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterPktps;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterStats;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
29 public class MultipartReplyMeterFeaturesDeserializer implements OFDeserializer<MultipartReplyBody> {
32 public MultipartReplyBody deserialize(final ByteBuf message) {
33 return new MultipartReplyMeterFeaturesBuilder()
34 .setMaxMeter(new Counter32(readUint32(message)))
35 .setMeterBandSupported(readMeterBands(message))
36 .setMeterCapabilitiesSupported(readMeterCapabilities(message))
37 .setMaxBands(readUint8(message))
38 .setMaxColor(readUint8(message))
42 private static Set<Class<? extends MeterBand>> readMeterBands(final ByteBuf message) {
43 final long typesMask = message.readUnsignedInt();
45 final var bandTypes = ImmutableSet.<Class<? extends MeterBand>>builder();
46 if ((typesMask & 1) != 0) {
47 bandTypes.add(MeterBandDrop.class);
49 if ((typesMask & 1 << 1) != 0) {
50 bandTypes.add(MeterBandDscpRemark.class);
52 return bandTypes.build();
55 private static Set<Class<? extends MeterCapability>> readMeterCapabilities(final ByteBuf message) {
56 final long capabilitiesMask = message.readUnsignedInt();
58 final var meterCapabilities = ImmutableSet.<Class<? extends MeterCapability>>builder();
59 if ((capabilitiesMask & 1) != 0) {
60 meterCapabilities.add(MeterKbps.class);
62 if ((capabilitiesMask & 1 << 1) != 0) {
63 meterCapabilities.add(MeterPktps.class);
65 if ((capabilitiesMask & 1 << 2) != 0) {
66 meterCapabilities.add(MeterBurst.class);
68 if ((capabilitiesMask & 1 << 3) != 0) {
69 meterCapabilities.add(MeterStats.class);
72 return meterCapabilities.build();