1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
\r
4 import io.netty.buffer.ByteBuf;
\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
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
19 * @author timotej.kubas
\r
20 * @author michal.polkorab
\r
22 public class SetAsyncInputMessageFactory implements OFSerializer<SetAsyncInput> {
\r
23 private static final byte MESSAGE_TYPE = 28;
\r
24 private static final int MESSAGE_LENGTH = 32;
\r
25 private static SetAsyncInputMessageFactory instance;
\r
27 private SetAsyncInputMessageFactory() {
\r
32 * @return singleton factory
\r
34 public static synchronized SetAsyncInputMessageFactory getInstance() {
\r
35 if (instance == null) {
\r
36 instance = new SetAsyncInputMessageFactory();
\r
42 public void messageToBuffer(short version, ByteBuf out,
\r
43 SetAsyncInput message) {
\r
44 ByteBufUtils.writeOFHeader(instance, message, out);
\r
45 encodePacketInMask(message.getPacketInMask(), out);
\r
46 encodePortStatusMask(message.getPortStatusMask(), out);
\r
47 encodeFlowRemovedMask(message.getFlowRemovedMask(), out);
\r
51 public int computeLength(SetAsyncInput message) {
\r
52 return MESSAGE_LENGTH;
\r
56 public byte getMessageType() {
\r
57 return MESSAGE_TYPE;
\r
60 private static void encodePacketInMask(List<PacketInReason> packetInMask, ByteBuf outBuffer) {
\r
61 for (Iterator<PacketInReason> iterator = packetInMask.iterator(); iterator.hasNext();) {
\r
62 PacketInReason currentPacketInReason = iterator.next();
\r
63 outBuffer.writeInt(packetInReasonToBitmask(currentPacketInReason.getIntValue()));
\r
67 private static void encodePortStatusMask(List<PortReason> portStatusMask, ByteBuf outBuffer) {
\r
68 for (Iterator<PortReason> iterator = portStatusMask.iterator(); iterator.hasNext();) {
\r
69 PortReason currentPortReason = iterator.next();
\r
70 outBuffer.writeInt(portReasonToBitmask(currentPortReason.getIntValue()));
\r
74 private static void encodeFlowRemovedMask(List<FlowRemovedReason> flowRemovedMask, ByteBuf outBuffer) {
\r
75 for (Iterator<FlowRemovedReason> iterator = flowRemovedMask.iterator(); iterator.hasNext();) {
\r
76 FlowRemovedReason currentFlowRemovedReason = iterator.next();
\r
77 outBuffer.writeInt(flowRemovedReasonToBitmask(currentFlowRemovedReason.getIntValue()));
\r
81 private static int packetInReasonToBitmask(int option) {
\r
82 Boolean OFPRNOMATCH = false;
\r
83 Boolean OFPRACTION = false;
\r
84 Boolean OFPRINVALIDTTL = false;
\r
85 int packetInReasonBitmask = 0;
\r
88 case 0: OFPRNOMATCH = true; break;
\r
89 case 1: OFPRACTION = true; break;
\r
90 case 2: OFPRINVALIDTTL = true; break;
\r
94 Map<Integer, Boolean> packetInReasonMap = new HashMap<>();
\r
95 packetInReasonMap.put(0, OFPRNOMATCH);
\r
96 packetInReasonMap.put(1, OFPRACTION);
\r
97 packetInReasonMap.put(2, OFPRINVALIDTTL);
\r
99 packetInReasonBitmask = ByteBufUtils.fillBitMaskFromMap(packetInReasonMap);
\r
101 return packetInReasonBitmask;
\r
104 private static int portReasonToBitmask(int option) {
\r
105 Boolean OFPPRADD = false;
\r
106 Boolean OFPPRDELETE = false;
\r
107 Boolean OFPPRMODIFY = false;
\r
108 int portReasonBitmask = 0;
\r
111 case 0: OFPPRADD = true; break;
\r
112 case 1: OFPPRDELETE = true; break;
\r
113 case 2: OFPPRMODIFY = true; break;
\r
117 Map<Integer, Boolean> portReasonMap = new HashMap<>();
\r
118 portReasonMap.put(0, OFPPRADD);
\r
119 portReasonMap.put(1, OFPPRDELETE);
\r
120 portReasonMap.put(2, OFPPRMODIFY);
\r
122 portReasonBitmask = ByteBufUtils.fillBitMaskFromMap(portReasonMap);
\r
124 return portReasonBitmask;
\r
127 private static int flowRemovedReasonToBitmask(int option) {
\r
128 Boolean OFPRRIDLETIMEOUT = false;
\r
129 Boolean OFPRRHARDTIMEOUT = false;
\r
130 Boolean OFPRRDELETE = false;
\r
131 Boolean OFPRRGROUPDELETE = false;
\r
132 int flowRemovedReasonBitmask = 0;
\r
135 case 0: OFPRRIDLETIMEOUT = true; break;
\r
136 case 1: OFPRRHARDTIMEOUT = true; break;
\r
137 case 2: OFPRRDELETE = true; break;
\r
138 case 3: OFPRRGROUPDELETE = true; break;
\r
142 Map<Integer, Boolean> portReasonMap = new HashMap<>();
\r
143 portReasonMap.put(0, OFPRRIDLETIMEOUT);
\r
144 portReasonMap.put(1, OFPRRHARDTIMEOUT);
\r
145 portReasonMap.put(2, OFPRRDELETE);
\r
146 portReasonMap.put(3, OFPRRGROUPDELETE);
\r
148 flowRemovedReasonBitmask = ByteBufUtils.fillBitMaskFromMap(portReasonMap);
\r
150 return flowRemovedReasonBitmask;
\r