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;
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) {
}
}
- private InstanceIdentifier<Evc> getEvcTopologyPath() {
- return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Evc.class);
- }
-
@Override
public void close() throws Exception {
evcListenerRegistration.close();
}
}
- 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);
// 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();
// 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) {
}
}
- 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);
}
}
}