From d26469882fcbee50d42d4281e18eac0cc2ffb45f Mon Sep 17 00:00:00 2001 From: Sasidharan Sambasivam Date: Thu, 9 Apr 2015 14:24:18 +0530 Subject: [PATCH] Changed vpnmanager directory structure Change-Id: I8e9fc5b7ef10ee020a3f7abf6e068e05810f189f Signed-off-by: Sasidharan Sambasivam --- pom.xml | 3 +- .../src/main/config/maven-metadata-local.xml | 20 - vpnmanager/pom.xml | 49 +++ .../vpnmanager-api}/pom.xml | 0 .../vpnmanager-api}/src/main/yang/l3vpn.yang | 0 .../src/main/yang/odl-l3vpn.yang | 0 .../vpnmanager-impl}/pom.xml | 114 +++--- .../src/main/config/default-config.xml | 0 .../AbstractDataChangeListener.java | 228 +++++------ .../vpnservice/VpnInterfaceManager.java | 378 +++++++++--------- .../opendaylight/vpnservice/VpnManager.java | 170 ++++---- .../org/opendaylight/vpnservice/VpnUtil.java | 54 +-- .../vpnservice/VpnserviceProvider.java | 82 ++-- .../impl/rev150216/VpnserviceImplModule.java | 0 .../VpnserviceImplModuleFactory.java | 0 .../src/main/yang/vpnservice-impl.yang | 0 .../vpnservice/test/MockDataChangedEvent.java | 106 ++--- .../vpnservice/test/VpnServiceTest.java | 150 +++---- 18 files changed, 691 insertions(+), 663 deletions(-) delete mode 100644 vpnmanager-impl/src/main/config/maven-metadata-local.xml create mode 100644 vpnmanager/pom.xml rename {vpnmanager-api => vpnmanager/vpnmanager-api}/pom.xml (100%) rename {vpnmanager-api => vpnmanager/vpnmanager-api}/src/main/yang/l3vpn.yang (100%) rename {vpnmanager-api => vpnmanager/vpnmanager-api}/src/main/yang/odl-l3vpn.yang (100%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/pom.xml (93%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/config/default-config.xml (100%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java (97%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java (97%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/vpnservice/VpnManager.java (97%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/vpnservice/VpnUtil.java (98%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java (97%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java (100%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModuleFactory.java (100%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/main/yang/vpnservice-impl.yang (100%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java (96%) rename {vpnmanager-impl => vpnmanager/vpnmanager-impl}/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java (98%) diff --git a/pom.xml b/pom.xml index 436bf1d3..0db9c69d 100644 --- a/pom.xml +++ b/pom.xml @@ -17,8 +17,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL model-bgp - vpnmanager-api - vpnmanager-impl + vpnmanager distribution/karaf features vpnservice-artifacts diff --git a/vpnmanager-impl/src/main/config/maven-metadata-local.xml b/vpnmanager-impl/src/main/config/maven-metadata-local.xml deleted file mode 100644 index 258959f2..00000000 --- a/vpnmanager-impl/src/main/config/maven-metadata-local.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - org.opendaylight.vpnservice - vpnmanager-impl - 1.0-SNAPSHOT - - - true - - 20150213123103 - - - config - xml - 1.0-SNAPSHOT - 20150213123103 - - - - diff --git a/vpnmanager/pom.xml b/vpnmanager/pom.xml new file mode 100644 index 00000000..49922b6b --- /dev/null +++ b/vpnmanager/pom.xml @@ -0,0 +1,49 @@ + + + + + + org.opendaylight.odlparent + odlparent + 1.5.0-SNAPSHOT + + + + org.opendaylight.vpnservice + vpnmanager + 0.0.1-SNAPSHOT + vpnmanager + pom + 4.0.0 + + 3.1.1 + + + vpnmanager-api + vpnmanager-impl + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.apache.maven.plugins + maven-install-plugin + + true + + + + + diff --git a/vpnmanager-api/pom.xml b/vpnmanager/vpnmanager-api/pom.xml similarity index 100% rename from vpnmanager-api/pom.xml rename to vpnmanager/vpnmanager-api/pom.xml diff --git a/vpnmanager-api/src/main/yang/l3vpn.yang b/vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang similarity index 100% rename from vpnmanager-api/src/main/yang/l3vpn.yang rename to vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang diff --git a/vpnmanager-api/src/main/yang/odl-l3vpn.yang b/vpnmanager/vpnmanager-api/src/main/yang/odl-l3vpn.yang similarity index 100% rename from vpnmanager-api/src/main/yang/odl-l3vpn.yang rename to vpnmanager/vpnmanager-api/src/main/yang/odl-l3vpn.yang diff --git a/vpnmanager-impl/pom.xml b/vpnmanager/vpnmanager-impl/pom.xml similarity index 93% rename from vpnmanager-impl/pom.xml rename to vpnmanager/vpnmanager-impl/pom.xml index 5c87523e..3eaa892d 100644 --- a/vpnmanager-impl/pom.xml +++ b/vpnmanager/vpnmanager-impl/pom.xml @@ -1,57 +1,57 @@ - - - - - - org.opendaylight.controller - config-parent - 0.3.0-SNAPSHOT - - - - 4.0.0 - org.opendaylight.vpnservice - vpnmanager-impl - 0.0.1-SNAPSHOT - bundle - - - ${project.groupId} - vpnmanager-api - ${project.version} - - - - junit - junit - - - org.mockito - mockito-all - test - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - ${project.basedir}/../commons/src/main/resources/vpns_checks.xml - - true - **/*.java,**/*.xml,**/*.ini - **/yang/ - - - - - - + + + + + + org.opendaylight.controller + config-parent + 0.3.0-SNAPSHOT + + + + 4.0.0 + org.opendaylight.vpnservice + vpnmanager-impl + 0.0.1-SNAPSHOT + bundle + + + ${project.groupId} + vpnmanager-api + ${project.version} + + + + junit + junit + + + org.mockito + mockito-all + test + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml + + true + **/*.java,**/*.xml,**/*.ini + **/yang/ + + + + + + diff --git a/vpnmanager-impl/src/main/config/default-config.xml b/vpnmanager/vpnmanager-impl/src/main/config/default-config.xml similarity index 100% rename from vpnmanager-impl/src/main/config/default-config.xml rename to vpnmanager/vpnmanager-impl/src/main/config/default-config.xml diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java similarity index 97% rename from vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java index 88e2893f..df8471e3 100644 --- a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/AbstractDataChangeListener.java @@ -1,114 +1,114 @@ -/* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; - -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -/** - * AbstractDataChangeListener implemented basic {@link DataChangeListener} processing for - * VPN related Data Objects. - */ -public abstract class AbstractDataChangeListener implements DataChangeListener { - - protected final Class clazz; - - /** - * - * @param clazz - for which the data change event is received - */ - public AbstractDataChangeListener(Class clazz) { - this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!"); - } - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> changeEvent) { - Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!"); - - /* All DataObjects for create */ - final Map, DataObject> createdData = changeEvent.getCreatedData() != null - ? changeEvent.getCreatedData() : Collections., DataObject>emptyMap(); - /* All DataObjects for remove */ - final Set> removeData = changeEvent.getRemovedPaths() != null - ? changeEvent.getRemovedPaths() : Collections.>emptySet(); - /* All DataObjects for updates */ - final Map, DataObject> updateData = changeEvent.getUpdatedData() != null - ? changeEvent.getUpdatedData() : Collections., DataObject>emptyMap(); - /* All Original DataObjects */ - final Map, DataObject> originalData = changeEvent.getOriginalData() != null - ? changeEvent.getOriginalData() : Collections., DataObject>emptyMap(); - - this.createData(createdData); - this.updateData(updateData, originalData); - this.removeData(removeData, originalData); - } - - @SuppressWarnings("unchecked") - private void createData(final Map, DataObject> createdData) { - final Set> keys = createdData.keySet() != null - ? createdData.keySet() : Collections.>emptySet(); - for (InstanceIdentifier key : keys) { - if (clazz.equals(key.getTargetType())) { - InstanceIdentifier createKeyIdent = key.firstIdentifierOf(clazz); - final Optional value = Optional.of(createdData.get(key)); - if (value.isPresent()) { - this.add(createKeyIdent, (T)value.get()); - } - } - } - } - - @SuppressWarnings("unchecked") - private void updateData(final Map, DataObject> updateData, - final Map, DataObject> originalData) { - - final Set> keys = updateData.keySet() != null - ? updateData.keySet() : Collections.>emptySet(); - for (InstanceIdentifier key : keys) { - if (clazz.equals(key.getTargetType())) { - InstanceIdentifier updateKeyIdent = key.firstIdentifierOf(clazz); - final Optional value = Optional.of(updateData.get(key)); - final Optional original = Optional.of(originalData.get(key)); - if (value.isPresent() && original.isPresent()) { - this.update(updateKeyIdent, (T)original.get(), (T)value.get()); - } - } - } - } - - @SuppressWarnings("unchecked") - private void removeData(final Set> removeData, - final Map, DataObject> originalData) { - - for (InstanceIdentifier key : removeData) { - if (clazz.equals(key.getTargetType())) { - final InstanceIdentifier ident = key.firstIdentifierOf(clazz); - final DataObject removeValue = originalData.get(key); - this.remove(ident, (T)removeValue); - } - } - } - - protected abstract void remove(InstanceIdentifier identifier, T del); - - protected abstract void update(InstanceIdentifier identifier, T original, T update); - - protected abstract void add(InstanceIdentifier identifier, T add); - -} - - +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; + +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +/** + * AbstractDataChangeListener implemented basic {@link DataChangeListener} processing for + * VPN related Data Objects. + */ +public abstract class AbstractDataChangeListener implements DataChangeListener { + + protected final Class clazz; + + /** + * + * @param clazz - for which the data change event is received + */ + public AbstractDataChangeListener(Class clazz) { + this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!"); + } + + @Override + public void onDataChanged(final AsyncDataChangeEvent, DataObject> changeEvent) { + Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!"); + + /* All DataObjects for create */ + final Map, DataObject> createdData = changeEvent.getCreatedData() != null + ? changeEvent.getCreatedData() : Collections., DataObject>emptyMap(); + /* All DataObjects for remove */ + final Set> removeData = changeEvent.getRemovedPaths() != null + ? changeEvent.getRemovedPaths() : Collections.>emptySet(); + /* All DataObjects for updates */ + final Map, DataObject> updateData = changeEvent.getUpdatedData() != null + ? changeEvent.getUpdatedData() : Collections., DataObject>emptyMap(); + /* All Original DataObjects */ + final Map, DataObject> originalData = changeEvent.getOriginalData() != null + ? changeEvent.getOriginalData() : Collections., DataObject>emptyMap(); + + this.createData(createdData); + this.updateData(updateData, originalData); + this.removeData(removeData, originalData); + } + + @SuppressWarnings("unchecked") + private void createData(final Map, DataObject> createdData) { + final Set> keys = createdData.keySet() != null + ? createdData.keySet() : Collections.>emptySet(); + for (InstanceIdentifier key : keys) { + if (clazz.equals(key.getTargetType())) { + InstanceIdentifier createKeyIdent = key.firstIdentifierOf(clazz); + final Optional value = Optional.of(createdData.get(key)); + if (value.isPresent()) { + this.add(createKeyIdent, (T)value.get()); + } + } + } + } + + @SuppressWarnings("unchecked") + private void updateData(final Map, DataObject> updateData, + final Map, DataObject> originalData) { + + final Set> keys = updateData.keySet() != null + ? updateData.keySet() : Collections.>emptySet(); + for (InstanceIdentifier key : keys) { + if (clazz.equals(key.getTargetType())) { + InstanceIdentifier updateKeyIdent = key.firstIdentifierOf(clazz); + final Optional value = Optional.of(updateData.get(key)); + final Optional original = Optional.of(originalData.get(key)); + if (value.isPresent() && original.isPresent()) { + this.update(updateKeyIdent, (T)original.get(), (T)value.get()); + } + } + } + } + + @SuppressWarnings("unchecked") + private void removeData(final Set> removeData, + final Map, DataObject> originalData) { + + for (InstanceIdentifier key : removeData) { + if (clazz.equals(key.getTargetType())) { + final InstanceIdentifier ident = key.firstIdentifierOf(clazz); + final DataObject removeValue = originalData.get(key); + this.remove(ident, (T)removeValue); + } + } + } + + protected abstract void remove(InstanceIdentifier identifier, T del); + + protected abstract void update(InstanceIdentifier identifier, T original, T update); + + protected abstract void add(InstanceIdentifier identifier, T add); + +} + + diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java similarity index 97% rename from vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java index a23c6bca..e7bca533 100644 --- a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java @@ -1,189 +1,189 @@ -/* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; - -import java.util.List; -import java.util.ArrayList; - -import com.google.common.base.Optional; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.FutureCallback; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacencyList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyBuilder; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class VpnInterfaceManager extends AbstractDataChangeListener implements AutoCloseable { - private static final Logger LOG = LoggerFactory.getLogger(VpnInterfaceManager.class); - private ListenerRegistration listenerRegistration; - private final DataBroker broker; - - private static final FutureCallback DEFAULT_CALLBACK = - new FutureCallback() { - public void onSuccess(Void result) { - LOG.info("Success in Datastore write operation"); - } - - public void onFailure(Throwable error) { - LOG.error("Error in Datastore write operation", error); - }; - }; - - /** - * Responsible for listening to data change related to VPN Interface - * Bind VPN Service on the interface and informs the BGP service - * - * @param db - dataBroker service reference - */ - public VpnInterfaceManager(final DataBroker db) { - super(VpnInterface.class); - broker = db; - registerListener(db); - } - - @Override - public void close() throws Exception { - if (listenerRegistration != null) { - try { - listenerRegistration.close(); - } catch (final Exception e) { - LOG.error("Error when cleaning up DataChangeListener.", e); - } - listenerRegistration = null; - } - LOG.info("VPN Interface Manager Closed"); - } - - private void registerListener(final DataBroker db) { - try { - listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, - getWildCardPath(), VpnInterfaceManager.this, DataChangeScope.SUBTREE); - } catch (final Exception e) { - LOG.error("VPN Service DataChange listener registration fail!", e); - throw new IllegalStateException("VPN Service registration Listener failed.", e); - } - } - - @Override - protected void add(final InstanceIdentifier identifier, - final VpnInterface vpnInterface) { - LOG.info("key: " + identifier + ", value=" + vpnInterface ); - addInterface(identifier, vpnInterface); - } - - private void addInterface(final InstanceIdentifier identifier, - final VpnInterface vpnInterface) { - final VpnInterfaceKey key = identifier.firstKeyOf(VpnInterface.class, VpnInterfaceKey.class); - String interfaceName = key.getName(); - InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName)); - InstanceIdentifier id = idBuilder.build(); - Optional port = read(LogicalDatastoreType.CONFIGURATION, id); - if (port.isPresent()) { - Interface interf = port.get(); - bindServiceOnInterface(interf); - updateNextHops(identifier, vpnInterface); - } - } - - private void updateNextHops(final InstanceIdentifier identifier, VpnInterface intf) { - //Read NextHops - InstanceIdentifier path = identifier.augmentation(Adjacencies.class); - Optional adjacencies = read(LogicalDatastoreType.CONFIGURATION, path); - String intfName = intf.getName(); - - if (adjacencies.isPresent()) { - List nextHops = adjacencies.get().getAdjacency(); - List value = new ArrayList<>(); - - if (!nextHops.isEmpty()) { - LOG.info("NextHops are " + nextHops); - for (Adjacency nextHop : nextHops) { - //TODO: Generate label for the prefix and store it in the next hop model - long label = 200; - - //TODO: Update BGP - updatePrefixToBGP(nextHop); - value.add(new AdjacencyBuilder(nextHop).setLabel(label).build()); - } - } - Adjacencies aug = VpnUtil.getVpnInterfaceAugmentation(value); - VpnInterface opInterface = VpnUtil.getVpnInterface(intfName, intf.getVpnInstanceName(), aug); - InstanceIdentifier interfaceId = VpnUtil.getVpnInterfaceIdentifier(intfName); - asyncWrite(LogicalDatastoreType.OPERATIONAL, interfaceId, opInterface, DEFAULT_CALLBACK); - } - } - - private void bindServiceOnInterface(Interface intf) { - //TODO: Create Ingress flow on the interface to bind the VPN service - } - - private void updatePrefixToBGP(Adjacency nextHop) { - //TODO: Update the Prefix to BGP - } - - private Optional read(LogicalDatastoreType datastoreType, - InstanceIdentifier path) { - - ReadOnlyTransaction tx = broker.newReadOnlyTransaction(); - - Optional result = Optional.absent(); - try { - result = tx.read(datastoreType, path).get(); - } catch (Exception e) { - throw new RuntimeException(e); - } - - return result; - } - - private InstanceIdentifier getWildCardPath() { - return InstanceIdentifier.create(VpnInterfaces.class).child(VpnInterface.class); - } - - @Override - protected void remove( InstanceIdentifier identifier, VpnInterface del) { - // TODO Auto-generated method stub - - } - - @Override - protected void update(InstanceIdentifier identifier, - VpnInterface original, VpnInterface update) { - // TODO Auto-generated method stub - - } - - private void asyncWrite(LogicalDatastoreType datastoreType, - InstanceIdentifier path, T data, FutureCallback callback) { - WriteTransaction tx = broker.newWriteOnlyTransaction(); - tx.put(datastoreType, path, data, true); - Futures.addCallback(tx.submit(), callback); - } -} +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; + +import java.util.List; +import java.util.ArrayList; + +import com.google.common.base.Optional; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.FutureCallback; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacencyList; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyBuilder; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VpnInterfaceManager extends AbstractDataChangeListener implements AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(VpnInterfaceManager.class); + private ListenerRegistration listenerRegistration; + private final DataBroker broker; + + private static final FutureCallback DEFAULT_CALLBACK = + new FutureCallback() { + public void onSuccess(Void result) { + LOG.info("Success in Datastore write operation"); + } + + public void onFailure(Throwable error) { + LOG.error("Error in Datastore write operation", error); + }; + }; + + /** + * Responsible for listening to data change related to VPN Interface + * Bind VPN Service on the interface and informs the BGP service + * + * @param db - dataBroker service reference + */ + public VpnInterfaceManager(final DataBroker db) { + super(VpnInterface.class); + broker = db; + registerListener(db); + } + + @Override + public void close() throws Exception { + if (listenerRegistration != null) { + try { + listenerRegistration.close(); + } catch (final Exception e) { + LOG.error("Error when cleaning up DataChangeListener.", e); + } + listenerRegistration = null; + } + LOG.info("VPN Interface Manager Closed"); + } + + private void registerListener(final DataBroker db) { + try { + listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + getWildCardPath(), VpnInterfaceManager.this, DataChangeScope.SUBTREE); + } catch (final Exception e) { + LOG.error("VPN Service DataChange listener registration fail!", e); + throw new IllegalStateException("VPN Service registration Listener failed.", e); + } + } + + @Override + protected void add(final InstanceIdentifier identifier, + final VpnInterface vpnInterface) { + LOG.info("key: " + identifier + ", value=" + vpnInterface ); + addInterface(identifier, vpnInterface); + } + + private void addInterface(final InstanceIdentifier identifier, + final VpnInterface vpnInterface) { + final VpnInterfaceKey key = identifier.firstKeyOf(VpnInterface.class, VpnInterfaceKey.class); + String interfaceName = key.getName(); + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName)); + InstanceIdentifier id = idBuilder.build(); + Optional port = read(LogicalDatastoreType.CONFIGURATION, id); + if (port.isPresent()) { + Interface interf = port.get(); + bindServiceOnInterface(interf); + updateNextHops(identifier, vpnInterface); + } + } + + private void updateNextHops(final InstanceIdentifier identifier, VpnInterface intf) { + //Read NextHops + InstanceIdentifier path = identifier.augmentation(Adjacencies.class); + Optional adjacencies = read(LogicalDatastoreType.CONFIGURATION, path); + String intfName = intf.getName(); + + if (adjacencies.isPresent()) { + List nextHops = adjacencies.get().getAdjacency(); + List value = new ArrayList<>(); + + if (!nextHops.isEmpty()) { + LOG.info("NextHops are " + nextHops); + for (Adjacency nextHop : nextHops) { + //TODO: Generate label for the prefix and store it in the next hop model + long label = 200; + + //TODO: Update BGP + updatePrefixToBGP(nextHop); + value.add(new AdjacencyBuilder(nextHop).setLabel(label).build()); + } + } + Adjacencies aug = VpnUtil.getVpnInterfaceAugmentation(value); + VpnInterface opInterface = VpnUtil.getVpnInterface(intfName, intf.getVpnInstanceName(), aug); + InstanceIdentifier interfaceId = VpnUtil.getVpnInterfaceIdentifier(intfName); + asyncWrite(LogicalDatastoreType.OPERATIONAL, interfaceId, opInterface, DEFAULT_CALLBACK); + } + } + + private void bindServiceOnInterface(Interface intf) { + //TODO: Create Ingress flow on the interface to bind the VPN service + } + + private void updatePrefixToBGP(Adjacency nextHop) { + //TODO: Update the Prefix to BGP + } + + private Optional read(LogicalDatastoreType datastoreType, + InstanceIdentifier path) { + + ReadOnlyTransaction tx = broker.newReadOnlyTransaction(); + + Optional result = Optional.absent(); + try { + result = tx.read(datastoreType, path).get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return result; + } + + private InstanceIdentifier getWildCardPath() { + return InstanceIdentifier.create(VpnInterfaces.class).child(VpnInterface.class); + } + + @Override + protected void remove( InstanceIdentifier identifier, VpnInterface del) { + // TODO Auto-generated method stub + + } + + @Override + protected void update(InstanceIdentifier identifier, + VpnInterface original, VpnInterface update) { + // TODO Auto-generated method stub + + } + + private void asyncWrite(LogicalDatastoreType datastoreType, + InstanceIdentifier path, T data, FutureCallback callback) { + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.put(datastoreType, path, data, true); + Futures.addCallback(tx.submit(), callback); + } +} diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java similarity index 97% rename from vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java index fc02a3f8..75c159fc 100644 --- a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnManager.java @@ -1,85 +1,85 @@ -/* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; - -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.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class VpnManager extends AbstractDataChangeListener implements AutoCloseable { - private static final Logger LOG = LoggerFactory.getLogger(VpnManager.class); - private ListenerRegistration listenerRegistration; - private final DataBroker broker; - - /** - * Listens for data change related to VPN Instance - * Informs the BGP about VRF information - * - * @param db - dataBroker reference - */ - public VpnManager(final DataBroker db) { - super(VpnInstance.class); - broker = db; - registerListener(db); - } - - private void registerListener(final DataBroker db) { - try { - listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, - getWildCardPath(), VpnManager.this, DataChangeScope.SUBTREE); - } catch (final Exception e) { - LOG.error("VPN Service DataChange listener registration fail!", e); - throw new IllegalStateException("VPN Service registration Listener failed.", e); - } - } - - @Override - protected void remove(InstanceIdentifier identifier, - VpnInstance del) { - // TODO Auto-generated method stub - } - - @Override - protected void update(InstanceIdentifier identifier, - VpnInstance original, VpnInstance update) { - // TODO Auto-generated method stub - } - - @Override - protected void add(InstanceIdentifier identifier, - VpnInstance value) { - LOG.info("key: " + identifier + ", value=" + value); - //TODO: Generate VPN ID for this instance, where to store in model ... ? - - //TODO: Add VRF to BGP - } - - private InstanceIdentifier getWildCardPath() { - return InstanceIdentifier.create(VpnInstances.class).child(VpnInstance.class); - } - - @Override - public void close() throws Exception { - if (listenerRegistration != null) { - try { - listenerRegistration.close(); - } catch (final Exception e) { - LOG.error("Error when cleaning up DataChangeListener.", e); - } - listenerRegistration = null; - } - LOG.info("VPN Manager Closed"); - } -} +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; + +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.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VpnManager extends AbstractDataChangeListener implements AutoCloseable { + private static final Logger LOG = LoggerFactory.getLogger(VpnManager.class); + private ListenerRegistration listenerRegistration; + private final DataBroker broker; + + /** + * Listens for data change related to VPN Instance + * Informs the BGP about VRF information + * + * @param db - dataBroker reference + */ + public VpnManager(final DataBroker db) { + super(VpnInstance.class); + broker = db; + registerListener(db); + } + + private void registerListener(final DataBroker db) { + try { + listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + getWildCardPath(), VpnManager.this, DataChangeScope.SUBTREE); + } catch (final Exception e) { + LOG.error("VPN Service DataChange listener registration fail!", e); + throw new IllegalStateException("VPN Service registration Listener failed.", e); + } + } + + @Override + protected void remove(InstanceIdentifier identifier, + VpnInstance del) { + // TODO Auto-generated method stub + } + + @Override + protected void update(InstanceIdentifier identifier, + VpnInstance original, VpnInstance update) { + // TODO Auto-generated method stub + } + + @Override + protected void add(InstanceIdentifier identifier, + VpnInstance value) { + LOG.info("key: " + identifier + ", value=" + value); + //TODO: Generate VPN ID for this instance, where to store in model ... ? + + //TODO: Add VRF to BGP + } + + private InstanceIdentifier getWildCardPath() { + return InstanceIdentifier.create(VpnInstances.class).child(VpnInstance.class); + } + + @Override + public void close() throws Exception { + if (listenerRegistration != null) { + try { + listenerRegistration.close(); + } catch (final Exception e) { + LOG.error("Error when cleaning up DataChangeListener.", e); + } + listenerRegistration = null; + } + LOG.info("VPN Manager Closed"); + } +} diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnUtil.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnUtil.java similarity index 98% rename from vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnUtil.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnUtil.java index d83b7fd3..a5b44ec9 100644 --- a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnUtil.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnUtil.java @@ -1,27 +1,27 @@ -package org.opendaylight.vpnservice; - -import java.util.List; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies; -import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public class VpnUtil { - static InstanceIdentifier getVpnInterfaceIdentifier(String vpnInterfaceName) { - return InstanceIdentifier.builder(VpnInterfaces.class) - .child(VpnInterface.class, new VpnInterfaceKey(vpnInterfaceName)).build(); - } - - static VpnInterface getVpnInterface(String intfName, String vpnName, Adjacencies aug) { - return new VpnInterfaceBuilder().setKey(new VpnInterfaceKey(intfName)).setVpnInstanceName(vpnName) - .addAugmentation(Adjacencies.class, aug).build(); - } - - static Adjacencies getVpnInterfaceAugmentation(List nextHops) { - return new AdjacenciesBuilder().setAdjacency(nextHops).build(); - } -} +package org.opendaylight.vpnservice; + +import java.util.List; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies; +import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class VpnUtil { + static InstanceIdentifier getVpnInterfaceIdentifier(String vpnInterfaceName) { + return InstanceIdentifier.builder(VpnInterfaces.class) + .child(VpnInterface.class, new VpnInterfaceKey(vpnInterfaceName)).build(); + } + + static VpnInterface getVpnInterface(String intfName, String vpnName, Adjacencies aug) { + return new VpnInterfaceBuilder().setKey(new VpnInterfaceKey(intfName)).setVpnInstanceName(vpnName) + .addAugmentation(Adjacencies.class, aug).build(); + } + + static Adjacencies getVpnInterfaceAugmentation(List nextHops) { + return new AdjacenciesBuilder().setAdjacency(nextHops).build(); + } +} diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java similarity index 97% rename from vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java index 84b18382..7514cf7f 100644 --- a/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java +++ b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java @@ -1,41 +1,41 @@ -/* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; -import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class VpnserviceProvider implements BindingAwareProvider, - AutoCloseable { - - private static final Logger LOG = LoggerFactory.getLogger(VpnserviceProvider.class); - private VpnInterfaceManager vpnInterfaceManager; - private VpnManager vpnManager; - - @Override - public void onSessionInitiated(ProviderContext session) { - LOG.info("VpnserviceProvider Session Initiated"); - try { - final DataBroker dataBroker = session.getSALService(DataBroker.class); - vpnManager = new VpnManager(dataBroker); - vpnInterfaceManager = new VpnInterfaceManager(dataBroker); - } catch (Exception e) { - LOG.error("Error initializing services", e); - } - } - - @Override - public void close() throws Exception { - vpnManager.close(); - vpnInterfaceManager.close(); - } -} +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; +import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class VpnserviceProvider implements BindingAwareProvider, + AutoCloseable { + + private static final Logger LOG = LoggerFactory.getLogger(VpnserviceProvider.class); + private VpnInterfaceManager vpnInterfaceManager; + private VpnManager vpnManager; + + @Override + public void onSessionInitiated(ProviderContext session) { + LOG.info("VpnserviceProvider Session Initiated"); + try { + final DataBroker dataBroker = session.getSALService(DataBroker.class); + vpnManager = new VpnManager(dataBroker); + vpnInterfaceManager = new VpnInterfaceManager(dataBroker); + } catch (Exception e) { + LOG.error("Error initializing services", e); + } + } + + @Override + public void close() throws Exception { + vpnManager.close(); + vpnInterfaceManager.close(); + } +} diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java similarity index 100% rename from vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java diff --git a/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModuleFactory.java b/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModuleFactory.java similarity index 100% rename from vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModuleFactory.java rename to vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModuleFactory.java diff --git a/vpnmanager-impl/src/main/yang/vpnservice-impl.yang b/vpnmanager/vpnmanager-impl/src/main/yang/vpnservice-impl.yang similarity index 100% rename from vpnmanager-impl/src/main/yang/vpnservice-impl.yang rename to vpnmanager/vpnmanager-impl/src/main/yang/vpnservice-impl.yang diff --git a/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java b/vpnmanager/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java similarity index 96% rename from vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java rename to vpnmanager/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java index 5e03dea3..1483e873 100644 --- a/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java +++ b/vpnmanager/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/MockDataChangedEvent.java @@ -1,53 +1,53 @@ -/* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.test; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -class MockDataChangedEvent implements AsyncDataChangeEvent, DataObject> { - Map,DataObject> created = new HashMap<>(); - Map,DataObject> updated = new HashMap<>(); - Map,DataObject> original = new HashMap<>(); - Set> removed = new HashSet<>(); - - @Override - public Map, DataObject> getCreatedData() { - return created; - } - - @Override - public Map, DataObject> getUpdatedData() { - return updated; - } - - @Override - public Set> getRemovedPaths() { - return removed; - } - - @Override - public Map, DataObject> getOriginalData() { - return original; - } - - @Override - public DataObject getOriginalSubtree() { - throw new UnsupportedOperationException("Not implemented by mock"); - } - - @Override - public DataObject getUpdatedSubtree() { - throw new UnsupportedOperationException("Not implemented by mock"); - } -} +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.test; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +class MockDataChangedEvent implements AsyncDataChangeEvent, DataObject> { + Map,DataObject> created = new HashMap<>(); + Map,DataObject> updated = new HashMap<>(); + Map,DataObject> original = new HashMap<>(); + Set> removed = new HashSet<>(); + + @Override + public Map, DataObject> getCreatedData() { + return created; + } + + @Override + public Map, DataObject> getUpdatedData() { + return updated; + } + + @Override + public Set> getRemovedPaths() { + return removed; + } + + @Override + public Map, DataObject> getOriginalData() { + return original; + } + + @Override + public DataObject getOriginalSubtree() { + throw new UnsupportedOperationException("Not implemented by mock"); + } + + @Override + public DataObject getUpdatedSubtree() { + throw new UnsupportedOperationException("Not implemented by mock"); + } +} diff --git a/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java b/vpnmanager/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java similarity index 98% rename from vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java rename to vpnmanager/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java index a28c2987..588da749 100644 --- a/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java +++ b/vpnmanager/vpnmanager-impl/src/test/java/org/opendaylight/vpnservice/test/VpnServiceTest.java @@ -1,75 +1,75 @@ -/* - * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.test; - -import static org.junit.Assert.*; -import static org.mockito.Matchers.*; -import static org.mockito.Mockito.when; - -import org.junit.*; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; - -import org.opendaylight.vpnservice.VpnManager; -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.LogicalDatastoreType; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.*; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.*; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.apply.label.apply.label.mode.*; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.apply.label.ApplyLabelMode; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.ApplyLabelBuilder; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4FamilyBuilder; - -@RunWith(MockitoJUnitRunner.class) -public class VpnServiceTest { - @Mock DataBroker dataBroker; - @Mock ListenerRegistration dataChangeListenerRegistration; - MockDataChangedEvent event; - - @Before - public void setUp() throws Exception { - when(dataBroker.registerDataChangeListener( - any(LogicalDatastoreType.class), - any(InstanceIdentifier.class), - any(DataChangeListener.class), - any(DataChangeScope.class))) - .thenReturn(dataChangeListenerRegistration); - event = new MockDataChangedEvent(); - } - - @Test - public void test() { - VpnInstanceBuilder builder = new VpnInstanceBuilder().setKey(new VpnInstanceKey("Vpn1")). - setIpv4Family(new Ipv4FamilyBuilder().setRouteDistinguisher("100:1").setImportRoutePolicy("100:2"). - setExportRoutePolicy("100:1").setApplyLabel(new ApplyLabelBuilder().setApplyLabelMode( - new PerRouteBuilder().setApplyLabelPerRoute(true).build()).build()).build()); - VpnInstance instance = builder.build(); - VpnManager vpnManager = new VpnManager(dataBroker); - event.created.put(createVpnId("Vpn1"), instance); - vpnManager.onDataChanged(event); - } - - private InstanceIdentifier createVpnId(String name) { - InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(VpnInstances.class).child(VpnInstance.class, new VpnInstanceKey(name)); - InstanceIdentifier id = idBuilder.build(); - return id; - } - -} +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.test; + +import static org.junit.Assert.*; +import static org.mockito.Matchers.*; +import static org.mockito.Mockito.when; + +import org.junit.*; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; + +import org.opendaylight.vpnservice.VpnManager; +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.LogicalDatastoreType; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.*; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.*; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.apply.label.apply.label.mode.*; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.apply.label.ApplyLabelMode; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.ApplyLabelBuilder; +import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4FamilyBuilder; + +@RunWith(MockitoJUnitRunner.class) +public class VpnServiceTest { + @Mock DataBroker dataBroker; + @Mock ListenerRegistration dataChangeListenerRegistration; + MockDataChangedEvent event; + + @Before + public void setUp() throws Exception { + when(dataBroker.registerDataChangeListener( + any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), + any(DataChangeListener.class), + any(DataChangeScope.class))) + .thenReturn(dataChangeListenerRegistration); + event = new MockDataChangedEvent(); + } + + @Test + public void test() { + VpnInstanceBuilder builder = new VpnInstanceBuilder().setKey(new VpnInstanceKey("Vpn1")). + setIpv4Family(new Ipv4FamilyBuilder().setRouteDistinguisher("100:1").setImportRoutePolicy("100:2"). + setExportRoutePolicy("100:1").setApplyLabel(new ApplyLabelBuilder().setApplyLabelMode( + new PerRouteBuilder().setApplyLabelPerRoute(true).build()).build()).build()); + VpnInstance instance = builder.build(); + VpnManager vpnManager = new VpnManager(dataBroker); + event.created.put(createVpnId("Vpn1"), instance); + vpnManager.onDataChanged(event); + } + + private InstanceIdentifier createVpnId(String name) { + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(VpnInstances.class).child(VpnInstance.class, new VpnInstanceKey(name)); + InstanceIdentifier id = idBuilder.build(); + return id; + } + +} -- 2.36.6