Integrate the new yang model with Network Topology augmentation 67/28167/8
authorgrmontpetit <grmontpetit@inocybe.com>
Tue, 13 Oct 2015 03:51:14 +0000 (23:51 -0400)
committeradetalhouet <adetalhouet@inocybe.com>
Fri, 30 Oct 2015 15:54:34 +0000 (11:54 -0400)
Change-Id: I6531479b3e2323e10bf724cadbd04e8ac98cfae5
Signed-off-by: Rashmi Pujar <rpujar@inocybe.com>
Signed-off-by: grmontpetit <grmontpetit@inocybe.com>
Signed-off-by: adetalhouet <adetalhouet@inocybe.com>
24 files changed:
api/.gitignore [new file with mode: 0644]
api/pom.xml
api/src/main/yang/cl-unimgr-mef.yang
cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java
cli/src/main/java/org/opendaylight/unimgr/cli/UniListShellCommand.java
cli/src/main/java/org/opendaylight/unimgr/cli/UniShowShellCommand.java
features/src/main/features/features.xml
impl/pom.xml
impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java
impl/src/main/java/org/opendaylight/unimgr/command/EvcCreateCommand.java
impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java
impl/src/main/java/org/opendaylight/unimgr/command/UniCreateCommand.java
impl/src/main/java/org/opendaylight/unimgr/command/UniDeleteCommand.java
impl/src/main/java/org/opendaylight/unimgr/impl/EvcDataChangeListener.java [deleted file]
impl/src/main/java/org/opendaylight/unimgr/impl/UniDataChangeListener.java [deleted file]
impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java
impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrDataChangeListener.java
impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java
impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java
impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java
impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java [moved from impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModule.java with 87% similarity]
impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModuleFactory.java [moved from impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModuleFactory.java with 77% similarity]
impl/src/main/yang/unimgr-impl.yang
impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrProviderTest.java

diff --git a/api/.gitignore b/api/.gitignore
new file mode 100644 (file)
index 0000000..b83d222
--- /dev/null
@@ -0,0 +1 @@
+/target/
index c334df34627212ae5d8b993b98005a4680421f88..2568b36755b11a8afdf6778d0086cbe159440dbc 100755 (executable)
@@ -20,6 +20,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <version>0.0.1-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
+  <properties>
+    <ovsdb.version>1.2.1-SNAPSHOT</ovsdb.version>
+  </properties>
+
   <dependencyManagement>
       <dependencies>
         <dependency>
@@ -41,6 +45,15 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
       <groupId>org.opendaylight.mdsal.model</groupId>
       <artifactId>ietf-topology</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>yang-ext</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.ovsdb</groupId>
+      <artifactId>southbound-api</artifactId>
+      <version>${ovsdb.version}</version>
+    </dependency>
   </dependencies>
 
 </project>
index 81c9d625bbbf3bccbb460eb353849c57837f426d..86d95bac3907872091d94e055f52b552d710a50f 100755 (executable)
@@ -22,12 +22,19 @@ module cl-unimgr-mef {
     namespace "urn:opendaylight:params:xml:ns:yang:unimgr";\r
     prefix "unimgr";\r
 \r
-    import ietf-yang-types { prefix yang; revision-date 2013-07-15; }\r
-    import ietf-inet-types { prefix inet; revision-date 2010-09-24; }\r
-    import network-topology { prefix topo; revision-date 2013-10-21; }\r
+    import ietf-yang-types { prefix "yang"; revision-date 2013-07-15; }\r
+    import ietf-inet-types { prefix "inet"; revision-date 2010-09-24; }\r
+    import network-topology { prefix "topo"; revision-date 2013-10-21; }\r
+    import yang-ext { prefix "ext"; }\r
+    import ovsdb { prefix "ovsdb"; revision-date 2015-01-05;}\r
 \r
-    revision "2015-06-22" {\r
-        description "Initial revision of unimgr model";\r
+    revision "2015-10-12" {\r
+        description "Updated revision of the unimgr model.";\r
+    }\r
+\r
+    typedef ovsdb-node-ref {\r
+        description "A reference to an ovsdb node";\r
+        type ovsdb:ovsdb-node-ref;\r
     }\r
 \r
     grouping service-speed {\r
@@ -57,15 +64,9 @@ module cl-unimgr-mef {
 \r
     // represent simplification of MEF Per Uni Attributes\r
     grouping uni {\r
-        leaf id {\r
-            type topo:node-id;\r
-            mandatory true;\r
-            description "Uniquely identifies the uni";\r
-        }\r
-        leaf ovsdb-node-id {\r
-            type topo:node-id;\r
-            mandatory false;\r
-            description "Uniquely identifies the uni and ovsdb";\r
+        leaf ovsdb-node-ref {\r
+            type ovsdb-node-ref;\r
+            description "A reference to the ovsdb node.";\r
         }\r
         leaf physical-medium {\r
             type string;\r
@@ -99,18 +100,13 @@ module cl-unimgr-mef {
 \r
     // Represents simplification of MEF EVC Per Uni Atrributes\r
     grouping evc {\r
-        leaf id {\r
-            type topo:node-id;\r
-            mandatory true;\r
-            description "Uniquely identifies the evc";\r
-        }\r
         list uni-source {\r
             key "order";\r
             leaf order {\r
                 type uint8;\r
             }\r
             leaf uni {\r
-                type topo:node-id;\r
+                type instance-identifier;\r
             }\r
         }\r
         list uni-dest {\r
@@ -119,7 +115,7 @@ module cl-unimgr-mef {
                 type uint8;\r
             }\r
             leaf uni {\r
-                type topo:node-id;\r
+                type instance-identifier;\r
             }\r
         }\r
         leaf cos-id {\r
@@ -133,17 +129,16 @@ module cl-unimgr-mef {
         }\r
     }\r
 \r
-    container unis {\r
-        list uni {\r
-            key "id";\r
-            uses uni;\r
-        }\r
+    augment "/topo:network-topology/topo:topology/topo:node" {\r
+        description "Augmentation for UNI nodes under topology";\r
+        ext:augment-identifier "uni-augmentation";\r
+        uses uni;\r
     }\r
 \r
-    container evcs {\r
-        list evc {\r
-            key "id";\r
-            uses evc;\r
-        }\r
+    augment "/topo:network-topology/topo:topology/topo:link" {\r
+        description "Augmentation for EVC Link under topology";\r
+        ext:augment-identifier "evc-augmentation";\r
+        uses evc;\r
     }\r
+\r
 }\r
index 1331aac20feb9b4c86aa96a7f13816cb6fa4de37..9b5835e4c810f77c864badd6ec7669057421314e 100755 (executable)
@@ -14,14 +14,13 @@ import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.opendaylight.unimgr.api.IUnimgrConsoleProvider;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.service.speed.speed.Speed100MBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.service.speed.speed.Speed10GBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.service.speed.speed.Speed10MBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.service.speed.speed.Speed1GBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.uni.Speed;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.UniBuilder;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed100MBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed10GBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed10MBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.service.speed.speed.Speed1GBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.uni.Speed;
 
 @Command(name = "add",
          scope = "uni",
@@ -96,7 +95,6 @@ public class UniAddShellCommand extends OsgiCommandSupport {
 
         Object speedObject = null;
         if (speed.equals("10M")) {
-            System.out.println("there");
             speedObject = new Speed10MBuilder().build();
         }
         if (speed.equals("100M")) {
@@ -114,7 +112,7 @@ public class UniAddShellCommand extends OsgiCommandSupport {
 
     @Override
     protected Object doExecute() throws Exception {
-        Uni uni = new UniBuilder()
+        Uni uni = new UniAugmentationBuilder()
                         .setMacAddress(new MacAddress(macAddress))
                         .setMacLayer(macLayer)
                         .setMode(mode)
@@ -122,11 +120,10 @@ public class UniAddShellCommand extends OsgiCommandSupport {
                         .setPhysicalMedium(physicalMedium)
                         .setSpeed((Speed) getSpeed())
                         .setType(type)
-                        .setId(new NodeId(uniId))
                         .build();
 
         if (provider.addUni(uni)) {
-            return String.format("Uni created (id: %s)", uni.getId());
+            return String.format("Uni created {}", uni.getIpAddress().getIpv4Address());
         } else {
             return new String("Error creating new uni");
         }
index 87725158a64818781d3edcbdd08f0b39d7551924..2cda310501f2ea1de455408ec2cca01a04717c1a 100755 (executable)
@@ -14,7 +14,7 @@ import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.opendaylight.unimgr.api.IUnimgrConsoleProvider;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
 
 @Command(name = "list", scope = "uni", description = "Lists all uni in the controller.")
 public class UniListShellCommand extends OsgiCommandSupport {
@@ -41,7 +41,8 @@ public class UniListShellCommand extends OsgiCommandSupport {
             StringBuilder sb = new StringBuilder();
             Integer counter = 1;
             for (Uni uni : listUnis) {
-                sb.append(String.format("#%d - id: %s\n", counter, uni.getId()));
+                // TODO
+                sb.append(String.format("#%d - id: %s\n", counter, uni.getIpAddress().getIpv4Address()));
                 counter++;
             }
             return sb.toString();
index d3e8cc6bad9adcbe294607ed925b50babe5e0e9f..e1373ce2f1bd547d81cdc7768d1ed19bce4034fd 100755 (executable)
@@ -11,7 +11,7 @@ import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.opendaylight.unimgr.api.IUnimgrConsoleProvider;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
 
 @Command(name = "show", scope = "uni", description = "Shows detailed information about an uni.")
 public class UniShowShellCommand extends OsgiCommandSupport {
@@ -31,7 +31,7 @@ public class UniShowShellCommand extends OsgiCommandSupport {
         Uni uni = provider.getUni(id);
 
         if (uni != null) {
-            sb.append(String.format("Uni Id: <%s>\n", uni.getId()));
+            //sb.append(String.format("Uni Id: <%s>\n", uni.getUniId()));
             sb.append(String.format("Physical medium: <%s>\n", uni.getPhysicalMedium()));
             sb.append(String.format("Mac address: <%s>\n", uni.getMacAddress()));
             sb.append(String.format("Speed: " + uni.getSpeed() + "\n"));
index 4b9fe8a33ad8c0e712291eddce3acd8045b91f3a..b65d3a64fb5a14b710dce026b610bf39bed8c82a 100755 (executable)
@@ -16,12 +16,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <repository>mvn:org.opendaylight.ovsdb/southbound-features/{{VERSION}}/xml/features</repository>
   <repository>mvn:org.opendaylight.dlux/features-dlux/{{VERSION}}/xml/features</repository>
 
-  <feature name='odl-unimgr-api' version='${project.version}' description='OpenDaylight :: VCPE :: api'>
+  <feature name='odl-unimgr-api' version='${project.version}' description='OpenDaylight :: UniMgr :: api'>
     <feature version='${mdsal.model.version}'>odl-mdsal-models</feature>
+    <feature version='${ovsdb.version}'>odl-ovsdb-southbound-api</feature>
     <bundle>mvn:org.opendaylight.unimgr/unimgr-api/${project.version}</bundle>
   </feature>
 
-  <feature name='odl-unimgr' version='${project.version}' description='OpenDaylight :: VCPE'>
+  <feature name='odl-unimgr' version='${project.version}' description='OpenDaylight :: UniMgr'>
     <feature version='${mdsal.version}'>odl-mdsal-broker</feature>
     <feature version='${ovsdb.version}'>odl-ovsdb-southbound-impl</feature>
     <feature version='${project.version}'>odl-unimgr-api</feature>
@@ -29,17 +30,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <configfile finalname="${configfile.directory}/unimgr.xml">mvn:org.opendaylight.unimgr/unimgr-impl/{{VERSION}}/xml/config</configfile>
   </feature>
 
-  <feature name='odl-unimgr-console' version='${project.version}' description='OpenDaylight :: VCPE :: CLI'>
+  <feature name='odl-unimgr-console' version='${project.version}' description='OpenDaylight :: UniMgr :: CLI'>
       <feature version="${project.version}">odl-unimgr</feature>
       <bundle>mvn:org.opendaylight.unimgr/unimgr-cli/{{VERSION}}</bundle>
   </feature>
 
-  <feature name='odl-unimgr-rest' version='${project.version}' description='OpenDaylight :: VCPE :: REST'>
+  <feature name='odl-unimgr-rest' version='${project.version}' description='OpenDaylight :: UniMgr :: REST'>
     <feature version="${project.version}">odl-unimgr</feature>
     <feature version="${restconf.version}">odl-restconf</feature>
   </feature>
 
-  <feature name='odl-unimgr-ui' version='${project.version}' description='OpenDaylight :: VCPE :: UI'>
+  <feature name='odl-unimgr-ui' version='${project.version}' description='OpenDaylight :: UniMgr :: UI'>
     <feature version="${project.version}">odl-unimgr-rest</feature>
     <feature version="${project.version}">odl-unimgr-console</feature>
     <feature version="${restconf.version}">odl-mdsal-apidocs</feature>
index e33580c3aa94968e744348a36beceb204b04accc..af54334c188b6a6b0a8fb92025e2e0dc7fc0365b 100755 (executable)
@@ -81,6 +81,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
       <version>${powermock.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>ietf-yang-types-20130715</artifactId>
+    </dependency>
   </dependencies>
 
   <build>
index bf946e0cf79f45f2f96e9e63f65576b14a51e64e..9bbaec46ef6010a77a8bf6487306436ae9f38fe2 100755 (executable)
@@ -9,8 +9,8 @@ package org.opendaylight.unimgr.api;
 
 import java.util.List;
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.evcs.Evc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
 
 public interface IUnimgrConsoleProvider extends AutoCloseable {
 
index ea18ae7662a8ccb40b1272c98a86c1989994774a..837e7b165b8292d9a839bee9bc4d8b32ab8db463 100644 (file)
@@ -11,20 +11,12 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.unimgr.impl.UnimgrConstants;
-import org.opendaylight.unimgr.impl.UnimgrMapper;
-import org.opendaylight.unimgr.impl.UnimgrUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.evcs.Evc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
-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.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
-
 public class EvcCreateCommand extends AbstractCreateCommand {
 
     private static final Logger LOG = LoggerFactory.getLogger(EvcCreateCommand.class);
@@ -39,63 +31,63 @@ public class EvcCreateCommand extends AbstractCreateCommand {
     public void execute() {
         for (Entry<InstanceIdentifier<?>, DataObject> created : changes
                 .entrySet()) {
-            if (created.getValue() != null && created.getValue() instanceof Evc) {
-                Evc evc = (Evc) created.getValue();
-                LOG.info("New EVC created with id {}.", evc.getId());
-                if (evc.getUniDest() == null || evc.getUniDest().isEmpty()) {
-                    LOG.error("Destination UNI cannot be null.");
-                    break;
-                }
-                if (evc.getUniSource() == null || evc.getUniSource().isEmpty()) {
-                    LOG.error("Source UNI cannot be null.");
-                    break;
-                }
-                // Get the destination UNI
-                NodeId destUniNodeID = evc.getUniDest().get(0).getUni();
-                InstanceIdentifier<Uni> destinationNodeIid = UnimgrMapper.getUniIid(destUniNodeID);
-                Optional<Uni> optionalDestination = UnimgrUtils.readUniNode(dataBroker, destinationNodeIid);
-                Uni destinationUni = optionalDestination.get();
-                NodeId ovsdbDestinationNodeId = UnimgrMapper.createNodeId(destinationUni.getIpAddress());
-                // Get the source UNI
-                NodeId sourceUniNodeID = evc.getUniSource().get(0).getUni();
-                InstanceIdentifier<Uni> sourceNodeIid = UnimgrMapper.getUniIid(sourceUniNodeID);
-                Optional<Uni> optionalSource = UnimgrUtils.readUniNode(dataBroker, sourceNodeIid);
-                Uni sourceUni = optionalSource.get();
-                NodeId ovsdbSourceNodeId = UnimgrMapper.createNodeId(sourceUni.getIpAddress());
-
-                // Set source
-                Node sourceBr1 = UnimgrUtils.readNode(
-                        dataBroker,
-                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbSourceNodeId,
-                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
-                UnimgrUtils.createTerminationPointNode(dataBroker,
-                        destinationUni, sourceBr1,
-                        UnimgrConstants.DEFAULT_BRIDGE_NAME,
-                        UnimgrConstants.DEFAULT_INTERNAL_IFACE, null);
-                Node sourceBr2 = UnimgrUtils.readNode(
-                        dataBroker,
-                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbSourceNodeId,
-                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
-                UnimgrUtils.createGreTunnel(dataBroker, sourceUni,
-                        destinationUni, sourceBr2,
-                        UnimgrConstants.DEFAULT_BRIDGE_NAME, "gre0");
-
-                // Set destination
-                Node destinationBr1 = UnimgrUtils.readNode(
-                        dataBroker,
-                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbDestinationNodeId,
-                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
-                UnimgrUtils.createTerminationPointNode(dataBroker,
-                        destinationUni, destinationBr1,
-                        UnimgrConstants.DEFAULT_BRIDGE_NAME,
-                        UnimgrConstants.DEFAULT_INTERNAL_IFACE, null);
-                Node destinationBr2 = UnimgrUtils.readNode(
-                        dataBroker,
-                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbDestinationNodeId,
-                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
-                UnimgrUtils.createGreTunnel(dataBroker, destinationUni,
-                        sourceUni, destinationBr2,
-                        UnimgrConstants.DEFAULT_BRIDGE_NAME, "gre0");
+            if (created.getValue() != null && created.getValue() instanceof EvcAugmentation) {
+//                EvcAugmentation evc = (EvcAugmentation) created.getValue();
+//                LOG.info("New EVC created with id {}.", evc.getEvcId());
+//                if (evc.getUniDest() == null || evc.getUniDest().isEmpty()) {
+//                    LOG.error("Destination UNI cannot be null.");
+//                    break;
+//                }
+//                if (evc.getUniSource() == null || evc.getUniSource().isEmpty()) {
+//                    LOG.error("Source UNI cannot be null.");
+//                    break;
+//                }
+//                // Get the destination UNI
+//                InstanceIdentifier<Node> destinationNodeIid = (InstanceIdentifier<Node>) evc.getUniDest().iterator()
+//                        .next().getUni();
+//                Uni destinationUni = UnimgrUtils.readNode(dataBroker, destinationNodeIid).get()
+//                        .getAugmentation(UniAugmentation.class);
+//                NodeId ovsdbDestinationNodeId = UnimgrMapper.createNodeId(destinationUni.getIpAddress());
+//                // Get the source UNI
+//                InstanceIdentifier<Node> sourceIid = (InstanceIdentifier<Node>) evc.getUniSource().iterator().next()
+//                        .getUni();
+//                Uni sourceUni = UnimgrUtils.readNode(dataBroker, sourceIid).get()
+//                        .getAugmentation(UniAugmentation.class);
+//                NodeId ovsdbSourceNodeId = UnimgrMapper.createNodeId(sourceUni.getIpAddress());
+//
+//                // Set source
+//                Node sourceBr1 = UnimgrUtils.readNode(
+//                        dataBroker,
+//                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbSourceNodeId,
+//                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
+//                UnimgrUtils.createTerminationPointNode(dataBroker,
+//                        destinationUni, sourceBr1,
+//                        UnimgrConstants.DEFAULT_BRIDGE_NAME,
+//                        UnimgrConstants.DEFAULT_INTERNAL_IFACE, null);
+//                Node sourceBr2 = UnimgrUtils.readNode(
+//                        dataBroker,
+//                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbSourceNodeId,
+//                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
+//                UnimgrUtils.createGreTunnel(dataBroker, sourceUni,
+//                        destinationUni, sourceBr2,
+//                        UnimgrConstants.DEFAULT_BRIDGE_NAME, "gre0");
+//
+//                // Set destination
+//                Node destinationBr1 = UnimgrUtils.readNode(
+//                        dataBroker,
+//                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbDestinationNodeId,
+//                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
+//                UnimgrUtils.createTerminationPointNode(dataBroker,
+//                        destinationUni, destinationBr1,
+//                        UnimgrConstants.DEFAULT_BRIDGE_NAME,
+//                        UnimgrConstants.DEFAULT_INTERNAL_IFACE, null);
+//                Node destinationBr2 = UnimgrUtils.readNode(
+//                        dataBroker,
+//                        UnimgrMapper.getOvsdbBridgeNodeIID(ovsdbDestinationNodeId,
+//                                UnimgrConstants.DEFAULT_BRIDGE_NAME)).get();
+//                UnimgrUtils.createGreTunnel(dataBroker, destinationUni,
+//                        sourceUni, destinationBr2,
+//                        UnimgrConstants.DEFAULT_BRIDGE_NAME, "gre0");
             }
         }
     }
index 805e88dd1166c95d7d323f347a4cbb2bb7e70a0c..3114f8233a5ee3b481ea59c99a854146b2179a14 100644 (file)
@@ -14,7 +14,7 @@ import java.util.Set;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
 import org.opendaylight.unimgr.impl.UnimgrUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Evc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -45,7 +45,7 @@ public class EvcDeleteCommand extends AbstractDeleteCommand {
                     for (Entry<InstanceIdentifier<Evc>, Evc> evc: originalEvcs.entrySet()) {
                         if (evc.getKey().equals(type)) {
                             Evc data = evc.getValue();
-                            LOG.info("Removed EVC {}", data.getId());
+                            LOG.info("Removed EVC {}", data.getUniSource());
                         }
                     }
                 }
index 7cd52a0a0b29b8b01fd9577fc0f32729b13d52f3..90cdc51f962b5faf22e9a910c909992f3e9b627c 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.unimgr.command;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -16,11 +17,9 @@ import org.opendaylight.unimgr.impl.UnimgrConstants;
 import org.opendaylight.unimgr.impl.UnimgrMapper;
 import org.opendaylight.unimgr.impl.UnimgrUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Unis;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -41,11 +40,12 @@ public class UniCreateCommand extends AbstractCreateCommand {
     @Override
     public void execute() {
         for (Entry<InstanceIdentifier<?>, DataObject> created : changes.entrySet()) {
-            if (created.getValue() != null && created.getValue() instanceof Uni) {
-                Uni uni = (Uni) created.getValue();
-                LOG.info("New UNI created with id {}.", uni.getId());
+            if (created.getValue() != null && created.getValue() instanceof UniAugmentation) {
+                UniAugmentation uni = (UniAugmentation) created.getValue();
+                InstanceIdentifier<?> uniKey = created.getKey();
+                LOG.info("New UNI created {}.", uni.getIpAddress().getIpv4Address());
                 /* We assume that when the user specifies the
-                 * ovsdb-node-id that the node already exists in
+                 * ovsdb-node-ref that the node already exists in
                  * the controller and that the OVS instance is in
                  * active mode.
                  *
@@ -55,58 +55,118 @@ public class UniCreateCommand extends AbstractCreateCommand {
                  * in passive mode.
                  *
                  * Active mode (TCP): the UUID is in format ovsdb://UUID
-                 * Passwove mode (PTCP): the UUID is in format ovsdb://IP:6640
+                 * Passive mode (PTCP): the UUID is in format ovsdb://IP:6640
                  *
                  */
-                NodeId ovsdbNodeId = uni.getOvsdbNodeId();
-                if (ovsdbNodeId == null || ovsdbNodeId.getValue().isEmpty()) {
+                OvsdbNodeRef ovsdbNodeRef = uni.getOvsdbNodeRef();
+                if (ovsdbNodeRef != null || ovsdbNodeRef.getValue() != null) {
+                    Optional<Node> optionalNode = UnimgrUtils.readNode(dataBroker, ovsdbNodeRef.getValue());
+                    if (optionalNode.isPresent()) {
+                        Node ovsdbNode = optionalNode.get();
+                        UnimgrUtils.createBridgeNode(dataBroker,
+                                                     ovsdbNode, uni,
+                                                     UnimgrConstants.DEFAULT_BRIDGE_NAME);
+                    } else {
+                        LOG.info("Invalid OVSDB node instance identifier specified, "
+                               + "attempting to retrieve the node.");
+                        Node ovsdbNode = UnimgrUtils.findOvsdbNode(dataBroker, uni);
+                        if (ovsdbNode != null) {
+                            LOG.info("Retrieved the OVSDB node {}", ovsdbNode.getNodeId());
+                            UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
+                                                      uniKey,
+                                                      uni,
+                                                      ovsdbNode,
+                                                      dataBroker);
+                            UnimgrUtils.createBridgeNode(dataBroker,
+                                    ovsdbNode, uni,
+                                    UnimgrConstants.DEFAULT_BRIDGE_NAME);
+                        } else {
+                            ovsdbNode = UnimgrUtils.createOvsdbNode(dataBroker, uni);
+                            LOG.info("Could not retrieve the OVSDB node,"
+                                   + "created a new one: {}", ovsdbNode.getNodeId());
+                            UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
+                                          uniKey,
+                                          uni,
+                                          ovsdbNode,
+                                          dataBroker);
+                            UnimgrUtils.createBridgeNode(dataBroker,
+                                                         ovsdbNode,
+                                                         uni,
+                                    UnimgrConstants.DEFAULT_BRIDGE_NAME);
+                        }
+                    }
+                } else {
                     // We assume the ovs is in passive mode
-                    ovsdbNodeId = UnimgrMapper.createNodeId(uni.getIpAddress());
-                }
-                // We retrieve the node from the store
-                Optional<Node> node = UnimgrUtils.readNode(dataBroker, UnimgrMapper.getOvsdbNodeIID(ovsdbNodeId));
-                if (!node.isPresent()) {
-                    UnimgrUtils.createOvsdbNode(dataBroker, ovsdbNodeId, uni);
+                    // Check if the ovsdb node exist
+                    Node ovsdbNode = UnimgrUtils.findOvsdbNode(dataBroker, uni);
+                    if (ovsdbNode != null) {
+                        LOG.info("Retrieved the OVSDB node");
+                        UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
+                                                  uniKey,
+                                                  uni,
+                                                  ovsdbNode,
+                                                  dataBroker);
+                        UnimgrUtils.createBridgeNode(dataBroker,
+                                                     ovsdbNode,
+                                                     uni,
+                                                     UnimgrConstants.DEFAULT_BRIDGE_NAME);
+                    } else {
+                        ovsdbNode = UnimgrUtils.createOvsdbNode(dataBroker, uni);
+                        LOG.info("Could not retrieve the OVSDB node,"
+                               + "created a new one: {}", ovsdbNode.getNodeId());
+                        UnimgrUtils.updateUniNode(LogicalDatastoreType.CONFIGURATION,
+                                                  uniKey,
+                                                  uni,
+                                                  ovsdbNode,
+                                                  dataBroker);
+                        UnimgrUtils.createBridgeNode(dataBroker,
+                                                     ovsdbNode,
+                                                     uni,
+                                                     UnimgrConstants.DEFAULT_BRIDGE_NAME);
+                    }
                 }
             }
             if (created.getValue() != null && created.getValue() instanceof OvsdbNodeAugmentation) {
                 OvsdbNodeAugmentation ovsdbNodeAugmentation = (OvsdbNodeAugmentation) created
                         .getValue();
+                InstanceIdentifier<Node> ovsdbIid = created.getKey().firstIdentifierOf(Node.class);
                 if (ovsdbNodeAugmentation != null) {
                     LOG.info("Received an OVSDB node create {}",
                             ovsdbNodeAugmentation.getConnectionInfo()
                                     .getRemoteIp().getIpv4Address().getValue());
-                    Unis unis = UnimgrUtils.readUnisFromStore(dataBroker, LogicalDatastoreType.CONFIGURATION);
-                    if (unis != null && unis.getUni() != null) {
+                    List<Node> uniNodes = UnimgrUtils.getUniNodes(dataBroker);
+                    if (uniNodes != null && !uniNodes.isEmpty()) {
                         // This will not scale up very well when the UNI quantity gets to higher numbers.
-                        for (Uni uni: unis.getUni()) {
-                            if (uni.getOvsdbNodeId() != null && uni.getOvsdbNodeId().getValue() != null) {
+                        for (Node node: uniNodes) {
+                            UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class);
+                            if (uniAugmentation.getOvsdbNodeRef() != null
+                                    && uniAugmentation.getOvsdbNodeRef().getValue() != null) {
                                 // The OVS instance is in tcp mode.
-                                NodeKey key = created.getKey().firstKeyOf(Node.class, NodeKey.class);
-                                if (uni.getOvsdbNodeId().equals(key.getNodeId())) {
-
-                                    UnimgrUtils.createBridgeNode(dataBroker,
-                                            uni.getOvsdbNodeId(), uni,
+                                InstanceIdentifier<Node> ovsdbNodeRefIid =
+                                        uniAugmentation.getOvsdbNodeRef().getValue().firstIdentifierOf(Node.class);
+                                if (ovsdbNodeRefIid.equals(ovsdbIid)) {
+                                    UnimgrUtils.createBridgeNode(dataBroker, node, uniAugmentation,
                                             UnimgrConstants.DEFAULT_BRIDGE_NAME);
-
-                                    UnimgrUtils.copyUniToDataStore(dataBroker, uni, LogicalDatastoreType.OPERATIONAL);
+                                    Optional<Node> optionalOvsdbNode = UnimgrUtils.readNode(dataBroker, ovsdbIid);
+                                    if (optionalOvsdbNode.isPresent()) {
+                                        Node ovsdbNode = optionalOvsdbNode.get();
+                                        InstanceIdentifier<Node> uniIid = UnimgrMapper.createUniIid(dataBroker,
+                                                uniAugmentation.getIpAddress());
+                                        UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL, uniIid,
+                                                uniAugmentation, ovsdbNode, dataBroker);
+                                    }
                                 }
                                 // The OVS instance is in ptcp mode.
-                            } else if (ovsdbNodeAugmentation
-                                            .getConnectionInfo()
-                                            .getRemoteIp()
-                                            .equals(uni.getIpAddress())) {
-                                InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
-                                        .getOvsdbNodeIID(uni.getIpAddress());
+                            } else if (ovsdbNodeAugmentation.getConnectionInfo().getRemoteIp()
+                                    .equals(uniAugmentation.getIpAddress())) {
+                                InstanceIdentifier<Node> ovsdbNodeIid = uniAugmentation.getOvsdbNodeRef().getValue()
+                                        .firstIdentifierOf(Node.class);
                                 Optional<Node> ovsdbNode = UnimgrUtils.readNode(dataBroker, ovsdbNodeIid);
-                                NodeId ovsdbNodeId;
                                 if (ovsdbNode.isPresent()) {
-                                    ovsdbNodeId = ovsdbNode.get().getNodeId();
-                                    UnimgrUtils.createBridgeNode(dataBroker,
-                                            ovsdbNodeId, uni,
-                                            UnimgrConstants.DEFAULT_BRIDGE_NAME);
-
-                                    UnimgrUtils.copyUniToDataStore(dataBroker, uni, LogicalDatastoreType.OPERATIONAL);
+                                    InstanceIdentifier<Node> uniIid = UnimgrMapper.createUniIid(dataBroker,
+                                            uniAugmentation.getIpAddress());
+                                    UnimgrUtils.updateUniNode(LogicalDatastoreType.OPERATIONAL, uniIid, uniAugmentation,
+                                            ovsdbNode.get(), dataBroker);
                                 } else {
                                     LOG.error("Unable to read node with IID {}", ovsdbNodeIid);
                                 }
index edb76be2f338f1e285f67879de461e3a2e8ef5f9..9aa7ab8520eea231dec1959d644a138cf68df107 100644 (file)
@@ -13,7 +13,7 @@ import java.util.Set;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
 import org.opendaylight.unimgr.impl.UnimgrUtils;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/EvcDataChangeListener.java b/impl/src/main/java/org/opendaylight/unimgr/impl/EvcDataChangeListener.java
deleted file mode 100755 (executable)
index 6e1aec6..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2015 CableLabs and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.impl;
-
-import java.util.Map;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.unimgr.api.IUnimgrDataChangeListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class EvcDataChangeListener implements IUnimgrDataChangeListener {
-
-    private static final Logger LOG = LoggerFactory.getLogger(EvcDataChangeListener.class);
-
-    private DataBroker dataBroker;
-    private ListenerRegistration<DataChangeListener> evcListener = null;
-
-    public EvcDataChangeListener(DataBroker dataBroker) {
-        this.dataBroker = dataBroker;
-        evcListener = dataBroker.registerDataChangeListener(
-                LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getEvcsIid(),
-                this, DataChangeScope.SUBTREE);
-    }
-
-    @Override
-    public void onDataChanged(
-            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
-        create(changes.getCreatedData());
-        update(changes.getUpdatedData());
-        delete(changes);
-    }
-
-    @Override
-    public void create(Map<InstanceIdentifier<?>, DataObject> changes) {
-    }
-
-    @Override
-    public void update(Map<InstanceIdentifier<?>, DataObject> changes) {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void delete(
-            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void close() throws Exception {
-        if (evcListener != null) {
-            evcListener.close();
-        }
-    }
-}
diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UniDataChangeListener.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UniDataChangeListener.java
deleted file mode 100755 (executable)
index 1dee61d..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2015 CableLabs and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.unimgr.impl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.unimgr.api.IUnimgrDataChangeListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class UniDataChangeListener implements IUnimgrDataChangeListener {
-
-    private static final Logger LOG = LoggerFactory.getLogger(UniDataChangeListener.class);
-
-    private Map<String, ListenerRegistration<DataChangeListener>> listeners;
-    private DataBroker dataBroker;
-
-    public UniDataChangeListener(DataBroker dataBroker) {
-        this.dataBroker = dataBroker;
-        listeners = new HashMap<String, ListenerRegistration<DataChangeListener>>();
-        ListenerRegistration<DataChangeListener> uniListener = dataBroker.registerDataChangeListener(
-                LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getUnisIid()
-                , this, DataChangeScope.SUBTREE);
-        // We want to listen for operational store changes on the ovsdb:1 network topology
-        // because this is when we know Southbound has successfully connected to the
-        // OVS instance.
-        ListenerRegistration<DataChangeListener> ovsdbListener = dataBroker.registerDataChangeListener(
-                LogicalDatastoreType.OPERATIONAL, UnimgrMapper.getOvsdbTopologyIdentifier()
-                , this, DataChangeScope.SUBTREE);
-        listeners.put("uni", uniListener);
-        listeners.put("ovsdb", ovsdbListener);
-
-    }
-
-    @Override
-    public void onDataChanged(
-            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
-        create(changes.getCreatedData());
-        update(changes.getUpdatedData());
-        delete(changes);
-    }
-
-    @Override
-    public void create(Map<InstanceIdentifier<?>, DataObject> changes) {
-    }
-
-    @Override
-    public void update(Map<InstanceIdentifier<?>, DataObject> changes) {
-    }
-
-    @Override
-    public void delete(
-            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
-        // TODO implement delete, verify old data versus new data
-    }
-
-    @Override
-    public void close() throws Exception {
-        for (Map.Entry<String, ListenerRegistration<DataChangeListener>> entry : listeners.entrySet()) {
-            ListenerRegistration<DataChangeListener> value = entry.getValue();
-            if (value != null) {
-                value.close();
-            }
-        }
-    }
-}
index 543078d7607c51c1db047bcd4561a431ca5ad0b6..21a0d4848077b2a292b7acdd1054d878b514c889 100644 (file)
@@ -40,6 +40,10 @@ public class UnimgrConstants {
 
     public static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
 
+    public static final TopologyId UNI_TOPOLOGY_ID = new TopologyId(new Uri("unimgr:uni"));
+
+    public static final TopologyId EVC_TOPOLOGY_ID = new TopologyId(new Uri("unimgr:evc"));
+
     public static final String OVSDB_PREFIX = "ovsdb://";
 
     public static final Integer OVSDB_PORT = new Integer(6640);
index c9319371da1e6c455da8f93b3d70479f01af8756..59d6a8336298c9745cecc8bebf578ba65bba5617 100644 (file)
@@ -44,10 +44,10 @@ public class UnimgrDataChangeListener  implements IUnimgrDataChangeListener {
         this.invoker = invoker;
         listeners = new HashMap<String, ListenerRegistration<DataChangeListener>>();
         ListenerRegistration<DataChangeListener> uniListener = dataBroker.registerDataChangeListener(
-                LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getUnisIid()
+                LogicalDatastoreType.CONFIGURATION, UnimgrMapper.createUniIid()
                 , this, DataChangeScope.SUBTREE);
         ListenerRegistration<DataChangeListener> evcListener = dataBroker.registerDataChangeListener(
-                LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getEvcIid()
+                LogicalDatastoreType.CONFIGURATION, UnimgrMapper.createEvcIid()
                 , this, DataChangeScope.SUBTREE);
         ListenerRegistration<DataChangeListener> ovsdbListener = dataBroker.registerDataChangeListener(
                 LogicalDatastoreType.OPERATIONAL, UnimgrMapper.getOvsdbTopologyIdentifier()
@@ -101,7 +101,7 @@ public class UnimgrDataChangeListener  implements IUnimgrDataChangeListener {
 
     @Override
     public void close() throws Exception {
-        LOG.info("VcpeDataChangeListener stopped.");
+        LOG.info("UnimgrDataChangeListener stopped.");
         for (Map.Entry<String, ListenerRegistration<DataChangeListener>> entry : listeners.entrySet()) {
             ListenerRegistration<DataChangeListener> value = entry.getValue();
             if (value != null) {
index c84ee9eb7d4eb4d577ac0c14af5fffb14c88c258..a478a50a948c5e579a3bdf0747268d77352a4a96 100755 (executable)
@@ -7,18 +7,19 @@
  */
 package org.opendaylight.unimgr.impl;
 
+import java.util.List;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Evcs;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Unis;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.evcs.Evc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.evcs.EvcKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.UniKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId;
 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.Link;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
@@ -31,58 +32,6 @@ public class UnimgrMapper {
 
     private static final Logger LOG = LoggerFactory.getLogger(UnimgrMapper.class);
 
-    public static InstanceIdentifier<Unis> getUnisIid() {
-        return InstanceIdentifier.builder(Unis.class)
-                .build();
-    }
-
-    public static InstanceIdentifier<Uni> getUniIid() {
-        return InstanceIdentifier.builder(Unis.class)
-                .child(Uni.class)
-                .build();
-    }
-
-    public static InstanceIdentifier<Uni> getUniIid(String id) {
-        return InstanceIdentifier.builder(Unis.class)
-                .child(Uni.class, new UniKey(new NodeId(id)))
-                .build();
-    }
-
-    public static InstanceIdentifier<Uni> getUniIid(UniKey uniKey) {
-        return InstanceIdentifier.builder(Unis.class)
-                .child(Uni.class, uniKey)
-                .build();
-    }
-
-    public static InstanceIdentifier<Uni> getUniIid(NodeId uniNodeId) {
-        return InstanceIdentifier.builder(Unis.class)
-                .child(Uni.class, new UniKey(uniNodeId))
-                .build();
-    }
-
-    public static InstanceIdentifier<Uni> getUniIid(Uni uni) {
-        return InstanceIdentifier.builder(Unis.class)
-                .child(Uni.class, uni.getKey())
-                .build();
-    }
-
-    public static InstanceIdentifier<Evcs> getEvcsIid() {
-        return InstanceIdentifier.builder(Evcs.class)
-                .build();
-    }
-
-    public static InstanceIdentifier<Evc> getEvcIid() {
-        return InstanceIdentifier.builder(Evcs.class)
-                .child(Evc.class)
-                .build();
-    }
-
-    public static InstanceIdentifier<Evc> getEvcIid(String id) {
-        return InstanceIdentifier.builder(Evcs.class)
-                .child(Evc.class, new EvcKey(new NodeId(id)))
-                .build();
-    }
-
     public static InstanceIdentifier<Node> getOvsdbNodeIID(NodeId nodeId) {
         InstanceIdentifier<Node> nodePath = InstanceIdentifier
                 .create(NetworkTopology.class)
@@ -112,14 +61,6 @@ public class UnimgrMapper {
         return nodePath;
     }
 
-    public static NodeId createNodeId(IpAddress ipAddress) {
-        String nodeId = UnimgrConstants.OVSDB_PREFIX
-                + ipAddress.getIpv4Address().getValue().toString()
-                + ":"
-                + UnimgrConstants.OVSDB_PORT;
-        return new NodeId(nodeId);
-    }
-
     public static InstanceIdentifier<Node> getOvsdbTopologyIdentifier() {
         InstanceIdentifier<Node> path = InstanceIdentifier
                 .create(NetworkTopology.class)
@@ -140,4 +81,47 @@ public class UnimgrMapper {
         LOG.debug("Termination point InstanceIdentifier generated : {}",terminationPointPath);
         return terminationPointPath;
     }
+
+    public static InstanceIdentifier<Node> createUniIid() {
+        InstanceIdentifier<Node> iid = InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID))
+                .child(Node.class);
+        return iid;
+    }
+
+    public static InstanceIdentifier<Node> createUniIid(DataBroker dataBroker, IpAddress ip) {
+        List<Node> uniNodes = UnimgrUtils.getUniNodes(dataBroker);
+        for (Node node: uniNodes) {
+            UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class);
+            if (uniAugmentation.getIpAddress().equals(ip)) {
+                InstanceIdentifier<Node> uniNode = InstanceIdentifier
+                        .create(NetworkTopology.class)
+                        .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID))
+                        .child(Node.class, new NodeKey(node.getKey()));
+                return uniNode;
+            }
+        }
+        return null;
+    }
+
+    public static InstanceIdentifier<Node> createEvcIid() {
+        InstanceIdentifier<Node> iid = InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.EVC_TOPOLOGY_ID))
+                .child(Node.class);
+        return iid;
+    }
+
+    public static InstanceIdentifier<Topology> createTopologyIid() {
+        InstanceIdentifier<Topology> iid = InstanceIdentifier.create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID));
+        return iid;
+    }
+
+    public static InstanceIdentifier<Link> getEvcLinkIID(LinkId id) {
+        InstanceIdentifier<Link> linkPath = InstanceIdentifier
+                .create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(UnimgrConstants.EVC_TOPOLOGY_ID))
+                .child(Link.class,new LinkKey(id));
+        return linkPath;
+    }
 }
index 03ed1e339bf96f018249b488843be57d8fb78362..97339cb0e7e723a05cc347d53de3c115ba4f981d 100755 (executable)
@@ -7,24 +7,25 @@
  */
 package org.opendaylight.unimgr.impl;
 
-import java.util.ArrayList;
+
 import java.util.List;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.unimgr.api.IUnimgrConsoleProvider;
 import org.opendaylight.unimgr.command.TransactionInvoker;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Evcs;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.EvcsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Unis;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.UnisBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.evcs.Evc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Evc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
+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.NetworkTopologyBuilder;
+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.TopologyBuilder;
+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.TopologyId;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
@@ -32,15 +33,13 @@ import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
 
 public class UnimgrProvider implements BindingAwareProvider, AutoCloseable, IUnimgrConsoleProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(UnimgrProvider.class);
 
-    private UniDataChangeListener unimgrDataChangeListener;
-    private EvcDataChangeListener evcDataChangeListener;
     private UnimgrDataChangeListener listener;
     private TransactionInvoker invoker;
 
@@ -49,146 +48,105 @@ public class UnimgrProvider implements BindingAwareProvider, AutoCloseable, IUni
 
     @Override
     public void onSessionInitiated(ProviderContext session) {
-        LOG.info("VcpeProvider Session Initiated");
+        LOG.info("UnimgrProvider Session Initiated");
 
         dataBroker =  session.getSALService(DataBroker.class);
         invoker = new  TransactionInvoker();
-        // Initialize operational and default config data in MD-SAL data store
+
         BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
         unimgrConsoleRegistration = context.registerService(IUnimgrConsoleProvider.class, this, null);
 
-        unimgrDataChangeListener = new UniDataChangeListener(dataBroker);
-        evcDataChangeListener = new EvcDataChangeListener(dataBroker);
         listener = new UnimgrDataChangeListener(dataBroker, invoker);
 
-        // Init UNI Config & Operational stores
-        Unis unis = new UnisBuilder().build();
-        initDatastore(LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getUnisIid(), unis);
-        initDatastore(LogicalDatastoreType.OPERATIONAL, UnimgrMapper.getUnisIid(), unis);
-        // Init EVC Config & Operational stores
-        Evcs evcs = new EvcsBuilder().build();
-        initDatastore(LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getEvcsIid(), evcs);
-        initDatastore(LogicalDatastoreType.OPERATIONAL, UnimgrMapper.getEvcsIid(), evcs);
+        // Initialize operational and default config data in MD-SAL data store
+        initDatastore(LogicalDatastoreType.CONFIGURATION, UnimgrConstants.UNI_TOPOLOGY_ID);
+        initDatastore(LogicalDatastoreType.OPERATIONAL, UnimgrConstants.UNI_TOPOLOGY_ID);
+        initDatastore(LogicalDatastoreType.CONFIGURATION, UnimgrConstants.EVC_TOPOLOGY_ID);
+        initDatastore(LogicalDatastoreType.OPERATIONAL, UnimgrConstants.EVC_TOPOLOGY_ID);
     }
 
     @Override
     public void close() throws Exception {
-        LOG.info("VcpeProvider Closed");
+        LOG.info("UnimgrProvider Closed");
         unimgrConsoleRegistration.unregister();
-        unimgrDataChangeListener.close();
-        evcDataChangeListener.close();
         listener.close();
     }
 
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    protected void initDatastore(final LogicalDatastoreType store, InstanceIdentifier iid, final DataObject object) {
-        WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-        tx.put(store, iid, object);
-
-        // Perform the tx.submit asynchronously
-        Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
-            @Override
-            public void onSuccess(final Void result) {
-                LOG.info("initStore {} with object {} succeeded", store, object);
-            }
-            @Override
-            public void onFailure(final Throwable throwable)  {
-                LOG.error("initStore {} with object {} failed", store, object);
+    protected void initDatastore(final LogicalDatastoreType type, TopologyId topoId) {
+        InstanceIdentifier<Topology> path = InstanceIdentifier
+                .create(NetworkTopology.class)
+                .child(Topology.class, new TopologyKey(topoId));
+        initializeTopology(type);
+        ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
+        CheckedFuture<Optional<Topology>, ReadFailedException> unimgrTp = transaction.read(type, path);
+        try {
+            if (!unimgrTp.get().isPresent()) {
+                TopologyBuilder tpb = new TopologyBuilder();
+                tpb.setTopologyId(topoId);
+                transaction.put(type, path, tpb.build());
+                transaction.submit();
+            } else {
+                transaction.cancel();
             }
-        });
+        } catch (Exception e) {
+            LOG.error("Error initializing unimgr topology", e);
+        }
     }
 
-    @Override
-    public boolean addUni(Uni uni) {
-        Unis unis;
-        List<Uni> listOfUnis = listUnis(true);
-
+    private void initializeTopology(LogicalDatastoreType type) {
+        ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
+        InstanceIdentifier<NetworkTopology> path = InstanceIdentifier.create(NetworkTopology.class);
+        CheckedFuture<Optional<NetworkTopology>, ReadFailedException> topology = transaction.read(type,path);
         try {
-            listOfUnis.add(uni);
-            unis = new UnisBuilder().setUni(listOfUnis).build();
-
-            // Place default config data in data store tree
-            WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-            tx.put(LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getUnisIid(), unis);
-
-            // Perform the tx.submit synchronously
-            tx.submit();
+            if (!topology.get().isPresent()) {
+                NetworkTopologyBuilder ntb = new NetworkTopologyBuilder();
+                transaction.put(type,path,ntb.build());
+                transaction.submit();
+            } else {
+                transaction.cancel();
+            }
         } catch (Exception e) {
-            LOG.error("addUni: failed: {}", e);
-            return false;
+            LOG.error("Error initializing unimgr topology {}",e);
         }
-        return true;
     }
 
     @Override
-    public boolean removeUni(String id) {
-        try {
-            // Removes default config data in data store tree
-            WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-            tx.delete(LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getUniIid(id));
-            System.out.println(UnimgrMapper.getUniIid(id));
-            // Perform the tx.submit synchronously
-            tx.submit();
-        } catch (Exception e) {
-            LOG.info("RemoveUni: failed: {}", e);
+    public boolean addUni(Uni uni) {
+        //TODO Uncomment
+        if (uni.getIpAddress() == null || uni.getMacAddress() == null) {
             return false;
         }
+//        UniAugmentation uniAugmentation = new UniAugmentationBuilder()
+//                                                .setIpAddress(uni.getIpAddress())
+//                                                .setMacAddress(uni.getMacAddress())
+//                                                .build();
+//        ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
+//        InstanceIdentifier<Node> path = UnimgrMapper.getUniAugmentationIidByMac(uni.getMacAddress());
         return true;
     }
 
     @Override
-    public List<Uni> listUnis(boolean isConfigurationDatastore) {
-        List<Uni> listOfUnis = null;
-
-        try {
-            ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();
-            listOfUnis = tx.read((isConfigurationDatastore) ? LogicalDatastoreType.CONFIGURATION
-                    : LogicalDatastoreType.OPERATIONAL, UnimgrMapper.getUnisIid()).checkedGet().get().getUni();
-        } catch (Exception e) {
-            LOG.error("ListIntents: failed: {}", e);
-        }
-
-        if (listOfUnis == null) {
-            listOfUnis = new ArrayList<Uni>();
-        }
-        LOG.info("ListUnisConfiguration: list of unis retrieved sucessfully");
-        return listOfUnis;
+    public boolean removeUni(String uuid) {
+        // TODO Auto-generated method stub
+        return false;
     }
 
     @Override
-    public Uni getUni(String id) {
-        Uni uni = null;
-
-        try {
-            InstanceIdentifier<Uni> iid = UnimgrMapper.getUniIid(id);
-            System.out.println(UnimgrMapper.getUniIid(id));
-
-            ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();
-            uni = tx.read(LogicalDatastoreType.CONFIGURATION, iid).checkedGet().get();
+    public List<Uni> listUnis(boolean isConfigurationDatastore) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
-            if (uni == null) {
-                uni = tx.read(LogicalDatastoreType.OPERATIONAL, iid).checkedGet().get();
-            }
-        } catch (Exception e) {
-            LOG.error("getUni: failed: {}", e);
-            return null;
-        }
-        LOG.info("getUni: Uni retrieved sucessfully");
-        return uni;
+    @Override
+    public Uni getUni(String uuid) {
+        // TODO Auto-generated method stub
+        return null;
     }
 
     @Override
     public boolean removeEvc(String uuid) {
-        try {
-            WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-            tx.delete(LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getEvcIid(uuid));
-            System.out.println(UnimgrMapper.getEvcIid(uuid));
-            tx.submit();
-        } catch (Exception e) {
-            LOG.info("Remove Evc: failed: {}", e);
-            return false;
-        }
-        return true;
+        // TODO Auto-generated method stub
+        return false;
     }
 
     @Override
@@ -202,4 +160,5 @@ public class UnimgrProvider implements BindingAwareProvider, AutoCloseable, IUni
         // TODO Auto-generated method stub
         return null;
     }
+
 }
index 865ef9860039c942c10c7c4e9c628ed5909f66b5..741e4af584b67ae7fa7329a45785f489637c5cf9 100644 (file)
@@ -14,16 +14,11 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
-import java.util.Map.Entry;
 import java.util.concurrent.ExecutionException;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableBiMap;
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.CheckedFuture;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
@@ -56,9 +51,13 @@ 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.port._interface.attributes.Options;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.Unis;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev150622.unis.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.EvcAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.Uni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
 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.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
@@ -69,13 +68,19 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableBiMap;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.CheckedFuture;
+
 public class UnimgrUtils {
 
     private static final Logger LOG = LoggerFactory.getLogger(UnimgrUtils.class);
 
     public static final Optional<Node> readNode(DataBroker dataBroker,
-            InstanceIdentifier<Node> nodeIid) {
+            InstanceIdentifier<?> genericNode) {
         ReadTransaction read = dataBroker.newReadOnlyTransaction();
+        InstanceIdentifier<Node> nodeIid = genericNode.firstIdentifierOf(Node.class);
         CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture = read
                 .read(LogicalDatastoreType.OPERATIONAL, nodeIid);
         Optional<Node> nodeOptional;
@@ -89,65 +94,42 @@ public class UnimgrUtils {
         }
     }
 
-    public static final Optional<Uni> readUniNode(DataBroker dataBroker,
-            InstanceIdentifier<Uni> nodeIid) {
-        ReadTransaction read = dataBroker.newReadOnlyTransaction();
-        CheckedFuture<Optional<Uni>, ReadFailedException> nodeFuture = read
-                .read(LogicalDatastoreType.OPERATIONAL, nodeIid);
-        Optional<Uni> nodeOptional;
-        try {
-            nodeOptional = nodeFuture.get();
-            return nodeOptional;
-        } catch (InterruptedException e) {
-            return Optional.absent();
-        } catch (ExecutionException e) {
-            return Optional.absent();
-        }
-    }
-
-    // This might not scale up.
-    public static final Unis readUnisFromStore(DataBroker dataBroker,
-            LogicalDatastoreType storetype) {
-        ReadOnlyTransaction read = dataBroker.newReadOnlyTransaction();
-        Optional<Unis> dataObject = null;
+    public static <D extends org.opendaylight.yangtools.yang.binding.DataObject> D read(
+            DataBroker dataBroker,
+            final LogicalDatastoreType store,
+            final InstanceIdentifier<D> path)  {
+        D result = null;
+        final ReadOnlyTransaction transaction = dataBroker.newReadOnlyTransaction();
+        Optional<D> optionalDataObject;
+        CheckedFuture<Optional<D>, ReadFailedException> future = transaction.read(store, path);
         try {
-            dataObject = read.read(storetype,
-                    UnimgrMapper.getUnisIid()).get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Error retrieving the UNIs from the Configuration tree.");
-        }
-        if ((dataObject != null) && (dataObject.get() != null)) {
-            read.close();
-            return dataObject.get();
-        } else {
-            read.close();
-            return null;
+            optionalDataObject = future.checkedGet();
+            if (optionalDataObject.isPresent()) {
+                result = optionalDataObject.get();
+            } else {
+                LOG.debug("{}: Failed to read {}",
+                        Thread.currentThread().getStackTrace()[1], path);
+            }
+        } catch (ReadFailedException e) {
+            LOG.warn("Failed to read {} ", path, e);
         }
+        transaction.close();
+        return result;
     }
 
-    public static void copyUniToDataStore(DataBroker dataBroker, Uni uni,
-            LogicalDatastoreType dataStoreType) {
-        WriteTransaction write = dataBroker.newWriteOnlyTransaction();
-        write.put(dataStoreType, UnimgrMapper.getUniIid(uni), uni);
-        write.submit();
-    }
-
-    public static OvsdbBridgeAugmentation createOvsdbBridgeAugmentation(Uni uni) {
-        NodeId ovsdbNodeId = uni.getOvsdbNodeId();
-        InstanceIdentifier<Node> ovsdbNodeIid;
-        if (ovsdbNodeId == null || ovsdbNodeId.getValue().isEmpty()) {
-            ovsdbNodeIid = UnimgrMapper.getOvsdbNodeIID(uni.getIpAddress());
+    public static OvsdbBridgeAugmentation createOvsdbBridgeAugmentation(Uni uni) throws Exception {
+        OvsdbNodeRef ovsdbNodeRef = uni.getOvsdbNodeRef();
+        if (ovsdbNodeRef != null && ovsdbNodeRef.getValue() != null) {
+            UUID bridgeUuid = UUID.randomUUID();
+            OvsdbBridgeAugmentation ovsdbBridge = new OvsdbBridgeAugmentationBuilder()
+                        .setBridgeName(new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME))
+                        .setManagedBy(ovsdbNodeRef)
+                        .setBridgeUuid(new Uuid(bridgeUuid.toString()))
+                        .build();
+            return ovsdbBridge;
         } else {
-            ovsdbNodeIid = UnimgrMapper.getOvsdbNodeIID(ovsdbNodeId);
+            throw new Exception("Ovsdb Node Reference does not exist !");
         }
-        OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
-        UUID bridgeUuid = UUID.randomUUID();
-        OvsdbBridgeAugmentation ovsdbBridge = new OvsdbBridgeAugmentationBuilder()
-                    .setBridgeName(new OvsdbBridgeName(UnimgrConstants.DEFAULT_BRIDGE_NAME))
-                    .setManagedBy(ovsdbNodeRef)
-                    .setBridgeUuid(new Uuid(bridgeUuid.toString()))
-                    .build();
-        return ovsdbBridge;
     }
 
     public static OvsdbNodeAugmentation createOvsdbNodeAugmentation(Uni uni) {
@@ -236,6 +218,59 @@ public class UnimgrUtils {
         }
     }
 
+    public static Node createOvsdbNode(DataBroker dataBroker, UniAugmentation uni) {
+        List<Node> ovsdbNodes = getOvsdbNodes(dataBroker);
+        if (!ovsdbNodes.isEmpty()) {
+            for (Node ovsdbNode: ovsdbNodes) {
+                OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode
+                        .getAugmentation(OvsdbNodeAugmentation.class);
+                if (ovsdbNodeAugmentation.getConnectionInfo()
+                                         .getRemoteIp().getIpv4Address()
+                                         .equals(uni.getIpAddress().getIpv4Address())) {
+                    LOG.info("Found ovsdb node");
+                    return ovsdbNode;
+                }
+            }
+        }
+        return null;
+    }
+
+    public static Node findOvsdbNode(DataBroker dataBroker, UniAugmentation uni) {
+        List<Node> ovsdbNodes = getOvsdbNodes(dataBroker);
+        if (!ovsdbNodes.isEmpty()) {
+            for (Node ovsdbNode: ovsdbNodes) {
+                OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode
+                        .getAugmentation(OvsdbNodeAugmentation.class);
+                if (ovsdbNodeAugmentation.getConnectionInfo()
+                                         .getRemoteIp().getIpv4Address()
+                                         .equals(uni.getIpAddress().getIpv4Address())) {
+                    LOG.info("Found ovsdb node");
+                    return ovsdbNode;
+                }
+            }
+        }
+        return null;
+    }
+
+    public static void updateUniNode(LogicalDatastoreType dataStore,
+                               InstanceIdentifier<?> uniKey,
+                               UniAugmentation uni,
+                               Node ovsdbNode,
+                               DataBroker dataBroker) {
+        WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
+        UniAugmentationBuilder updatedUniBuilder = new UniAugmentationBuilder(uni);
+        Optional<Node> optionalNode = UnimgrUtils.readNode(dataBroker, uniKey);
+        if (optionalNode.isPresent()) {
+            Node node = optionalNode.get();
+            NodeBuilder nodeBuilder = new NodeBuilder();
+            nodeBuilder.setKey(node.getKey());
+            nodeBuilder.setNodeId(node.getNodeId());
+            nodeBuilder.addAugmentation(UniAugmentation.class, updatedUniBuilder.build());
+            transaction.put(dataStore, uniKey.firstIdentifierOf(Node.class), nodeBuilder.build());
+        }
+    }
+
+    @Deprecated
     public static void createBridgeNode(DataBroker dataBroker, NodeId ovsdbNodeId, Uni uni, String bridgeName) {
         LOG.info("Creating a bridge on node {}", ovsdbNodeId);
         InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
@@ -249,8 +284,6 @@ public class UnimgrUtils {
                     + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX + bridgeName);
             bridgeNodeBuilder.setNodeId(bridgeNodeId);
             OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
-            // String target = VcpeUtils.getLocalIp().toString();
-            // ovsdbBridgeAugmentationBuilder.setControllerEntry(VcpeUtils.createControllerEntries(target));
             ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(
                     bridgeName));
             ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils
@@ -268,6 +301,89 @@ public class UnimgrUtils {
         }
     }
 
+    public static NodeId createOvsdbNodeId(IpAddress ipAddress) {
+        String nodeId = UnimgrConstants.OVSDB_PREFIX
+                + ipAddress.getIpv4Address().getValue().toString()
+                + ":"
+                + UnimgrConstants.OVSDB_PORT;
+        return new NodeId(nodeId);
+    }
+
+    public static List<Node> getOvsdbNodes(DataBroker dataBroker) {
+        List<Node> ovsdbNodes = new ArrayList<>();
+        InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.createTopologyIid();
+        Topology topology = UnimgrUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
+        if (topology != null && topology.getNode() != null) {
+            for (Node node : topology.getNode()) {
+                OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
+                if (ovsdbNodeAugmentation != null) {
+                    ovsdbNodes.add(node);
+                }
+            }
+        }
+        return ovsdbNodes;
+    }
+
+    public static List<Node> getUniNodes(DataBroker dataBroker) {
+        List<Node> uniNodes = new ArrayList<>();
+        InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.createTopologyIid();
+        Topology topology = UnimgrUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
+        if (topology != null && topology.getNode() != null) {
+            for (Node node : topology.getNode()) {
+                UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class);
+                if (uniAugmentation != null) {
+                    uniNodes.add(node);
+                }
+            }
+        }
+        return uniNodes;
+    }
+
+    public static List<Link> getEvcLinks(DataBroker dataBroker, IpAddress ipAddress) {
+        List<Link> evcLinks = new ArrayList<>();
+        InstanceIdentifier<Topology> topologyInstanceIdentifier = UnimgrMapper.createTopologyIid();
+        Topology topology = UnimgrUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
+        if (topology != null && topology.getNode() != null) {
+            for (Link link : topology.getLink()) {
+                EvcAugmentation evcAugmentation = link.getAugmentation(EvcAugmentation.class);
+                if (evcAugmentation != null) {
+                    evcLinks.add(link);
+                }
+            }
+        }
+        return evcLinks;
+    }
+
+    public static void createBridgeNode(DataBroker dataBroker, Node ovsdbNode, UniAugmentation uni, String bridgeName) {
+        LOG.info("Creating a bridge on node {}", ovsdbNode.getNodeId());
+        InstanceIdentifier<Node> ovsdbNodeIid = UnimgrMapper
+                .getOvsdbNodeIID(uni.getIpAddress());
+        ConnectionInfo connectionInfo = UnimgrUtils.getConnectionInfo(dataBroker, ovsdbNode.getNodeId());
+        if (connectionInfo != null) {
+            NodeBuilder bridgeNodeBuilder = new NodeBuilder();
+            InstanceIdentifier<Node> bridgeIid = UnimgrMapper
+                    .getOvsdbBridgeNodeIID(ovsdbNode.getNodeId(), bridgeName);
+            NodeId bridgeNodeId = new NodeId(ovsdbNode.getNodeId()
+                    + UnimgrConstants.DEFAULT_BRIDGE_NODE_ID_SUFFIX + bridgeName);
+            bridgeNodeBuilder.setNodeId(bridgeNodeId);
+            OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
+            ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(
+                    bridgeName));
+            ovsdbBridgeAugmentationBuilder.setProtocolEntry(UnimgrUtils
+                    .createMdsalProtocols());
+            OvsdbNodeRef ovsdbNodeRef = new OvsdbNodeRef(ovsdbNodeIid);
+            ovsdbBridgeAugmentationBuilder.setManagedBy(ovsdbNodeRef);
+            bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class,
+                    ovsdbBridgeAugmentationBuilder.build());
+            WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
+            transaction.put(LogicalDatastoreType.CONFIGURATION, bridgeIid,
+                    bridgeNodeBuilder.build());
+            transaction.submit();
+        } else {
+            LOG.error("The OVSDB node is not connected {}", ovsdbNode.getNodeId());
+        }
+    }
+
     public static void createTerminationPointNode(DataBroker dataBroker, Uni uni,
             Node bridgeNode, String bridgeName, String portName, String type) {
         InstanceIdentifier<TerminationPoint> tpIid = UnimgrMapper
@@ -1,13 +1,13 @@
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev150622;
+package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev151012;
 
 import org.opendaylight.unimgr.impl.UnimgrProvider;
 
-public class UnimgrModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev150622.AbstractUnimgrModule {
+public class UnimgrModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev151012.AbstractUnimgrModule {
     public UnimgrModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
 
-    public UnimgrModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev150622.UnimgrModule oldModule, java.lang.AutoCloseable oldInstance) {
+    public UnimgrModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev151012.UnimgrModule oldModule, java.lang.AutoCloseable oldInstance) {
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
@@ -7,7 +7,7 @@
 *
 * Do not modify this file unless it is present under src/main directory
 */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev150622;
-public class UnimgrModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev150622.AbstractUnimgrModuleFactory {
+package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev151012;
+public class UnimgrModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.impl.rev151012.AbstractUnimgrModuleFactory{
 
 }
index a1a7f9e445615f0fcf4295ed75d0498445c739ed..c87f9826d57d7eb1d9a5de326f5ab6ba6ec1d5ca 100755 (executable)
@@ -16,9 +16,9 @@ module unimgr-impl {
     description
         "Service definition for unimgr project";
 
-    revision "2015-06-22" {
+    revision "2015-10-12" {
         description
-            "Initial revision";
+            "Updated revision.";
     }
 
     identity unimgr {
index 95a33047a07d82a82e8220af4e7e246008783f51..0285d1a9d4a514b75abdc91bbfabfcfa412357fe 100755 (executable)
@@ -21,8 +21,6 @@ import org.powermock.modules.junit4.PowerMockRunner;
 @PrepareForTest({FrameworkUtil.class})
 public class UnimgrProviderTest {
 
-    @Mock private UniDataChangeListener unimgrDataChangeListener;
-    @Mock private EvcDataChangeListener evcDataChangeListener;
     @Mock private UnimgrDataChangeListener listener;
     @Mock private TransactionInvoker invoker;
     @Mock private DataBroker dataBroker;