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.math.BigInteger;
13 import java.util.ArrayList;
14 import java.util.List;
15 import java.util.Objects;
16 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
17 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
18 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.reply.multipart.reply.body.MultipartReplyPortStatsBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapBuilder;
29 public class MultipartReplyPortStatsDeserializer implements OFDeserializer<MultipartReplyBody> {
31 private static final byte PADDING_IN_PORT_STATS_HEADER = 4;
34 public MultipartReplyBody deserialize(ByteBuf message) {
35 final MultipartReplyPortStatsBuilder builder = new MultipartReplyPortStatsBuilder();
36 final List<NodeConnectorStatisticsAndPortNumberMap> items = new ArrayList<>();
38 while (message.readableBytes() > 0) {
39 final NodeConnectorStatisticsAndPortNumberMapBuilder itemBuilder =
40 new NodeConnectorStatisticsAndPortNumberMapBuilder();
42 final long port = message.readUnsignedInt();
43 final String portName = OpenflowPortsUtil.getPortLogicalName(EncodeConstants.OF13_VERSION_ID, port);
45 // We do not assign datapath ID here, because we simply do not have it
46 itemBuilder.setNodeConnectorId(new NodeConnectorId(Objects.isNull(portName)
47 ? String.valueOf(port)
50 message.skipBytes(PADDING_IN_PORT_STATS_HEADER);
53 .setPackets(new PacketsBuilder()
54 .setReceived(BigInteger.valueOf(message.readLong()))
55 .setTransmitted(BigInteger.valueOf(message.readLong()))
57 .setBytes(new BytesBuilder()
58 .setReceived(BigInteger.valueOf(message.readLong()))
59 .setTransmitted(BigInteger.valueOf(message.readLong()))
61 .setReceiveDrops(BigInteger.valueOf(message.readLong()))
62 .setTransmitDrops(BigInteger.valueOf(message.readLong()))
63 .setReceiveErrors(BigInteger.valueOf(message.readLong()))
64 .setTransmitErrors(BigInteger.valueOf(message.readLong()))
65 .setReceiveFrameError(BigInteger.valueOf(message.readLong()))
66 .setReceiveOverRunError(BigInteger.valueOf((message.readLong())))
67 .setReceiveCrcError(BigInteger.valueOf((message.readLong())))
68 .setCollisionCount(BigInteger.valueOf(message.readLong()))
69 .setDuration(new DurationBuilder()
70 .setSecond(new Counter32(message.readUnsignedInt()))
71 .setNanosecond(new Counter32(message.readUnsignedInt()))
77 .setNodeConnectorStatisticsAndPortNumberMap(items)