Work on adding multiple bridges. 34/634/1
authorEvan Zeller <evanrzeller@gmail.com>
Tue, 23 Jul 2013 21:44:16 +0000 (17:44 -0400)
committerEvan Zeller <evanrzeller@gmail.com>
Tue, 23 Jul 2013 21:44:16 +0000 (17:44 -0400)
Signed-off-by: Evan Zeller <evanrzeller@gmail.com>
ovsdb/src/main/java/org/opendaylight/ovsdb/database/OVSInstance.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/ConfigurationService.java
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/Connection.java
ovsdb/src/main/java/org/opendaylight/ovsdb/internal/UpdateRequest.java [new file with mode: 0755]
ovsdb/src/main/java/org/opendaylight/ovsdb/sal/configuration/IPluginInNetworkConfigurationService.java
ovsdb/src/test/java/org/opendaylight/ovsdb/OvsdbTestAddBridge.java

diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/database/OVSInstance.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/database/OVSInstance.java
new file mode 100755 (executable)
index 0000000..1715879
--- /dev/null
@@ -0,0 +1,15 @@
+package org.opendaylight.ovsdb.database;\r
+\r
+\r
+public class OVSInstance {\r
+    private String uuid;\r
+\r
+    public OVSInstance(String uuid){\r
+        this.uuid = uuid;\r
+    }\r
+\r
+    public String getUuid(){\r
+        return this.uuid;\r
+    }\r
+\r
+}\r
index 9eba59690ee99e8e88085c0037717073165e93a5..8e8bf2832ab3395fd683fab11ec04feb0cd8fa35 100755 (executable)
@@ -3,6 +3,7 @@ package org.opendaylight.ovsdb.internal;
 import java.net.InetAddress;
 import java.util.*;
 
+import org.opendaylight.ovsdb.database.OVSInstance;
 import org.opendaylight.ovsdb.sal.configuration.IPluginInNetworkConfigurationService;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
@@ -56,63 +57,113 @@ public class ConfigurationService implements IPluginInNetworkConfigurationServic
         }
     }
 
+    private OvsdbMessage createAddBridgeMonitorMsg(){
+        Map<String, Object> tables = new HashMap<String, Object>();
+        Map<String, Object> row = new HashMap<String, Object>();
+        ArrayList<String> columns = new ArrayList<String>();
+
+        columns.add("_uuid");
+        columns.add("bridges");
+        row.put("columns", columns);
+        tables.put("Open_vSwitch", row);
+
+        Object[] params = {"Open_vSwitch", null, tables};
+
+        OvsdbMessage msg = new OvsdbMessage("monitor", params);
+        return msg;
+    }
+
     @Override
-    public boolean createBridgeDomain(Node node, String bridgeIdentifier){
-        if (connectionService == null) {
-            logger.error("Couldnt refer to the ConnectionService");
-            return false;
-        }
-        Connection connection = connectionService.getConnection(node);
-        String identifier = "TEST";
-
-        if (connection != null) {
-            String newBridge = "new_bridge";
-            String newInterface = "new_interface";
-            String newPort = "new_port";
-            String newSwitch = "new_switch";
-
-            Map<String, Object> bridgeRow = new HashMap<String, Object>();
-            bridgeRow.put("name", "br1");
-            ArrayList<String> ports = new ArrayList<String>();
-            ports.add("named-uuid");
-            ports.add(newPort);
-            bridgeRow.put("ports", ports);
-            InsertRequest addBridgeRequest = new InsertRequest("insert", "Bridge", newBridge, bridgeRow);
-
-            Map<String, Object> portRow = new HashMap<String, Object>();
-            portRow.put("name", "br1");
-            ArrayList<String> interfaces = new ArrayList<String>();
-            interfaces.add("named-uuid");
-            interfaces.add(newInterface);
-            portRow.put("interfaces", interfaces);
-            InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
-
-            Map<String, Object> interfaceRow = new HashMap<String, Object>();
-            interfaceRow.put("name", "br1");
-            interfaceRow.put("type", "internal");
-            InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);
-
-            Map<String, Object> vswitchRow = new HashMap<String, Object>();
-            ArrayList<String> bridges = new ArrayList<String>();
-            bridges.add("named-uuid");
-            bridges.add(newBridge);
-            vswitchRow.put("bridges", bridges);
-            InsertRequest addSwitchRequest = new InsertRequest("insert", "Open_vSwitch", newSwitch, vswitchRow);
-
-            Object[] params = {"Open_vSwitch", addSwitchRequest, addIntfRequest, addPortRequest, addBridgeRequest};
-            OvsdbMessage msg = new OvsdbMessage("transact", params);
-            try {
+    @SuppressWarnings("unchecked")
+    public boolean createBridgeDomain(Node node, String bridgeIdentifier) throws Throwable{
+        try{
+            if (connectionService == null) {
+                logger.error("Couldn't refer to the ConnectionService");
+                return false;
+            }
+
+            Connection connection = connectionService.getConnection(node);
+            String identifier = "TEST";
+
+            if (connection != null) {
+                String newBridge = "new_bridge";
+                String newInterface = "new_interface";
+                String newPort = "new_port";
+                String newSwitch = "new_switch";
+
+                Object addSwitchRequest;
+
+                OvsdbMessage monitorMsg = createAddBridgeMonitorMsg();
+
+                connection.sendMessage(monitorMsg);
+                Map<String, Object> monitorResponse = (Map) connection.readResponse(Map.class);
+
+                if(monitorResponse.get("Open_vSwitch") != null){
+                    Map<String, Object> rows = (Map) monitorResponse.get("Open_vSwitch");
+                    Object[] rowsArray = rows.keySet().toArray();
+                    OVSInstance instance = new OVSInstance((String)rowsArray[0]);
+
+                    Map<String, Object> vswitchRow = new HashMap<String, Object>();
+                    ArrayList<Object> bridges = new ArrayList<Object>();
+                    bridges.add("set");
+                    ArrayList<Object> set = new ArrayList<Object>();
+                    ArrayList<String> newPair = new ArrayList<String>();
+                    newPair.add("named-uuid");
+                    newPair.add(newBridge);
+                    set.add(newPair);
+                    bridges.add(set);
+                    vswitchRow.put("bridges", bridges);
+
+                    ArrayList<Object> where = new ArrayList<Object>();
+                    ArrayList<Object> whereInner = new ArrayList<Object>();
+                    ArrayList<String> uuidPair = new ArrayList<String>();
+                    whereInner.add("_uuid");
+                    whereInner.add("==");
+                    uuidPair.add("uuid");
+                    uuidPair.add(instance.getUuid());
+                    whereInner.add(uuidPair);
+                    where.add(whereInner);
+
+                    addSwitchRequest = new UpdateRequest("update", "Open_vSwitch", where, vswitchRow);
+                }
+                else{
+                    Map<String, Object> vswitchRow = new HashMap<String, Object>();
+                    ArrayList<String> bridges = new ArrayList<String>();
+                    bridges.add("named-uuid");
+                    bridges.add(newBridge);
+                    vswitchRow.put("bridges", bridges);
+                    addSwitchRequest = new InsertRequest("insert", "Open_vSwitch", newSwitch, vswitchRow);
+                }
+
+                Map<String, Object> bridgeRow = new HashMap<String, Object>();
+                bridgeRow.put("name", "br1");
+                ArrayList<String> ports = new ArrayList<String>();
+                ports.add("named-uuid");
+                ports.add(newPort);
+                bridgeRow.put("ports", ports);
+                InsertRequest addBridgeRequest = new InsertRequest("insert", "Bridge", newBridge, bridgeRow);
+
+                Map<String, Object> portRow = new HashMap<String, Object>();
+                portRow.put("name", "br1");
+                ArrayList<String> interfaces = new ArrayList<String>();
+                interfaces.add("named-uuid");
+                interfaces.add(newInterface);
+                portRow.put("interfaces", interfaces);
+                InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
+
+                Map<String, Object> interfaceRow = new HashMap<String, Object>();
+                interfaceRow.put("name", "br1");
+                interfaceRow.put("type", "internal");
+                InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);
+
+                Object[] params = {"Open_vSwitch", addSwitchRequest, addIntfRequest, addPortRequest, addBridgeRequest};
+                OvsdbMessage msg = new OvsdbMessage("transact", params);
+
                 connection.sendMessage(msg);
                 connection.readResponse(Uuid[].class);
-            } catch (Exception e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-                return false;
-            } catch (Throwable e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-                return false;
             }
+        }catch(Exception e){
+            e.printStackTrace();
         }
         return true;
     }
index e89146f7d46171d84d9013cd7bf6757dbf8b96b4..fb23eb289ff9ac5e57f136d115a0966f2867e2d6 100755 (executable)
@@ -1,6 +1,7 @@
 package org.opendaylight.ovsdb.internal;
 import java.io.IOException;
 import java.net.Socket;
+import java.util.Map;
 
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.utils.Status;
@@ -97,6 +98,10 @@ public class Connection implements RequestListener {
                 Uuid[] result = this.rpcClient.readResponse(Uuid[].class, socket.getInputStream());
                 return result;
             }
+            else if(clazz.equals(Map.class)){
+                Map result = this.rpcClient.readResponse(Map.class, socket.getInputStream());
+                return result;
+            }
             else{
                 ObjectNode jsonObject = this.rpcClient.readResponse(ObjectNode.class, socket.getInputStream());
                 ObjectMapper mapper = new ObjectMapper();
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/UpdateRequest.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/internal/UpdateRequest.java
new file mode 100755 (executable)
index 0000000..8763825
--- /dev/null
@@ -0,0 +1,19 @@
+package org.opendaylight.ovsdb.internal;\r
+\r
+\r
+import java.util.ArrayList;\r
+import java.util.Map;\r
+\r
+public class UpdateRequest {\r
+    public String op;\r
+    public String table;\r
+    public ArrayList<Object> where;\r
+    public Map<String, Object> row;\r
+\r
+    public UpdateRequest(String op, String table, ArrayList<Object> where, Map<String, Object> row){\r
+        this.op = op;\r
+        this.table = table;\r
+        this.where = where;\r
+        this.row = row;\r
+    }\r
+}\r
index 59713a0da2e6dd8d7cc5dc047e6797c3e5ccc84c..a2b1b8c42b0ffa7522a4f27ad1ce778a306bb8e8 100755 (executable)
@@ -17,7 +17,7 @@ public interface IPluginInNetworkConfigurationService {
      * @param node Node serving this configuration service
      * @param bridgeDomainIdentifier String representation of a Bridge Domain
      */
-    public boolean createBridgeDomain(Node node, String bridgeIdentifier);
+    public boolean createBridgeDomain(Node node, String bridgeIdentifier) throws Throwable;
 
     /**
      * Delete a Bridge Domain
index e720406548155bb33175f2a9e31555a4a3e85c98..51983096c82990bca40be85fb2bf10274eaecc4c 100755 (executable)
@@ -30,7 +30,7 @@ public class OvsdbTestAddBridge {
 \r
         Node node = connectionService.connect(identifier, params);\r
         if(node == null){\r
-            logger.error("Could not connecto to ovsdb server");\r
+            logger.error("Could not connect to ovsdb server");\r
             return;\r
         }\r
         ConfigurationService configurationService = new ConfigurationService();\r