Javadoc update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / GetAsyncReplyMessageFactory.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.util.ArrayList;\r
7 import java.util.List;\r
8 \r
9 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutputBuilder;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.FlowRemovedMask;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.FlowRemovedMaskBuilder;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PacketInMask;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PacketInMaskBuilder;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PortStatusMask;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PortStatusMaskBuilder;\r
21 \r
22 /**\r
23  * Translates GetAsyncReply messages\r
24  * @author timotej.kubas\r
25  * @author michal.polkorab\r
26  */\r
27 public class GetAsyncReplyMessageFactory implements OFDeserializer<GetAsyncOutput> {\r
28     \r
29     private static GetAsyncReplyMessageFactory instance;\r
30     \r
31     private GetAsyncReplyMessageFactory() {\r
32         // singleton\r
33     }\r
34 \r
35     /**\r
36      * @return singleton factory\r
37      */\r
38     public static synchronized GetAsyncReplyMessageFactory getInstance() {\r
39         if (instance == null) {\r
40             instance = new GetAsyncReplyMessageFactory();\r
41         }\r
42         return instance;\r
43     }\r
44     \r
45     @Override\r
46     public GetAsyncOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
47         GetAsyncOutputBuilder builder = new GetAsyncOutputBuilder();\r
48         builder.setVersion(version);\r
49         builder.setXid(rawMessage.readUnsignedInt());\r
50         builder.setPacketInMask(decodePacketInMask(rawMessage));\r
51         builder.setPortStatusMask(decodePortStatusMask(rawMessage));\r
52         builder.setFlowRemovedMask(decodeFlowRemovedMask(rawMessage));\r
53         return builder.build();\r
54     }\r
55     \r
56     private static List<PacketInMask> decodePacketInMask(ByteBuf outputBuf) {\r
57         List<PacketInReason> readPIRList = new ArrayList<>();\r
58         List<PacketInMask> inMasks = new ArrayList<>();\r
59         PacketInMaskBuilder maskBuilder = new PacketInMaskBuilder();\r
60         \r
61         readPIRList.add(decodedPacketInReason((int) outputBuf.readUnsignedInt()));\r
62         readPIRList.add(decodedPacketInReason((int) outputBuf.readUnsignedInt()));\r
63         inMasks.add(maskBuilder.setMask(readPIRList).build()); \r
64         return inMasks;\r
65     }\r
66     \r
67     private static List<PortStatusMask> decodePortStatusMask(ByteBuf outputBuf) {\r
68         List<PortReason> readPortReasonList = new ArrayList<>();\r
69         List<PortStatusMask> inMasks = new ArrayList<>();\r
70         PortStatusMaskBuilder maskBuilder = new PortStatusMaskBuilder();\r
71         \r
72         readPortReasonList.add(decodePortReason((int) outputBuf.readUnsignedInt()));\r
73         readPortReasonList.add(decodePortReason((int) outputBuf.readUnsignedInt()));\r
74         inMasks.add(maskBuilder.setMask(readPortReasonList).build()); \r
75         return inMasks;\r
76     }\r
77     \r
78     private static List<FlowRemovedMask> decodeFlowRemovedMask(ByteBuf outputBuf) {\r
79         List<FlowRemovedReason> readFlowRemovedReasonList = new ArrayList<>();\r
80         List<FlowRemovedMask> inMasks = new ArrayList<>();\r
81         FlowRemovedMaskBuilder maskBuilder = new FlowRemovedMaskBuilder();\r
82         \r
83         readFlowRemovedReasonList.add(decodeFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
84         readFlowRemovedReasonList.add(decodeFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
85         inMasks.add(maskBuilder.setMask(readFlowRemovedReasonList).build()); \r
86         return inMasks;\r
87     }\r
88     \r
89     private static PacketInReason decodedPacketInReason(int input) {\r
90         PacketInReason reason = null;\r
91         Boolean OFPRNOMATCH = (input & (1 << 0)) != 0;\r
92         Boolean OFPRACTION = (input & (1 << 1)) != 0;\r
93         Boolean OFPRINVALIDTTL = (input & (1 << 2)) != 0;\r
94         \r
95         if (OFPRNOMATCH) {\r
96             return PacketInReason.forValue(0);\r
97             }\r
98         if (OFPRACTION) {\r
99             return PacketInReason.forValue(1);\r
100             }\r
101         if (OFPRINVALIDTTL) {\r
102             return PacketInReason.forValue(2);\r
103             }\r
104         \r
105         return reason;\r
106     }\r
107     \r
108     private static PortReason decodePortReason(int input) {\r
109         PortReason reason = null;\r
110         Boolean OFPPRADD = (input & (1 << 0)) != 0;\r
111         Boolean OFPPRDELETE = (input & (1 << 1)) != 0;\r
112         Boolean OFPPRMODIFY = (input & (1 << 2)) != 0;\r
113         \r
114         if (OFPPRADD) {\r
115             return PortReason.forValue(0);\r
116             }\r
117         if (OFPPRDELETE) {\r
118             return PortReason.forValue(1);\r
119             }\r
120         if (OFPPRMODIFY) {\r
121             return PortReason.forValue(2);\r
122             }\r
123         \r
124         return reason;\r
125     }\r
126     \r
127     private static FlowRemovedReason decodeFlowRemovedReason(int input) {\r
128         FlowRemovedReason reason = null;\r
129         Boolean OFPRRIDLETIMEOUT = (input & (1 << 0)) != 0;\r
130         Boolean OFPRRHARDTIMEOUT = (input & (1 << 1)) != 0;\r
131         Boolean OFPRRDELETE = (input & (1 << 2)) != 0;\r
132         Boolean OFPRRGROUPDELETE = (input & (1 << 3)) != 0;\r
133         \r
134         if (OFPRRIDLETIMEOUT) {\r
135             return FlowRemovedReason.forValue(0);\r
136             }\r
137         if (OFPRRHARDTIMEOUT) {\r
138             return FlowRemovedReason.forValue(1);\r
139             }\r
140         if (OFPRRDELETE) {\r
141             return FlowRemovedReason.forValue(2);\r
142             }\r
143         if (OFPRRGROUPDELETE) {\r
144             return FlowRemovedReason.forValue(3);\r
145             }\r
146         \r
147         return reason;\r
148     }\r
149 }\r