<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>
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);
}
}
}
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);
}
}
- 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,
}
}
- 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();
}
}
- 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();
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
+}
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;
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();
.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);
+ }
}
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;
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);
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);
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) {
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();
- }
}
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;
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;
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);
}
/*
* 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();
<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>
+++ /dev/null
-/*
- * 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;
- }
-}
+++ /dev/null
-/*
- * 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;
- }
-}