Javadoc update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / FeaturesReplyMessageFactory.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import java.math.BigInteger;\r
7 \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
12 \r
13 /**\r
14  * Translates FeaturesReply messages\r
15  * @author michal.polkorab\r
16  * @author timotej.kubas\r
17  */\r
18 public class FeaturesReplyMessageFactory implements OFDeserializer<GetFeaturesOutput>{\r
19     \r
20     private static final byte PADDING_IN_FEATURES_REPLY_HEADER = 2;\r
21     \r
22     private static FeaturesReplyMessageFactory instance;\r
23 \r
24     private FeaturesReplyMessageFactory() {\r
25         // do nothing, just singleton\r
26     }\r
27     \r
28     /**\r
29      * @return singleton factory\r
30      */\r
31     public static synchronized FeaturesReplyMessageFactory getInstance() {\r
32         if (instance == null) {\r
33             instance = new FeaturesReplyMessageFactory();\r
34         }\r
35         return instance;\r
36     }\r
37     \r
38     @Override\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
53     }\r
54 \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
65     }\r
66 \r
67 }\r