* This method retrieves the connection-map list from operational datastore of a
* given device.
*
- * @param NodeId
+ * @param nodeId
* node ID
*
* @return connection-map list or null if container is absent
*/
- List<ConnectionMap> getConnectionMap(String NodeId);
+ List<ConnectionMap> getConnectionMap(String nodeId);
}
}
@Override
- public List<ConnectionMap> getConnectionMap(String NodeId) {
+ public List<ConnectionMap> getConnectionMap(String nodeId) {
InstanceIdentifier<OrgOpenroadmDevice> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class);
- Optional<OrgOpenroadmDevice> deviceObject = this.deviceTransactionManager.getDataFromDevice(NodeId,
+ Optional<OrgOpenroadmDevice> deviceObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT,
Timeouts.DEVICE_READ_TIMEOUT_UNIT);
if (deviceObject.isPresent()) {
public interface PortMapping {
/**
- * This method creates logical to physical port mapping for a given device.
- * Instead of parsing all the circuit packs/ports in the device this methods
- * does a selective read operation on degree/srg subtree to get circuit
- * packs/ports that map to :
+ * When OpenRoadmTopology creates the logical to physical port mapping for a
+ * given device, this methods has just to store the resulting mapping
+ * operation to datastore.
*
- * <p>
- * 1. DEGn-TTP-TX, DEGn-TTP-RX, DEGn-TTP-TXRX
- *
- * <p>
- * 2. SRGn-PPp-TX, SRGn-PPp-RX, SRGn-PPp-TXRX
- *
- * <p>
- * 3. LINEn
- *
- * <p>
- * 4. CLNTn.
- *
- * <p>
- * If the port is Mw it also store the OMS, OTS interface provisioned on the
- * port. It skips the logical ports that are internal. If operation is
- * successful the mapping gets stored in datastore corresponding to
- * portmapping.yang data model.
- *
- * @param nodeId
- * node ID
- *
- * @return true/false based on status of operation
+ * @param deviceInfo
+ * deviceInfo
+ * @param portMapList
+ * The list of discovered mapping for the node
+ * @param degreeCpList
+ * The list of circuit-packs supporting eth interface with lldp
+ * protocole
+ * @return true if success to store mapping in datastore, false otherwise.
*/
- boolean createMappingData(String nodeId);
-
- boolean createMappingData2(Info deviceInfo, List<Mapping> portMapList, List<CpToDegree> degreeCpList);
+ boolean createMappingData(Info deviceInfo, List<Mapping> portMapList, List<CpToDegree> degreeCpList);
/**
* This method removes mapping data from the datastore after disconnecting
import com.google.common.util.concurrent.CheckedFuture;
import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
import java.util.Optional;
-import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-import java.util.stream.Collectors;
-
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesKey;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegreeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegreeKey;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.CircuitPack;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Degree;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.port.Interfaces;
import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.InterfaceType;
import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpenROADMOpticalMultiplex;
import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpticalTransport;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfig;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
this.openRoadmInterfaces = openRoadmInterfaces;
}
- @Override
- public boolean createMappingData(String nodeId) {
-
- LOG.info("Create Mapping Data for node {}", nodeId);
- List<Mapping> portMapList = new ArrayList<>();
- InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
- Optional<Info> deviceInfoOptional = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, infoIID,
- Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-
- Info deviceInfo;
- if (deviceInfoOptional.isPresent()) {
- deviceInfo = deviceInfoOptional.get();
- } else {
- LOG.warn("Device info subtree is absent for {}", nodeId);
- return false;
- }
- if (deviceInfo.getNodeType() == null) {
- LOG.error("Node type field is missing"); // TODO make mandatory in yang
- return false;
- }
- switch (deviceInfo.getNodeType()) {
-
- case Rdm:
- // Get TTP port mapping
- if (!createTtpPortMapping(nodeId, deviceInfo, portMapList)) {
- // return false if mapping creation for TTP's failed
- LOG.warn("Unable to create mapping for TTP's on node {}", nodeId);
- return false;
- }
-
- // Get PP port mapping
- if (!createPpPortMapping(nodeId, deviceInfo, portMapList)) {
- // return false if mapping creation for PP's failed
- LOG.warn("Unable to create mapping for PP's on node {}", nodeId);
- return false;
- }
- break;
- case Xpdr:
- if (!createXpdrPortMapping(nodeId, portMapList)) {
- LOG.warn("Unable to create mapping for Xponder on node {}", nodeId);
- return false;
- }
- break;
- default:
- LOG.error("Unable to create mapping for node {} : unknown nodetype ", nodeId);
- break;
-
- }
- return postPortMapping(deviceInfo, portMapList, deviceInfo.getNodeType().getIntValue(), null);
- }
-
- /**
- * This private method gets the list of external ports on a degree. For each
- * port in the degree, it does a get on port subtree with
- * circuit-pack-name/port-name as key in order to get the logical connection
- * point name corresponding to it.
- *
- * @param deviceInfo
- * Info subtree read from the device
- * @param portMapList
- * Reference to the list containing the mapping to be pushed to
- * MD-SAL
- *
- * @return true/false based on status of operation
- */
- private boolean createTtpPortMapping(String nodeId, Info deviceInfo, List<Mapping> portMapList) {
- // Creating mapping data for degree TTP's
-
- List<Degree> degrees = getDegrees(nodeId, deviceInfo);
- List<ConnectionPorts> degreeConPorts = getDegreePorts(degrees);
- Map<String, String> interfaceList = getEthInterfaceList(nodeId);
- List<CpToDegree> cpToDegreeList = getCpToDegreeList(degrees, nodeId, interfaceList);
- LOG.info("Map looks like this {}",interfaceList);
- postPortMapping(deviceInfo, null, deviceInfo.getNodeType().getIntValue(), cpToDegreeList);
- // Getting circuit-pack-name/port-name corresponding to TTP's
- for (ConnectionPorts cp : degreeConPorts) {
- String circuitPackName = cp.getCircuitPackName();
- String portName = cp.getPortName().toString();
- InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName))
- .child(Ports.class, new PortsKey(portName));
-
- LOG.info("Fetching logical Connection Point value for port {} at circuit pack {}", portName,
- circuitPackName);
- Optional<Ports> portObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, portIID,
- Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (portObject.isPresent()) {
- Ports port = portObject.get();
- if (port.getLogicalConnectionPoint() != null) {
- LOG.info("Logical Connection Point for {} {} is {}", circuitPackName, portName,
- port.getLogicalConnectionPoint());
- portMapList.add(createMappingObject(nodeId, port, circuitPackName,
- port.getLogicalConnectionPoint()));
- } else {
- LOG.warn("Logical Connection Point value is missing for {} {}", circuitPackName,
- port.getPortName());
- }
- } else {
- LOG.warn("Port {} is not present in node {} in circuit pack {}!", portName, nodeId, circuitPackName);
- continue; // TODO continue or return true?
- }
- }
- return true;
- }
-
- private List<Degree> getDegrees(String deviceId, Info ordmInfo) {
- List<Degree> degrees = new ArrayList<>();
- Integer maxDegree;
-
- // Get value for max degree from info subtree, required for iteration
- // if not present assume to be 20 (temporary)
- if (ordmInfo.getMaxDegrees() != null) {
- maxDegree = ordmInfo.getMaxDegrees();
- } else {
- maxDegree = 20;
- }
-
- for (int degreeCounter = 1; degreeCounter <= maxDegree; degreeCounter++) {
- LOG.info("Getting Connection ports for Degree Number {}", degreeCounter);
- InstanceIdentifier<Degree> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(Degree.class, new DegreeKey(degreeCounter));
- Optional<Degree> ordmDegreeObject = this.deviceTransactionManager.getDataFromDevice(deviceId,
- LogicalDatastoreType.CONFIGURATION,
- deviceIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (ordmDegreeObject.isPresent()) {
- degrees.add(ordmDegreeObject.get());
- } else {
- LOG.info("Device has {} degree", degreeCounter - 1);
- break;
- }
- }
- return degrees;
- }
-
- /**
- * This private method gets the list of circuit packs on an Srg. For each
- * circuit pack on an Srg, it does a get on circuit-pack subtree with
- * circuit-pack-name as key in order to get the list of ports. It then
- * iterates over the list of ports to get ports with port-qual as
- * roadm-external. It appends a TX,RX,TXRX to the logical connection point
- * name based on the direction of the port.
- *
- * @param nodeId
- * Id of device
- * @param deviceInfo
- * Info subtree read from the device
- * @param portMapList
- * Reference to the list containing the mapping to be pushed to
- * MD-SAL
- *
- * @return true/false based on status of operation
- */
-
- private boolean createPpPortMapping(String nodeId, Info deviceInfo, List<Mapping> portMapList) {
- // Creating mapping data for SRG's PP
- HashMap<Integer, List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg
- .CircuitPacks>> srgCps = getSrgCps(nodeId, deviceInfo);
- Set<Map.Entry<Integer, List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
- .srg.CircuitPacks>>> circuitPacks = srgCps.entrySet();
- for (Entry<Integer, List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg
- .CircuitPacks>> entry : circuitPacks) {
- Integer srgIndex = entry.getKey();
- for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks cp : entry
- .getValue()) {
- String circuitPackName = cp.getCircuitPackName();
- InstanceIdentifier<CircuitPacks> cpIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName));
- Optional<CircuitPacks> circuitPackObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, cpIID,
- Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-
- if (!circuitPackObject.isPresent() || (circuitPackObject.get().getPorts() == null)) {
- LOG.warn("{} : Circuit pack {} not found or without ports.", nodeId, circuitPackName);
- continue; // TODO continue or return false?
- }
- CircuitPacks circuitPack = circuitPackObject.get();
- for (Ports port : circuitPack.getPorts()) {
- if (port.getLogicalConnectionPoint() != null) {
- String logicalConnectionPoint = getLogicalConnectionPort(port, srgIndex);
- LOG.info("{} : Logical Connection Point for {} {} is {}", nodeId, circuitPackName, port
- .getPortName(),
- logicalConnectionPoint);
- portMapList.add(createMappingObject(nodeId, port, circuitPackName, logicalConnectionPoint));
- } else if (Port.PortQual.RoadmInternal.equals(port.getPortQual())) {
- LOG.info("Port is internal, skipping Logical Connection Point missing for {} {}",
- circuitPackName,
- port.getPortName());
- } else if (port.getLogicalConnectionPoint() == null) {
- LOG.info("Value missing, Skipping Logical Connection Point missing for {} {}", circuitPackName,
- port.getPortName());
- }
- }
- }
- }
- return true;
- }
-
- /**
- * This method does a get operation on shared risk group subtree of the
- * netconf device's config datastore and returns a list of all circuit packs
- * objects that are part of srgs. It is required to do a selective get on
- * all the circuit packs that contain add/drop ports of interest.
- *
- * @param deviceId
- * Device id
- * @param ordmInfo
- * Info subtree from the device
- * @return List of circuit packs object belonging to- shared risk group
- * subtree
- */
- private HashMap<Integer, List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg
- .CircuitPacks>> getSrgCps(String deviceId, Info ordmInfo) {
- HashMap<Integer, List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg
- .CircuitPacks>> cpPerSrg = new HashMap<>();
- Integer maxSrg;
- // Get value for max Srg from info subtree, required for iteration
- // if not present assume to be 20 (temporary)
- if (ordmInfo.getMaxSrgs() != null) {
- maxSrg = ordmInfo.getMaxSrgs();
- } else {
- maxSrg = 20;
- }
- for (int srgCounter = 1; srgCounter <= maxSrg; srgCounter++) {
- List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks> srgCps =
- new ArrayList<>();
- LOG.info("Getting Circuitpacks for Srg Number {}", srgCounter);
- InstanceIdentifier<SharedRiskGroup> srgIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(SharedRiskGroup.class, new SharedRiskGroupKey(srgCounter));
- Optional<SharedRiskGroup> ordmSrgObject = this.deviceTransactionManager.getDataFromDevice(deviceId,
- LogicalDatastoreType.CONFIGURATION,
- srgIID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (ordmSrgObject.isPresent()) {
- srgCps.addAll(ordmSrgObject.get().getCircuitPacks());
- cpPerSrg.put(ordmSrgObject.get().getSrgNumber(), srgCps);
- }
- }
- LOG.info("Device {} has {} Srg", deviceId, cpPerSrg.size());
- return cpPerSrg;
- }
-
- /**
- * This private method gets the list of circuit packs on a xponder. For each
- * circuit pack on a Xponder, it does a get on circuit-pack subtree with
- * circuit-pack-name as key in order to get the list of ports. It then
- * iterates over the list of ports to get ports with port-qual as
- * xpdr-network/xpdr-client. The line and client ports are saved as:
- *
- * <p>
- * 1. LINEn
- *
- * <p>
- * 2. CLNTn
- *
- * @param nodeId
- * Id of device
- * @param portMapList
- * Reference to the list containing the mapping to be pushed to
- * MD-SAL
- *
- * @return true/false based on status of operation
- */
- private boolean createXpdrPortMapping(String nodeId, List<Mapping> portMapList) {
- // Creating for Xponder Line and Client Ports
- InstanceIdentifier<OrgOpenroadmDevice> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class);
- Optional<OrgOpenroadmDevice> deviceObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, deviceIID,
- Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-
- // Variable to keep track of number of line ports
- int line = 1;
- // Variable to keep track of number of client ports
- int client = 1;
- if (!deviceObject.isPresent() || (deviceObject.get().getCircuitPacks() == null)) {
- LOG.warn("Circuit Packs are not present for {}", nodeId);
- return false; // TODO return false or continue?
- }
-
- List<CircuitPacks> circuitPackList = deviceObject.get().getCircuitPacks();
- circuitPackList.sort(Comparator.comparing(CircuitPack::getCircuitPackName));
-
- for (CircuitPacks cp : circuitPackList) {
- String circuitPackName = cp.getCircuitPackName();
- if (cp.getPorts() == null) {
- LOG.warn("Ports were not found for circuit pack: {}", circuitPackName);
- continue;
- }
- for (Ports port : cp.getPorts()) {
- if (Port.PortQual.XpdrNetwork.equals(port.getPortQual())) {
- portMapList.add(createMappingObject(nodeId, port, circuitPackName,
- "XPDR1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + line));
- line++;
- } else if (Port.PortQual.XpdrClient.equals(port.getPortQual())) {
- portMapList.add(createMappingObject(nodeId, port, circuitPackName,
- "XPDR1-" + OpenRoadmInterfacesImpl.CLIENT_TOKEN + client));
- client++;
- } else {
- LOG.warn("Not supported type of port! Port type: {}", port.getPortQual());
- }
- }
- }
- return true;
- }
/**
* This private method builds the mapping object to be pushed in MD-SAL in
return mpBldr.build();
}
- private CpToDegree createCpToDegreeObject(String circuitPackName, String degreeNumber, String nodeId,
- Map<String, String> interfaceList) {
- String interfaceName = null;
- if (interfaceList.get(circuitPackName) != null) {
- interfaceName = interfaceList.get(circuitPackName);
- }
- return new CpToDegreeBuilder().withKey(new CpToDegreeKey(circuitPackName)).setCircuitPackName(circuitPackName)
- .setDegreeNumber(new Long(degreeNumber)).setInterfaceName(interfaceName).build();
- }
-
- private static List<ConnectionPorts> getDegreePorts(List<Degree> degrees) {
- return degrees.stream().filter(degree -> degree.getConnectionPorts() != null)
- .flatMap(degree -> degree.getConnectionPorts().stream()).collect(Collectors.toList());
- }
-
- private List<CpToDegree> getCpToDegreeList(List<Degree> degrees, String nodeId,
- Map<String, String> interfaceList) {
- List<CpToDegree> cpToDegreeList = new ArrayList<>();
- for (Degree degree : degrees) {
- if (degree.getCircuitPacks() != null) {
- LOG.info("Inside CP to degree list");
- cpToDegreeList.addAll(degree.getCircuitPacks().stream()
- .filter(cp -> interfaceList.containsKey(cp.getCircuitPackName()))
- .map(cp -> createCpToDegreeObject(cp.getCircuitPackName() ,
- degree.getDegreeNumber().toString(), nodeId ,interfaceList))
- .collect(Collectors.toList()));
- }
- }
- return cpToDegreeList;
- }
/**
* This method for ports the portMapping corresponding to the
return null;
}
- private static String getLogicalConnectionPort(Ports port, int srgCounter) {
- String logicalConnectionPoint = null;
- if (port.getLogicalConnectionPoint() != null) {
- switch (port.getPortDirection()) {
- case Tx:
- // Port direction is transmit
- if (!port.getLogicalConnectionPoint().contains("SRG")) {
- logicalConnectionPoint = "SRG" + srgCounter + "-" + port.getLogicalConnectionPoint() + "-TX";
- } else {
- logicalConnectionPoint = port.getLogicalConnectionPoint() + "-TX";
- }
- break;
- case Rx:
- // Port direction is receive
- if (!port.getLogicalConnectionPoint().contains("SRG")) {
- logicalConnectionPoint = "SRG" + srgCounter + "-" + port.getLogicalConnectionPoint() + "-RX";
- } else {
- logicalConnectionPoint = port.getLogicalConnectionPoint() + "-RX";
- }
- break;
- case Bidirectional:
- // port is bidirectional
- if (!port.getLogicalConnectionPoint().contains("SRG")) {
- logicalConnectionPoint = "SRG" + srgCounter + "-" + port.getLogicalConnectionPoint();
- } else {
- logicalConnectionPoint = port.getLogicalConnectionPoint();
- }
- if (!port.getLogicalConnectionPoint().endsWith("-TXRX")) {
- logicalConnectionPoint = logicalConnectionPoint.concat("-TXRX");
- }
- break;
- default:
- // Unsupported Port direction
- LOG.error("Unsupported port direction for port {} {}", port, port.getPortDirection());
- return null; // TODO return false or continue?
- }
- return logicalConnectionPoint;
- }
- LOG.warn("Unsupported port direction for port {} - {} - LogicalConnectionPoint is null",
- port, port.getPortDirection());
- return null; // TODO return false or continue?
- }
-
@Override
public void deleteMappingData(String nodeId) {
LOG.info("Deleting Mapping Data corresponding at node '{}'", nodeId);
}
}
- private Map<String, String> getEthInterfaceList(String nodeId) {
- LOG.info("It is calling get ethernet interface");
- Map<String, String> cpToInterfaceMap = new HashMap<>();
- InstanceIdentifier<Protocols> protocolsIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(Protocols.class);
- Optional<Protocols> protocolObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, protocolsIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (!protocolObject.isPresent() || (protocolObject.get().augmentation(Protocols1.class) == null)) {
- LOG.warn("LLDP subtree is missing : isolated openroadm device");
- return cpToInterfaceMap;
- }
- List<PortConfig> portConfigList = protocolObject.get().augmentation(Protocols1.class).getLldp().getPortConfig();
- if (!portConfigList.isEmpty()) {
- for (PortConfig portConfig : portConfigList) {
- if (portConfig.getAdminStatus().equals(PortConfig.AdminStatus.Txandrx)) {
- InstanceIdentifier<Interface> interfaceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(Interface.class, new InterfaceKey(portConfig.getIfName()));
- Optional<Interface> interfaceObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, interfaceIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (interfaceObject.isPresent()
- && (interfaceObject.get().getSupportingCircuitPackName() != null)) {
- String supportingCircuitPackName = interfaceObject.get().getSupportingCircuitPackName();
- cpToInterfaceMap.put(supportingCircuitPackName, portConfig.getIfName());
- InstanceIdentifier<CircuitPacks> circuitPacksIID = InstanceIdentifier
- .create(OrgOpenroadmDevice.class).child(CircuitPacks.class,
- new CircuitPacksKey(supportingCircuitPackName));
- Optional<CircuitPacks> circuitPackObject = this.deviceTransactionManager.getDataFromDevice(
- nodeId, LogicalDatastoreType.OPERATIONAL, circuitPacksIID, Timeouts
- .DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (circuitPackObject.isPresent()
- && (circuitPackObject.get().getParentCircuitPack() != null)) {
- cpToInterfaceMap.put(circuitPackObject.get().getParentCircuitPack()
- .getCircuitPackName(), portConfig.getIfName());
- }
- }
- } else {
- LOG.warn("PortConfig Admi Status is not equal Txandrx");
- }
- }
- } else {
- LOG.warn("Couldnt find port config under LLDP for Node : {}", nodeId);
- }
- LOG.info("Processiong is done.. now returning..");
- return cpToInterfaceMap;
- }
-
@Override
- public boolean createMappingData2(Info deviceInfo, List<Mapping> portMapList, List<CpToDegree> degreeCpList) {
- LOG.info("Create Mapping Data 2 for node {}", deviceInfo.getNodeId());
+ public boolean createMappingData(Info deviceInfo, List<Mapping> portMapList, List<CpToDegree> degreeCpList) {
+ LOG.info("Create Mapping Data for node {}", deviceInfo.getNodeId());
return postPortMapping(deviceInfo, portMapList, deviceInfo.getNodeType().getIntValue(), degreeCpList);
}
/*
- * Copyright © 2016 AT&T and others. All rights reserved.
+ * Copyright © 2017 Orange, Inc. 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,
import java.util.HashMap;
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.transportpce.common.NetworkUtils;
import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
+import org.opendaylight.transportpce.common.mapping.DeviceConfig;
import org.opendaylight.transportpce.common.mapping.PortMapping;
import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
import org.opendaylight.transportpce.networkmodel.util.ClliNetwork;
import org.opendaylight.transportpce.networkmodel.util.OpenRoadmNetwork;
import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.NodeTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeKey;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final boolean CREATE_MISSING_PARENTS = true;
private final DataBroker dataBroker;
+ private final DeviceConfig deviceConfig;
private final R2RLinkDiscovery linkDiscovery;
private final DeviceTransactionManager deviceTransactionManager;
private final OpenRoadmTopology openRoadmTopology;
private final PortMapping portMapping;
- private HashMap<String,TopologyShard> topologyShardMountedDevice;
+ private HashMap<String, TopologyShard> topologyShardMountedDevice;
- public NetworkModelServiceImpl(final DataBroker dataBroker, final R2RLinkDiscovery linkDiscovery,
- DeviceTransactionManager deviceTransactionManager,
- OpenRoadmTopology openRoadmTopology, PortMapping portMapping) {
+ public NetworkModelServiceImpl(final DataBroker dataBroker, final DeviceConfig deviceConfig,
+ final R2RLinkDiscovery linkDiscovery,
+ DeviceTransactionManager deviceTransactionManager,
+ OpenRoadmTopology openRoadmTopology, PortMapping portMapping) {
this.dataBroker = dataBroker;
+ this.deviceConfig = deviceConfig;
this.linkDiscovery = linkDiscovery;
this.deviceTransactionManager = deviceTransactionManager;
this.openRoadmTopology = openRoadmTopology;
this.portMapping = portMapping;
- this.topologyShardMountedDevice = new HashMap<String,TopologyShard>();
- }
-
- public void init() {
- LOG.info("init ...");
- }
-
- public void close() {
+ this.topologyShardMountedDevice = new HashMap<String, TopologyShard>();
}
@Override
public void createOpenROADMnode(String nodeId) {
try {
- LOG.info("createOpenROADMNode: {} ", nodeId);
-
- this.portMapping.createMappingData(nodeId);
- this.linkDiscovery.readLLDP(new NodeId(nodeId));
+ LOG.info("creating OpenROADMNode: {} ", nodeId);
+ LOG.info("Retreiving configuration from node {}.", nodeId);
+ Info deviceInfo = this.deviceConfig.getDeviceInfo(nodeId);
- Node clliNode = ClliNetwork.createNode(this.deviceTransactionManager, nodeId);
- if (clliNode == null) {
+ Node clliNode = null;
+ if (deviceInfo != null && deviceInfo.getClli() != null) {
+ clliNode = ClliNetwork.createNode(deviceInfo.getClli(), nodeId);
+ } else {
LOG.error("Unable to create clli node! Node id: {}", nodeId);
return;
}
- Node openRoadmNode = OpenRoadmNetwork.createNode(nodeId, this.deviceTransactionManager);
- if (openRoadmNode == null) {
+ Node openRoadmNode = null;
+ if (deviceInfo != null) {
+ openRoadmNode = OpenRoadmNetwork.createNode(nodeId, deviceInfo);
+ } else {
LOG.error("Unable to create OpenRoadm node! Node id: {}", nodeId);
return;
}
- TopologyShard topologyShard = this.openRoadmTopology.createTopologyShard(nodeId);
- if (topologyShard == null) {
- LOG.error("Unable to create topology shard for node {}!", nodeId);
+ TopologyShard topologyShard = null;
+ if (deviceInfo != null) {
+ topologyShard = this.openRoadmTopology.createTopologyShard(nodeId, deviceInfo);
+ LOG.debug("mapping = {}", topologyShard.getMappings().toString());
+ if (!this.portMapping.createMappingData(deviceInfo, topologyShard.getMappings(), topologyShard
+ .getCpToDegreeList())) {
+ LOG.error("Error to create mapping data for {}", nodeId);
+ } else {
+ if (NodeTypes.Rdm.getName().equals(deviceInfo.getNodeType().getName())) {
+ this.linkDiscovery.readLLDP(new NodeId(nodeId));
+ }
+ }
+ } else {
+ LOG.error("Unable to create topology shard for node {}.", nodeId);
return;
}
this.topologyShardMountedDevice.put(nodeId, topologyShard);
WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
LOG.info("creating node in {}", NetworkUtils.CLLI_NETWORK_ID);
InstanceIdentifier<Node> iiClliNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)))
- .child(Node.class, clliNode.key())
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)))
+ .child(Node.class, clliNode.key())
+ .build();
writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiClliNode, clliNode,
- CREATE_MISSING_PARENTS);
+ CREATE_MISSING_PARENTS);
LOG.info("creating node in {}", NetworkUtils.UNDERLAY_NETWORK_ID);
InstanceIdentifier<Node> iiOpenRoadmNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)))
- .child(Node.class, openRoadmNode.key())
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)))
+ .child(Node.class, openRoadmNode.key())
+ .build();
writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode, openRoadmNode,
- CREATE_MISSING_PARENTS);
- for (Node openRoadmTopologyNode: topologyShard.getNodes()) {
+ CREATE_MISSING_PARENTS);
+ for (Node openRoadmTopologyNode : topologyShard.getNodes()) {
LOG.info("creating node {} in {}", openRoadmTopologyNode.getNodeId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
+ NetworkUtils.OVERLAY_NETWORK_ID);
InstanceIdentifier<Node> iiOpenRoadmTopologyNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .child(Node.class, openRoadmTopologyNode.key())
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(Node.class, openRoadmTopologyNode.key())
+ .build();
writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyNode,
- openRoadmTopologyNode, CREATE_MISSING_PARENTS);
+ openRoadmTopologyNode, CREATE_MISSING_PARENTS);
}
- for (Link openRoadmTopologyLink: topologyShard.getLinks()) {
+ for (Link openRoadmTopologyLink : topologyShard.getLinks()) {
LOG.info("creating link {} in {}", openRoadmTopologyLink.getLinkId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
+ NetworkUtils.OVERLAY_NETWORK_ID);
InstanceIdentifier<Link> iiOpenRoadmTopologyLink = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .augmentation(Network1.class)
- .child(Link.class, openRoadmTopologyLink.key())
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .augmentation(Network1.class)
+ .child(Link.class, openRoadmTopologyLink.key())
+ .build();
writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyLink,
- openRoadmTopologyLink, CREATE_MISSING_PARENTS);
+ openRoadmTopologyLink, CREATE_MISSING_PARENTS);
}
writeTransaction.submit().get();
LOG.info("all nodes and links created");
} catch (InterruptedException | ExecutionException e) {
LOG.error("ERROR: ", e);
}
- }
- @Override
- public void setOpenROADMnodeStatus(String nodeId, NetconfNodeConnectionStatus.ConnectionStatus connectionStatus) {
- LOG.info("setOpenROADMNodeStatus: {} {}", nodeId, connectionStatus.name());
- /*
- TODO: set connection status of the device in model,
- TODO: so we don't need to keep it in memory (Set<String> currentMountedDevice)
- TODO: unfortunately there is no connection status OpenROADM in network models
- TODO: waiting for new model version
- */
}
- /* (non-Javadoc)
- * @see org.opendaylight.transportpce.networkmodel.service.NetworkModelService#deleteOpenROADMnode(java.lang.String)
- */
@Override
public void deleteOpenROADMnode(String nodeId) {
try {
WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
LOG.info("deleting node in {}", NetworkUtils.CLLI_NETWORK_ID);
InstanceIdentifier<Node> iiClliNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)))
- .child(Node.class, nodeIdKey)
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)))
+ .child(Node.class, nodeIdKey)
+ .build();
writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiClliNode);
LOG.info("deleting node in {}", NetworkUtils.UNDERLAY_NETWORK_ID);
InstanceIdentifier<Node> iiOpenRoadmNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)))
- .child(Node.class, nodeIdKey)
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)))
+ .child(Node.class, nodeIdKey)
+ .build();
writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode);
TopologyShard topologyShard = this.topologyShardMountedDevice.get(nodeId);
if (topologyShard != null) {
LOG.info("TopologyShard for node '{}' is present", nodeId);
- for (Node openRoadmTopologyNode: topologyShard .getNodes()) {
+ for (Node openRoadmTopologyNode : topologyShard.getNodes()) {
LOG.info("deleting node {} in {}", openRoadmTopologyNode.getNodeId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
+ NetworkUtils.OVERLAY_NETWORK_ID);
InstanceIdentifier<Node> iiOpenRoadmTopologyNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .child(Node.class, openRoadmTopologyNode.key())
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(Node.class, openRoadmTopologyNode.key())
+ .build();
writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyNode);
}
- for (Link openRoadmTopologyLink: topologyShard.getLinks()) {
+ for (Link openRoadmTopologyLink : topologyShard.getLinks()) {
LOG.info("deleting link {} in {}", openRoadmTopologyLink.getLinkId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
+ NetworkUtils.OVERLAY_NETWORK_ID);
InstanceIdentifier<Link> iiOpenRoadmTopologyLink = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .augmentation(Network1.class)
- .child(Link.class, openRoadmTopologyLink.key())
- .build();
+ .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .augmentation(Network1.class)
+ .child(Link.class, openRoadmTopologyLink.key())
+ .build();
writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyLink);
}
+ this.topologyShardMountedDevice.remove(nodeId);
} else {
LOG.warn("TopologyShard for node '{}' is not present", nodeId);
}
LOG.error("Error when trying to delete node : {}", nodeId, e);
}
}
+
+ @Override
+ public void setOpenROADMnodeStatus(String nodeId, ConnectionStatus connectionStatus) {
+ // TODO Auto-generated method stub
+
+ }
+
}
+++ /dev/null
-/*
- * Copyright © 2017 Orange, Inc. 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.transportpce.networkmodel.service;
-
-import java.util.HashMap;
-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.transportpce.common.NetworkUtils;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.transportpce.common.mapping.DeviceConfig;
-import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
-import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
-import org.opendaylight.transportpce.networkmodel.util.ClliNetwork;
-import org.opendaylight.transportpce.networkmodel.util.OpenRoadmNetwork;
-import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.Node;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.network.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NetworkModelServiceImpl2 implements NetworkModelService {
-
- private static final Logger LOG = LoggerFactory.getLogger(NetworkModelServiceImpl2.class);
- private static final boolean CREATE_MISSING_PARENTS = true;
-
- private final DataBroker dataBroker;
- private final DeviceConfig deviceConfig;
- private final R2RLinkDiscovery linkDiscovery;
- private final DeviceTransactionManager deviceTransactionManager;
- private final OpenRoadmTopology openRoadmTopology;
- private final PortMapping portMapping;
- private HashMap<String, TopologyShard> topologyShardMountedDevice;
-
- public NetworkModelServiceImpl2(final DataBroker dataBroker, final DeviceConfig deviceConfig,
- final R2RLinkDiscovery linkDiscovery,
- DeviceTransactionManager deviceTransactionManager,
- OpenRoadmTopology openRoadmTopology, PortMapping portMapping) {
- this.dataBroker = dataBroker;
- this.deviceConfig = deviceConfig;
- this.linkDiscovery = linkDiscovery;
- this.deviceTransactionManager = deviceTransactionManager;
- this.openRoadmTopology = openRoadmTopology;
- this.portMapping = portMapping;
- this.topologyShardMountedDevice = new HashMap<String, TopologyShard>();
- }
-
- @Override
- public void createOpenROADMnode(String nodeId) {
- try {
- LOG.info("creating OpenROADMNode: {} ", nodeId);
- LOG.info("Retreiving configuration from node {}.", nodeId);
- Info deviceInfo = this.deviceConfig.getDeviceInfo(nodeId);
-
- Node clliNode = null;
- if (deviceInfo != null && deviceInfo.getClli() != null) {
- clliNode = ClliNetwork.createNode2(deviceInfo.getClli(), nodeId);
- } else {
- LOG.error("Unable to create clli node! Node id: {}", nodeId);
- return;
- }
-
- Node openRoadmNode = null;
- if (deviceInfo != null) {
- openRoadmNode = OpenRoadmNetwork.createNode2(nodeId, deviceInfo);
- } else {
- LOG.error("Unable to create OpenRoadm node! Node id: {}", nodeId);
- return;
- }
-
- TopologyShard topologyShard = null;
- if (deviceInfo != null) {
- topologyShard = this.openRoadmTopology.createTopologyShard2(nodeId, deviceInfo);
- LOG.debug("mapping = {}", topologyShard.getMappings().toString());
- if (!this.portMapping.createMappingData2(deviceInfo, topologyShard.getMappings(),
- topologyShard.getCpToDegreeList())) {
- LOG.error("Error to create mapping data for {}", nodeId);
- } else {
- if (NodeTypes.Rdm.getName().equals(deviceInfo.getNodeType().getName())) {
- this.linkDiscovery.readLLDP(new NodeId(nodeId));
- }
- }
- } else {
- LOG.error("Unable to create topology shard for node {}.", nodeId);
- return;
- }
- this.topologyShardMountedDevice.put(nodeId, topologyShard);
-
- WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
- LOG.info("creating node in {}", NetworkUtils.CLLI_NETWORK_ID);
- InstanceIdentifier<Node> iiClliNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)))
- .child(Node.class, clliNode.key())
- .build();
- writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiClliNode, clliNode,
- CREATE_MISSING_PARENTS);
- LOG.info("creating node in {}", NetworkUtils.UNDERLAY_NETWORK_ID);
- InstanceIdentifier<Node> iiOpenRoadmNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)))
- .child(Node.class, openRoadmNode.key())
- .build();
- writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode, openRoadmNode,
- CREATE_MISSING_PARENTS);
- for (Node openRoadmTopologyNode : topologyShard.getNodes()) {
- LOG.info("creating node {} in {}", openRoadmTopologyNode.getNodeId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
- InstanceIdentifier<Node> iiOpenRoadmTopologyNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .child(Node.class, openRoadmTopologyNode.key())
- .build();
- writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyNode,
- openRoadmTopologyNode, CREATE_MISSING_PARENTS);
- }
- for (Link openRoadmTopologyLink : topologyShard.getLinks()) {
- LOG.info("creating link {} in {}", openRoadmTopologyLink.getLinkId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
- InstanceIdentifier<Link> iiOpenRoadmTopologyLink = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .augmentation(Network1.class)
- .child(Link.class, openRoadmTopologyLink.key())
- .build();
- writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyLink,
- openRoadmTopologyLink, CREATE_MISSING_PARENTS);
- }
- writeTransaction.submit().get();
- LOG.info("all nodes and links created");
- } catch (InterruptedException | ExecutionException e) {
- LOG.error("ERROR: ", e);
- }
-
- }
-
- @Override
- public void deleteOpenROADMnode(String nodeId) {
- try {
- LOG.info("deleteOpenROADMnode: {} ", nodeId);
- this.portMapping.deleteMappingData(nodeId);
-
- NodeKey nodeIdKey = new NodeKey(new NodeId(nodeId));
- WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
- LOG.info("deleting node in {}", NetworkUtils.CLLI_NETWORK_ID);
- InstanceIdentifier<Node> iiClliNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID)))
- .child(Node.class, nodeIdKey)
- .build();
- writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiClliNode);
- LOG.info("deleting node in {}", NetworkUtils.UNDERLAY_NETWORK_ID);
- InstanceIdentifier<Node> iiOpenRoadmNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)))
- .child(Node.class, nodeIdKey)
- .build();
- writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmNode);
- TopologyShard topologyShard = this.topologyShardMountedDevice.get(nodeId);
- if (topologyShard != null) {
- LOG.info("TopologyShard for node '{}' is present", nodeId);
- for (Node openRoadmTopologyNode: topologyShard .getNodes()) {
- LOG.info("deleting node {} in {}", openRoadmTopologyNode.getNodeId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
- InstanceIdentifier<Node> iiOpenRoadmTopologyNode = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .child(Node.class, openRoadmTopologyNode.key())
- .build();
- writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyNode);
- }
- for (Link openRoadmTopologyLink: topologyShard.getLinks()) {
- LOG.info("deleting link {} in {}", openRoadmTopologyLink.getLinkId().getValue(),
- NetworkUtils.OVERLAY_NETWORK_ID);
- InstanceIdentifier<Link> iiOpenRoadmTopologyLink = InstanceIdentifier
- .builder(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
- .augmentation(Network1.class)
- .child(Link.class, openRoadmTopologyLink.key())
- .build();
- writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, iiOpenRoadmTopologyLink);
- }
- this.topologyShardMountedDevice.remove(nodeId);
- } else {
- LOG.warn("TopologyShard for node '{}' is not present", nodeId);
- }
- writeTransaction.submit().get();
- LOG.info("all nodes and links deleted ! ");
- } catch (InterruptedException | ExecutionException e) {
- LOG.error("Error when trying to delete node : {}", nodeId, e);
- }
- }
-
- @Override
- public void setOpenROADMnodeStatus(String nodeId, ConnectionStatus connectionStatus) {
- // TODO Auto-generated method stub
-
- }
-
-}
package org.opendaylight.transportpce.networkmodel.util;
-import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.transportpce.common.Timeouts;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev170626.NetworkTypes1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev170626.NetworkTypes1Builder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev170626.Node1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev170626.Node1Builder;
import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev170626.network.network.types.ClliNetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
}
}
- /**
- * Create single node entry for CLLI topology.
- *
- * @param deviceTransactionManager device transation manager
- * @param deviceId device ID
- *
- * @return node builder status
- */
- public static Node createNode(DeviceTransactionManager deviceTransactionManager, String deviceId) {
- // Read clli from the device
- InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
- Optional<Info> deviceInfo = deviceTransactionManager.getDataFromDevice(deviceId,
- LogicalDatastoreType.OPERATIONAL, infoIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- String clli;
- if (deviceInfo.isPresent()) {
- clli = deviceInfo.get().getClli();
- } else {
- return null;
- }
- /*
- * Create node in the CLLI layer of the network model with nodeId equal
- * to the clli attribute in the device model's info subtree
- */
- NodeBuilder nodeBldr = new NodeBuilder();
- NodeId nwNodeId = new NodeId(clli);
- nodeBldr.setNodeId(nwNodeId);
- nodeBldr.withKey(new NodeKey(nwNodeId));
- /*
- * create clli node augmentation defined in openroadm-clli-network.yang
- */
- Node1Builder clliAugmentationBldr = new Node1Builder();
- clliAugmentationBldr.setClli(clli);
- nodeBldr.addAugmentation(Node1.class, clliAugmentationBldr.build());
- return nodeBldr.build();
- }
-
/**
* Other implementation to create single node entry for CLLI topology.
*
*/
- public static Node createNode2(String clli, String deviceId) {
+ public static Node createNode(String clli, String deviceId) {
NodeBuilder nodeBldr = new NodeBuilder();
NodeId nwNodeId = new NodeId(clli);
nodeBldr.setNodeId(nwNodeId);
package org.opendaylight.transportpce.networkmodel.util;
import com.google.common.collect.ImmutableList;
-import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.transportpce.common.Timeouts;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev170929.NetworkTypes1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev170929.NetworkTypes1Builder;
}
}
- /**
- * Create single node entry for OpenRoadmNetwork.
- *
- * @param nodeId node ID
- * @param deviceTransactionManager device transaction manager
- *
- * @return node builder status
- */
- public static Node createNode(String nodeId, DeviceTransactionManager deviceTransactionManager) {
- // Fetches the info from the deviceInfo
- InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
- Optional<Info> deviceInfoOpt = deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, infoIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- Info deviceInfo;
- if (deviceInfoOpt.isPresent()) {
- deviceInfo = deviceInfoOpt.get();
- } else {
- LOG.error("Unable to get device info from device {}!", nodeId);
- return null;
- }
- NodeTypes nodeType = deviceInfo.getNodeType();
-
- // Uses the Node Builder to set the nodeId and Key
- NodeBuilder nodeBldr = new NodeBuilder();
- NodeId nwNodeId = new NodeId(nodeId);
- nodeBldr.setNodeId(nwNodeId);
- nodeBldr.withKey(new NodeKey(nwNodeId));
- Node1Builder node1bldr = new Node1Builder();
-
- /*
- * Recognize the node type: 1:ROADM, 2:XPONDER
- */
- switch (nodeType.getIntValue()) {
- case 1:
- node1bldr.setNodeType(OpenroadmNodeType.ROADM);
- break;
- case 2:
- node1bldr.setNodeType(OpenroadmNodeType.XPONDER);
- break;
- default:
- LOG.error("No correponsding type for the value: {}", nodeType.getIntValue());
- break;
- }
-
- String vendor = deviceInfo.getVendor();
- String model = deviceInfo.getModel();
- IpAddress ipAddress = deviceInfo.getIpAddress();
- // Sets IP, Model and Vendor information fetched from the deviceInfo
- node1bldr.setIp(ipAddress);
- node1bldr.setModel(model);
- node1bldr.setVendor(vendor);
-
- // Sets the value of Network-ref and Node-ref as a part of the supporting node
- // attribute
- String clli = deviceInfo.getClli();
- SupportingNodeBuilder supportbldr = new SupportingNodeBuilder();
- supportbldr.withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), new NodeId(clli)));
- supportbldr.setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID));
- supportbldr.setNodeRef(new NodeId(clli));
- nodeBldr.setSupportingNode(ImmutableList.of(supportbldr.build()));
-
- // Augment to the main node builder
- nodeBldr.addAugmentation(Node1.class, node1bldr.build());
- return nodeBldr.build();
- }
-
/**
* Create single node entry for OpenRoadmNetwork.
*
*/
- public static Node createNode2(String nodeId, Info deviceInfo) {
+ public static Node createNode(String nodeId, Info deviceInfo) {
NodeTypes nodeType = deviceInfo.getNodeType();
// Uses the Node Builder to set the nodeId and Key
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.CircuitPack;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts;
return nwBuilder.build();
}
- public TopologyShard createTopologyShard(String nodeId) {
- // int numOfDegrees;
- // int numOfSrgs;
- // int portDirectionEnum = DEFAULT_PORT_DIRECTION;
- //
- // InstanceIdentifier<Info> infoIID =
- // InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
- // java.util.Optional<Info> deviceInfoOpt =
- // this.deviceTransactionManager.getDataFromDevice(nodeId,
- // LogicalDatastoreType.OPERATIONAL, infoIID,
- // Timeouts.DEVICE_READ_TIMEOUT,
- // Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- // Info deviceInfo;
- // if (deviceInfoOpt.isPresent()) {
- // deviceInfo = deviceInfoOpt.get();
- // } else {
- // LOG.error("Unable to get device info for device {}!", nodeId);
- // return null;
- // }
- // List<Node> nodes = new ArrayList<>();
- // List<Mapping> portMapList = new ArrayList<>();
- //
- // // Check if node is ROADM
- // if (NodeTypes.Rdm.equals(deviceInfo.getNodeType())) {
- //
- // /*
- // * Adding Degree Node Get Degree Number -> x then get connection
- // * ports then find the port directions to decide whether TX/RX/TXRX
- // * Get value for max degree from info subtree, required for
- // * iteration if not present assume to be 20 (temporary)
- // */
- //
- // Integer maxDegree;
- // if (deviceInfo.getMaxDegrees() != null) {
- // maxDegree = deviceInfo.getMaxDegrees();
- // } else {
- // maxDegree = MAX_DEGREE;
- // }
- //
- // // Starting with degree Number = 1
- // Integer degreeCounter = 1;
- //
- // while (degreeCounter <= maxDegree) {
- // LOG.info("creating degree node {}/{}", degreeCounter, maxDegree);
- // NodeData nodeData = createDegreeNode(nodeId, degreeCounter,
- // portMapList);
- // if (nodeData != null) {
- // NodeBuilder tempNode = nodeData.getNodeBuilder();
- // portDirectionEnum = nodeData.getPortDirectionEnum();
- // nodes.add(tempNode.build());
- // degreeCounter++;
- // } else {
- // // null returned if Degree number= degreeCounter not present
- // // in the device
- // break;
- // }
- // }
- // numOfDegrees = degreeCounter - 1;
- //
- // Integer maxSrg;
- // if (deviceInfo.getMaxSrgs() != null) {
- // maxSrg = deviceInfo.getMaxSrgs();
- // } else {
- // maxSrg = MAX_SRG;
- // }
- //
- // // Starting with degree Number = 1
- // Integer srgCounter = 1;
- //
- // while (srgCounter <= maxSrg) {
- // LOG.info("creating SRG node {}/{}", srgCounter, maxSrg);
- // NodeBuilder tempNode = createSrgNode(nodeId, srgCounter,
- // portDirectionEnum);
- //
- // if (tempNode != null) {
- // nodes.add(tempNode.build());
- // srgCounter++;
- // } else {
- // // null returned if Degree number= degreeCounter not present
- // // in the device
- // break;
- // }
- // }
- // numOfSrgs = srgCounter - 1;
- //
- // LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees,
- // numOfSrgs);
- // List<Link> links = new ArrayList<>();
- // links.addAll(createExpressLinks(nodeId, numOfDegrees,
- // portDirectionEnum));
- // links.addAll(createAddDropLinks(nodeId, numOfDegrees, numOfSrgs,
- // portDirectionEnum));
- // LOG.info("created nodes/links: {}/{}", nodes.size(), links.size());
- // return new TopologyShard(nodes, links);
- // } else if (NodeTypes.Xpdr.equals(deviceInfo.getNodeType())) {
- // // Check if node is XPONDER
- // XponderPortNumber portNums = getNoOfPorts(nodeId);
- // List<Link> links = new ArrayList<>();
- // NodeBuilder tempNode = createXpdr(portNums.getNumOfClientPorts(),
- // portNums.getNumOfLinePorts(), nodeId);
- // nodes.add(tempNode.build());
- // return new TopologyShard(nodes, links);
- // }
- //
- return null;
- }
-
- public TopologyShard createTopologyShard2(String nodeId, Info deviceInfo) {
+ public TopologyShard createTopologyShard(String nodeId, Info deviceInfo) {
int numOfDegrees = 0;
int numOfSrgs = 0;
List<Node> nodes = new ArrayList<>();
maxDegree = MAX_DEGREE;
}
Map<String, String> interfaceList = getEthInterfaceList(nodeId);
- interfaceList.forEach((key,val) -> LOG.debug("clé = {}, val = {}", key, val));
- List<CpToDegree> localcpDegreelist = new ArrayList();
+ interfaceList.forEach((key, val) -> LOG.debug("clé = {}, val = {}", key, val));
+ List<CpToDegree> localcpDegreelist = new ArrayList<CpToDegree>();
// Starting with degree Number = 1
Integer degreeCounter = 1;
LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees, numOfSrgs);
List<Link> links = new ArrayList<>();
links.addAll(createLinks(nodeId, nodes));
- // links.addAll(createExpressLinks2(nodeId, numOfDegrees));
- // links.addAll(createAddDropLinks2(nodeId, numOfDegrees,
- // numOfSrgs));
LOG.info("created nodes/links: {}/{}", nodes.size(), links.size());
return new TopologyShard(nodes, links, localportMapList, localcpDegreelist);
}
/**
- * This private method gets the list of circuit packs on a xponder. For each
- * circuit pack on a Xponder, it does a get on circuit-pack subtree with
- * circuit-pack-name as key in order to get the list of ports. It then
- * iterates over the list of ports to get ports with port-qual as
- * xpdr-network/xpdr-client. The line and client ports are saved as:
+ * This method creates on xpdr node inside the openroadm-topology according
+ * to the device configuration.
*
- * <p>
- * 1. LINEn
+ * @param nodeId
+ * device id
+ * @param connectionMapList
+ * list of connection map from device operational datastore in
+ * order to associate a client port to the network port
*
- * <p>
- * 2. CLNTn
+ * @author Gilles Thouenon (gilles.thouenon@orange.com)
*/
- private XponderPortNumber getNoOfPorts(String deviceId) {
-
- XponderPortNumber xponderPortNumber = new XponderPortNumber();
- // Creating for Xponder Line and Client Ports
- InstanceIdentifier<OrgOpenroadmDevice> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class);
- Optional<OrgOpenroadmDevice> deviceObject = this.deviceTransactionManager.getDataFromDevice(deviceId,
- LogicalDatastoreType.OPERATIONAL, deviceIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-
- // Variable to keep track of number of client ports
- int client = 0;
- int line = 0;
- if (deviceObject.isPresent()) {
- for (CircuitPacks cp : deviceObject.get().getCircuitPacks()) {
- if (cp.getPorts() != null) {
- for (Ports port : cp.getPorts()) {
- if (port.getPortQual() != null) {
- if (port.getPortQual().getIntValue() == 4) {
- client++;
- } else if (port.getPortQual().getIntValue() == 3) {
- line++;
- }
- }
- }
- }
- }
- } else {
- return xponderPortNumber;
- }
- xponderPortNumber.setNumOfClientPorts(client);
- xponderPortNumber.setNumOfLinePorts(line);
- return xponderPortNumber;
- }
-
- private NodeBuilder createXpdr(Integer clientCounter, Integer lineCounter, String nodeId) {
- // Create a generic Topo Layer node
- NodeBuilder nodebldr = createTopoLayerNode(nodeId);
- // Create augmentation node to inorder to add degree
- Node1Builder node1bldr = new Node1Builder();
- TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder();
- TerminationPointBuilder tempTpBldr;
-
- // set node type to Xponder
- node1bldr.setNodeType(OpenroadmNodeType.XPONDER);
- List<TerminationPoint> tpList = new ArrayList<>();
- String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR1").toString();
- // Ad degree node specific augmentation
- nodebldr.setNodeId(new NodeId(nodeIdtopo));
- nodebldr.withKey(new NodeKey(new NodeId(nodeIdtopo)));
- nodebldr.addAugmentation(Node1.class, node1bldr.build());
- while (clientCounter != 0) {
- // Create CLNT-TX terminationCannot get available Capabilitiesc
- tempTpBldr = createTpBldr("XPDR1-CLIENT" + clientCounter);
- tp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT);
- XpdrClientAttributesBuilder xpdrClntBldr = new XpdrClientAttributesBuilder();
- xpdrClntBldr.setTailEquipmentId("XPDR1-NETWORK" + clientCounter);
- tp1Bldr.setXpdrClientAttributes(xpdrClntBldr.build());
- tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- tpList.add(tempTpBldr.build());
- clientCounter--;
- }
- while (lineCounter != 0) {
- // Create LINE-TX termination
- tempTpBldr = (createTpBldr("XPDR1-NETWORK" + lineCounter));
- tp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
- XpdrNetworkAttributesBuilder xpdrNwAttrBldr = new XpdrNetworkAttributesBuilder();
- xpdrNwAttrBldr.setTailEquipmentId("XPDR1-CLIENT" + lineCounter);
- tp1Bldr.setXpdrNetworkAttributes(xpdrNwAttrBldr.build());
- tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- tpList.add(tempTpBldr.build());
- lineCounter--;
- }
- LOG.info("printing tpList {}", tpList);
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder tpNode1 =
- new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1Builder();
- tpNode1.setTerminationPoint(tpList);
- nodebldr.addAugmentation(
- org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Node1.class,
- tpNode1.build());
- LOG.info("The nodebldr {}", nodebldr);
- return nodebldr;
- }
-
private NodeData createXpdrNode(String nodeId, List<ConnectionMap> connectionMapList) {
// Create org-openroadm augmentation node
Node1Builder node1bldr = new Node1Builder();
return new NodeData(nodebldr, mappingList, null);
}
-
+ /**
+ * This method creates a rdm degree node inside the openroadm-topology
+ * according to the device configuration.
+ *
+ * @param nodeId
+ * device id
+ * @param degreeCounter
+ * number of the current degree
+ * @param interfList
+ * list of CpToDegree to be updated for portmapping
+ *
+ * @author Gilles Thouenon (gilles.thouenon@orange.com)
+ */
private NodeData createDegreeNode(String nodeId, int degreeCounter, Map<String, String> interfList) {
// Create openroadm-topology-node augmentation in order to add degree
Node1Builder node1bldr = new Node1Builder();
// complement mapping with cp-to-degree
List<CpToDegree> cpList = new ArrayList<>();
if (degree.getCircuitPacks() != null) {
- for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks
- cp : degree.getCircuitPacks()) {
+ for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks cp : degree
+ .getCircuitPacks()) {
if (interfList.containsKey(cp.getCircuitPackName())) {
CpToDegree cpToDeg = new CpToDegreeBuilder()
.setCircuitPackName(cp.getCircuitPackName())
return new NodeData(nodebldr, mappingList, cpList);
}
+ /**
+ * This method creates a rdm srg node inside the openroadm-topology
+ * according to the device configuration.
+ *
+ * @param nodeId
+ * device id
+ * @param srgCounter
+ * number of the current srg
+ *
+ * @author Gilles Thouenon (gilles.thouenon@orange.com)
+ */
private NodeData createSrgNode(String nodeId, int srgCounter) {
// Create augmentation node in order to add SRG
Node1Builder node1bldr = new Node1Builder();
List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks> srgCpList = srg
.getCircuitPacks();
for (org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks
- circuitPacks : srgCpList) {
+ circuitPacks : srgCpList) {
String circuitPackName = circuitPacks.getCircuitPackName();
CircuitPack cp = this.deviceConfig.getDeviceCp(nodeId, circuitPackName);
if (cp.getPorts() == null) {
}
}
- // for (int i = 1; i <= maxPpPorts; i++) {
- // if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) {
- // if (i >= (maxPpPorts / 2)) {
- // break;
- // }
- // // ports are uni Directional on a degree, therefore 4
- // // termination points
- // // Create PP-TX termination
- // tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TX");
- // tp1Bldr = new TerminationPoint1Builder();
- // tp1Bldr.setTpType(OpenroadmTpType.SRGTXPP);
- // tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- // tpList.add(tempTpBldr.build());
- //
- // // Create PP-RX termination
- // tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-RX");
- // tp1Bldr = new TerminationPoint1Builder();
- // tp1Bldr.setTpType(OpenroadmTpType.SRGRXPP);
- // tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- // tpList.add(tempTpBldr.build());
- //
- // } else if (portDirectionEnum == 3) {
- // // Ports are bi directional therefore 2 termination points
- // // Create PP-TXRX termination
- // tempTpBldr = createTpBldr("SRG" + srgCounter + "-PP" + i + "-TXRX");
- // tp1Bldr = new TerminationPoint1Builder();
- // tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP);
- // tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- // tpList.add(tempTpBldr.build());
- // }
- // }
-
- // switch (portDirectionEnum) {
- // case 1: // ports are uni Directional on a degree
- // // Create CP-TX termination
- // tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TX");
- // tp1Bldr = new TerminationPoint1Builder();
- // tp1Bldr.setTpType(OpenroadmTpType.SRGTXCP);
- // tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- // tpList.add(tempTpBldr.build());
- // break;
- // case 2:
- // // Create CP-RX termination
- // tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-RX");
- // tp1Bldr = new TerminationPoint1Builder();
- // tp1Bldr.setTpType(OpenroadmTpType.SRGRXCP);
- // tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- // tpList.add(tempTpBldr.build());
- // break;
- // case 3:
- // // Ports are bi directional therefore 2 termination points
- // // Create CP-TXRX termination
- // tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TXRX");
- // tp1Bldr = new TerminationPoint1Builder();
- // tp1Bldr.setTpType(OpenroadmTpType.SRGTXRXCP);
- // tempTpBldr.addAugmentation(TerminationPoint1.class, tp1Bldr.build());
- // tpList.add(tempTpBldr.build());
- // break;
- // default:
- // LOG.error("No correponsding direction to the value: {}",
- // portDirectionEnum);
- // break;
- // }
-
// Create CP-TXRX termination
tempTpBldr = createTpBldr("SRG" + srgCounter + "-CP" + "-TXRX");
tp1Bldr = new TerminationPoint1Builder();
return nodebldr;
}
- // Return 0 for null/error values
- // Return 1 for tx
- // Return 2 for rx
- // Return 3 for bi-directional
-
- private int getPortDirection(String deviceId, String circuitPackName, String portName) {
- InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName))
- .child(Ports.class, new PortsKey(portName));
- LOG.info("Fetching Port Direction for port {} at circuit pack {}", portName, circuitPackName);
- Optional<Ports> portObject = this.deviceTransactionManager.getDataFromDevice(deviceId,
- LogicalDatastoreType.OPERATIONAL, portIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (portObject.isPresent()) {
- Ports port = portObject.get();
- if (port.getPortDirection() != null) {
- return port.getPortDirection().getIntValue();
- } else {
- LOG.warn("Port direction value missing for {} {}", circuitPackName, port.getPortName());
- return 0;
- }
- }
- return 0;
- }
-
// This method returns a generic termination point builder for a given tpid
private TerminationPointBuilder createTpBldr(String tpId) {
TerminationPointBuilder tpBldr = new TerminationPointBuilder();
return lnkBldr;
}
+ /**
+ * This method creates links between openroadm-topology nodes.
+ *
+ * @param nodeId
+ * device id
+ * @param nodes
+ * list of nodes
+ *
+ * @author Gilles Thouenon (gilles.thouenon@orange.com)
+ */
private List<Link> createLinks(String nodeId, List<Node> nodes) {
List<Link> links = new ArrayList<>();
List<Node> listDegeeNodes = nodes.stream().filter(node -> node.getNodeId().toString().contains("DEG")).collect(
return links;
}
- private List<Link> createExpressLinks(String nodeId, int numOfDegrees, int portDirectionEnum) {
- LOG.info("creating express links {} {} {}", nodeId, numOfDegrees, portDirectionEnum);
- List<Link> links = new ArrayList<>();
-
- String srcNode;
- String destNode;
-
- String srcTp;
- String destTp;
-
- // ports are uni-directional
- if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) {
- LOG.info("creating uni-directional express links");
- for (int i = 1; i <= numOfDegrees; i++) {
- for (int j = i + 1; j <= numOfDegrees; j++) {
-
- srcNode = nodeId + "-DEG" + i;
- destNode = nodeId + "-DEG" + j;
-
- // AtoZ direction
- srcTp = "DEG" + i + "-CTP-TX";
- destTp = "DEG" + j + "-CTP-RX";
-
- LinkBuilder expLinkBldr = createLink(srcNode, destNode, srcTp, destTp, true);
-
- Link1Builder lnk1Bldr = new Link1Builder();
- lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
- expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-
- links.add(expLinkBldr.build());
-
- // ZtoA direction
- srcTp = "DEG" + i + "-CTP-RX";
- destTp = "DEG" + j + "-CTP-TX";
-
- expLinkBldr = createLink(destNode, srcNode, destTp, srcTp, true);
- expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
-
- links.add(expLinkBldr.build());
-
- }
- }
- }
-
- // ports are bi-directional
- if (portDirectionEnum == 3) {
- LOG.info("creating bi-directional express links");
- for (int i = 1; i <= numOfDegrees; i++) {
- for (int j = i + 1; j <= numOfDegrees; j++) {
-
- srcNode = nodeId + "-DEG" + i;
- destNode = nodeId + "-DEG" + j;
-
- // AtoZ direction
- srcTp = "DEG" + i + "-CTP-TXRX";
- destTp = "DEG" + j + "-CTP-TXRX";
-
- Link1Builder lnk1Bldr = new Link1Builder();
- lnk1Bldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
-
- LinkBuilder expLinkBldr = createLink(srcNode, destNode, srcTp, destTp, true);
- expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(expLinkBldr.build());
-
- // ZtoA direction
- expLinkBldr = createLink(destNode, srcNode, destTp, srcTp, true);
- expLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(expLinkBldr.build());
- }
- }
- }
- return links;
- }
-
- private List<Link> createAddDropLinks(String nodeId, int numOfDegrees, int numOfSrgs, int portDirectionEnum) {
- LOG.info("creating add-drop links {} {} {} {}", nodeId, numOfDegrees, numOfSrgs, portDirectionEnum);
- List<Link> links = new ArrayList<>();
-
- String srcNode;
- String destNode;
-
- String srcTp;
- String destTp;
-
- // ports are uni-directional
- if ((portDirectionEnum == 1) || (portDirectionEnum == 2)) {
- LOG.info("creating uni-directional add-drop links");
- for (int i = 1; i <= numOfDegrees; i++) {
- for (int j = 1; j <= numOfSrgs; j++) {
-
- srcNode = nodeId + "-DEG" + i;
- destNode = nodeId + "-SRG" + j;
-
- // drop links
- srcTp = "DEG" + i + "-CTP-TX";
- destTp = "SRG" + j + "-CP-RX";
-
- LinkBuilder addDropLinkBldr = createLink(srcNode, destNode, srcTp, destTp, true);
- Link1Builder lnk1Bldr = new Link1Builder();
- lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK);
- addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(addDropLinkBldr.build());
-
- // add links direction
- srcTp = "DEG" + i + "-CTP-RX";
- destTp = "SRG" + j + "-CP-TX";
-
- addDropLinkBldr = createLink(destNode, srcNode, destTp, srcTp, true);
- lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK);
- addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(addDropLinkBldr.build());
-
- }
- }
- }
- // ports are bi-directional
- if (portDirectionEnum == 3) {
- LOG.info("creating bi-directional add-drop links");
- for (int i = 1; i <= numOfDegrees; i++) {
- for (int j = 1; j <= numOfSrgs; j++) {
-
- srcNode = nodeId + "-DEG" + i;
- destNode = nodeId + "-SRG" + j;
-
- // drop links
- srcTp = "DEG" + i + "-CTP-TXRX";
- destTp = "SRG" + j + "-CP-TXRX";
-
- LinkBuilder addDropLinkBldr = createLink(srcNode, destNode, srcTp, destTp, true);
- Link1Builder lnk1Bldr = new Link1Builder();
- lnk1Bldr.setLinkType(OpenroadmLinkType.DROPLINK);
- addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(addDropLinkBldr.build());
-
- // add link
- addDropLinkBldr = createLink(destNode, srcNode, destTp, srcTp, true);
- lnk1Bldr.setLinkType(OpenroadmLinkType.ADDLINK);
- addDropLinkBldr.addAugmentation(Link1.class, lnk1Bldr.build());
- links.add(addDropLinkBldr.build());
- }
- }
- }
- return links;
- }
-
// This method returns the linkBuilder object for given source and
// destination.
public boolean deleteLink(String srcNode, String dstNode, Integer srcDegId,
for (int i = 1; i < 97; i++) {
org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
- .AvailableWavelengthsBuilder avalBldr =
- new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
- .AvailableWavelengthsBuilder();
+ .AvailableWavelengthsBuilder avalBldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.srg
+ .rev170929.srg.node.attributes.AvailableWavelengthsBuilder();
avalBldr.setIndex((long) i);
- avalBldr.withKey(
- new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
- .AvailableWavelengthsKey((long) i));
+ avalBldr.withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev170929.srg.node.attributes
+ .AvailableWavelengthsKey((long) i));
waveList.add(avalBldr.build());
}
return waveList;
}
- private class XponderPortNumber {
- private int numOfLinePorts;
- private int numOfClientPorts;
-
- XponderPortNumber() {
- numOfClientPorts = 0;
- numOfLinePorts = 0;
- }
-
- public void setNumOfLinePorts(int numOfLinePorts) {
- this.numOfLinePorts = numOfLinePorts;
- }
-
- public void setNumOfClientPorts(int numOfClientPorts) {
- this.numOfClientPorts = numOfClientPorts;
- }
-
- public int getNumOfClientPorts() {
- return numOfClientPorts;
- }
-
- public int getNumOfLinePorts() {
- return numOfLinePorts;
- }
- }
-
// method copied/pasted from PortMappingImpl.java
private Map<String, String> getEthInterfaceList(String nodeId) {
Map<String, String> cpToInterfaceMap = new HashMap<>();
InstanceIdentifier<Protocols> protocolsIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(Protocols.class);
+ .child(Protocols.class);
Optional<Protocols> protocolObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, protocolsIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
+ LogicalDatastoreType.OPERATIONAL, protocolsIID, Timeouts.DEVICE_READ_TIMEOUT,
+ Timeouts.DEVICE_READ_TIMEOUT_UNIT);
if (!protocolObject.isPresent() || (protocolObject.get().augmentation(Protocols1.class) == null)) {
LOG.warn("LLDP subtree is missing : isolated openroadm device");
return cpToInterfaceMap;
for (PortConfig portConfig : portConfigList) {
if (portConfig.getAdminStatus().equals(PortConfig.AdminStatus.Txandrx)) {
InstanceIdentifier<Interface> interfaceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(Interface.class, new InterfaceKey(portConfig.getIfName()));
+ .child(Interface.class, new InterfaceKey(portConfig.getIfName()));
Optional<Interface> interfaceObject = this.deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, interfaceIID, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
+ LogicalDatastoreType.OPERATIONAL, interfaceIID, Timeouts.DEVICE_READ_TIMEOUT,
+ Timeouts.DEVICE_READ_TIMEOUT_UNIT);
if (interfaceObject.isPresent()
- && (interfaceObject.get().getSupportingCircuitPackName() != null)) {
+ && (interfaceObject.get().getSupportingCircuitPackName() != null)) {
String supportingCircuitPackName = interfaceObject.get().getSupportingCircuitPackName();
cpToInterfaceMap.put(supportingCircuitPackName, portConfig.getIfName());
InstanceIdentifier<CircuitPacks> circuitPacksIID = InstanceIdentifier
- .create(OrgOpenroadmDevice.class).child(CircuitPacks.class,
- new CircuitPacksKey(supportingCircuitPackName));
+ .create(OrgOpenroadmDevice.class).child(CircuitPacks.class,
+ new CircuitPacksKey(supportingCircuitPackName));
Optional<CircuitPacks> circuitPackObject = this.deviceTransactionManager.getDataFromDevice(
- nodeId, LogicalDatastoreType.OPERATIONAL, circuitPacksIID, Timeouts
- .DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
-// if (circuitPackObject.isPresent()
-// && (circuitPackObject.get().getParentCircuitPack() != null)) {
-// cpToInterfaceMap.put(circuitPackObject.get().getParentCircuitPack()
-// .getCircuitPackName(), portConfig.getIfName());
-// }
+ nodeId, LogicalDatastoreType.OPERATIONAL, circuitPacksIID, Timeouts.DEVICE_READ_TIMEOUT,
+ Timeouts.DEVICE_READ_TIMEOUT_UNIT);
+ // if (circuitPackObject.isPresent()
+ // && (circuitPackObject.get().getParentCircuitPack() !=
+ // null)) {
+ // cpToInterfaceMap.put(circuitPackObject.get().getParentCircuitPack()
+ // .getCircuitPackName(), portConfig.getIfName());
+ // }
}
} else {
LOG.warn("PortConfig Admin Status is not equal Txandrx");
return cpToInterfaceMap;
}
-
}
<argument ref="portMapping" />
</bean>
- <bean id="networkModelService" class="org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl2">
+ <bean id="networkModelService" class="org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl">
<argument ref="dataBroker" />
<argument ref="deviceConfig" />
<argument ref="linkDiscoveryImpl" />