From 96229674a75446c7725567e604f5c6340769e29b Mon Sep 17 00:00:00 2001 From: Mohamed El-Serngawy Date: Wed, 11 Nov 2015 17:05:51 -0500 Subject: [PATCH] Uni Add cmd CLI implmentation Change-Id: Iaa1183e31dc2c15fc6e2e0f2c15fb64a2ca16263 Signed-off-by: Mohamed El-Serngawy --- .../unimgr/cli/UniAddShellCommand.java | 55 ++++++++++--------- .../unimgr/cli/UniListShellCommand.java | 1 + .../unimgr/cli/UniRemoveShellCommand.java | 8 ++- .../unimgr/cli/UniShowShellCommand.java | 8 ++- .../unimgr/api/IUnimgrConsoleProvider.java | 11 ++-- .../unimgr/impl/UnimgrConstants.java | 2 + .../unimgr/impl/UnimgrMapper.java | 15 +++++ .../unimgr/impl/UnimgrProvider.java | 26 ++++----- .../opendaylight/unimgr/impl/UnimgrUtils.java | 38 +++++++++++++ .../unimgr/impl/rev151012/UnimgrModule.java | 1 + .../OSGI-INF/blueprint/blueprint.xml | 4 ++ 11 files changed, 119 insertions(+), 50 deletions(-) create mode 100644 impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml 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 9b5835e4..8de1a775 100755 --- a/cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java +++ b/cli/src/main/java/org/opendaylight/unimgr/cli/UniAddShellCommand.java @@ -13,40 +13,37 @@ 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.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; 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.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.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; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -@Command(name = "add", +@Command(name = "uni-add", scope = "uni", description = "Adds an uni to the controller.") public class UniAddShellCommand extends OsgiCommandSupport { + private static final Logger LOG = LoggerFactory.getLogger(UniAddShellCommand.class); protected IUnimgrConsoleProvider provider; - @Option(name = "-id", - aliases = { "--uni-id" }, - description = "The id.\n-id / --id ", - required = true, - multiValued = false) - private String uniId = "any"; - @Option(name = "-pm", aliases = { "--physical-medium" }, description = "The physical medium.\n-pm / --physical-medium ", required = false, multiValued = false) - private String physicalMedium = "any"; + private String physicalMedium = "UNI TypeFull Duplex 2 Physical Interface"; @Option(name = "-ma", aliases = { "--mac-address" }, description = "The mac address.\n-ma / --mac-address ", - required = false, + required = true, multiValued = false) private String macAddress = "any"; @@ -55,64 +52,67 @@ public class UniAddShellCommand extends OsgiCommandSupport { description = "The mode.\n-m / --mode ", required = false, multiValued = false) - private String mode = "any"; + private String mode = "Full Duplex"; @Option(name = "-ml", aliases = { "--mac-layer" }, description = "The mac layer.\n-ml / --mac-layer \n", uni.getUniId())); 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 717ae279..1346649d 100755 --- a/impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java +++ b/impl/src/main/java/org/opendaylight/unimgr/api/IUnimgrConsoleProvider.java @@ -9,18 +9,21 @@ package org.opendaylight.unimgr.api; import java.util.List; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +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.rev151012.Evc; 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; public interface IUnimgrConsoleProvider extends AutoCloseable { - boolean addUni(Uni uni); + boolean addUni(UniAugmentation uni); - boolean removeUni(String uuid); + boolean removeUni(IpAddress ipAddress); - List listUnis(boolean isConfigurationDatastore); + List listUnis(Boolean isConfigurationData); - Uni getUni(String uuid); + Uni getUni(IpAddress ipAddress); boolean removeEvc(String uuid); 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 0f39295e..38fd796b 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrConstants.java @@ -19,6 +19,8 @@ public class UnimgrConstants { public static final TopologyId EVC_TOPOLOGY_ID = new TopologyId(new Uri("unimgr:evc")); + public static final String UNI_PREFIX = "uni://"; + 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/UnimgrMapper.java b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java index 74a744c9..ff2293bb 100755 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrMapper.java @@ -282,4 +282,19 @@ public class UnimgrMapper { return nodePath; } + /** + * Generates an Instance Identifier for a specific UNI node by + * using the node Id + * @param nodeId The node ID of a specific UNI node. + * @return An Instance Identifier for a specific UNI node. + */ + public static InstanceIdentifier getUniNodeIid(NodeId nodeId) { + InstanceIdentifier nodePath = InstanceIdentifier + .create(NetworkTopology.class) + .child(Topology.class, + new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID)) + .child(Node.class, + new NodeKey(nodeId)); + return nodePath; +} } 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 f0871b63..beb31dc6 100755 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrProvider.java @@ -18,8 +18,10 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderCo 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.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; 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.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation; 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; @@ -46,6 +48,10 @@ public class UnimgrProvider implements BindingAwareProvider, AutoCloseable, IUni private DataBroker dataBroker; private ServiceRegistration unimgrConsoleRegistration; + public UnimgrProvider() { + LOG.info("Unimgr provider initialized"); + } + @Override public void onSessionInitiated(ProviderContext session) { LOG.info("UnimgrProvider Session Initiated"); @@ -123,38 +129,32 @@ public class UnimgrProvider implements BindingAwareProvider, AutoCloseable, IUni } @Override - public boolean addUni(Uni uni) { - //TODO This code was left commented as an example - if (uni.getIpAddress() == null || uni.getMacAddress() == null) { + public boolean addUni(UniAugmentation uniAug) { + if (uniAug == null || uniAug.getIpAddress() == null || uniAug.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; + return UnimgrUtils.createUniNode(dataBroker, uniAug); } @Override - public boolean removeUni(String uuid) { + public boolean removeUni(IpAddress ipAddress) { // TODO Auto-generated method stub return false; } @Override - public List listUnis(boolean isConfigurationDatastore) { + public List listUnis(Boolean isConfigurationData) { // TODO Auto-generated method stub return null; } @Override - public Uni getUni(String uuid) { + public Uni getUni(IpAddress ipAddress) { // TODO Auto-generated method stub return null; } + @Override public boolean removeEvc(String uuid) { // TODO Auto-generated method stub 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 f9bbfa25..edc213b1 100644 --- a/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java +++ b/impl/src/main/java/org/opendaylight/unimgr/impl/UnimgrUtils.java @@ -358,6 +358,44 @@ public class UnimgrUtils { return terminationPoint; } + /** + * Creates and submit an UNI Node by using the Data contained in the UniAugmentation + * @param dataBroker The instance of the DataBroker to create transactions + * @param uni The UNI's data + * @return The instance of the UNI Node + */ + public static boolean createUniNode(DataBroker dataBroker, UniAugmentation uni) { + NodeId uniNodeId = new NodeId(createUniNodeId(uni.getIpAddress())); + boolean result = false; + try { + InstanceIdentifier uniNodeIid = UnimgrMapper.getUniNodeIid(uniNodeId); + NodeKey uniNodeKey = new NodeKey(uniNodeId); + Node nodeData = new NodeBuilder() + .setNodeId(uniNodeId) + .setKey(uniNodeKey) + .addAugmentation(UniAugmentation.class, uni) + .build(); + WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); + transaction.put(LogicalDatastoreType.CONFIGURATION, uniNodeIid, nodeData); + CheckedFuture future = transaction.submit(); + future.checkedGet(); + result = true; + LOG.info("Created and submitted a new Uni node {}", nodeData.getNodeId()); + } catch (Exception e) { + LOG.error("Exception while creating Uni Node" + "Uni Node Id: {}", uniNodeId); + } + return result; + } + + /** + * Creates an UNI node Id with an IP Address. + * @param ipAddress The IP address of the UNI + * @return A NodeId for a Specific UNI Node Id + */ + public static NodeId createUniNodeId(IpAddress ipAddress) { + return new NodeId(UnimgrConstants.UNI_PREFIX + ipAddress.getIpv4Address().getValue().toString()); + } + /** * Creates and Submit a termination point Node to the configuration DateStore. * @param dataBroker The instance of the data broker to create transactions diff --git a/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java b/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java index 0df54469..674e9712 100644 --- a/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java +++ b/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/unimgr/impl/rev151012/UnimgrModule.java @@ -3,6 +3,7 @@ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr. import org.opendaylight.unimgr.impl.UnimgrProvider; 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); } diff --git a/impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml new file mode 100644 index 00000000..6bd3c154 --- /dev/null +++ b/impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file -- 2.36.6