Bug-1421 - MD-SAL app cannot create a flow entry which adds a VLAN tag with the speci...
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / MessageFactory.java
index 2fc0db0c0af3186679fd28db589a8e0cd70caa95..febf50e48f8994f5ba4e65f1b2fc0f64c251695f 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;
@@ -53,11 +56,14 @@ public abstract class MessageFactory {
     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
+     * @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 
+     * @param ofXid 
+     * @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);
+//    }
 }