Merge "Bug:3026 - Echo response timeout needs be exported to configuration"
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / MessageFactory.java
index 2fc0db0c0af3186679fd28db589a8e0cd70caa95..ffc39ebbf1e8f15ba57035c6bc0ed7ef742432fc 100644 (file)
@@ -8,9 +8,12 @@
 package org.opendaylight.openflowplugin.openflow.md.core;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
@@ -23,8 +26,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 public abstract class MessageFactory {
 
     /**
-     * @param helloVersion
-     * @param helloXid
+     * @param helloVersion openflow version for hello message to send to switch
+     * @param helloXid transaction id for hello message
      * @return HelloInput without elements
      */
     public static HelloInput createHelloInput(short helloVersion, long helloXid) {
@@ -32,8 +35,8 @@ public abstract class MessageFactory {
     }
 
     /**
-     * @param highestVersion
-     * @param xid
+     * @param highestVersion highest openflow version
+     * @param xid transaction id
      * @return builder with prepared header
      */
     private static HelloInputBuilder prepareHelloInputBuilder(
@@ -45,19 +48,22 @@ public abstract class MessageFactory {
     }
     
     /**
-     * @param helloVersion
-     * @param helloXid
-     * @param versionOrder
+     * @param helloVersion openflow version for hello message to send to switch
+     * @param helloXid transaction id for hello message
+     * @param versionOrder list of openflow version in order
      * @return HelloInput with elements (version bitmap)
      */
     public static HelloInput createHelloInput(short helloVersion, long helloXid, List<Short> versionOrder) {
         HelloInputBuilder helloInputbuilder = prepareHelloInputBuilder(helloVersion, helloXid);
         if (versionOrder != null) {
-            List<Elements> elementList = new ArrayList<>();
             
             ElementsBuilder elementsBuilder = new ElementsBuilder();
             elementsBuilder.setType(HelloElementType.VERSIONBITMAP);
-            List<Boolean> booleanList = new ArrayList<>();
+            int resultVersionListSize = 0;
+            if (!versionOrder.isEmpty()) {
+                resultVersionListSize = versionOrder.get(0) + 1;
+            }
+            List<Boolean> booleanList = new ArrayList<>(resultVersionListSize);
             
             int versionOrderIndex = versionOrder.size() - 1;
             
@@ -72,9 +78,54 @@ public abstract class MessageFactory {
             }
             
             elementsBuilder.setVersionBitmap(booleanList);
-            elementList.add(elementsBuilder.build());
+
+            List<Elements> elementList = Collections.singletonList(elementsBuilder.build());
             helloInputbuilder.setElements(elementList);
         }
         return helloInputbuilder.build();
     }
+
+    /**
+     * @param elements list of versions
+     * @return version boolean list
+     */
+    public static List<Boolean> digVersions(List<Elements> elements) {
+        List<Boolean> result = null;
+        if (elements != null && !elements.isEmpty()) {
+            for (Elements elm : elements) {
+                if (HelloElementType.VERSIONBITMAP.equals(elm.getType())) {
+                    result = elm.getVersionBitmap();
+                }
+            }
+        }
+        return result;
+    }
+    
+    /**
+     * @param ofVersion  openflow version
+     * @param ofXid transaction id
+     * @return barrier message
+     */
+    public static BarrierInput createBarrier(short ofVersion, long ofXid) {
+        BarrierInputBuilder barrierInput = new BarrierInputBuilder();
+        barrierInput.setVersion(ofVersion);
+        barrierInput.setXid(ofXid);
+        return barrierInput.build();
+    }
+    
+//    /**
+//     * @param input
+//     * @param cookie
+//     * @param session
+//     * @param messageService 
+//     * @return barrier result
+//     */
+//    public static Future<RpcResult<BarrierOutput>> sendBarrier(
+//            SwitchConnectionDistinguisher cookie, SessionContext session, 
+//            IMessageDispatchService messageService) {
+//        BarrierInputBuilder barrierInput = new BarrierInputBuilder();
+//        barrierInput.setVersion(session.getFeatures().getVersion());
+//        barrierInput.setXid(session.getNextXid());
+//        return messageService.barrier(barrierInput.build(), cookie);
+//    }
 }