Add l2vpn support for vlans 42/44442/1
authorYakir Dorani <yakir.dorani@hpe.com>
Sun, 21 Aug 2016 10:14:28 +0000 (13:14 +0300)
committerYakir Dorani <yakir.dorani@hpe.com>
Sun, 21 Aug 2016 10:29:00 +0000 (13:29 +0300)
Change-Id: I1a61043b93cb2917604427b7b04e13b569aaf676
Signed-off-by: Yakir Dorani <yakir.dorani@hpe.com>
12 files changed:
cisco-xr-driver/.gitignore [new file with mode: 0644]
cisco-xrmodels/.gitignore [new file with mode: 0644]
features/pom.xml
impl/.gitignore [new file with mode: 0644]
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcUniUtils.java [moved from netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcUniListener.java with 52% similarity]
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/MefUtils.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NodeConnectorListener.java
netvirt/src/main/resources/org/opendaylight/blueprint/netvirt-driver.xml
netvirt/src/test/java/org/opendaylight/unimgr/mef/netvirt/EvcUniListenerTest.java [deleted file]
netvirt/src/test/java/org/opendaylight/unimgr/mef/netvirt/TestHelper.java [deleted file]

diff --git a/cisco-xr-driver/.gitignore b/cisco-xr-driver/.gitignore
new file mode 100644 (file)
index 0000000..b83d222
--- /dev/null
@@ -0,0 +1 @@
+/target/
diff --git a/cisco-xrmodels/.gitignore b/cisco-xrmodels/.gitignore
new file mode 100644 (file)
index 0000000..b83d222
--- /dev/null
@@ -0,0 +1 @@
+/target/
index 7a0f7c0b0a0394ff7a6a857a822ffb1c429f49b8..932243645d65cd7e693b5b8809d68e3ca4f4b92c 100644 (file)
@@ -30,7 +30,6 @@
     <mdsal.model.version>0.10.0-SNAPSHOT</mdsal.model.version>
     <netconf.version>1.2.0-SNAPSHOT</netconf.version>
     <genius.version>0.2.0-SNAPSHOT</genius.version>
-    <tenantutil.version>0.2.0-SNAPSHOT</tenantutil.version>
     <configfile.directory>etc/opendaylight/karaf</configfile.directory>
   </properties>
   <dependencyManagement>
diff --git a/impl/.gitignore b/impl/.gitignore
new file mode 100644 (file)
index 0000000..b83d222
--- /dev/null
@@ -0,0 +1 @@
+/target/
index 9fb71b8d5168c9d54529cf9585847d932aa253ee..02d4bd85ca29076cbe83c55560d8eff4f4ed4a34 100644 (file)
@@ -16,6 +16,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.MefServices;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.Evc;
@@ -41,7 +42,7 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
     public void registerListener() {
         try {
             final DataTreeIdentifier<Evc> dataTreeIid = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
-                    getEvcTopologyPath());
+                    MefUtils.getEvcInstanceIdentifier());
             evcListenerRegistration = dataBroker.registerDataTreeChangeListener(dataTreeIid, this);
             log.info("EvcDataTreeChangeListener created and registered");
         } catch (final Exception e) {
@@ -50,10 +51,6 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
         }
     }
 
-    private InstanceIdentifier<Evc> getEvcTopologyPath() {
-        return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Evc.class);
-    }
-
     @Override
     public void close() throws Exception {
         evcListenerRegistration.close();
@@ -83,17 +80,9 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
         }
     }
 
-    private InstanceIdentifier<Evc> getWildCardPath() {
-        InstanceIdentifier<Evc> instanceIdentifier = InstanceIdentifier.create(MefServices.class)
-                .child(MefService.class).child(Evc.class);
-
-        return instanceIdentifier;
-    }
-
     private void addEvc(DataTreeModification<Evc> newDataObject) {
         try {
             Evc data = newDataObject.getRootNode().getDataAfter();
-
             String instanceName = data.getEvcId().getValue();
 
             log.info("Adding elan instance: " + instanceName);
@@ -101,31 +90,13 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
 
             // Create elan interfaces
             for (Uni uni : data.getUnis().getUni()) {
-                createUni(instanceName, uni);
+                createElanInterface(instanceName, uni);
             }
         } catch (final Exception e) {
             log.error("Add evc failed !", e);
         }
     }
 
-    private void removeEvc(DataTreeModification<Evc> removedDataObject) {
-        try {
-            Evc data = removedDataObject.getRootNode().getDataBefore();
-
-            String instanceName = data.getEvcId().getValue();
-            
-            for(Uni uni : data.getUnis().getUni())
-            {
-                removeUni(instanceName, uni);
-            }
-            
-            log.info("Removing elan instance: " + instanceName);
-            NetvirtUtils.deleteElanInstance(dataBroker, instanceName);
-        } catch (final Exception e) {
-            log.error("Remove evc failed !", e);
-        }
-    }
-
     private void updateEvc(DataTreeModification<Evc> modifiedDataObject) {
         try {
             Evc original = modifiedDataObject.getRootNode().getDataBefore();
@@ -146,19 +117,19 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
                     // removing the Uni which are not presented in the updated
                     // List
                     for (Uni uni : originalUni) {
-                        removeUni(instanceName, uni);
+                        removeElanInterface(instanceName, uni);
                     }
                 }
 
                 // Adding the new Uni which are presented in the updated List
                 if (updateUni.size() > 0) {
                     for (Uni uni : updateUni) {
-                        createUni(instanceName, uni);
+                        createElanInterface(instanceName, uni);
                     }
                 }
             } else if (originalUni != null && !originalUni.isEmpty()) {
                 for (Uni uni : originalUni) {
-                    removeUni(instanceName, uni);
+                    removeElanInterface(instanceName, uni);
                 }
             }
         } catch (final Exception e) {
@@ -166,38 +137,66 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
         }
     }
 
-    private void removeUni(String instanceName, Uni uni) {
+    private void removeEvc(DataTreeModification<Evc> removedDataObject) {
+        try {
+            Evc data = removedDataObject.getRootNode().getDataBefore();
+
+            String instanceName = data.getEvcId().getValue();
+
+            for (Uni uni : data.getUnis().getUni()) {
+                removeElanInterface(instanceName, uni);
+            }
+
+            log.info("Removing elan instance: " + instanceName);
+            NetvirtUtils.deleteElanInstance(dataBroker, instanceName);
+        } catch (final Exception e) {
+            log.error("Remove evc failed !", e);
+        }
+    }
+
+    private void createElanInterface(String instanceName, Uni uni) {
+        EvcUniUtils.addUni(dataBroker, uni);
+
         String uniId = uni.getUniId().getValue();
+
+        Link link = EvcUniUtils.getLink(dataBroker, uni);
+        String interfaceName = EvcUniUtils.getInterfaceName(link, uniId);
+
         EvcUniCeVlans evcUniCeVlans = uni.getEvcUniCeVlans();
 
         if (evcUniCeVlans != null && !evcUniCeVlans.getEvcUniCeVlan().isEmpty()) {
             for (EvcUniCeVlan x : evcUniCeVlans.getEvcUniCeVlan()) {
 
-                String interfaceName = NetvirtUtils.getInterfaceNameForVlan(uniId, x.getVid().toString());
-                log.info("Removing elan interface: " + interfaceName);
-                NetvirtUtils.deleteElanInterface(dataBroker, instanceName, interfaceName);
+                interfaceName = NetvirtUtils.getInterfaceNameForVlan(interfaceName, x.getVid().toString());
+
+                log.info("Adding elan interface: " + interfaceName);
+                NetvirtUtils.createElanInterface(dataBroker, instanceName, interfaceName);
             }
         } else {
-            log.info("Removing elan interface: " + uniId);
-            NetvirtUtils.deleteElanInterface(dataBroker, instanceName, uniId);
+            log.info("Adding elan interface: " + interfaceName);
+            NetvirtUtils.createElanInterface(dataBroker, instanceName, interfaceName);
         }
     }
 
-    private void createUni(String instanceName, Uni uni) {
+    private void removeElanInterface(String instanceName, Uni uni) {
+        EvcUniUtils.removeUni(dataBroker, uni);
+
         String uniId = uni.getUniId().getValue();
         EvcUniCeVlans evcUniCeVlans = uni.getEvcUniCeVlans();
 
+        Link link = EvcUniUtils.getLink(dataBroker, uni);
+        String interfaceName = EvcUniUtils.getInterfaceName(link, uniId);
+
         if (evcUniCeVlans != null && !evcUniCeVlans.getEvcUniCeVlan().isEmpty()) {
             for (EvcUniCeVlan x : evcUniCeVlans.getEvcUniCeVlan()) {
 
-                String interfaceName = NetvirtUtils.getInterfaceNameForVlan(uniId, x.getVid().toString());
-
-                log.info("Adding elan interface: " + interfaceName);
-                NetvirtUtils.createElanInterface(dataBroker, instanceName, interfaceName);
+                interfaceName = NetvirtUtils.getInterfaceNameForVlan(uniId, x.getVid().toString());
+                log.info("Removing elan interface: " + interfaceName);
+                NetvirtUtils.deleteElanInterface(dataBroker, instanceName, interfaceName);
             }
         } else {
-            log.info("Adding elan interface: " + uniId);
-            NetvirtUtils.createElanInterface(dataBroker, instanceName, uniId);
+            log.info("Removing elan interface: " + uniId);
+            NetvirtUtils.deleteElanInterface(dataBroker, instanceName, interfaceName);
         }
     }
 }
similarity index 52%
rename from netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcUniListener.java
rename to netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcUniUtils.java
index 28b1eabb912f5f2949564364c2c12d22be592636..5448f347e25e792f9cf8867e3309ec91f15446cb 100644 (file)
@@ -8,84 +8,72 @@
 
 package org.opendaylight.unimgr.mef.netvirt;
 
-import java.util.Collections;
 import java.util.List;
-import java.util.Set;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 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.TransactionCommitFailedException;
 import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
-import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayers;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.Links;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.MefServices;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.Evc;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlans;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.VlanIdType;
 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.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Objects;
 import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.CheckedFuture;
 
-public class EvcUniListener extends UnimgrDataTreeChangeListener<Uni> {
-    private static final Logger logger = LoggerFactory.getLogger(EvcUniListener.class);
+public class EvcUniUtils {
 
-    private ListenerRegistration<EvcUniListener> uniListenerRegistration;
+    private static final Logger logger = LoggerFactory.getLogger(EvcUniUtils.class);
 
-    public EvcUniListener(final DataBroker dataBroker) {
-        super(dataBroker);
-
-        registerListener();
-    }
+    public static Link getLink(DataBroker dataBroker, Uni evcUni) {
+        Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni> optional = MdsalUtils
+                .read(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                        MefUtils.getUniInstanceIdentifier(evcUni.getUniId().getValue()));
 
-    @Override
-    public void add(DataTreeModification<Uni> newDataObject) {
-        if (newDataObject.getRootPath() != null && newDataObject.getRootNode() != null) {
-            logger.info("uni {} created", newDataObject.getRootNode().getIdentifier());
-            addUni(newDataObject);
+        if (!optional.isPresent()) {
+            logger.error("A matching Uni doesn't exist for EvcUni {}", evcUni.getUniId());
+            return null;
         }
-    }
 
-    @Override
-    public void remove(DataTreeModification<Uni> removedDataObject) {
-        if (removedDataObject.getRootPath() != null && removedDataObject.getRootNode() != null) {
-            logger.info("uni {} deleted", removedDataObject.getRootNode().getIdentifier());
-            removeUni(removedDataObject);
+        org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni uni = optional
+                .get();
+
+        PhysicalLayers physicalLayers = uni.getPhysicalLayers();
+        if (physicalLayers == null) {
+            logger.warn("Uni {} is missing PhysicalLayers", evcUni.getUniId());
+            return null;
         }
-    }
 
-    @Override
-    public void update(DataTreeModification<Uni> modifiedDataObject) {
-        if (modifiedDataObject.getRootPath() != null && modifiedDataObject.getRootNode() != null) {
-            logger.info("uni {} updated", modifiedDataObject.getRootNode().getIdentifier());
-            updateUni(modifiedDataObject);
+        Links links = physicalLayers.getLinks();
+        if (links == null || links.getLink() == null) {
+            logger.warn("Uni {} is has no links", evcUni.getUniId());
+            return null;
         }
+
+        Link link = links.getLink().get(0);
+        return link;
     }
 
-    protected void removeUni(DataTreeModification<Uni> removedDataObject) {
+    public static void removeUni(DataBroker dataBroker, Uni data) {
         try {
-            Uni data = removedDataObject.getRootNode().getDataBefore();
-
             String uniId = data.getUniId().getValue();
-            WriteTransaction tx = createTransaction();
+            WriteTransaction tx = createTransaction(dataBroker);
+
+            Link link = EvcUniUtils.getLink(dataBroker, data);
+            uniId = EvcUniUtils.getInterfaceName(link, uniId);
+
             logger.info("Removing trunk {}", uniId);
+
             delete(uniId, tx);
 
             Optional<List<EvcUniCeVlan>> ceVlansOptional = getCeVlans(data);
@@ -100,63 +88,42 @@ public class EvcUniListener extends UnimgrDataTreeChangeListener<Uni> {
         }
     }
 
-    protected void updateUni(DataTreeModification<Uni> modifiedDataObject) {
-        try {
-            Uni original = modifiedDataObject.getRootNode().getDataBefore();
-            Uni update = modifiedDataObject.getRootNode().getDataAfter();
-
-            String uniId = update.getUniId().getValue();
-            WriteTransaction tx = createTransaction();
-            String origTrunkParentName = getTrunkParentName(original);
-            String updatedTrunkParentName = getTrunkParentName(update);
-
-            if (!Objects.equal(origTrunkParentName, updatedTrunkParentName)) {
-                addTrunkInterface(uniId, updatedTrunkParentName, tx);
-            }
-
-            Set<EvcUniCeVlan> origCeVlans = Sets.newHashSet(getCeVlans(original).or(Collections.emptyList()));
-            Set<EvcUniCeVlan> updatedCeVlans = Sets.newHashSet(getCeVlans(update).or(Collections.emptyList()));
-            Iterable<EvcUniCeVlan> removedCeVlans = Sets.difference(origCeVlans, updatedCeVlans);
-            Iterable<EvcUniCeVlan> addedCeVlans = Sets.difference(updatedCeVlans, origCeVlans);
-            removeTrunkMemberInterfaces(uniId, removedCeVlans, tx);
-            addTrunkMemberInterfaces(uniId, addedCeVlans, tx);
-            commitTransaction(tx);
-        } catch (final Exception e) {
-            logger.error("Update uni failed !", e);
-        }
-
-    }
-
-    protected void addUni(DataTreeModification<Uni> newDataObject) {
+    public static void addUni(DataBroker dataBroker, Uni data) {
         try {
-            Uni data = newDataObject.getRootNode().getDataAfter();
-
             String uniId = data.getUniId().getValue();
-            WriteTransaction tx = createTransaction();
-            addTrunkInterface(uniId, getTrunkParentName(data), tx);
+            WriteTransaction tx = createTransaction(dataBroker);
+            Link link = EvcUniUtils.getLink(dataBroker, data);
+            String interfaceName = EvcUniUtils.getInterfaceName(link, uniId);
+            addTrunkInterface(interfaceName, getTrunkParentName(link), tx);
 
             Optional<List<EvcUniCeVlan>> ceVlansOptional = getCeVlans(data);
             if (ceVlansOptional.isPresent()) {
-                addTrunkMemberInterfaces(uniId, ceVlansOptional.get(), tx);
+                addTrunkMemberInterfaces(interfaceName, ceVlansOptional.get(), tx);
             }
 
             commitTransaction(tx);
         } catch (final Exception e) {
             logger.error("Add uni failed !", e);
         }
-
     }
 
-    private void addTrunkInterface(String interfaceName, String parentInterfaceName, WriteTransaction tx) {
+    private static void addTrunkInterface(String interfaceName, String parentInterfaceName, WriteTransaction tx) {
         logger.info("Adding VLAN trunk {} ParentRef {}", interfaceName, parentInterfaceName);
         Interface trunkInterface = NetvirtUtils.createTrunkInterface(interfaceName, parentInterfaceName);
         write(trunkInterface, tx);
     }
 
-    private void addTrunkMemberInterfaces(String parentInterfaceName, Iterable<EvcUniCeVlan> ceVlans,
+    private static void addTrunkMemberInterfaces(String parentInterfaceName, Iterable<EvcUniCeVlan> ceVlans,
             WriteTransaction tx) {
         for (EvcUniCeVlan ceVlan : ceVlans) {
-            Long vlanId = ((VlanIdType) ceVlan.getVid()).getValue();
+            Object vid = ceVlan.getVid();
+            if (!(vid instanceof Long)) {
+                String errorMessage = String.format("vlan id {} cannot be cast to Long", vid);
+                logger.error(errorMessage);
+                throw new UnsupportedOperationException(errorMessage);
+            }
+
+            Long vlanId = (Long) vid;
             String interfaceName = NetvirtUtils.getInterfaceNameForVlan(parentInterfaceName, vlanId.toString());
             logger.info("Adding VLAN trunk-member {} ParentRef {}", interfaceName, parentInterfaceName);
             Interface trunkMemberInterface = NetvirtUtils.createTrunkMemberInterface(interfaceName, parentInterfaceName,
@@ -165,27 +132,34 @@ public class EvcUniListener extends UnimgrDataTreeChangeListener<Uni> {
         }
     }
 
-    private void removeTrunkMemberInterfaces(String parentInterfaceName, Iterable<EvcUniCeVlan> ceVlans,
+    private static void removeTrunkMemberInterfaces(String parentInterfaceName, Iterable<EvcUniCeVlan> ceVlans,
             WriteTransaction tx) {
         for (EvcUniCeVlan ceVlan : ceVlans) {
-            Long vlanId = ((VlanIdType) ceVlan.getVid()).getValue();
+            Object vid = ceVlan.getVid();
+            if (!(vid instanceof Long)) {
+                String errorMessage = String.format("vlan id {} cannot be cast to Long", vid);
+                logger.error(errorMessage);
+                throw new UnsupportedOperationException(errorMessage);
+            }
+
+            Long vlanId = (Long) vid;
             String interfaceName = NetvirtUtils.getInterfaceNameForVlan(parentInterfaceName, vlanId.toString());
             logger.info("Removing VLAN trunk-member {}", interfaceName);
             delete(interfaceName, tx);
         }
     }
 
-    private InstanceIdentifier<Interface> createInterfaceIdentifier(String interfaceName) {
+    private static InstanceIdentifier<Interface> createInterfaceIdentifier(String interfaceName) {
         return InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName))
                 .build();
     }
 
-    private WriteTransaction createTransaction() {
+    private static WriteTransaction createTransaction(DataBroker dataBroker) {
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
         return tx;
     }
 
-    private void commitTransaction(WriteTransaction tx) {
+    private static void commitTransaction(WriteTransaction tx) {
         try {
             CheckedFuture<Void, TransactionCommitFailedException> futures = tx.submit();
             futures.get();
@@ -194,54 +168,24 @@ public class EvcUniListener extends UnimgrDataTreeChangeListener<Uni> {
         }
     }
 
-    private void write(Interface iface, WriteTransaction tx) {
+    private static void write(Interface iface, WriteTransaction tx) {
         String interfaceName = iface.getName();
         InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
         tx.put(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier, iface, true);
     }
 
-    private void delete(String interfaceName, WriteTransaction tx) {
+    private static void delete(String interfaceName, WriteTransaction tx) {
         InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
         tx.delete(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier);
     }
 
-    private String getTrunkParentName(Uni evcUni) {
-
-        Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni> optional = MdsalUtils
-                .read(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                        MefUtils.getUniInstanceIdentifier(evcUni.getUniId().getValue()));
-
-        if (!optional.isPresent()) {
-            logger.error("A matching Uni doesn't exist for EvcUni {}", evcUni.getUniId());
-            return null;
-        }
-
-        org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni uni = optional
-                .get();
-
-        PhysicalLayers physicalLayers = uni.getPhysicalLayers();
-        if (physicalLayers == null) {
-            logger.warn("Uni {} is missing PhysicalLayers", evcUni.getUniId());
-            return null;
-        }
-
-        Links links = physicalLayers.getLinks();
-        if (links == null || links.getLink() == null) {
-            logger.warn("Uni {} is has no links", evcUni.getUniId());
-            return null;
-        }
-
-        Link link = links.getLink().get(0);
+    private static String getTrunkParentName(Link link) {
         String deviceName = link.getDevice().getValue();
         String interfaceName = link.getInterface().toString();
         return getDeviceInterfaceName(deviceName, interfaceName);
     }
 
-    private String getDeviceInterfaceName(String deviceName, String interfaceName) {
-        return deviceName + IfmConstants.OF_URI_SEPARATOR + interfaceName;
-    }
-
-    private Optional<List<EvcUniCeVlan>> getCeVlans(Uni uni) {
+    private static Optional<List<EvcUniCeVlan>> getCeVlans(Uni uni) {
         EvcUniCeVlans ceVlans = uni.getEvcUniCeVlans();
         if (ceVlans == null) {
             return Optional.absent();
@@ -250,26 +194,12 @@ public class EvcUniListener extends UnimgrDataTreeChangeListener<Uni> {
         return Optional.fromNullable(ceVlans.getEvcUniCeVlan());
     }
 
-    private void registerListener() {
-        try {
-            final DataTreeIdentifier<Uni> dataTreeIid = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
-                    getUniTopologyPath());
-            uniListenerRegistration = dataBroker.registerDataTreeChangeListener(dataTreeIid, this);
-            logger.info("UniDataTreeChangeListener created and registered");
-        } catch (final Exception e) {
-            logger.error("Uni DataChange listener registration failed !", e);
-            throw new IllegalStateException("Uni registration Listener failed.", e);
-        }
-    }
-
-    private InstanceIdentifier<Uni> getUniTopologyPath() {
-        return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Evc.class).child(Unis.class)
-                .child(Uni.class);
+    public static String getInterfaceName(Link link, String uniId) {
+        String device = link.getDevice().getValue();
+        return getDeviceInterfaceName(device, uniId);
     }
 
-    @Override
-    public void close() throws Exception {
-        // TODO Auto-generated method stub
-
+    public static String getDeviceInterfaceName(String deviceName, String interfaceName) {
+        return deviceName + IfmConstants.OF_URI_SEPARATOR + interfaceName;
     }
-}
\ No newline at end of file
+}
index c8ab72d06923dbd8c6dd2d4d50361f9076d5bd0e..78a5a22c2477610071314997484e63d9881e8286 100644 (file)
@@ -8,25 +8,13 @@
 
 package org.opendaylight.unimgr.mef.netvirt;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-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.TransactionCommitFailedException;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.MefInterfaces;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.Unis;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniKey;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayers;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayersBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.Links;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.LinksBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.LinkBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.LinkKey;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.MefServices;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
@@ -34,30 +22,21 @@ import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.serv
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.MefTopology;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.Devices;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.Device;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.DeviceBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.DeviceKey;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.Interfaces;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.InterfacesBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.Interface;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.InterfaceBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.InterfaceKey;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.DeviceRole;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
-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.util.concurrent.CheckedFuture;
-
 public final class MefUtils {
+    @SuppressWarnings("unused")
     private static final Logger logger = LoggerFactory.getLogger(MefUtils.class);
-    
-    public static InstanceIdentifier getDeviceInterfaceInstanceIdentifier(String deviceId, String interfaceId) {
+
+    public static InstanceIdentifier<Interface> getDeviceInterfaceInstanceIdentifier(String deviceId,
+            String interfaceId) {
         return InstanceIdentifier.builder(MefTopology.class).child(Devices.class)
                 .child(Device.class, new DeviceKey(new Identifier45(deviceId))).child(Interfaces.class)
                 .child(Interface.class, new InterfaceKey(new Identifier45(interfaceId))).build();
@@ -74,13 +53,18 @@ public final class MefUtils {
                 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis.class)
                 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni.class,
                         new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.UniKey(
-                                new Identifier45(uniId))).build();
-
+                                new Identifier45(uniId)))
+                .build();
     }
 
-    public static InstanceIdentifier getUniLinkInstanceIdentifier(String uniId, String deviceId, String interfaceId) {
+    public static InstanceIdentifier<Link> getUniLinkInstanceIdentifier(String uniId, String deviceId,
+            String interfaceId) {
         return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class)
                 .child(Uni.class, new UniKey(new Identifier45(uniId))).child(PhysicalLayers.class).child(Links.class)
                 .child(Link.class, new LinkKey(new Identifier45(deviceId), interfaceId)).build();
     }
+
+    public static InstanceIdentifier<Evc> getEvcInstanceIdentifier() {
+        return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Evc.class);
+    }
 }
index 00d8ef8746087ffe43d97779767d139152f450aa..b5b51d2b55f9fc2e40ce8f35029dbe0f1d1e6873 100644 (file)
@@ -10,11 +10,6 @@ package org.opendaylight.unimgr.mef.netvirt;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.MefInterfaces;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.Unis;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniKey;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
 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.InterfaceBuilder;
@@ -33,25 +28,24 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterfaceKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
-import com.google.common.util.concurrent.CheckedFuture;
-
 public class NetvirtUtils {
-    public static void createElanInstanceSync(DataBroker dataBroker, String instanceName) {
+    public final static String VLAN_SEPARATOR = ".";
 
+    public static void createElanInstance(DataBroker dataBroker, String instanceName) {
         ElanInstanceBuilder einstBuilder = createElanInstance(instanceName);
 
         MdsalUtils.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION,
                 getElanInstanceInstanceIdentifier(instanceName), einstBuilder.build());
     }
 
-    public static void createElanInterfaceSync(DataBroker dataBroker, String instanceName, String interfaceName) {
+    public static void createElanInterface(DataBroker dataBroker, String instanceName, String interfaceName) {
         ElanInterfaceBuilder einterfaceBuilder = createElanInterface(instanceName, interfaceName);
 
         MdsalUtils.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION,
                 getElanInterfaceInstanceIdentifier(interfaceName), einterfaceBuilder.build());
     }
 
-    public static void updateElanInstanceSync(DataBroker dataBroker, String instanceName) {
+    public static void updateElanInstance(DataBroker dataBroker, String instanceName) {
 
         ElanInstanceBuilder einstBuilder = createElanInstance(instanceName);
 
@@ -59,63 +53,23 @@ public class NetvirtUtils {
                 getElanInstanceInstanceIdentifier(instanceName), einstBuilder.build());
     }
 
-    public static void updateElanInterfaceSync(DataBroker dataBroker, String instanceName, String interfaceName) {
+    public static void updateElanInterface(DataBroker dataBroker, String instanceName, String interfaceName) {
         ElanInterfaceBuilder einterfaceBuilder = createElanInterface(instanceName, interfaceName);
 
         MdsalUtils.syncUpdate(dataBroker, LogicalDatastoreType.CONFIGURATION,
                 getElanInterfaceInstanceIdentifier(interfaceName), einterfaceBuilder.build());
     }
 
-    public static void deleteElanInstanceSync(DataBroker dataBroker, String instanceName) {
+    public static void deleteElanInstance(DataBroker dataBroker, String instanceName) {
         MdsalUtils.syncDelete(dataBroker, LogicalDatastoreType.CONFIGURATION,
                 getElanInstanceInstanceIdentifier(instanceName));
     }
 
-    public static void deleteElanInterfaceSync(DataBroker dataBroker, String instanceName, String interfaceName) {
+    public static void deleteElanInterface(DataBroker dataBroker, String instanceName, String interfaceName) {
         MdsalUtils.syncDelete(dataBroker, LogicalDatastoreType.CONFIGURATION,
                 getElanInterfaceInstanceIdentifier(interfaceName));
     }
 
-    public static CheckedFuture createElanInstance(DataBroker dataBroker, String instanceName) {
-
-        ElanInstanceBuilder einstBuilder = createElanInstance(instanceName);
-
-        return MdsalUtils.write(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                getElanInstanceInstanceIdentifier(instanceName), einstBuilder.build());
-    }
-
-    public static void createElanInterface(DataBroker dataBroker, String instanceName, String interfaceName) {
-        ElanInterfaceBuilder einterfaceBuilder = createElanInterface(instanceName, interfaceName);
-
-        MdsalUtils.write(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                getElanInterfaceInstanceIdentifier(interfaceName), einterfaceBuilder.build());
-    }
-
-    public static void updateElanInstance(DataBroker dataBroker, String instanceName) {
-
-        ElanInstanceBuilder einstBuilder = createElanInstance(instanceName);
-
-        MdsalUtils.update(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                getElanInstanceInstanceIdentifier(instanceName), einstBuilder.build());
-    }
-
-    public static void updateElanInterface(DataBroker dataBroker, String instanceName, String interfaceName) {
-        ElanInterfaceBuilder einterfaceBuilder = createElanInterface(instanceName, interfaceName);
-
-        MdsalUtils.update(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                getElanInterfaceInstanceIdentifier(interfaceName), einterfaceBuilder.build());
-    }
-
-    public static void deleteElanInstance(DataBroker dataBroker, String instanceName) {
-        MdsalUtils.delete(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                getElanInstanceInstanceIdentifier(instanceName));
-    }
-
-    public static void deleteElanInterface(DataBroker dataBroker, String instanceName, String interfaceName) {
-        MdsalUtils.delete(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                getElanInterfaceInstanceIdentifier(interfaceName));
-    }
-    
     public static Interface createTrunkInterface(String interfaceName, String parentIfaceName) {
         IfL2vlanBuilder ifL2vlanBuilder = new IfL2vlanBuilder();
         ifL2vlanBuilder.setL2vlanMode(IfL2vlan.L2vlanMode.Trunk);
@@ -131,13 +85,13 @@ public class NetvirtUtils {
     private static Interface createInterface(String interfaceName, String parentIfaceName, IfL2vlan ifL2vlan) {
         InterfaceBuilder interfaceBuilder = new InterfaceBuilder();
         ParentRefsBuilder parentRefsBuilder = new ParentRefsBuilder().setParentInterface(parentIfaceName);
-        interfaceBuilder.setEnabled(true).setName(interfaceName).setType(L2vlan.class).addAugmentation(IfL2vlan
-                .class, ifL2vlan).addAugmentation(ParentRefs.class, parentRefsBuilder.build());
+        interfaceBuilder.setEnabled(true).setName(interfaceName).setType(L2vlan.class)
+                .addAugmentation(IfL2vlan.class, ifL2vlan).addAugmentation(ParentRefs.class, parentRefsBuilder.build());
         return interfaceBuilder.build();
-    }    
+    }
 
     public static String getInterfaceNameForVlan(String uniId, String vlanId) {
-        return uniId + "." + vlanId;              
+        return uniId + VLAN_SEPARATOR + vlanId;
     }
 
     private static ElanInstanceBuilder createElanInstance(String instanceName) {
@@ -154,18 +108,13 @@ public class NetvirtUtils {
         return einterfaceBuilder;
     }
 
-    private static InstanceIdentifier getElanInstanceInstanceIdentifier(String instanceName) {
+    private static InstanceIdentifier<ElanInstance> getElanInstanceInstanceIdentifier(String instanceName) {
         return InstanceIdentifier.builder(ElanInstances.class)
                 .child(ElanInstance.class, new ElanInstanceKey(instanceName)).build();
     }
 
-    private static InstanceIdentifier getElanInterfaceInstanceIdentifier(String interfaceName) {
+    private static InstanceIdentifier<ElanInterface> getElanInterfaceInstanceIdentifier(String interfaceName) {
         return InstanceIdentifier.builder(ElanInterfaces.class)
                 .child(ElanInterface.class, new ElanInterfaceKey(interfaceName)).build();
     }
-
-    private static InstanceIdentifier getUniInterfaceInstanceIdentifier(String interfaceName) {
-        return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class)
-                .child(Uni.class, new UniKey(new Identifier45(interfaceName))).build();
-    }    
 }
index 6a308696dfac9aa81b1a26631ab873d55b57f5eb..fc894562c33d702e42eb2f0552744ea2d3774c3a 100644 (file)
@@ -18,6 +18,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 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.TransactionCommitFailedException;
+import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniBuilder;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayersBuilder;
@@ -43,7 +44,6 @@ import com.google.common.util.concurrent.CheckedFuture;
 
 public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapableNodeConnector> {
 
-    private static final String OF_URI_SEPARATOR = ":";
     private static final Logger log = LoggerFactory.getLogger(NodeConnectorListener.class);
     private static final Logger logger = LoggerFactory.getLogger(NodeConnectorListener.class);
     private static boolean handleRemovedNodeConnectors = false;
@@ -129,10 +129,10 @@ public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapa
         try {
             FlowCapableNodeConnector original = modifiedDataObject.getRootNode().getDataBefore();
             FlowCapableNodeConnector update = modifiedDataObject.getRootNode().getDataAfter();
-            
+
             String dpnFromNodeConnectorId = getDpnIdFromNodeConnector(modifiedDataObject);
 
-            handleNodeConnectorUpdated(dataBroker, dpnFromNodeConnectorId, original,update);
+            handleNodeConnectorUpdated(dataBroker, dpnFromNodeConnectorId, original, update);
         } catch (final Exception e) {
             log.error("Update node connector failed !", e);
         }
@@ -150,16 +150,18 @@ public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapa
         /*
          * NodeConnectorId is of form 'openflow:dpnid:portnum'
          */
-        String[] split = portId.getValue().split(OF_URI_SEPARATOR);
+        String[] split = portId.getValue().split(IfmConstants.OF_URI_SEPARATOR);
         return split[1];
     }
-    
-    private void handleNodeConnectorAdded(DataBroker dataBroker, String dpnId,
-            FlowCapableNodeConnector nodeConnector) {
+
+    private void handleNodeConnectorAdded(DataBroker dataBroker, String dpnId, FlowCapableNodeConnector nodeConnector) {
 
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
 
-        InstanceIdentifier interfacePath = MefUtils.getDeviceInterfaceInstanceIdentifier(dpnId, nodeConnector.getName());
+        logger.info("Adding mef uni/device interface {} with device {}", nodeConnector.getName(), dpnId);
+
+        InstanceIdentifier interfacePath = MefUtils.getDeviceInterfaceInstanceIdentifier(dpnId,
+                nodeConnector.getName());
         InterfaceBuilder interfaceBuilder = new InterfaceBuilder();
         interfaceBuilder.setPhy(new Identifier45(nodeConnector.getName()));
         DataObject deviceInterface = interfaceBuilder.build();
index e1a19eb4fe5fadd535e7f06962ff0b44d9271ab0..94dc8ba3260553b37cfb932cf054f69513d6848a 100644 (file)
     <argument index="0" ref="dataBroker" />
   </bean>
 
-  <bean class="org.opendaylight.unimgr.mef.netvirt.EvcUniListener">
-    <argument index="0" ref="dataBroker" />
-  </bean>
-
   <bean class="org.opendaylight.unimgr.mef.netvirt.NodeConnectorListener">
     <argument index="0" ref="dataBroker" />
   </bean>
diff --git a/netvirt/src/test/java/org/opendaylight/unimgr/mef/netvirt/EvcUniListenerTest.java b/netvirt/src/test/java/org/opendaylight/unimgr/mef/netvirt/EvcUniListenerTest.java
deleted file mode 100644 (file)
index 9a105b7..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright (c) 2016 Hewlett Packard Enterprise, Co. 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.mef.netvirt;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.Spy;
-import org.mockito.internal.stubbing.answers.Returns;
-import org.mockito.internal.stubbing.answers.ReturnsArgumentAt;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.mockito.stubbing.OngoingStubbing;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
-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.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.CeVlans;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayers;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayersBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.Links;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.LinksBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.LinkBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.UniBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlans;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlansBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlanBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.VlanIdType;
-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;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
-
-import scala.collection.TraversableOnce.OnceCanBuildFrom;
-
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ LogicalDatastoreType.class, EvcUniListener.class })
-public class EvcUniListenerTest {
-
-    @Mock
-    private DataBroker dataBroker;
-    @Mock
-    private WriteTransaction transaction;
-    private EvcUniListener uniListener;
-
-    @Before
-    public void setUp() {
-        dataBroker = mock(DataBroker.class);
-        uniListener = new EvcUniListener(dataBroker);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniAdded() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot0-Port1";
-        String deviceName = "ce0";
-        String interfaceName = "GigabitEthernet-0-1";
-        Uni uni = evcUni(uniId, deviceName, interfaceName);
-
-        prepareWriteTransaction();
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(null, uni, ModificationType.WRITE));
-
-        prepareReadTransaction(uniId, deviceName, interfaceName);
-
-        uniListener.onDataTreeChanged(collection);              
-
-        Interface trunkInterface = NetvirtUtils.createTrunkInterface(uniId, getParentIfaceName(deviceName, interfaceName));
-
-        verifyWriteInterface(trunkInterface);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniWithVlansAdded() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot1-Port1";
-        String deviceName = "ce0";
-        String interfaceName = "GigabitEthernet-1-1";
-        Uni uni = evcUni(uniId, deviceName, interfaceName, 3, 4);
-        prepareWriteTransaction();
-        prepareReadTransaction(uniId, deviceName, interfaceName);
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(null, uni, ModificationType.WRITE));
-        uniListener.onDataTreeChanged(collection);
-
-        Interface trunkInterface = NetvirtUtils.createTrunkInterface(uniId, getParentIfaceName(deviceName, interfaceName));
-        verifyWriteInterface(trunkInterface);
-        Interface vlan3Interface = NetvirtUtils.createTrunkMemberInterface(uniId + ".3", uniId, 3);
-        verifyWriteInterface(vlan3Interface);
-        Interface vlan4Interface = NetvirtUtils.createTrunkMemberInterface(uniId + ".4", uniId, 4);
-        verifyWriteInterface(vlan4Interface);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniRemoved() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot0-Port1";
-        String deviceName = "ce0";
-        String interfaceName = "GigabitEthernet-0-1";
-        Uni uni = evcUni(uniId, deviceName, interfaceName);
-
-        prepareWriteTransaction();
-        prepareReadTransaction(uniId, deviceName, interfaceName);
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(uni, null, ModificationType.DELETE));
-
-        uniListener.onDataTreeChanged(collection);
-
-        verifyDeleteInterface(uniId);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniWithVlansRemoved() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot1-Port1";
-        String deviceName = "ce0";
-        String interfaceName = "GigabitEthernet-1-1";
-        Uni uni = evcUni(uniId, deviceName, interfaceName, 3, 4);
-        prepareWriteTransaction();
-        prepareReadTransaction(uniId, deviceName, interfaceName);
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(uni, null, ModificationType.DELETE));
-
-        uniListener.onDataTreeChanged(collection);
-
-        verifyDeleteInterface(uniId);
-        verifyDeleteInterface(uniId + ".3");
-        verifyDeleteInterface(uniId + ".4");
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniInterfaceUpdated() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot0-Port1";
-        String deviceName = "ce0";
-        String origInterfaceName = "GigabitEthernet-0-1";
-        String updatedInterfaceName = "GigabitEthernet-1-1";
-        Uni origUni = evcUni(uniId, deviceName, origInterfaceName);
-        Uni updatedUni = evcUni(uniId, deviceName, updatedInterfaceName);
-        prepareWriteTransaction();
-        prepareReadTransaction(uniId, deviceName, origInterfaceName, updatedInterfaceName);
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(origUni, updatedUni, ModificationType.SUBTREE_MODIFIED));
-
-        uniListener.onDataTreeChanged(collection);
-
-        Interface trunkInterface = NetvirtUtils.createTrunkInterface(uniId, getParentIfaceName(deviceName, updatedInterfaceName));
-        verifyWriteInterface(trunkInterface);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniWithVlanInterfaceUpdated() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot0-Port1";
-        String deviceName = "ce0";
-        String origInterfaceName = "GigabitEthernet-0-1";
-        String updatedInterfaceName = "GigabitEthernet-1-1";
-        Uni origUni = evcUni(uniId, deviceName, origInterfaceName, 3, 4);
-        Uni updatedUni = evcUni(uniId, deviceName, updatedInterfaceName, 3, 4);
-        prepareWriteTransaction();
-        prepareReadTransaction(uniId, deviceName, origInterfaceName, updatedInterfaceName);
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(origUni, updatedUni, ModificationType.SUBTREE_MODIFIED));
-
-        uniListener.onDataTreeChanged(collection);
-
-        Interface trunkInterface = NetvirtUtils.createTrunkInterface(uniId, getParentIfaceName(deviceName, updatedInterfaceName));
-        verifyWriteInterface(trunkInterface);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUniVlanUpdated() throws Exception {
-        String uniId = "MMPOP1-ce0-Slot0-Port1";
-        String deviceName = "ce0";
-        String interfaceName = "GigabitEthernet-1-1";
-        Uni origUni = evcUni(uniId, deviceName, interfaceName, 1, 2, 3);
-        Uni updatedUni = evcUni(uniId, deviceName, interfaceName, 2, 3, 4, 5);
-        prepareWriteTransaction();
-        prepareReadTransaction(uniId, deviceName, interfaceName);
-
-        Collection<DataTreeModification<Uni>> collection = new ArrayList();
-        collection.add(TestHelper.getUni(origUni, updatedUni, ModificationType.SUBTREE_MODIFIED));
-
-        uniListener.onDataTreeChanged(collection);
-
-        Interface vlan4Interface = NetvirtUtils.createTrunkMemberInterface(uniId + ".4", uniId, 4);
-        verifyWriteInterface(vlan4Interface);
-        Interface vlan5Interface = NetvirtUtils.createTrunkMemberInterface(uniId + ".5", uniId, 5);
-        verifyWriteInterface(vlan5Interface);
-        verifyDeleteInterface(uniId + ".1");
-
-    }
-
-    private void verifyWriteInterface(Interface iface) {
-        verify(transaction).put(LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier(iface.getName()), iface,
-                true);
-        verify(transaction).submit();
-    }
-
-    private void verifyDeleteInterface(String interfaceName) {
-        verify(transaction).delete(LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier(interfaceName));
-        verify(transaction).submit();
-    }
-
-    @SuppressWarnings("unchecked")
-    private void prepareWriteTransaction() {
-        transaction = mock(WriteTransaction.class);
-        when(dataBroker.newWriteOnlyTransaction()).thenReturn(transaction);
-        CheckedFuture<Void, TransactionCommitFailedException> future = mock(CheckedFuture.class);
-        when(transaction.submit()).thenReturn(future);
-    }
-
-    @SuppressWarnings("unchecked")
-    private void prepareReadTransaction(String uniId, String deviceName, String... interfaceNames)
-            throws InterruptedException, ExecutionException {
-
-        ReadOnlyTransaction readTransaction = mock(ReadOnlyTransaction.class);
-        when(dataBroker.newReadOnlyTransaction()).thenReturn(readTransaction);
-
-        CheckedFuture<Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni>, ReadFailedException> future = mock(
-                CheckedFuture.class);
-
-        OngoingStubbing<Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni>> ongoingStubbing = when(future.get()); 
-        
-        for (String interfaceName : interfaceNames)
-        {
-            ongoingStubbing = ongoingStubbing.thenReturn(Optional.of(uni(uniId, deviceName, interfaceName)));            
-        }        
-
-        when(readTransaction.read(LogicalDatastoreType.CONFIGURATION, MefUtils.getUniInstanceIdentifier(uniId)))
-                .thenReturn(future);
-    }
-
-    private InstanceIdentifier<Interface> interfaceInstanceIdentifier(String interfaceName) {
-        return InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName))
-                .build();
-    }
-
-    private org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni uni(
-            String uniId, String deviceName, String interfaceName) {
-        Link link = new LinkBuilder().setDevice(new Identifier45(deviceName)).setInterface(interfaceName).build();
-        Links links = new LinksBuilder().setLink(Arrays.asList(link)).build();
-        PhysicalLayers physicalLayers = new PhysicalLayersBuilder().setLinks(links).build();
-        org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniBuilder uniBuilder = new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniBuilder()
-                .setUniId(new Identifier45(uniId)).setPhysicalLayers(physicalLayers);
-
-        return uniBuilder.build();
-    }
-
-    private Uni evcUni(String uniId, String deviceName, String interfaceName, long... vlans) {
-        UniBuilder uniBuilder = new UniBuilder().setUniId(new Identifier45(uniId));
-
-        if (vlans != null) {
-            List<EvcUniCeVlan> vlanList = new ArrayList<>();
-            for (long vlan : vlans) {
-                vlanList.add(ceVlan(vlan));
-            }
-            EvcUniCeVlans ceVlans = new EvcUniCeVlansBuilder().setEvcUniCeVlan(vlanList).build();
-            uniBuilder.setEvcUniCeVlans(ceVlans);
-        }
-
-        return uniBuilder.build();
-    }
-
-    private EvcUniCeVlan ceVlan(long vlanId) {
-        return new EvcUniCeVlanBuilder().setVid(new VlanIdType(vlanId)).build();
-    }
-
-    private String getParentIfaceName(String deviceName, String interfaceName) {
-        return deviceName + ":" + interfaceName;
-    }    
-}
diff --git a/netvirt/src/test/java/org/opendaylight/unimgr/mef/netvirt/TestHelper.java b/netvirt/src/test/java/org/opendaylight/unimgr/mef/netvirt/TestHelper.java
deleted file mode 100644 (file)
index 7115420..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2016 Hewlett Packard Enterprise, Co. 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.mef.netvirt;
-
-import java.util.Collection;
-
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
-import org.opendaylight.yangtools.yang.binding.ChildOf;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.Identifiable;
-import org.opendaylight.yangtools.yang.binding.Identifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
-
-public class TestHelper {
-    public static final DataTreeModification<Uni> getUni(final Uni before, final Uni after, ModificationType modificationType) {
-        final DataTreeIdentifier<Uni> uniDataTreeIid = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, MefUtils.getEvcUniInstanceIdentifier("testUni"));
-        final DataObjectModification<Uni> uniDataTreeObj = new DataObjectModification<Uni>() {
-            @Override
-            public Collection<DataObjectModification<? extends DataObject>> getModifiedChildren() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public <C extends Identifiable<K> & ChildOf<? super Uni>, K extends Identifier<C>> DataObjectModification<C> getModifiedChildListItem(
-                    Class<C> arg0, K arg1) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public <C extends ChildOf<? super Uni>> DataObjectModification<C> getModifiedChildContainer(Class<C> arg0) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public DataObjectModification<? extends DataObject> getModifiedChild(PathArgument arg0) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public <C extends Augmentation<Uni> & DataObject> DataObjectModification<C> getModifiedAugmentation(
-                    Class<C> arg0) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public ModificationType getModificationType() {
-                return modificationType;
-            }
-            @Override
-            public PathArgument getIdentifier() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public Class<Uni> getDataType() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-            @Override
-            public Uni getDataBefore() {
-                return before;
-            }
-            @Override
-            public Uni getDataAfter() {
-                return after;
-            }
-        };
-        DataTreeModification<Uni> uniUni = new DataTreeModification<Uni>() {
-            @Override
-            public DataTreeIdentifier<Uni> getRootPath() {
-                return uniDataTreeIid;
-            }
-            @Override
-            public DataObjectModification<Uni> getRootNode() {
-                return uniDataTreeObj;
-            }
-        };
-        return uniUni;
-    }
-}