Add l2vpn support for vlans
[unimgr.git] / netvirt / src / main / java / org / opendaylight / unimgr / mef / netvirt / EvcListener.java
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);
         }
     }
 }