From 0ddaabe5da3bb503133e7af6b9772847cc6e7e1a Mon Sep 17 00:00:00 2001 From: grmontpetit Date: Mon, 12 Oct 2015 23:51:14 -0400 Subject: [PATCH] Integrate the new yang model with Network Topology augmentation Change-Id: I6531479b3e2323e10bf724cadbd04e8ac98cfae5 Signed-off-by: Rashmi Pujar Signed-off-by: grmontpetit Signed-off-by: adetalhouet --- api/.gitignore | 1 + api/pom.xml | 13 + api/src/main/yang/cl-unimgr-mef.yang | 57 ++-- .../unimgr/cli/UniAddShellCommand.java | 21 +- .../unimgr/cli/UniListShellCommand.java | 5 +- .../unimgr/cli/UniShowShellCommand.java | 4 +- features/src/main/features/features.xml | 11 +- impl/pom.xml | 4 + .../unimgr/api/IUnimgrConsoleProvider.java | 4 +- .../unimgr/command/EvcCreateCommand.java | 124 +++++---- .../unimgr/command/EvcDeleteCommand.java | 4 +- .../unimgr/command/UniCreateCommand.java | 142 +++++++--- .../unimgr/command/UniDeleteCommand.java | 2 +- .../unimgr/impl/EvcDataChangeListener.java | 67 ----- .../unimgr/impl/UniDataChangeListener.java | 80 ------ .../unimgr/impl/UnimgrConstants.java | 4 + .../unimgr/impl/UnimgrDataChangeListener.java | 6 +- .../unimgr/impl/UnimgrMapper.java | 116 ++++----- .../unimgr/impl/UnimgrProvider.java | 189 ++++++-------- .../opendaylight/unimgr/impl/UnimgrUtils.java | 244 +++++++++++++----- .../UnimgrModule.java | 6 +- .../UnimgrModuleFactory.java | 4 +- impl/src/main/yang/unimgr-impl.yang | 4 +- .../unimgr/impl/UnimgrProviderTest.java | 2 - 24 files changed, 546 insertions(+), 568 deletions(-) create mode 100644 api/.gitignore delete mode 100755 impl/src/main/java/org/opendaylight/unimgr/impl/EvcDataChangeListener.java delete mode 100755 impl/src/main/java/org/opendaylight/unimgr/impl/UniDataChangeListener.java rename impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/{rev150622 => rev151012}/UnimgrModule.java (87%) rename impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/{rev150622 => rev151012}/UnimgrModuleFactory.java (77%) diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/api/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/api/pom.xml b/api/pom.xml index c334df34..2568b367 100755 --- a/api/pom.xml +++ b/api/pom.xml @@ -20,6 +20,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL 0.0.1-SNAPSHOT bundle + + 1.2.1-SNAPSHOT + + @@ -41,6 +45,15 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.mdsal.model ietf-topology + + org.opendaylight.mdsal.model + yang-ext + + + org.opendaylight.ovsdb + southbound-api + ${ovsdb.version} + diff --git a/api/src/main/yang/cl-unimgr-mef.yang b/api/src/main/yang/cl-unimgr-mef.yang index 81c9d625..86d95bac 100755 --- a/api/src/main/yang/cl-unimgr-mef.yang +++ b/api/src/main/yang/cl-unimgr-mef.yang @@ -22,12 +22,19 @@ module cl-unimgr-mef { namespace "urn:opendaylight:params:xml:ns:yang:unimgr"; prefix "unimgr"; - import ietf-yang-types { prefix yang; revision-date 2013-07-15; } - import ietf-inet-types { prefix inet; revision-date 2010-09-24; } - import network-topology { prefix topo; revision-date 2013-10-21; } + import ietf-yang-types { prefix "yang"; revision-date 2013-07-15; } + import ietf-inet-types { prefix "inet"; revision-date 2010-09-24; } + import network-topology { prefix "topo"; revision-date 2013-10-21; } + import yang-ext { prefix "ext"; } + import ovsdb { prefix "ovsdb"; revision-date 2015-01-05;} - revision "2015-06-22" { - description "Initial revision of unimgr model"; + revision "2015-10-12" { + description "Updated revision of the unimgr model."; + } + + typedef ovsdb-node-ref { + description "A reference to an ovsdb node"; + type ovsdb:ovsdb-node-ref; } grouping service-speed { @@ -57,15 +64,9 @@ module cl-unimgr-mef { // represent simplification of MEF Per Uni Attributes grouping uni { - leaf id { - type topo:node-id; - mandatory true; - description "Uniquely identifies the uni"; - } - leaf ovsdb-node-id { - type topo:node-id; - mandatory false; - description "Uniquely identifies the uni and ovsdb"; + leaf ovsdb-node-ref { + type ovsdb-node-ref; + description "A reference to the ovsdb node."; } leaf physical-medium { type string; @@ -99,18 +100,13 @@ module cl-unimgr-mef { // Represents simplification of MEF EVC Per Uni Atrributes grouping evc { - leaf id { - type topo:node-id; - mandatory true; - description "Uniquely identifies the evc"; - } list uni-source { key "order"; leaf order { type uint8; } leaf uni { - type topo:node-id; + type instance-identifier; } } list uni-dest { @@ -119,7 +115,7 @@ module cl-unimgr-mef { type uint8; } leaf uni { - type topo:node-id; + type instance-identifier; } } leaf cos-id { @@ -133,17 +129,16 @@ module cl-unimgr-mef { } } - container unis { - list uni { - key "id"; - uses uni; - } + augment "/topo:network-topology/topo:topology/topo:node" { + description "Augmentation for UNI nodes under topology"; + ext:augment-identifier "uni-augmentation"; + uses uni; } - container evcs { - list evc { - key "id"; - uses evc; - } + augment "/topo:network-topology/topo:topology/topo:link" { + description "Augmentation for EVC Link under topology"; + ext:augment-identifier "evc-augmentation"; + uses evc; } + } diff --git a/cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java b/cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java index 1331aac2..9b5835e4 100755 --- a/cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java +++ b/cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java @@ -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"); } diff --git a/cli/src/main/java/org/opendaylight/unimgr/cli/UniListShellCommand.java b/cli/src/main/java/org/opendaylight/unimgr/cli/UniListShellCommand.java index 87725158..2cda3105 100755 --- a/cli/src/main/java/org/opendaylight/unimgr/cli/UniListShellCommand.java +++ b/cli/src/main/java/org/opendaylight/unimgr/cli/UniListShellCommand.java @@ -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(); diff --git a/cli/src/main/java/org/opendaylight/unimgr/cli/UniShowShellCommand.java b/cli/src/main/java/org/opendaylight/unimgr/cli/UniShowShellCommand.java index d3e8cc6b..e1373ce2 100755 --- a/cli/src/main/java/org/opendaylight/unimgr/cli/UniShowShellCommand.java +++ b/cli/src/main/java/org/opendaylight/unimgr/cli/UniShowShellCommand.java @@ -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")); diff --git a/features/src/main/features/features.xml b/features/src/main/features/features.xml index 4b9fe8a3..b65d3a64 100755 --- a/features/src/main/features/features.xml +++ b/features/src/main/features/features.xml @@ -16,12 +16,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mvn:org.opendaylight.ovsdb/southbound-features/{{VERSION}}/xml/features mvn:org.opendaylight.dlux/features-dlux/{{VERSION}}/xml/features - + odl-mdsal-models + odl-ovsdb-southbound-api mvn:org.opendaylight.unimgr/unimgr-api/${project.version} - + odl-mdsal-broker odl-ovsdb-southbound-impl odl-unimgr-api @@ -29,17 +30,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mvn:org.opendaylight.unimgr/unimgr-impl/{{VERSION}}/xml/config - + odl-unimgr mvn:org.opendaylight.unimgr/unimgr-cli/{{VERSION}} - + odl-unimgr odl-restconf - + odl-unimgr-rest odl-unimgr-console odl-mdsal-apidocs diff --git a/impl/pom.xml b/impl/pom.xml index e33580c3..af54334c 100755 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -81,6 +81,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL ${powermock.version} test + + org.opendaylight.mdsal.model + ietf-yang-types-20130715 + diff --git a/impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java b/impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java index bf946e0c..9bbaec46 100755 --- a/impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java +++ b/impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java @@ -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 { diff --git a/impl/src/main/java/org/opendaylight/unimgr/command/EvcCreateCommand.java b/impl/src/main/java/org/opendaylight/unimgr/command/EvcCreateCommand.java index ea18ae76..837e7b16 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/command/EvcCreateCommand.java +++ b/impl/src/main/java/org/opendaylight/unimgr/command/EvcCreateCommand.java @@ -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, 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 destinationNodeIid = UnimgrMapper.getUniIid(destUniNodeID); - Optional 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 sourceNodeIid = UnimgrMapper.getUniIid(sourceUniNodeID); - Optional 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 destinationNodeIid = (InstanceIdentifier) 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 sourceIid = (InstanceIdentifier) 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"); } } } diff --git a/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java b/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java index 805e88dd..3114f823 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java +++ b/impl/src/main/java/org/opendaylight/unimgr/command/EvcDeleteCommand.java @@ -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, 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()); } } } diff --git a/impl/src/main/java/org/opendaylight/unimgr/command/UniCreateCommand.java b/impl/src/main/java/org/opendaylight/unimgr/command/UniCreateCommand.java index 7cd52a0a..90cdc51f 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/command/UniCreateCommand.java +++ b/impl/src/main/java/org/opendaylight/unimgr/command/UniCreateCommand.java @@ -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, 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 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 = 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 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 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 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 optionalOvsdbNode = UnimgrUtils.readNode(dataBroker, ovsdbIid); + if (optionalOvsdbNode.isPresent()) { + Node ovsdbNode = optionalOvsdbNode.get(); + InstanceIdentifier 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 ovsdbNodeIid = UnimgrMapper - .getOvsdbNodeIID(uni.getIpAddress()); + } else if (ovsdbNodeAugmentation.getConnectionInfo().getRemoteIp() + .equals(uniAugmentation.getIpAddress())) { + InstanceIdentifier ovsdbNodeIid = uniAugmentation.getOvsdbNodeRef().getValue() + .firstIdentifierOf(Node.class); Optional 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 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); } diff --git a/impl/src/main/java/org/opendaylight/unimgr/command/UniDeleteCommand.java b/impl/src/main/java/org/opendaylight/unimgr/command/UniDeleteCommand.java index edb76be2..9aa7ab85 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/command/UniDeleteCommand.java +++ b/impl/src/main/java/org/opendaylight/unimgr/command/UniDeleteCommand.java @@ -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 index 6e1aec6e..00000000 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/EvcDataChangeListener.java +++ /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 evcListener = null; - - public EvcDataChangeListener(DataBroker dataBroker) { - this.dataBroker = dataBroker; - evcListener = dataBroker.registerDataChangeListener( - LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getEvcsIid(), - this, DataChangeScope.SUBTREE); - } - - @Override - public void onDataChanged( - AsyncDataChangeEvent, DataObject> changes) { - create(changes.getCreatedData()); - update(changes.getUpdatedData()); - delete(changes); - } - - @Override - public void create(Map, DataObject> changes) { - } - - @Override - public void update(Map, DataObject> changes) { - // TODO Auto-generated method stub - } - - @Override - public void delete( - AsyncDataChangeEvent, 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 index 1dee61df..00000000 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UniDataChangeListener.java +++ /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> listeners; - private DataBroker dataBroker; - - public UniDataChangeListener(DataBroker dataBroker) { - this.dataBroker = dataBroker; - listeners = new HashMap>(); - ListenerRegistration 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 ovsdbListener = dataBroker.registerDataChangeListener( - LogicalDatastoreType.OPERATIONAL, UnimgrMapper.getOvsdbTopologyIdentifier() - , this, DataChangeScope.SUBTREE); - listeners.put("uni", uniListener); - listeners.put("ovsdb", ovsdbListener); - - } - - @Override - public void onDataChanged( - AsyncDataChangeEvent, DataObject> changes) { - create(changes.getCreatedData()); - update(changes.getUpdatedData()); - delete(changes); - } - - @Override - public void create(Map, DataObject> changes) { - } - - @Override - public void update(Map, DataObject> changes) { - } - - @Override - public void delete( - AsyncDataChangeEvent, DataObject> changes) { - // TODO implement delete, verify old data versus new data - } - - @Override - public void close() throws Exception { - for (Map.Entry> entry : listeners.entrySet()) { - ListenerRegistration value = entry.getValue(); - if (value != null) { - value.close(); - } - } - } -} diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java index 543078d7..21a0d484 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java @@ -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); diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrDataChangeListener.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrDataChangeListener.java index c9319371..59d6a833 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrDataChangeListener.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrDataChangeListener.java @@ -44,10 +44,10 @@ public class UnimgrDataChangeListener implements IUnimgrDataChangeListener { this.invoker = invoker; listeners = new HashMap>(); ListenerRegistration uniListener = dataBroker.registerDataChangeListener( - LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getUnisIid() + LogicalDatastoreType.CONFIGURATION, UnimgrMapper.createUniIid() , this, DataChangeScope.SUBTREE); ListenerRegistration evcListener = dataBroker.registerDataChangeListener( - LogicalDatastoreType.CONFIGURATION, UnimgrMapper.getEvcIid() + LogicalDatastoreType.CONFIGURATION, UnimgrMapper.createEvcIid() , this, DataChangeScope.SUBTREE); ListenerRegistration 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> entry : listeners.entrySet()) { ListenerRegistration value = entry.getValue(); if (value != null) { diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java index c84ee9eb..a478a50a 100755 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java @@ -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 getUnisIid() { - return InstanceIdentifier.builder(Unis.class) - .build(); - } - - public static InstanceIdentifier getUniIid() { - return InstanceIdentifier.builder(Unis.class) - .child(Uni.class) - .build(); - } - - public static InstanceIdentifier getUniIid(String id) { - return InstanceIdentifier.builder(Unis.class) - .child(Uni.class, new UniKey(new NodeId(id))) - .build(); - } - - public static InstanceIdentifier getUniIid(UniKey uniKey) { - return InstanceIdentifier.builder(Unis.class) - .child(Uni.class, uniKey) - .build(); - } - - public static InstanceIdentifier getUniIid(NodeId uniNodeId) { - return InstanceIdentifier.builder(Unis.class) - .child(Uni.class, new UniKey(uniNodeId)) - .build(); - } - - public static InstanceIdentifier getUniIid(Uni uni) { - return InstanceIdentifier.builder(Unis.class) - .child(Uni.class, uni.getKey()) - .build(); - } - - public static InstanceIdentifier getEvcsIid() { - return InstanceIdentifier.builder(Evcs.class) - .build(); - } - - public static InstanceIdentifier getEvcIid() { - return InstanceIdentifier.builder(Evcs.class) - .child(Evc.class) - .build(); - } - - public static InstanceIdentifier getEvcIid(String id) { - return InstanceIdentifier.builder(Evcs.class) - .child(Evc.class, new EvcKey(new NodeId(id))) - .build(); - } - public static InstanceIdentifier getOvsdbNodeIID(NodeId nodeId) { InstanceIdentifier 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 getOvsdbTopologyIdentifier() { InstanceIdentifier path = InstanceIdentifier .create(NetworkTopology.class) @@ -140,4 +81,47 @@ public class UnimgrMapper { LOG.debug("Termination point InstanceIdentifier generated : {}",terminationPointPath); return terminationPointPath; } + + public static InstanceIdentifier createUniIid() { + InstanceIdentifier iid = InstanceIdentifier.create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID)) + .child(Node.class); + return iid; + } + + public static InstanceIdentifier createUniIid(DataBroker dataBroker, IpAddress ip) { + List uniNodes = UnimgrUtils.getUniNodes(dataBroker); + for (Node node: uniNodes) { + UniAugmentation uniAugmentation = node.getAugmentation(UniAugmentation.class); + if (uniAugmentation.getIpAddress().equals(ip)) { + InstanceIdentifier 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 createEvcIid() { + InstanceIdentifier iid = InstanceIdentifier.create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(UnimgrConstants.EVC_TOPOLOGY_ID)) + .child(Node.class); + return iid; + } + + public static InstanceIdentifier createTopologyIid() { + InstanceIdentifier iid = InstanceIdentifier.create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID)); + return iid; + } + + public static InstanceIdentifier getEvcLinkIID(LinkId id) { + InstanceIdentifier linkPath = InstanceIdentifier + .create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(UnimgrConstants.EVC_TOPOLOGY_ID)) + .child(Link.class,new LinkKey(id)); + return linkPath; + } } diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java index 03ed1e33..97339cb0 100755 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java @@ -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() { - @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 path = InstanceIdentifier + .create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(topoId)); + initializeTopology(type); + ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); + CheckedFuture, 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 listOfUnis = listUnis(true); - + private void initializeTopology(LogicalDatastoreType type) { + ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); + InstanceIdentifier path = InstanceIdentifier.create(NetworkTopology.class); + CheckedFuture, 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 path = UnimgrMapper.getUniAugmentationIidByMac(uni.getMacAddress()); return true; } @Override - public List listUnis(boolean isConfigurationDatastore) { - List 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(); - } - 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 iid = UnimgrMapper.getUniIid(id); - System.out.println(UnimgrMapper.getUniIid(id)); - - ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction(); - uni = tx.read(LogicalDatastoreType.CONFIGURATION, iid).checkedGet().get(); + public List 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; } + } diff --git a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java index 865ef986..741e4af5 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java @@ -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 readNode(DataBroker dataBroker, - InstanceIdentifier nodeIid) { + InstanceIdentifier genericNode) { ReadTransaction read = dataBroker.newReadOnlyTransaction(); + InstanceIdentifier nodeIid = genericNode.firstIdentifierOf(Node.class); CheckedFuture, ReadFailedException> nodeFuture = read .read(LogicalDatastoreType.OPERATIONAL, nodeIid); Optional nodeOptional; @@ -89,65 +94,42 @@ public class UnimgrUtils { } } - public static final Optional readUniNode(DataBroker dataBroker, - InstanceIdentifier nodeIid) { - ReadTransaction read = dataBroker.newReadOnlyTransaction(); - CheckedFuture, ReadFailedException> nodeFuture = read - .read(LogicalDatastoreType.OPERATIONAL, nodeIid); - Optional 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 dataObject = null; + public static D read( + DataBroker dataBroker, + final LogicalDatastoreType store, + final InstanceIdentifier path) { + D result = null; + final ReadOnlyTransaction transaction = dataBroker.newReadOnlyTransaction(); + Optional optionalDataObject; + CheckedFuture, 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 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 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 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 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 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 getOvsdbNodes(DataBroker dataBroker) { + List ovsdbNodes = new ArrayList<>(); + InstanceIdentifier 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 getUniNodes(DataBroker dataBroker) { + List uniNodes = new ArrayList<>(); + InstanceIdentifier 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 getEvcLinks(DataBroker dataBroker, IpAddress ipAddress) { + List evcLinks = new ArrayList<>(); + InstanceIdentifier 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 ovsdbNodeIid = UnimgrMapper + .getOvsdbNodeIID(uni.getIpAddress()); + ConnectionInfo connectionInfo = UnimgrUtils.getConnectionInfo(dataBroker, ovsdbNode.getNodeId()); + if (connectionInfo != null) { + NodeBuilder bridgeNodeBuilder = new NodeBuilder(); + InstanceIdentifier 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 tpIid = UnimgrMapper diff --git a/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModule.java b/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java similarity index 87% rename from impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModule.java rename to impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java index 61b69c5f..0df54469 100644 --- a/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModule.java +++ b/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java @@ -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); } diff --git a/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModuleFactory.java b/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModuleFactory.java similarity index 77% rename from impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModuleFactory.java rename to impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModuleFactory.java index a33ec4a9..266059fe 100644 --- a/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev150622/UnimgrModuleFactory.java +++ b/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModuleFactory.java @@ -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{ } diff --git a/impl/src/main/yang/unimgr-impl.yang b/impl/src/main/yang/unimgr-impl.yang index a1a7f9e4..c87f9826 100755 --- a/impl/src/main/yang/unimgr-impl.yang +++ b/impl/src/main/yang/unimgr-impl.yang @@ -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 { diff --git a/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrProviderTest.java b/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrProviderTest.java index 95a33047..0285d1a9 100755 --- a/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrProviderTest.java +++ b/impl/src/test/java/org/opendaylight/unimgr/impl/UnimgrProviderTest.java @@ -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; -- 2.36.6