1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
\r
4 import io.netty.buffer.ByteBuf;
\r
6 import java.math.BigInteger;
\r
8 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;
\r
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Capabilities;
\r
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutputBuilder;
\r
14 * Translates FeaturesReply messages
\r
15 * @author michal.polkorab
\r
16 * @author timotej.kubas
\r
18 public class FeaturesReplyMessageFactory implements OFDeserializer<GetFeaturesOutput>{
\r
20 private static final byte PADDING_IN_FEATURES_REPLY_HEADER = 2;
\r
22 private static FeaturesReplyMessageFactory instance;
\r
24 private FeaturesReplyMessageFactory() {
\r
25 // do nothing, just singleton
\r
29 * @return singleton factory
\r
31 public static synchronized FeaturesReplyMessageFactory getInstance() {
\r
32 if (instance == null) {
\r
33 instance = new FeaturesReplyMessageFactory();
\r
39 public GetFeaturesOutput bufferToMessage(ByteBuf rawMessage, short version) {
\r
40 GetFeaturesOutputBuilder builder = new GetFeaturesOutputBuilder();
\r
41 builder.setVersion(version);
\r
42 builder.setXid(rawMessage.readUnsignedInt());
\r
43 byte[] datapathId = new byte[Long.SIZE/Byte.SIZE];
\r
44 rawMessage.readBytes(datapathId);
\r
45 builder.setDatapathId(new BigInteger(datapathId));
\r
46 builder.setBuffers(rawMessage.readUnsignedInt());
\r
47 builder.setTables(rawMessage.readUnsignedByte());
\r
48 builder.setAuxiliaryId(rawMessage.readUnsignedByte());
\r
49 rawMessage.skipBytes(PADDING_IN_FEATURES_REPLY_HEADER);
\r
50 builder.setCapabilities(createCapabilities(rawMessage.readUnsignedInt()));
\r
51 builder.setReserved(rawMessage.readUnsignedInt());
\r
52 return builder.build();
\r
55 private static Capabilities createCapabilities(long input) {
\r
56 final Boolean FLOW_STATS = (input & (1 << 0)) != 0;
\r
57 final Boolean TABLE_STATS = (input & (1 << 1)) != 0;
\r
58 final Boolean PORT_STATS = (input & (1 << 2)) != 0;
\r
59 final Boolean GROUP_STATS = (input & (1 << 3)) != 0;
\r
60 final Boolean IP_REASM = (input & (1 << 5)) != 0;
\r
61 final Boolean QUEUE_STATS = (input & (1 << 6)) != 0;
\r
62 final Boolean PORT_BLOCKED = (input & (1 << 8)) != 0;
\r
63 return new Capabilities(FLOW_STATS, GROUP_STATS, IP_REASM,
\r
64 PORT_BLOCKED, PORT_STATS, QUEUE_STATS, TABLE_STATS);
\r