Javadoc update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / SetAsyncInputMessageFactory.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import java.util.HashMap;\r
7 import java.util.Iterator;\r
8 import java.util.List;\r
9 import java.util.Map;\r
10 \r
11 import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
12 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;\r
17 \r
18 /**\r
19  * Translates SetAsync messages\r
20  * @author timotej.kubas\r
21  * @author michal.polkorab\r
22  */\r
23 public class SetAsyncInputMessageFactory implements OFSerializer<SetAsyncInput> {\r
24     private static final byte MESSAGE_TYPE = 28;\r
25     private static final int MESSAGE_LENGTH = 32; \r
26     private static SetAsyncInputMessageFactory instance;\r
27     \r
28     private SetAsyncInputMessageFactory() {\r
29         // singleton\r
30     }\r
31     \r
32     /**\r
33      * @return singleton factory\r
34      */\r
35     public static synchronized SetAsyncInputMessageFactory getInstance() {\r
36         if (instance == null) {\r
37             instance = new SetAsyncInputMessageFactory();\r
38         }\r
39         return instance;\r
40     }\r
41     \r
42     @Override\r
43     public void messageToBuffer(short version, ByteBuf out,\r
44             SetAsyncInput message) {\r
45         ByteBufUtils.writeOFHeader(instance, message, out);\r
46         encodePacketInMask(message.getPacketInMask(), out);\r
47         encodePortStatusMask(message.getPortStatusMask(), out);\r
48         encodeFlowRemovedMask(message.getFlowRemovedMask(), out);\r
49     }\r
50 \r
51     @Override\r
52     public int computeLength(SetAsyncInput message) {\r
53         return MESSAGE_LENGTH;\r
54     }\r
55 \r
56     @Override\r
57     public byte getMessageType() {\r
58         return MESSAGE_TYPE;\r
59     }\r
60     \r
61     private static void encodePacketInMask(List<PacketInReason> packetInMask, ByteBuf outBuffer) {\r
62         for (Iterator<PacketInReason> iterator = packetInMask.iterator(); iterator.hasNext();) {\r
63             PacketInReason currentPacketInReason = iterator.next();\r
64             outBuffer.writeInt(packetInReasonToBitmask(currentPacketInReason.getIntValue()));\r
65         }\r
66     }\r
67     \r
68     private static void encodePortStatusMask(List<PortReason> portStatusMask, ByteBuf outBuffer) {\r
69         for (Iterator<PortReason> iterator = portStatusMask.iterator(); iterator.hasNext();) {\r
70             PortReason currentPortReason = iterator.next();\r
71             outBuffer.writeInt(portReasonToBitmask(currentPortReason.getIntValue()));\r
72         }\r
73     }\r
74     \r
75     private static void encodeFlowRemovedMask(List<FlowRemovedReason> flowRemovedMask, ByteBuf outBuffer) {\r
76         for (Iterator<FlowRemovedReason> iterator = flowRemovedMask.iterator(); iterator.hasNext();) {\r
77             FlowRemovedReason currentFlowRemovedReason = iterator.next();\r
78             outBuffer.writeInt(flowRemovedReasonToBitmask(currentFlowRemovedReason.getIntValue()));\r
79         }\r
80     }\r
81     \r
82     private static int packetInReasonToBitmask(int option) {\r
83         Boolean OFPRNOMATCH = false;\r
84         Boolean OFPRACTION = false;\r
85         Boolean OFPRINVALIDTTL = false;\r
86         int packetInReasonBitmask = 0;\r
87         \r
88         switch(option) {\r
89         case 0: OFPRNOMATCH = true; break;\r
90         case 1: OFPRACTION = true; break;\r
91         case 2: OFPRINVALIDTTL = true; break;\r
92         default: break;\r
93         }\r
94         \r
95         Map<Integer, Boolean> packetInReasonMap = new HashMap<>();\r
96         packetInReasonMap.put(0, OFPRNOMATCH);\r
97         packetInReasonMap.put(1, OFPRACTION);\r
98         packetInReasonMap.put(2, OFPRINVALIDTTL);\r
99         \r
100         packetInReasonBitmask = ByteBufUtils.fillBitMaskFromMap(packetInReasonMap);\r
101         \r
102         return packetInReasonBitmask;\r
103     }\r
104     \r
105     private static int portReasonToBitmask(int option) {\r
106         Boolean OFPPRADD = false;\r
107         Boolean OFPPRDELETE = false;\r
108         Boolean OFPPRMODIFY = false;\r
109         int portReasonBitmask = 0;\r
110         \r
111         switch(option) {\r
112         case 0: OFPPRADD = true; break;\r
113         case 1: OFPPRDELETE = true; break;\r
114         case 2: OFPPRMODIFY = true; break;\r
115         default: break;\r
116         }\r
117         \r
118         Map<Integer, Boolean> portReasonMap = new HashMap<>();\r
119         portReasonMap.put(0, OFPPRADD);\r
120         portReasonMap.put(1, OFPPRDELETE);\r
121         portReasonMap.put(2, OFPPRMODIFY);\r
122         \r
123         portReasonBitmask = ByteBufUtils.fillBitMaskFromMap(portReasonMap);\r
124         \r
125         return portReasonBitmask;\r
126     }\r
127     \r
128     private static int flowRemovedReasonToBitmask(int option) {\r
129         Boolean OFPRRIDLETIMEOUT = false;\r
130         Boolean OFPRRHARDTIMEOUT = false;\r
131         Boolean OFPRRDELETE = false;\r
132         Boolean OFPRRGROUPDELETE = false;\r
133         int flowRemovedReasonBitmask = 0;\r
134         \r
135         switch(option) {\r
136         case 0: OFPRRIDLETIMEOUT = true; break;\r
137         case 1: OFPRRHARDTIMEOUT = true; break;\r
138         case 2: OFPRRDELETE = true; break;\r
139         case 3: OFPRRGROUPDELETE = true; break;\r
140         default: break;\r
141         }\r
142         \r
143         Map<Integer, Boolean> portReasonMap = new HashMap<>();\r
144         portReasonMap.put(0, OFPRRIDLETIMEOUT);\r
145         portReasonMap.put(1, OFPRRHARDTIMEOUT);\r
146         portReasonMap.put(2, OFPRRDELETE);\r
147         portReasonMap.put(3, OFPRRGROUPDELETE);\r
148         \r
149         flowRemovedReasonBitmask = ByteBufUtils.fillBitMaskFromMap(portReasonMap);\r
150         \r
151         return flowRemovedReasonBitmask;\r
152     }\r
153 }\r