package org.opendaylight.ovsdb.database;\r
\r
\r
+import org.opendaylight.ovsdb.internal.Connection;\r
+import org.opendaylight.ovsdb.internal.OvsdbMessage;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
public class OVSInstance {\r
private String uuid;\r
\r
+ public OVSInstance(){\r
+ this.uuid = null;\r
+ }\r
+\r
public OVSInstance(String uuid){\r
this.uuid = uuid;\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ public void monitorOVS(Connection connection){\r
+ List<String> columns = new ArrayList<String>();\r
+ columns.add("_uuid");\r
+ columns.add("bridges");\r
+\r
+ Map<String, List<String>> row = new HashMap<String, List<String>>();\r
+ row.put("columns", columns);\r
+\r
+ Map<String, Map> tables = new HashMap<String, Map>();\r
+ tables.put("Open_vSwitch", row);\r
+\r
+ Object[] params = {"Open_vSwitch", null, tables};\r
+\r
+ OvsdbMessage msg = new OvsdbMessage("monitor", params);\r
+ Map<String, Object> monitorResponse = new HashMap<String, Object>();\r
+\r
+ try{\r
+ connection.sendMessage(msg);\r
+ monitorResponse = (Map<String, Object>) connection.readResponse(Map.class);\r
+ } catch (Throwable e){\r
+ e.printStackTrace();\r
+ }\r
+\r
+ Map<String, Object> vSwitchTable = (Map) monitorResponse.get("Open_vSwitch");\r
+\r
+ this.uuid = (String) vSwitchTable.keySet().toArray()[0];\r
+ }\r
+\r
public String getUuid(){\r
return this.uuid;\r
}\r
}
}
- 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
@SuppressWarnings("unchecked")
public boolean createBridgeDomain(Node node, String bridgeIdentifier) throws Throwable{
Object addSwitchRequest;
- OvsdbMessage monitorMsg = createAddBridgeMonitorMsg();
+ OVSInstance instance = new OVSInstance();
+ instance.monitorOVS(connection);
- connection.sendMessage(monitorMsg);
- Map<String, Object> monitorResponse = (Map) connection.readResponse(Map.class);
+ if(instance.getUuid() != null){
+ List<String> bridgeUuidPair = new ArrayList<String>();
+ bridgeUuidPair.add("named-uuid");
+ bridgeUuidPair.add(newBridge);
- 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]);
+ List<Object> mutation = new ArrayList<Object>();
+ mutation.add("bridges");
+ mutation.add("insert");
+ mutation.add(bridgeUuidPair);
- 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);
+ List<Object> mutations = new ArrayList<Object>();
+ mutations.add(mutation);
- ArrayList<Object> where = new ArrayList<Object>();
- ArrayList<Object> whereInner = new ArrayList<Object>();
- ArrayList<String> uuidPair = new ArrayList<String>();
+ List<String> ovsUuidPair = new ArrayList<String>();
+ ovsUuidPair.add("uuid");
+ ovsUuidPair.add(instance.getUuid());
+
+ List<Object> whereInner = new ArrayList<Object>();
whereInner.add("_uuid");
whereInner.add("==");
- uuidPair.add("uuid");
- uuidPair.add(instance.getUuid());
- whereInner.add(uuidPair);
+ whereInner.add(ovsUuidPair);
+
+ List<Object> where = new ArrayList<Object>();
where.add(whereInner);
- addSwitchRequest = new UpdateRequest("update", "Open_vSwitch", where, vswitchRow);
+ addSwitchRequest = new MutateRequest("Open_vSwitch", where, mutations);
}
else{
Map<String, Object> vswitchRow = new HashMap<String, Object>();
}
Map<String, Object> bridgeRow = new HashMap<String, Object>();
- bridgeRow.put("name", "br1");
+ bridgeRow.put("name", bridgeIdentifier);
ArrayList<String> ports = new ArrayList<String>();
ports.add("named-uuid");
ports.add(newPort);
InsertRequest addBridgeRequest = new InsertRequest("insert", "Bridge", newBridge, bridgeRow);
Map<String, Object> portRow = new HashMap<String, Object>();
- portRow.put("name", "br1");
+ portRow.put("name", bridgeIdentifier);
ArrayList<String> interfaces = new ArrayList<String>();
interfaces.add("named-uuid");
interfaces.add(newInterface);
InsertRequest addPortRequest = new InsertRequest("insert", "Port", newPort, portRow);
Map<String, Object> interfaceRow = new HashMap<String, Object>();
- interfaceRow.put("name", "br1");
+ interfaceRow.put("name", bridgeIdentifier);
interfaceRow.put("type", "internal");
InsertRequest addIntfRequest = new InsertRequest("insert", "Interface", newInterface, interfaceRow);