Merge "Add OpenFlow ID to ovsdb-bridge-attributes."
[ovsdb.git] / southbound / southbound-impl / src / main / java / org / opendaylight / ovsdb / southbound / SouthboundMapper.java
index 280df813048444f8804a68940246337872b584b6..425c6d563aee5f8d3c5578d34f585c79b194cabe 100644 (file)
@@ -32,8 +32,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeBase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathTypeSystem;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
@@ -43,9 +43,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
@@ -69,21 +70,20 @@ public class SouthboundMapper {
         nodeBuilder.addAugmentation(OvsdbNodeAugmentation.class, createOvsdbAugmentation(client));
         return nodeBuilder.build();
     }
-    public static Node createNode(OvsdbClientKey key) {
+    public static Node createNode(ConnectionInfo key) {
         NodeBuilder nodeBuilder = new NodeBuilder();
-        nodeBuilder.setNodeId(createNodeId(key.getIp(),key.getPort()));
+        nodeBuilder.setNodeId(createNodeId(key.getRemoteIp(),key.getRemotePort()));
         nodeBuilder.addAugmentation(OvsdbNodeAugmentation.class, createOvsdbAugmentation(key));
         return nodeBuilder.build();
     }
 
     public static OvsdbNodeAugmentation createOvsdbAugmentation(OvsdbClient client) {
-        return createOvsdbAugmentation(new OvsdbClientKey(client));
+        return createOvsdbAugmentation(createConnectionInfo(client));
     }
 
-    public static OvsdbNodeAugmentation createOvsdbAugmentation(OvsdbClientKey key) {
+    public static OvsdbNodeAugmentation createOvsdbAugmentation(ConnectionInfo key) {
         OvsdbNodeAugmentationBuilder ovsdbNodeBuilder = new OvsdbNodeAugmentationBuilder();
-        ovsdbNodeBuilder.setIp(key.getIp());
-        ovsdbNodeBuilder.setPort(key.getPort());
+        ovsdbNodeBuilder.setConnectionInfo(key);
         return ovsdbNodeBuilder.build();
     }
 
@@ -120,12 +120,33 @@ public class SouthboundMapper {
         return nodePath;
     }
 
-    public static InstanceIdentifier<Node> createInstanceIdentifier(OvsdbClientKey key,OvsdbBridgeName bridgeName) {
+    public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key,OvsdbBridgeName bridgeName) {
         return createInstanceIdentifier(createManagedNodeId(key, bridgeName));
     }
 
-    public static InstanceIdentifier<Node> createInstanceIdentifier(OvsdbClientKey key) {
-        return createInstanceIdentifier(key.getIp(), key.getPort());
+    public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key,Bridge bridge) {
+        String managedNodePathString = bridge
+                .getExternalIdsColumn()
+                .getData()
+                .get(SouthboundConstants.IID_EXTERNAL_ID_KEY);
+        InstanceIdentifier<Node> managedNodePath = null;
+        if (managedNodePathString != null) {
+            managedNodePath = (InstanceIdentifier<Node>) SouthboundUtil
+                    .deserializeInstanceIdentifier(managedNodePathString);
+        }
+        if (managedNodePath == null) {
+            managedNodePath = SouthboundMapper.createInstanceIdentifier(key,new OvsdbBridgeName(bridge.getName()));
+        }
+        return managedNodePath;
+    }
+
+    public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
+        NodeKey nodeKey = iid.firstKeyOf(Node.class, NodeKey.class);
+        return nodeKey.getNodeId();
+    }
+
+    public static InstanceIdentifier<Node> createInstanceIdentifier(ConnectionInfo key) {
+        return createInstanceIdentifier(key.getRemoteIp(), key.getRemotePort());
     }
 
     public static InstanceIdentifier<Node> createInstanceIdentifier(IpAddress ip, PortNumber port) {
@@ -133,7 +154,7 @@ public class SouthboundMapper {
                 .create(NetworkTopology.class)
                 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
                 .child(Node.class,createNodeKey(ip,port));
-        LOG.info("Created ovsdb path: {}",path);
+        LOG.debug("Created ovsdb path: {}",path);
         return path;
     }
 
@@ -152,8 +173,8 @@ public class SouthboundMapper {
                 bridgeName);
     }
 
-    public static NodeId createManagedNodeId(OvsdbClientKey key, OvsdbBridgeName bridgeName) {
-        return createManagedNodeId(key.getIp(),key.getPort(),bridgeName);
+    public static NodeId createManagedNodeId(ConnectionInfo key, OvsdbBridgeName bridgeName) {
+        return createManagedNodeId(key.getRemoteIp(),key.getRemotePort(),bridgeName);
     }
 
     public static NodeId createManagedNodeId(IpAddress ip, PortNumber port, OvsdbBridgeName bridgeName) {
@@ -169,24 +190,6 @@ public class SouthboundMapper {
         return nodeId;
     }
 
-    public static TpId createTerminationPointId(OvsdbConnectionInfo connectionInfo,
-                                                OvsdbBridgeName bridgeName, String tpName) {
-        return createTerminationPointId(createIpAddress(connectionInfo.getRemoteAddress()),
-                new PortNumber(connectionInfo.getRemotePort()),
-                bridgeName, tpName);
-    }
-
-    public static TpId createTerminationPointId(OvsdbClientKey key, OvsdbBridgeName bridgeName, String tpName) {
-        return createTerminationPointId(key.getIp(),key.getPort(),bridgeName, tpName);
-    }
-
-    public static TpId createTerminationPointId(IpAddress ip, PortNumber port,
-                                                OvsdbBridgeName bridgeName, String tpName) {
-        return new TpId(createNodeId(ip,port).getValue()
-                + "/" + SouthboundConstants.BRIDGE_URI_PREFIX + "/" + bridgeName.getValue()
-                + "/" + SouthboundConstants.TP_URI_PREFIX + "/" + tpName);
-    }
-
     public static InetAddress createInetAddress(IpAddress ip) throws UnknownHostException {
         if (ip.getIpv4Address() != null) {
             return InetAddress.getByName(ip.getIpv4Address().getValue());
@@ -307,7 +310,12 @@ public class SouthboundMapper {
             if (controller != null && controller.getTargetColumn() != null
                     && controller.getTargetColumn() != null) {
                 String targetString = controller.getTargetColumn().getData();
-                controllerEntries.add(new ControllerEntryBuilder().setTarget(new Uri(targetString)).build());
+                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid uuid =
+                        new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
+                            .ietf.yang.types.rev130715.Uuid(controller.getUuid().toString());
+                controllerEntries.add(new ControllerEntryBuilder()
+                    .setTarget(new Uri(targetString))
+                    .setControllerUuid(uuid).build());
             }
         }
         return controllerEntries;
@@ -319,7 +327,7 @@ public class SouthboundMapper {
         if (controllerEntries != null && !controllerEntries.isEmpty()) {
             int index = 0;
             for (ControllerEntry controllerEntry : controllerEntries) {
-                String controllerNamedUUID = "Controller_" + omn.getBridgeName().getValue() + index++;
+                String controllerNamedUUID = "Controller_" + getRandomUUID();
                 Controller controller = TyperUtils.getTypedRowWrapper(dbSchema, Controller.class);
                 controller.setTarget(controllerEntry.getTarget().getValue());
                 controllerMap.put(new UUID(controllerNamedUUID), controller);
@@ -327,4 +335,16 @@ public class SouthboundMapper {
         }
         return controllerMap;
     }
+
+    public static String getRandomUUID() {
+        return "Random_" + java.util.UUID.randomUUID().toString().replace("-", "");
+    }
+    public static ConnectionInfo createConnectionInfo(OvsdbClient client) {
+        ConnectionInfoBuilder connectionInfoBuilder = new ConnectionInfoBuilder();
+        connectionInfoBuilder.setRemoteIp(createIpAddress(client.getConnectionInfo().getRemoteAddress()));
+        //connectionInfoBuilder.setLocalIp(createIpAddress(client.getConnectionInfo().getLocalAddress()));
+        connectionInfoBuilder.setRemotePort(new PortNumber(client.getConnectionInfo().getRemotePort()));
+        //connectionInfoBuilder.setLocalPort(new PortNumber(client.getConnectionInfo().getLocalPort()));
+        return connectionInfoBuilder.build();
+    }
 }