import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.BarrierReplyMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.EchoReplyMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.EchoRequestMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.ErrorMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.ExperimenterMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.FeaturesReplyMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.FlowRemovedMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.GetConfigReplyMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.PacketInMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.PortStatusMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.QueueGetConfigReplyMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.RoleReplyMessageFactory;\r
\r
/**\r
* @author michal.polkorab\r
public void init() {\r
table = new HashMap<>();\r
table.put(new MessageTypeCodeKey(OF13, (short) 0), HelloMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 1), ErrorMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 2), EchoRequestMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 3), EchoReplyMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 4), ExperimenterMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 6), FeaturesReplyMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 8), GetConfigReplyMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 10), PacketInMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 11), FlowRemovedMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 12), PortStatusMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 19), MultipartReplyMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 21), BarrierReplyMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 23), QueueGetConfigReplyMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 25), RoleReplyMessageFactory.getInstance());\r
}\r
\r
/**\r
import java.util.Map;\r
\r
import org.opendaylight.openflowjava.protocol.impl.core.OFVersionDetector;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.BarrierInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.EchoInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.EchoReplyInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.ExperimenterInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.FlowModInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.GetAsyncRequestMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.GetConfigInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.GetFeaturesInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.GetQueueConfigInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.GroupModInputMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.HelloInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.MeterModInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.PacketOutInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.PortModInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.RoleRequestInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.SetAsyncInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.SetConfigMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.TableModInputMessageFactory;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoReplyInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetConfigInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetConfigInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;\r
import org.opendaylight.yangtools.yang.binding.DataObject;\r
\r
/**\r
*/\r
public void init() {\r
table = new HashMap<>();\r
+ table.put(new MessageTypeKey<>(OF13, BarrierInput.class), BarrierInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, EchoInput.class), EchoInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, EchoReplyInput.class), EchoReplyInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, ExperimenterInput.class), ExperimenterInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, FlowModInput.class), FlowModInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, GetAsyncInput.class), GetAsyncRequestMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, GetConfigInput.class), GetConfigInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, GetFeaturesInput.class), GetFeaturesInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, GetQueueConfigInput.class), GetQueueConfigInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, GroupModInput.class), GroupModInputMessageFactory.getInstance());\r
table.put(new MessageTypeKey<>(OF13, HelloInput.class), HelloInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, MeterModInput.class), MeterModInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, PacketOutInput.class), PacketOutInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, PortModInput.class), PortModInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, RoleRequestInput.class), RoleRequestInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, SetAsyncInput.class), SetAsyncInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, SetConfigInput.class), SetConfigMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, TableModInput.class), TableModInputMessageFactory.getInstance());\r
}\r
\r
/**\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class FlowModInputMessageFactory implements OFSerializer<FlowModInput> {\r
+ private static final byte MESSAGE_TYPE = 14;\r
+ private static final byte PADDING_IN_FLOW_MOD_MESSAGE = 2;\r
+ private static final int MESSAGE_LENGTH = 48; //flags\r
+ private static FlowModInputMessageFactory instance;\r
+ \r
+ private FlowModInputMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * @return singleton factory\r
+ */\r
+ public static FlowModInputMessageFactory getInstance() {\r
+ if(instance == null) {\r
+ instance = new FlowModInputMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public void messageToBuffer(short version, ByteBuf out, FlowModInput message) {\r
+ ByteBufUtils.writeOFHeader(instance, message, out);\r
+ out.writeLong(message.getCookie().longValue());\r
+ out.writeLong(message.getCookieMask().longValue());\r
+ out.writeByte(message.getTableId().getValue().byteValue());\r
+ out.writeByte(message.getCommand().getIntValue());\r
+ out.writeShort(message.getIdleTimeout().intValue());\r
+ out.writeShort(message.getHardTimeout().intValue());\r
+ out.writeShort(message.getPriority());\r
+ out.writeInt(message.getOutPort().getValue().intValue());\r
+ out.writeInt(message.getOutGroup().intValue());\r
+ out.writeShort(createFlowModFlagsBitmask(message.getFlags()));\r
+ ByteBufUtils.padBuffer(PADDING_IN_FLOW_MOD_MESSAGE, out);\r
+ // TODO implementation of match structure\r
+ // TODO implementation of instructions\r
+ }\r
+\r
+ @Override\r
+ public int computeLength() {\r
+ return MESSAGE_LENGTH;\r
+ }\r
+\r
+ @Override\r
+ public byte getMessageType() {\r
+ return MESSAGE_TYPE;\r
+ }\r
+ \r
+ private static int createFlowModFlagsBitmask(FlowModFlags flags) {\r
+ int flowModFlagBitmask = 0;\r
+ Map<Integer, Boolean> flowModFlagsMap = new HashMap<>();\r
+ flowModFlagsMap.put(0, flags.isOFPFFSENDFLOWREM());\r
+ flowModFlagsMap.put(1, flags.isOFPFFCHECKOVERLAP());\r
+ flowModFlagsMap.put(2, flags.isOFPFFRESETCOUNTS());\r
+ flowModFlagsMap.put(3, flags.isOFPFFNOPKTCOUNTS());\r
+ flowModFlagsMap.put(4, flags.isOFPFFNOBYTCOUNTS());\r
+ \r
+ flowModFlagBitmask = ByteBufUtils.fillBitMaskFromMap(flowModFlagsMap);\r
+ return flowModFlagBitmask;\r
+ }\r
+}\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.group.mod.Buckets;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class GroupModInputMessageFactory implements OFSerializer<GroupModInput> {\r
+ private static final byte MESSAGE_TYPE = 15;\r
+ private static final byte PADDING_IN_GROUP_MOD_MESSAGE = 1;\r
+ private static final int MESSAGE_LENGTH = 16; \r
+ private static GroupModInputMessageFactory instance;\r
+ \r
+ private GroupModInputMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * @return singleton factory\r
+ */\r
+ public static GroupModInputMessageFactory getInstance() {\r
+ if (instance == null) {\r
+ instance = new GroupModInputMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public void messageToBuffer(short version, ByteBuf out,\r
+ GroupModInput message) {\r
+ ByteBufUtils.writeOFHeader(instance, message, out);\r
+ out.writeShort(message.getCommand().getIntValue());\r
+ out.writeByte(message.getType().getIntValue());\r
+ ByteBufUtils.padBuffer(PADDING_IN_GROUP_MOD_MESSAGE, out);\r
+ out.writeInt(message.getGroupId().intValue());\r
+ encodeBuckets(message.getBuckets(), out);\r
+ }\r
+\r
+ @Override\r
+ public int computeLength() {\r
+ return MESSAGE_LENGTH;\r
+ }\r
+\r
+ @Override\r
+ public byte getMessageType() {\r
+ return MESSAGE_TYPE;\r
+ }\r
+ \r
+ private static void encodeBuckets(List<Buckets> buckets, ByteBuf outBuffer) {\r
+ final byte PADDING_IN_BUCKET = 4;\r
+ \r
+ for (Iterator<Buckets> iterator = buckets.iterator(); iterator.hasNext();) {\r
+ Buckets currentBucket = iterator.next();\r
+ // TODO get method for field length missing\r
+ outBuffer.writeShort(currentBucket.getWeight().intValue());\r
+ outBuffer.writeInt(currentBucket.getWatchPort().getValue().intValue());\r
+ outBuffer.writeInt(currentBucket.getWatchGroup().intValue());\r
+ ByteBufUtils.padBuffer(PADDING_IN_BUCKET, outBuffer);\r
+ // TODO actions structure missing\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class MeterModInputMessageFactory implements OFSerializer<MeterModInput> {\r
+ private static final byte MESSAGE_TYPE = 29;\r
+ private static final int MESSAGE_LENGTH = 16; \r
+ private static MeterModInputMessageFactory instance;\r
+ \r
+ private MeterModInputMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * @return singleton factory\r
+ */\r
+ public static MeterModInputMessageFactory getInstance() {\r
+ if (instance == null) {\r
+ instance = new MeterModInputMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public void messageToBuffer(short version, ByteBuf out,\r
+ MeterModInput message) {\r
+ ByteBufUtils.writeOFHeader(instance, message, out);\r
+ out.writeShort(message.getCommand().getIntValue());\r
+ out.writeShort(createMeterFlagsBitmask(message.getFlags()));\r
+ out.writeInt(message.getMeterId().getValue().intValue());\r
+ encodeBands(message.getBands(), out);\r
+ }\r
+\r
+ @Override\r
+ public int computeLength() {\r
+ return MESSAGE_LENGTH;\r
+ }\r
+\r
+ @Override\r
+ public byte getMessageType() {\r
+ return MESSAGE_TYPE;\r
+ }\r
+\r
+ private static int createMeterFlagsBitmask(MeterFlags flags) {\r
+ int meterFlagBitmask = 0;\r
+ Map<Integer, Boolean> meterModFlagsMap = new HashMap<>();\r
+ meterModFlagsMap.put(0, flags.isOFPMFKBPS());\r
+ meterModFlagsMap.put(1, flags.isOFPMFPKTPS());\r
+ meterModFlagsMap.put(2, flags.isOFPMFBURST());\r
+ meterModFlagsMap.put(3, flags.isOFPMFSTATS());\r
+ \r
+ meterFlagBitmask = ByteBufUtils.fillBitMaskFromMap(meterModFlagsMap);\r
+ return meterFlagBitmask;\r
+ }\r
+ \r
+ private static void encodeBands(List<Bands> bands, ByteBuf outBuffer) {\r
+ for (Iterator<Bands> iterator = bands.iterator(); iterator.hasNext();) {\r
+ Bands currentBands = iterator.next();\r
+ outBuffer.writeShort(currentBands.getType().getIntValue());\r
+ // TODO outBuffer.writeShort(currentBands.get); length is missing\r
+ outBuffer.writeInt(currentBands.getRate().intValue());\r
+ outBuffer.writeInt(currentBands.getBurstSize().intValue());\r
+ // TODO what to do with ofp_meter_band_drop?\r
+ }\r
+ }\r
+ \r
+}\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class SetAsyncInputMessageFactory implements OFSerializer<SetAsyncInput> {\r
+ private static final byte MESSAGE_TYPE = 28;\r
+ private static final int MESSAGE_LENGTH = 32; \r
+ private static SetAsyncInputMessageFactory instance;\r
+ \r
+ private SetAsyncInputMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * @return singleton factory\r
+ */\r
+ public static SetAsyncInputMessageFactory getInstance() {\r
+ if (instance == null) {\r
+ instance = new SetAsyncInputMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public void messageToBuffer(short version, ByteBuf out,\r
+ SetAsyncInput message) {\r
+ ByteBufUtils.writeOFHeader(instance, message, out);\r
+ encodePacketInMask(message.getPacketInMask(), out);\r
+ encodePortStatusMask(message.getPortStatusMask(), out);\r
+ encodeFlowRemovedMask(message.getFlowRemovedMask(), out);\r
+ }\r
+\r
+ @Override\r
+ public int computeLength() {\r
+ return MESSAGE_LENGTH;\r
+ }\r
+\r
+ @Override\r
+ public byte getMessageType() {\r
+ return MESSAGE_TYPE;\r
+ }\r
+ \r
+ private static void encodePacketInMask(List<PacketInReason> packetInMask, ByteBuf outBuffer) {\r
+ for (Iterator<PacketInReason> iterator = packetInMask.iterator(); iterator.hasNext();) {\r
+ PacketInReason currentPacketInReason = iterator.next();\r
+ outBuffer.writeInt(packetInReasonToBitmask(currentPacketInReason.getIntValue()));\r
+ }\r
+ }\r
+ \r
+ private static void encodePortStatusMask(List<PortReason> portStatusMask, ByteBuf outBuffer) {\r
+ for (Iterator<PortReason> iterator = portStatusMask.iterator(); iterator.hasNext();) {\r
+ PortReason currentPortReason = iterator.next();\r
+ outBuffer.writeInt(portReasonToBitmask(currentPortReason.getIntValue()));\r
+ }\r
+ }\r
+ \r
+ private static void encodeFlowRemovedMask(List<FlowRemovedReason> flowRemovedMask, ByteBuf outBuffer) {\r
+ for (Iterator<FlowRemovedReason> iterator = flowRemovedMask.iterator(); iterator.hasNext();) {\r
+ FlowRemovedReason currentFlowRemovedReason = iterator.next();\r
+ outBuffer.writeInt(flowRemovedReasonToBitmask(currentFlowRemovedReason.getIntValue()));\r
+ }\r
+ }\r
+ \r
+ private static int packetInReasonToBitmask(int option) {\r
+ Boolean OFPRNOMATCH = false;\r
+ Boolean OFPRACTION = false;\r
+ Boolean OFPRINVALIDTTL = false;\r
+ int packetInReasonBitmask = 0;\r
+ \r
+ switch(option) {\r
+ case 0: OFPRNOMATCH = true; break;\r
+ case 1: OFPRACTION = true; break;\r
+ case 2: OFPRINVALIDTTL = true; break;\r
+ default: break;\r
+ }\r
+ \r
+ Map<Integer, Boolean> packetInReasonMap = new HashMap<>();\r
+ packetInReasonMap.put(0, OFPRNOMATCH);\r
+ packetInReasonMap.put(1, OFPRACTION);\r
+ packetInReasonMap.put(2, OFPRINVALIDTTL);\r
+ \r
+ packetInReasonBitmask = ByteBufUtils.fillBitMaskFromMap(packetInReasonMap);\r
+ \r
+ return packetInReasonBitmask;\r
+ }\r
+ \r
+ private static int portReasonToBitmask(int option) {\r
+ Boolean OFPPRADD = false;\r
+ Boolean OFPPRDELETE = false;\r
+ Boolean OFPPRMODIFY = false;\r
+ int portReasonBitmask = 0;\r
+ \r
+ switch(option) {\r
+ case 0: OFPPRADD = true; break;\r
+ case 1: OFPPRDELETE = true; break;\r
+ case 2: OFPPRMODIFY = true; break;\r
+ default: break;\r
+ }\r
+ \r
+ Map<Integer, Boolean> portReasonMap = new HashMap<>();\r
+ portReasonMap.put(0, OFPPRADD);\r
+ portReasonMap.put(1, OFPPRDELETE);\r
+ portReasonMap.put(2, OFPPRMODIFY);\r
+ \r
+ portReasonBitmask = ByteBufUtils.fillBitMaskFromMap(portReasonMap);\r
+ \r
+ return portReasonBitmask;\r
+ }\r
+ \r
+ private static int flowRemovedReasonToBitmask(int option) {\r
+ Boolean OFPRRIDLETIMEOUT = false;\r
+ Boolean OFPRRHARDTIMEOUT = false;\r
+ Boolean OFPRRDELETE = false;\r
+ Boolean OFPRRGROUPDELETE = false;\r
+ int flowRemovedReasonBitmask = 0;\r
+ \r
+ switch(option) {\r
+ case 0: OFPRRIDLETIMEOUT = true; break;\r
+ case 1: OFPRRHARDTIMEOUT = true; break;\r
+ case 2: OFPRRDELETE = true; break;\r
+ case 3: OFPRRGROUPDELETE = true; break;\r
+ default: break;\r
+ }\r
+ \r
+ Map<Integer, Boolean> portReasonMap = new HashMap<>();\r
+ portReasonMap.put(0, OFPRRIDLETIMEOUT);\r
+ portReasonMap.put(1, OFPRRHARDTIMEOUT);\r
+ portReasonMap.put(2, OFPRRDELETE);\r
+ portReasonMap.put(3, OFPRRGROUPDELETE);\r
+ \r
+ flowRemovedReasonBitmask = ByteBufUtils.fillBitMaskFromMap(portReasonMap);\r
+ \r
+ return flowRemovedReasonBitmask;\r
+ }\r
+}\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import static org.junit.Assert.*;\r
+import io.netty.buffer.ByteBuf;\r
+import io.netty.buffer.UnpooledByteBufAllocator;\r
+\r
+import java.math.BigInteger;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ControllerRole;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class FlowModInputMessageFactoryTest {\r
+ private static final byte PADDING_IN_FLOW_MOD_MESSAGE = 2;\r
+ /**\r
+ * @throws Exception \r
+ * Testing of {@link FlowModInputMessageFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testFlowModInputMessageFactory() throws Exception {\r
+ FlowModInputBuilder builder = new FlowModInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};\r
+ builder.setCookie(new BigInteger(cookie));\r
+ byte[] cookieMask = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r
+ builder.setCookieMask(new BigInteger(cookieMask));\r
+ builder.setTableId(new TableId(65L));\r
+ builder.setCommand(FlowModCommand.forValue(2));\r
+ builder.setIdleTimeout(12);\r
+ builder.setHardTimeout(0);\r
+ builder.setPriority(126);\r
+ builder.setOutPort(new PortNumber(4422L));\r
+ builder.setOutGroup(98L);\r
+ builder.setFlags(new FlowModFlags(true, false, true, false, true));\r
+ FlowModInput message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ FlowModInputMessageFactory factory = FlowModInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
+ Assert.assertEquals("Wrong cookie", message.getCookie().longValue(), out.readLong());\r
+ Assert.assertEquals("Wrong cookieMask", message.getCookieMask().longValue(), out.readLong());\r
+ Assert.assertEquals("Wrong tableId", message.getTableId().getValue().intValue(), out.readByte());\r
+ Assert.assertEquals("Wrong command", message.getCommand().getIntValue(), out.readByte());\r
+ Assert.assertEquals("Wrong idleTimeOut", message.getIdleTimeout().intValue(), out.readShort());\r
+ Assert.assertEquals("Wrong hardTimeOut", message.getHardTimeout().intValue(), out.readShort());\r
+ Assert.assertEquals("Wrong priority", message.getPriority().intValue(), out.readShort());\r
+ Assert.assertEquals("Wrong outPort", message.getOutPort().getValue().intValue(), out.readUnsignedInt());\r
+ Assert.assertEquals("Wrong outGroup", message.getOutGroup().intValue(), out.readUnsignedInt());\r
+ Assert.assertEquals("Wrong flags", message.getFlags(), createFlowModFalgsFromBitmap(out.readShort()));\r
+ out.skipBytes(PADDING_IN_FLOW_MOD_MESSAGE);\r
+ // TODO implementation of match structure\r
+ // TODO implementation of instructions\r
+ }\r
+ \r
+ private static FlowModFlags createFlowModFalgsFromBitmap(short input){\r
+ final Boolean _oFPFFSENDFLOWREM = (input & (1 << 0)) > 0;\r
+ final Boolean _oFPFFCHECKOVERLAP = (input & (1 << 1)) > 0;\r
+ final Boolean _oFPFFRESETCOUNTS = (input & (1 << 2)) > 0; \r
+ final Boolean _oFPFFNOPKTCOUNTS = (input & (1 << 3)) > 0;\r
+ final Boolean _oFPFFNOBYTCOUNTS = (input & (1 << 4)) > 0;\r
+ return new FlowModFlags(_oFPFFCHECKOVERLAP, _oFPFFNOBYTCOUNTS, _oFPFFNOPKTCOUNTS, _oFPFFRESETCOUNTS, _oFPFFSENDFLOWREM);\r
+ }\r
+\r
+}\r
private static final int MESSAGE_LENGTH = 8;\r
\r
/**\r
- * Testing of {@link GetaAsyncRequestMessageFactory} for correct translation from POJO\r
+ * Testing of {@link GetAsyncRequestMessageFactory} for correct translation from POJO\r
* @throws Exception \r
*/\r
@Test\r
- public void testGetaAsyncReques() throws Exception {\r
+ public void testGetAsyncReques() throws Exception {\r
GetAsyncInputBuilder builder = new GetAsyncInputBuilder();\r
BufferHelper.setupHeader(builder);\r
GetAsyncInput message = builder.build();\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+import io.netty.buffer.UnpooledByteBufAllocator;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.group.mod.Buckets;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.group.mod.BucketsBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ *\r
+ */\r
+public class GroupModInputMessageFactoryTest {\r
+ private static final byte PADDING_IN_GROUP_MOD_MESSAGE = 1;\r
+ \r
+ /**\r
+ * @throws Exception\r
+ * Testing of {@link GroupModInputMessageFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testGroupModInputMessage() throws Exception {\r
+ GroupModInputBuilder builder = new GroupModInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ builder.setCommand(GroupModCommand.forValue(2));\r
+ builder.setType(GroupType.forValue(3));\r
+ builder.setGroupId(256L);\r
+ builder.setBuckets(createBucketsList());\r
+ GroupModInput message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ GroupModInputMessageFactory factory = GroupModInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
+ Assert.assertEquals("Wrong command", message.getCommand().getIntValue(), out.readShort());\r
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readByte());\r
+ out.skipBytes(PADDING_IN_GROUP_MOD_MESSAGE);\r
+ Assert.assertEquals("Wrong groupId", message.getGroupId().intValue(), out.readUnsignedInt());\r
+ Assert.assertEquals("Wrong bucketList", true, compareBucketsLists(createBucketsList(), createBucketsListFromBufer(out)));\r
+ }\r
+ \r
+ private static List<Buckets> createBucketsList(){\r
+ List<Buckets> bucketsList = new ArrayList<Buckets>();\r
+ BucketsBuilder bucketsBuilder = new BucketsBuilder();\r
+ Buckets bucket;\r
+ bucketsBuilder.setWeight(10);\r
+ bucketsBuilder.setWatchPort(new PortNumber(65L));\r
+ bucketsBuilder.setWatchGroup(22L);\r
+ bucket = bucketsBuilder.build();\r
+ bucketsList.add(bucket);\r
+ return bucketsList;\r
+ }\r
+ \r
+ private static List<Buckets> createBucketsListFromBufer(ByteBuf out){\r
+ List<Buckets> bucketsList = new ArrayList<Buckets>();\r
+ BucketsBuilder bucketsBuilder = new BucketsBuilder();\r
+ Buckets bucket;\r
+ bucketsBuilder.setWeight((int) out.readShort());\r
+ bucketsBuilder.setWatchPort(new PortNumber(out.readUnsignedInt()));\r
+ bucketsBuilder.setWatchGroup(out.readUnsignedInt());\r
+ out.skipBytes(4);\r
+ bucket = bucketsBuilder.build();\r
+ bucketsList.add(bucket);\r
+ return bucketsList;\r
+ }\r
+ \r
+ private static boolean compareBucketsLists(List<Buckets> bucketsFromMessage, List<Buckets> bucketsFromBuffer) {\r
+ boolean result = false;\r
+ int bucketsFromMessageLength = bucketsFromMessage.size();\r
+ for (int i = 0; i < bucketsFromMessageLength; i++) {\r
+ if (bucketsFromMessage.get(i).getWeight().equals(bucketsFromBuffer.get(i).getWeight())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ if (bucketsFromMessage.get(i).getWatchPort()\r
+ .equals(bucketsFromBuffer.get(i).getWatchPort())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ if (bucketsFromMessage.get(i).getWatchGroup()\r
+ .equals(bucketsFromBuffer.get(i).getWatchGroup())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ }\r
+ // TODO get method for field length missing\r
+ // TODO actions structure missing\r
+ return result;\r
+ }\r
+}\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+import io.netty.buffer.UnpooledByteBufAllocator;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class MeterModInputMessageFactoryTest {\r
+\r
+ /**\r
+ * @throws Exception \r
+ * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testMeterModInputMessage() throws Exception {\r
+ MeterModInputBuilder builder = new MeterModInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ builder.setCommand(MeterModCommand.forValue(1));\r
+ builder.setFlags(new MeterFlags(false, true, true, false));\r
+ builder.setMeterId(new MeterId(2248L));\r
+ builder.setBands(createBandsList());\r
+ MeterModInput message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ MeterModInputMessageFactory factory = MeterModInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
+ Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readShort());\r
+ Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));\r
+ Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());\r
+ Assert.assertEquals("Wrong bands", true, compareBandsLists(createBandsList(), decodeBandsList(out)));\r
+ }\r
+ \r
+ private static MeterFlags decodeMeterModFlags(short input){\r
+ final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;\r
+ final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;\r
+ final Boolean _oFPMFBURST = (input & (1 << 2)) > 0; \r
+ final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;\r
+ return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);\r
+ }\r
+ \r
+ private static List<Bands> createBandsList(){\r
+ List<Bands> bandsList = new ArrayList<Bands>();\r
+ BandsBuilder bandsBuilder = new BandsBuilder();\r
+ Bands band;\r
+ bandsBuilder.setType(MeterBandType.forValue(1));\r
+ bandsBuilder.setRate(2254L);\r
+ bandsBuilder.setBurstSize(12L);\r
+ band = bandsBuilder.build();\r
+ bandsList.add(band);\r
+ return bandsList;\r
+ }\r
+ \r
+ private static List<Bands> decodeBandsList(ByteBuf input){\r
+ List<Bands> bandsList = new ArrayList<Bands>();\r
+ BandsBuilder bandsBuilder = new BandsBuilder();\r
+ Bands band;\r
+ bandsBuilder.setType(MeterBandType.forValue(input.readShort()));\r
+ bandsBuilder.setRate(input.readUnsignedInt());\r
+ bandsBuilder.setBurstSize(input.readUnsignedInt());\r
+ band = bandsBuilder.build();\r
+ bandsList.add(band);\r
+ return bandsList;\r
+ }\r
+ \r
+ private static boolean compareBandsLists(List<Bands> bandsFromMessage, List<Bands> bandsFromBuffer) {\r
+ boolean result = false;\r
+ int bandsFromMessageLength = bandsFromMessage.size();\r
+ for (int i = 0; i < bandsFromMessageLength; i++) {\r
+ if (bandsFromMessage.get(i).getType().equals(bandsFromBuffer.get(i).getType())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ if (bandsFromMessage.get(i).getRate()\r
+ .equals(bandsFromBuffer.get(i).getRate())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ if (bandsFromMessage.get(i).getBurstSize()\r
+ .equals(bandsFromBuffer.get(i).getBurstSize())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ }\r
+ // TODO get method for field length missing\r
+ // TODO actions structure missing\r
+ return result;\r
+ }\r
+}\r
}\r
\r
private static PortConfig createPortConfig(long input){\r
- final Boolean _portDown = ((input) & 0x01) > 0;\r
- final Boolean _noRecv = ((input) & 0x04) > 0;\r
- final Boolean _noFwd = ((input) & 0x20) > 0;\r
- final Boolean _noPacketIn = ((input) & 0x40) > 0;\r
- return new PortConfig(_portDown, _noRecv, _noFwd, _noPacketIn);\r
+ final Boolean _portDown = ((input) & (1<<0)) > 0;\r
+ final Boolean _noRecv = ((input) & (1<<2)) > 0;\r
+ final Boolean _noFwd = ((input) & (1<<5)) > 0;\r
+ final Boolean _noPacketIn = ((input) & (1<<6)) > 0;\r
+ return new PortConfig(_noFwd, _noPacketIn, _noRecv, _portDown);\r
}\r
\r
private static PortFeatures createPortFeatures(long input){\r
- final Boolean _10mbHd = ((input) & 0x01) > 0;\r
- final Boolean _10mbFd = ((input) & 0x02) > 0;\r
- final Boolean _100mbHd = ((input) & 0x04) > 0;\r
- final Boolean _100mbFd = ((input) & 0x08) > 0;\r
- final Boolean _1gbHd = ((input) & 0x10) > 0;\r
- final Boolean _1gbFd = ((input) & 0x20) > 0;\r
- final Boolean _10gbFd = ((input) & 0x40) > 0;\r
- final Boolean _40gbFd = ((input) & 0x80) > 0;\r
- final Boolean _100gbFd = ((input) & 0x100) > 0;\r
- final Boolean _1tbFd = ((input) & 0x200) > 0;\r
- final Boolean _other = ((input) & 0x400) > 0;\r
- final Boolean _copper = ((input) & 0x800) > 0;\r
- final Boolean _fiber = ((input) & 0x1000) > 0;\r
- final Boolean _autoneg = ((input) & 0x2000) > 0;\r
- final Boolean _pause = ((input) & 0x4000) > 0;\r
- final Boolean _pauseAsym = ((input) & 0x8000) > 0;\r
- return new PortFeatures(_10mbHd, _10mbFd, _100mbHd, _100mbFd, _1gbHd, _1gbFd, _10gbFd,\r
- _40gbFd, _100gbFd, _1tbFd, _other, _copper, _fiber, _autoneg, _pause, _pauseAsym);\r
+ final Boolean _10mbHd = ((input) & (1<<0)) > 0;\r
+ final Boolean _10mbFd = ((input) & (1<<1)) > 0;\r
+ final Boolean _100mbHd = ((input) & (1<<2)) > 0;\r
+ final Boolean _100mbFd = ((input) & (1<<3)) > 0;\r
+ final Boolean _1gbHd = ((input) & (1<<4)) > 0;\r
+ final Boolean _1gbFd = ((input) & (1<<5)) > 0;\r
+ final Boolean _10gbFd = ((input) & (1<<6)) > 0;\r
+ final Boolean _40gbFd = ((input) & (1<<7)) > 0;\r
+ final Boolean _100gbFd = ((input) & (1<<8)) > 0;\r
+ final Boolean _1tbFd = ((input) & (1<<9)) > 0;\r
+ final Boolean _other = ((input) & (1<<10)) > 0;\r
+ final Boolean _copper = ((input) & (1<<11)) > 0;\r
+ final Boolean _fiber = ((input) & (1<<12)) > 0;\r
+ final Boolean _autoneg = ((input) & (1<<13)) > 0;\r
+ final Boolean _pause = ((input) & (1<<14)) > 0;\r
+ final Boolean _pauseAsym = ((input) & (1<<15)) > 0;\r
+ return new PortFeatures(_100gbFd, _100mbFd, _100mbHd, _10gbFd, _10mbFd, _10mbHd, \r
+ _1gbFd, _1gbHd, _1tbFd, _40gbFd, _autoneg, _copper, _fiber, _other, _pause, _pauseAsym);\r
}\r
\r
private static String makeMacAddress(ByteBuf input) {\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+import io.netty.buffer.UnpooledByteBufAllocator;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.SetAsyncInputBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class SetAsyncInputMessageFactoryTest {\r
+\r
+ /**\r
+ * @throws Exception \r
+ * Testing of {@link SetAsyncInputMessageFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testSetAsyncInputMessage() throws Exception {\r
+ SetAsyncInputBuilder builder = new SetAsyncInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ builder.setPacketInMask(createPacketInMask());\r
+ builder.setPortStatusMask(createPortStatusMask());\r
+ builder.setFlowRemovedMask(createFlowRemowedMask());\r
+ SetAsyncInput message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ SetAsyncInputMessageFactory factory = SetAsyncInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
+ Assert.assertTrue("Wrong packetInMask", comparePIRLists(message.getPacketInMask(), readPacketInMask(out)));\r
+ Assert.assertTrue("Wrong packetInMask", comparePortReasonLists(message.getPortStatusMask(), readPortStatusMask(out)));\r
+ Assert.assertTrue("Wrong packetInMask", compareFlowRemovedReasonLists(message.getFlowRemovedMask(), readFlowRemovedReasonMask(out)));\r
+ \r
+ }\r
+ \r
+ private static List<PacketInReason> createPacketInMask() {\r
+ List<PacketInReason> packetInReasonList = new ArrayList<PacketInReason>();\r
+ packetInReasonList.add(PacketInReason.forValue(1));\r
+ packetInReasonList.add(PacketInReason.forValue(2));\r
+ return packetInReasonList;\r
+ }\r
+ \r
+ private static List<PortReason> createPortStatusMask() {\r
+ List<PortReason> portReasonList = new ArrayList<PortReason>();\r
+ portReasonList.add(PortReason.forValue(1));\r
+ portReasonList.add(PortReason.forValue(2));\r
+ return portReasonList;\r
+ }\r
+ \r
+ private static List<FlowRemovedReason> createFlowRemowedMask() {\r
+ List<FlowRemovedReason> flowRemovedReasonList = new ArrayList<FlowRemovedReason>();\r
+ flowRemovedReasonList.add(FlowRemovedReason.forValue(2));\r
+ flowRemovedReasonList.add(FlowRemovedReason.forValue(3));\r
+ return flowRemovedReasonList;\r
+ }\r
+ \r
+ private static List<PacketInReason> readPacketInMask(ByteBuf outputBuf) {\r
+ List<PacketInReason> readPIRList = new ArrayList<PacketInReason>();\r
+ readPIRList.add(readPacketInReason((int) outputBuf.readUnsignedInt()));\r
+ readPIRList.add(readPacketInReason((int) outputBuf.readUnsignedInt()));\r
+ return readPIRList;\r
+ }\r
+ \r
+ private static List<PortReason> readPortStatusMask(ByteBuf outputBuf) {\r
+ List<PortReason> readPortReasonList = new ArrayList<PortReason>();\r
+ readPortReasonList.add(readPortReason((int) outputBuf.readUnsignedInt()));\r
+ readPortReasonList.add(readPortReason((int) outputBuf.readUnsignedInt()));\r
+ return readPortReasonList;\r
+ }\r
+ \r
+ private static List<FlowRemovedReason> readFlowRemovedReasonMask(ByteBuf outputBuf) {\r
+ List<FlowRemovedReason> readFlowRemovedReasonList = new ArrayList<FlowRemovedReason>();\r
+ readFlowRemovedReasonList.add(readFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
+ readFlowRemovedReasonList.add(readFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
+ return readFlowRemovedReasonList;\r
+ }\r
+ \r
+ private static PacketInReason readPacketInReason(int input) {\r
+ PacketInReason reason = null;\r
+ Boolean OFPRNOMATCH = (input & (1 << 0)) > 0;\r
+ Boolean OFPRACTION = (input & (1 << 1)) > 0;\r
+ Boolean OFPRINVALIDTTL = (input & (1 << 2)) > 0;\r
+ \r
+ if (OFPRNOMATCH) {\r
+ return PacketInReason.forValue(0);\r
+ }\r
+ if (OFPRACTION) {\r
+ return PacketInReason.forValue(1);\r
+ }\r
+ if (OFPRINVALIDTTL) {\r
+ return PacketInReason.forValue(2);\r
+ }\r
+ \r
+ return reason;\r
+ }\r
+ \r
+ private static PortReason readPortReason(int input) {\r
+ PortReason reason = null;\r
+ Boolean OFPPRADD = (input & (1 << 0)) > 0;\r
+ Boolean OFPPRDELETE = (input & (1 << 1)) > 0;\r
+ Boolean OFPPRMODIFY = (input & (1 << 2)) > 0;\r
+ \r
+ if (OFPPRADD) {\r
+ return PortReason.forValue(0);\r
+ }\r
+ if (OFPPRDELETE) {\r
+ return PortReason.forValue(1);\r
+ }\r
+ if (OFPPRMODIFY) {\r
+ return PortReason.forValue(2);\r
+ }\r
+ \r
+ return reason;\r
+ }\r
+ \r
+ private static FlowRemovedReason readFlowRemovedReason(int input) {\r
+ FlowRemovedReason reason = null;\r
+ Boolean OFPRRIDLETIMEOUT = (input & (1 << 0)) > 0;\r
+ Boolean OFPRRHARDTIMEOUT = (input & (1 << 1)) > 0;\r
+ Boolean OFPRRDELETE = (input & (1 << 2)) > 0;\r
+ Boolean OFPRRGROUPDELETE = (input & (1 << 3)) > 0;\r
+ \r
+ if (OFPRRIDLETIMEOUT) {\r
+ return FlowRemovedReason.forValue(0);\r
+ }\r
+ if (OFPRRHARDTIMEOUT) {\r
+ return FlowRemovedReason.forValue(1);\r
+ }\r
+ if (OFPRRDELETE) {\r
+ return FlowRemovedReason.forValue(2);\r
+ }\r
+ if (OFPRRGROUPDELETE) {\r
+ return FlowRemovedReason.forValue(3);\r
+ }\r
+ \r
+ return reason;\r
+ }\r
+ \r
+ private static boolean comparePIRLists(List<PacketInReason> fromMessage, List<PacketInReason> fromBuffer) {\r
+ boolean result = false;\r
+ int romMessageLength = fromMessage.size();\r
+ for (int i = 0; i < romMessageLength; i++) {\r
+ if ((fromMessage.get(i).getIntValue()) == (fromBuffer.get(i).getIntValue())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+ \r
+ private static boolean comparePortReasonLists(List<PortReason> fromMessage, \r
+ List<PortReason> fromBuffer) {\r
+ boolean result = false;\r
+ int fromMessageLength = fromMessage.size();\r
+ for (int i = 0; i < fromMessageLength; i++) {\r
+ if ((fromMessage.get(i).getIntValue()) == (fromBuffer.get(i).getIntValue())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+ \r
+ private static boolean compareFlowRemovedReasonLists(List<FlowRemovedReason> fromMessage, \r
+ List<FlowRemovedReason> fromBuffer) {\r
+ boolean result = false;\r
+ int fromMessageLength = fromMessage.size();\r
+ for (int i = 0; i < fromMessageLength; i++) {\r
+ if ((fromMessage.get(i).getIntValue()) == (fromBuffer.get(i).getIntValue())) {\r
+ result = true;\r
+ } else {\r
+ result = false;\r
+ break;\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+}\r
factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
\r
BufferHelper.checkHeaderV13(out, MESSAGE_TYPE, 16);\r
- Assert.assertEquals("Wrong TableID", 0x09, out.readByte());\r
+ Assert.assertEquals("Wrong TableID", message.getTableId().getValue().intValue(), out.readByte());\r
out.skipBytes(PADDING_IN_TABLE_MOD_MESSAGE);\r
- Assert.assertEquals("Wrong PortConfig", 33, out.readInt());\r
+ Assert.assertEquals("Wrong PortConfig", message.getConfig(), createPortConfig(out.readInt()));\r
+ }\r
+ \r
+ private static PortConfig createPortConfig(long input){\r
+ final Boolean _portDown = ((input) & (1<<0)) > 0;\r
+ final Boolean _noRecv = ((input) & (1<<2)) > 0;\r
+ final Boolean _noFwd = ((input) & (1<<5)) > 0;\r
+ final Boolean _noPacketIn = ((input) & (1<<6)) > 0;\r
+ return new PortConfig(_noFwd, _noPacketIn, _noRecv, _portDown);\r
}\r
}\r