L2 Gw create changes related to ITM Tunnels creation in neutronvpn module
[vpnservice.git] / neutronvpn / neutronvpn-impl / src / main / java / org / opendaylight / vpnservice / neutronvpn / NeutronNetworkChangeListener.java
index 1e0252b028b54c536fa006857aa2b77c9c3e602a..fd3111aee65fe178d68489eaedb8db17115981f2 100644 (file)
@@ -14,6 +14,11 @@ 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.vpnservice.mdsalutil.AbstractDataChangeListener;
+import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.ElanInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.elan.instances.ElanInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.elan.instances.ElanInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.elan.instances.ElanInstanceKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
@@ -70,6 +75,8 @@ public class NeutronNetworkChangeListener extends AbstractDataChangeListener<Net
         if (LOG.isTraceEnabled()) {
             LOG.trace("Adding Network : key: " + identifier + ", value=" + input);
         }
+        //Create ELAN instance for this network
+        createElanInstance(input);
     }
 
     @Override
@@ -77,6 +84,8 @@ public class NeutronNetworkChangeListener extends AbstractDataChangeListener<Net
         if (LOG.isTraceEnabled()) {
             LOG.trace("Removing Network : key: " + identifier + ", value=" + input);
         }
+        //Delete ELAN instance for this network
+        deleteElanInstance(input.getUuid().getValue());
     }
 
     @Override
@@ -87,4 +96,25 @@ public class NeutronNetworkChangeListener extends AbstractDataChangeListener<Net
         }
     }
 
+    private void createElanInstance(Network input) {
+        String elanInstanceName = input.getUuid().getValue();
+        String segmentationId = NeutronvpnUtils.getSegmentationIdFromNeutronNetwork(input);
+        ElanInstanceBuilder elanInstanceBuilder = new ElanInstanceBuilder().setElanInstanceName(elanInstanceName);
+        if (segmentationId != null) {
+            //TODO: Uncomment below line while ELAN changes are ported
+            //elanInstanceBuilder.setVni(Long.valueOf(segmentationId));
+        }
+        elanInstanceBuilder.setKey(new ElanInstanceKey(elanInstanceName));
+        ElanInstance elanInstance = elanInstanceBuilder.build();
+        InstanceIdentifier<ElanInstance> id = InstanceIdentifier.builder(ElanInstances.class)
+                .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName)).build();
+        MDSALUtil.syncWrite(broker, LogicalDatastoreType.CONFIGURATION, id, elanInstance);
+    }
+
+    private void deleteElanInstance(String elanInstanceName) {
+        InstanceIdentifier<ElanInstance> id = InstanceIdentifier.builder(ElanInstances.class)
+                .child(ElanInstance.class, new ElanInstanceKey(elanInstanceName)).build();
+        MDSALUtil.syncDelete(broker, LogicalDatastoreType.CONFIGURATION, id);
+    }
+
 }