Performacne improvements via adding a netty-based openflowj and openflow plugin;...
[controller.git] / opendaylight / protocol_plugins / openflow_netty / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / core / internal / OpenflowPipelineFactory.java
diff --git a/opendaylight/protocol_plugins/openflow_netty/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/core/internal/OpenflowPipelineFactory.java b/opendaylight/protocol_plugins/openflow_netty/src/main/java/org/opendaylight/controller/protocol_plugin/openflow/core/internal/OpenflowPipelineFactory.java
new file mode 100644 (file)
index 0000000..3414632
--- /dev/null
@@ -0,0 +1,66 @@
+package org.opendaylight.controller.protocol_plugin.openflow.core.internal;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+import org.jboss.netty.channel.ChannelPipeline;
+import org.jboss.netty.channel.ChannelPipelineFactory;
+import org.jboss.netty.channel.Channels;
+import org.jboss.netty.handler.execution.ExecutionHandler;
+import org.jboss.netty.handler.timeout.IdleStateHandler;
+import org.jboss.netty.handler.timeout.ReadTimeoutHandler;
+import org.jboss.netty.util.HashedWheelTimer;
+import org.jboss.netty.util.Timer;
+
+/**
+ * Creates a ChannelPipeline for a server-side openflow channel
+ * @author readams
+ */
+public class OpenflowPipelineFactory implements ChannelPipelineFactory {
+
+    private static final int READ_TIMEOUT = 30;
+    private static final int READER_IDLE_TIMEOUT = 20;
+    private static final int WRITER_IDLE_TIMEOUT = 25;
+    private static final int ALL_IDLE_TIMEOUT = 0;
+
+    protected EnhancedController controller;
+    protected ThreadPoolExecutor pipelineExecutor;
+    protected Timer timer;
+    protected IdleStateHandler idleHandler;
+    protected ReadTimeoutHandler readTimeoutHandler;
+
+    public OpenflowPipelineFactory(EnhancedController controller,
+                                   ThreadPoolExecutor pipelineExecutor) {
+        super();
+        this.controller = controller;
+        this.pipelineExecutor = pipelineExecutor;
+        this.timer = new HashedWheelTimer();
+        this.idleHandler = new IdleStateHandler(timer, READER_IDLE_TIMEOUT, WRITER_IDLE_TIMEOUT, ALL_IDLE_TIMEOUT);
+        this.readTimeoutHandler = new ReadTimeoutHandler(timer, READ_TIMEOUT);
+    }
+
+    @Override
+    public ChannelPipeline getPipeline() throws Exception {
+        //OFChannelState state = new OFChannelState();
+
+
+        ChannelPipeline pipeline = Channels.pipeline();
+
+        /*
+        if (pipelineExecutor != null)
+            pipeline.addLast("pipelineExecutor",
+                             new ExecutionHandler(pipelineExecutor));*/
+        pipeline.addLast("ofmessagedecoder", new OFMessageDecoder());
+        pipeline.addLast("ofmessageencoder", new OFMessageEncoder());
+        pipeline.addLast("idle", idleHandler);
+        //pipeline.addLast("timeout", readTimeoutHandler);
+        //pipeline.addLast("handshaketimeout",
+        //                 new HandshakeTimeoutHandler(state, timer, 15));
+
+        /*
+        if (pipelineExecutor != null)
+            pipeline.addLast("pipelineExecutor",
+                             new ExecutionHandler(pipelineExecutor));*/
+        pipeline.addLast("handler", controller.getChannelHandler());
+        return pipeline;
+    }
+}
\ No newline at end of file