GetAsyncReplyMessageFactory, QueueGetConfigReplyMessageFactoryTest 35/1435/4
authorTimotej Kubas <timotej.kubas@pantheon.sk>
Tue, 24 Sep 2013 08:58:54 +0000 (10:58 +0200)
committerTimotej Kubas <timotej.kubas@pantheon.sk>
Thu, 26 Sep 2013 14:07:29 +0000 (16:07 +0200)
adding new serialization/deserialization factories

Change-Id: Ib39c1c28f4146791d16f1b56d25231ecb61ae3df
Signed-off-by: Timotej Kubas <timotej.kubas@pantheon.sk>
17 files changed:
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/OFSerializer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/BarrierInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/EchoInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/EchoReplyInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/ExperimenterInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetConfigInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetFeaturesInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetQueueConfigInputMessageFactory.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/HelloInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/PacketOutInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/RoleRequestInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/SetConfigMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/TableModInputMessageFactory.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/util/ByteBufUtils.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactoryTest.java [new file with mode: 0644]
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetQueueConfigInputMessageFactoryTest.java [new file with mode: 0644]
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/TableModInputMessageFactoryTest.java [new file with mode: 0644]

index b8d16c53486742f0f77bde0675debb8f5b8aeb22..bbd70fe573e2a40ddbdf755ec07e0640dcedb6c7 100644 (file)
@@ -19,4 +19,16 @@ public interface OFSerializer <E extends DataObject> {
      * @param message message that will be transformed into ByteBuf\r
      */\r
     public abstract void messageToBuffer(short version, ByteBuf out, E message);\r
+    \r
+    /**\r
+     * Compute length of received message\r
+     * @return computed length\r
+     */\r
+    public abstract int computeLength();\r
+    \r
+    /**\r
+     * \r
+     * @return message code type\r
+     */\r
+    public byte getMessageType();\r
 }\r
index 3d74d7cab64be58b85a7850048a77d2209033432..4d4fe92b1df5f1439ff7389faa35f66a69038e54 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.BarrierInput;\r
 \r
 /**\r
@@ -16,6 +16,7 @@ public class BarrierInputMessageFactory implements OFSerializer<BarrierInput> {
     /** Code type of BarrierRequest message */\r
     public static final byte MESSAGE_TYPE = 20;\r
     private static BarrierInputMessageFactory instance;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     \r
     private BarrierInputMessageFactory() {\r
         // do nothing, just singleton\r
@@ -33,10 +34,16 @@ public class BarrierInputMessageFactory implements OFSerializer<BarrierInput> {
     \r
     @Override\r
     public void messageToBuffer(short version, ByteBuf out, BarrierInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, 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
index 6d799fe43b3026bdc655a1abe5db3502af5944d0..a45ce0ca3306e4685e0671167bb4359230b4a316 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.EchoInput;\r
 \r
 /**\r
@@ -16,6 +16,7 @@ public class EchoInputMessageFactory implements OFSerializer<EchoInput> {
     /** Code type of EchoRequest message */\r
     public static final byte MESSAGE_TYPE = 2;\r
     private static EchoInputMessageFactory instance;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     \r
     private EchoInputMessageFactory() {\r
         // do nothing, just singleton\r
@@ -33,10 +34,17 @@ public class EchoInputMessageFactory implements OFSerializer<EchoInput> {
 \r
     @Override\r
     public void messageToBuffer(short version, ByteBuf out, EchoInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, 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
 }\r
index 3b3e188ebcbff597a1d233d013159ba325138792..be44e0dd01f6acfb7c294a9002edae469af0cc51 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.EchoReplyInput;\r
 \r
 /**\r
@@ -15,6 +15,7 @@ public class EchoReplyInputMessageFactory implements OFSerializer<EchoReplyInput
 \r
     /** Code type of EchoReply message */\r
     public static final byte MESSAGE_TYPE = 3;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static EchoReplyInputMessageFactory instance;\r
     \r
     private EchoReplyInputMessageFactory() {\r
@@ -34,9 +35,16 @@ public class EchoReplyInputMessageFactory implements OFSerializer<EchoReplyInput
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             EchoReplyInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, 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
index fde8713323fbfa251803ba1dac43e5b0dc086c0c..351d7c0966b6c792a51da108f65a47f405fe79a3 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.ExperimenterInput;\r
 \r
 /**\r
@@ -15,6 +15,7 @@ public class ExperimenterInputMessageFactory implements OFSerializer<Experimente
 \r
     /** Code type of Experimenter message */\r
     public static final byte MESSAGE_TYPE = 4;\r
+    private static final int MESSAGE_LENGTH = 16;\r
     private static ExperimenterInputMessageFactory instance;\r
     \r
     private ExperimenterInputMessageFactory() {\r
@@ -34,12 +35,20 @@ public class ExperimenterInputMessageFactory implements OFSerializer<Experimente
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             ExperimenterInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER + (Integer.SIZE/Byte.SIZE)*2);\r
-        out.writeInt(message.getXid().intValue());\r
+        \r
+        ByteBufUtils.writeOFHeader(instance, message, out);\r
         out.writeInt(message.getExperimenter().intValue());\r
         out.writeInt(message.getExpType().intValue());\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
 }\r
index b722dae6ca774088150812f0b2ef6be8327c4a60..d24b713cf7e4e7974128ea4d541427687be3f947 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.GetConfigInput;\r
 \r
 /**\r
@@ -15,6 +15,7 @@ public class GetConfigInputMessageFactory implements OFSerializer<GetConfigInput
 \r
     /** Code type of GetConfigRequest message */\r
     public static final byte MESSAGE_TYPE = 7;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static GetConfigInputMessageFactory instance;\r
     \r
     private GetConfigInputMessageFactory() {\r
@@ -34,11 +35,17 @@ public class GetConfigInputMessageFactory implements OFSerializer<GetConfigInput
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             GetConfigInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
-        \r
+        ByteBufUtils.writeOFHeader(instance, message, 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
 }\r
index de5cb5df196bb75167b7553d42710743698af848..21911270de960404105043ba9431f8a297a77b4b 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.GetFeaturesInput;\r
 \r
 /**\r
@@ -15,6 +15,7 @@ public class GetFeaturesInputMessageFactory implements OFSerializer<GetFeaturesI
 \r
     /** Code type of FeaturesRequest message */\r
     public static final byte MESSAGE_TYPE = 5;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static GetFeaturesInputMessageFactory instance;\r
     \r
     private GetFeaturesInputMessageFactory() {\r
@@ -34,10 +35,17 @@ public class GetFeaturesInputMessageFactory implements OFSerializer<GetFeaturesI
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             GetFeaturesInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, 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
 }\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetQueueConfigInputMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetQueueConfigInputMessageFactory.java
new file mode 100644 (file)
index 0000000..27ebe73
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigInput;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class GetQueueConfigInputMessageFactory implements OFSerializer<GetQueueConfigInput> {
+
+    private static final byte MESSAGE_TYPE = 22;
+    private static final byte PADDING_IN_GET_QUEUE_CONFIG_MESSAGE = 4;
+    private static final int MESSAGE_LENGTH = 16;
+    
+    private static GetQueueConfigInputMessageFactory instance;
+    
+    private GetQueueConfigInputMessageFactory() {
+        // singleton
+    }
+    
+    
+    /**
+     * @return singleton factory
+     */
+    public static GetQueueConfigInputMessageFactory getInstance(){
+        
+        if(instance == null){
+            instance = new GetQueueConfigInputMessageFactory();
+        }
+        
+        return instance;
+    }
+    
+    @Override
+    public void messageToBuffer(short version, ByteBuf out, GetQueueConfigInput message){
+        ByteBufUtils.writeOFHeader(instance, message, out);
+        out.writeInt(message.getPort().getValue().intValue());
+        ByteBufUtils.padBuffer(PADDING_IN_GET_QUEUE_CONFIG_MESSAGE, out);
+    }
+
+    @Override
+    public int computeLength(){
+        return MESSAGE_LENGTH;
+    }
+
+    @Override
+    public byte getMessageType() {
+        return MESSAGE_TYPE;
+    }
+}
index ea03326dbcda35bcf8b92395cedfecc3dbf0a932..c9b2456146a251a001855095e55025a96f747d5f 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.HelloInput;\r
 \r
 /**\r
@@ -15,6 +15,7 @@ public class HelloInputMessageFactory implements OFSerializer<HelloInput>{
 \r
     /** Code type of Hello message */\r
     public static final byte MESSAGE_TYPE = 0;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static HelloInputMessageFactory instance;\r
     \r
     private HelloInputMessageFactory() {\r
@@ -33,11 +34,18 @@ public class HelloInputMessageFactory implements OFSerializer<HelloInput>{
 \r
     @Override\r
     public void messageToBuffer(short version, ByteBuf out, HelloInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, out);\r
         // TODO - fill list of elements into ByteBuf, check length too\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
 }\r
index 9a16738b2bfdbcbc0158d23b98bcaa0b3dab5718..36842d660b6697a4a1a23a9731a345621e6972a2 100644 (file)
@@ -3,7 +3,6 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.PacketOutInput;\r
@@ -16,6 +15,7 @@ public class PacketOutInputMessageFactory implements OFSerializer<PacketOutInput
 \r
     /** Code type of PacketOut message */\r
     public static final byte MESSAGE_TYPE = 13;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static final byte PADDING_IN_PACKET_OUT_MESSAGE = 6;\r
     private static PacketOutInputMessageFactory instance;\r
     \r
@@ -36,10 +36,7 @@ public class PacketOutInputMessageFactory implements OFSerializer<PacketOutInput
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             PacketOutInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, out);\r
         out.writeInt(message.getBufferId().intValue());\r
         out.writeInt(message.getInPort().getValue().intValue());\r
         // TODO - finish implementation after Action serialization is done\r
@@ -48,4 +45,14 @@ public class PacketOutInputMessageFactory implements OFSerializer<PacketOutInput
        \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
 }\r
index cdea17c1f746643ee8b0056afa308514c35239d1..04200d117f8aeda7af7f68e44d838042a2ad0d95 100644 (file)
@@ -3,7 +3,6 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.RoleRequestInput;\r
@@ -16,6 +15,7 @@ public class RoleRequestInputMessageFactory implements OFSerializer<RoleRequestI
 \r
     /** Code type of RoleRequest message */\r
     public static final byte MESSAGE_TYPE = 24;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static final byte PADDING_IN_ROLE_REQUEST_MESSAGE = 4;\r
     private static RoleRequestInputMessageFactory instance;\r
     \r
@@ -36,13 +36,20 @@ public class RoleRequestInputMessageFactory implements OFSerializer<RoleRequestI
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             RoleRequestInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, out);\r
         out.writeInt(message.getRole().getIntValue());\r
         ByteBufUtils.padBuffer(PADDING_IN_ROLE_REQUEST_MESSAGE, out);\r
         out.writeLong(message.getGenerationId().longValue());\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
 }\r
index ec08e81baa290c07cc94b2831e4415934ebaa953..a5717cc1010ac4ff47de971086bab1ccba0c4db5 100644 (file)
@@ -3,8 +3,8 @@ package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
 \r
 import io.netty.buffer.ByteBuf;\r
 \r
-import org.opendaylight.openflowjava.protocol.impl.core.OFFrameDecoder;\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.SetConfigInput;\r
 \r
 /**\r
@@ -15,6 +15,7 @@ public class SetConfigMessageFactory implements OFSerializer<SetConfigInput> {
 \r
     /** Code type of SetConfig message */\r
     public static final byte MESSAGE_TYPE = 9;\r
+    private static final int MESSAGE_LENGTH = 8;\r
     private static SetConfigMessageFactory instance;\r
     \r
     private SetConfigMessageFactory() {\r
@@ -34,13 +35,20 @@ public class SetConfigMessageFactory implements OFSerializer<SetConfigInput> {
     @Override\r
     public void messageToBuffer(short version, ByteBuf out,\r
             SetConfigInput message) {\r
-        out.writeByte(message.getVersion());\r
-        out.writeByte(MESSAGE_TYPE);\r
-        out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
-        out.writeInt(message.getXid().intValue());\r
+        ByteBufUtils.writeOFHeader(instance, message, out);\r
         // TODO - finish implementation after enums provide needed funcionality\r
         out.writeShort(message.getFlags().getIntValue());\r
         out.writeShort(message.getMissSendLen());\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
 }\r
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/TableModInputMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/TableModInputMessageFactory.java
new file mode 100644 (file)
index 0000000..718d93d
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class TableModInputMessageFactory implements OFSerializer<TableModInput> {
+
+    private static final byte MESSAGE_TYPE = 17;
+    private static final byte PADDING_IN_TABLE_MOD_MESSAGE = 3;
+    private static final int MESSAGE_LENGTH = 16;
+    private static TableModInputMessageFactory instance;
+    
+    private TableModInputMessageFactory() {
+        // just singleton
+    }
+    
+    /**
+     * @return singleton factory
+     */
+    public static TableModInputMessageFactory getInstance() {
+        if(instance == null){
+            instance = new TableModInputMessageFactory();
+        }
+        return instance;
+    }
+    
+    @Override
+    public void messageToBuffer(short version, ByteBuf out, TableModInput message) {
+        
+        ByteBufUtils.writeOFHeader(instance, message, out);
+        out.writeByte(message.getTableId().getValue().byteValue());
+        ByteBufUtils.padBuffer(PADDING_IN_TABLE_MOD_MESSAGE, out);
+        out.writeInt(createConfigBitmask(message.getConfig()));
+    }
+
+    @Override
+    public int computeLength() {
+        return MESSAGE_LENGTH;
+    }
+
+    @Override
+    public byte getMessageType() {
+        return MESSAGE_TYPE;
+    }
+    
+    /**
+     * @param config
+     * @return port config bitmask 
+     */
+    private static int createConfigBitmask(PortConfig config) {
+        int configBitmask = 0;
+        Map<Integer, Boolean> portConfigMap = new HashMap<>();
+        portConfigMap.put(0, config.isPortDown());
+        portConfigMap.put(2, config.isNoRecv());
+        portConfigMap.put(5, config.isNoFwd());
+        portConfigMap.put(6, config.isNoPacketIn());
+        
+        configBitmask = ByteBufUtils.fillBitMaskFromMap(portConfigMap);
+        return configBitmask;
+    }
+}
index 3f5e360005dccb1699ecd43f15a70909a29e7817..a4fe74588199cf43aabef1a0e2210b6f3affe598 100644 (file)
@@ -5,6 +5,12 @@ package org.opendaylight.openflowjava.protocol.impl.util;
 import io.netty.buffer.ByteBuf;\r
 import io.netty.buffer.UnpooledByteBufAllocator;\r
 \r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;\r
+\r
 /** Class for common operations on ByteBuf\r
  *\r
  * @author michal.polkorab\r
@@ -69,4 +75,34 @@ public abstract class ByteBufUtils {
             out.writeByte(0);\r
         }\r
     }\r
+    \r
+    /**\r
+     * Create standard OF header\r
+     * @param factory serialization factory \r
+     * @param message POJO\r
+     * @param out writing buffer\r
+     */\r
+    public static void writeOFHeader(OFSerializer<?> factory, OfHeader message, ByteBuf out) { \r
+        out.writeByte(message.getVersion());\r
+        out.writeByte(factory.getMessageType());\r
+        out.writeShort(factory.computeLength());\r
+        out.writeInt(message.getXid().intValue());\r
+\r
+    }\r
+\r
+    /**\r
+     * Fills the bitmask from boolean map where key is bit position\r
+     * @param booleanMap bit to boolean mapping\r
+     * @return bit mask\r
+     */\r
+    public static int fillBitMaskFromMap(Map<Integer, Boolean> booleanMap) {\r
+        int bitmask = 0;\r
+        \r
+        for (Entry<Integer, Boolean> iterator : booleanMap.entrySet()) {\r
+            if (iterator.getValue() != null && iterator.getValue().booleanValue()) {\r
+                bitmask |= 1 << iterator.getKey();\r
+            }\r
+        }\r
+        return bitmask;\r
+    }\r
 }\r
diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactoryTest.java
new file mode 100644 (file)
index 0000000..74c9a37
--- /dev/null
@@ -0,0 +1,89 @@
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Comparator;\r
+import java.util.List;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\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.QueueId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.Properties;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.PropertiesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
+\r
+import com.google.common.collect.ComparisonChain;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class QueueGetConfigReplyMessageFactoryTest {\r
+\r
+    @Test\r
+    public void test(){\r
+        ByteBuf bb = BufferHelper.buildBuffer("00 01 02 03 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00");\r
+        GetQueueConfigOutput builtByFactory = BufferHelper.decodeV13(QueueGetConfigReplyMessageFactory.getInstance(), bb);\r
+        BufferHelper.checkHeaderV13(builtByFactory);\r
+        Assert.assertTrue("Wrong port",66051L == builtByFactory.getPort().getValue());\r
+        Assert.assertTrue("Wrong queues", true == compareLists(builtByFactory.getQueues(), createQueuesList()));\r
+    }\r
+    \r
+    public List<Queues> createQueuesList(){\r
+        final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;\r
+        List<Queues> queuesList = new ArrayList<Queues>();\r
+        QueuesBuilder qb = new QueuesBuilder();\r
+        qb.setQueueId(new QueueId((long) 1));\r
+        qb.setPort(new PortNumber((long) 1));\r
+        qb.setProperties(createPropertiesList());\r
+        queuesList.add(qb.build());\r
+        \r
+        return queuesList;\r
+    }\r
+    \r
+    public List<Properties> createPropertiesList(){\r
+        final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
+        List<Properties> propertiesList = new ArrayList<Properties>();\r
+        PropertiesBuilder pb = new PropertiesBuilder();\r
+        pb.setProperty(QueueProperty.values()[2]);\r
+        propertiesList.add(pb.build());\r
+        \r
+        return propertiesList;\r
+    }\r
+    \r
+    public boolean compareLists(List<Queues> originalList, List<Queues> testList){\r
+        boolean decision = false;\r
+        int originalListLength = originalList.size();\r
+        int testListLength = testList.size();\r
+        \r
+        for(int i=0; i<originalListLength; i++){\r
+            if(originalList.get(i).getPort().equals(testList.get(i).getPort())) {\r
+                decision = true;\r
+            } else {\r
+                decision = false;\r
+                break;\r
+            }\r
+            if(originalList.get(i).getQueueId().equals(testList.get(i).getQueueId())) {\r
+                decision = true;\r
+            } else {\r
+                decision = false;\r
+                break;\r
+            }\r
+            if(originalList.get(i).getProperties().get(0).getProperty().equals(\r
+                    testList.get(i).getProperties().get(0).getProperty())) {\r
+                decision = true;\r
+            } else {\r
+                decision = false;\r
+                break;\r
+            }\r
+        }\r
+        return decision;\r
+    }\r
+}\r
diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetQueueConfigInputMessageFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/GetQueueConfigInputMessageFactoryTest.java
new file mode 100644 (file)
index 0000000..0f2a541
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import static org.junit.Assert.*;
+import junit.framework.Assert;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.UnpooledByteBufAllocator;
+
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigInputBuilder;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class GetQueueConfigInputMessageFactoryTest {
+
+    private static final byte GET_QUEUE_CONFIG_INPUT_MESSAGE_CODE_TYPE = 22;
+    private static final byte PADDING_IN_QUEUE_CONFIG_INPUT_MESSAGE = 4;
+    
+    @Test
+    public void testWithElements() throws Exception {
+        GetQueueConfigInputBuilder builder = new GetQueueConfigInputBuilder();
+        BufferHelper.setupHeader(builder);
+        builder.setPort(new PortNumber(0x00010203L));
+        GetQueueConfigInput message = builder.build();
+        
+        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+        GetQueueConfigInputMessageFactory factory = GetQueueConfigInputMessageFactory.getInstance();
+        factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+        
+        BufferHelper.checkHeaderV13(out, GET_QUEUE_CONFIG_INPUT_MESSAGE_CODE_TYPE, 16);
+        Assert.assertEquals("Wrong port", 0x00010203, out.readUnsignedInt());
+        out.skipBytes(PADDING_IN_QUEUE_CONFIG_INPUT_MESSAGE);
+    }
+        
+}
diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/TableModInputMessageFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/TableModInputMessageFactoryTest.java
new file mode 100644 (file)
index 0000000..463caf9
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import junit.framework.Assert;
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInputBuilder;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class TableModInputMessageFactoryTest {
+    
+    private static final byte MESSAGE_TYPE = 17;
+    private static final byte PADDING_IN_TABLE_MOD_MESSAGE = 3;
+    
+    @Test
+    public void testTableModInput() throws Exception {
+        TableModInputBuilder builder = new TableModInputBuilder();
+        BufferHelper.setupHeader(builder);
+        builder.setTableId(new TableId(9L));
+        builder.setConfig(new PortConfig(true, false, true, false));
+        TableModInput message = builder.build();
+        
+        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+        TableModInputMessageFactory factory = TableModInputMessageFactory.getInstance();
+        factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+        
+        BufferHelper.checkHeaderV13(out, MESSAGE_TYPE, 16);
+        Assert.assertEquals("Wrong TableID", 0x09, out.readByte());
+        out.skipBytes(PADDING_IN_TABLE_MOD_MESSAGE);
+        Assert.assertEquals("Wrong PortConfig", 33, out.readInt());
+    }
+}