/**
* 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
+ * 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 :
*
boolean createMappingData(String nodeId, String nodeVersion);
/**
- * This method removes mapping data from the datastore after disconnecting
- * ODL from a Netconf device.
+ * This method removes mapping data from the datastore after disconnecting ODL
+ * from a Netconf device.
*
* @param nodeId
* node ID
void deleteMappingData(String nodeId);
/**
- * This method for a given node's termination point returns the Mapping
- * object based on portmapping.yang model stored in the MD-SAL data store
- * which is created when the node is connected for the first time. The
- * mapping object basically contains the following attributes of interest:
+ * This method for a given node's termination point returns the Mapping object
+ * based on portmapping.yang model stored in the MD-SAL data store which is
+ * created when the node is connected for the first time. The mapping object
+ * basically contains the following attributes of interest:
*
* <p>
* 1. Supporting circuit pack
* 2. Supporting port
*
* <p>
- * 3. Supporting OMS interface (if port on ROADM) 4. Supporting OTS
- * interface (if port on ROADM)
+ * 3. Supporting OTS/OMS interface (if port on ROADM)
*
* @param nodeId
* Unique Identifier for the node of interest.
Mapping getMapping(String nodeId, String logicalConnPoint);
/**
- * This method for a given node's media channel-capabilities returns the
- * object based on portmapping.yang model stored in the MD-SAL data store
- * which is created when the node is connected for the first time. The
- * mapping object basically contains the following attributes of interest:
+ * This method allows retrieving a Mapping object from the mapping list stored in
+ * the MD-SAL data store. The main interest is to retrieve the
+ * logical-connection-point associated with a given port on a supporting
+ * circuit-pack
+ *
+ * @param nodeId
+ * Unique Identifier for the node of interest.
+ * @param circuitPackName
+ * Name of the supporting circuit-pack
+ * @param circuitPackName
+ * Name of the supporting port
+ *
+ * @return Result Mapping object if success otherwise null.
+ */
+ Mapping getMapping(String nodeId, String circuitPackName, String portName);
+
+ /**
+ * This method, for a given node media channel-capabilities, returns the object
+ * based on portmapping.yang model stored in the MD-SAL data store which is
+ * created when the node is connected for the first time. The mapping object
+ * basically contains the following attributes of interest:
*
* <p>
* 1. slot width granularity
* 2. center frequency granularity
*
* <p>
- * 3. Supporting OMS interface (if port on ROADM) 4. Supporting OTS
- * interface (if port on ROADM)
+ * 3. Supporting OMS interface (if port on ROADM)
+ *
+ * <p>
+ * 4. Supporting OTS interface (if port on ROADM)
*
* @param nodeId
* Unique Identifier for the node of interest.
*/
McCapabilities getMcCapbilities(String nodeId, String mcLcp);
+ /**
+ * This method for a given node, allows to update a specific mapping based on
+ * portmapping.yang model already stored in the MD-SAL data store, following
+ * some changes on the device port (creation of interface supported on this
+ * port, change of port admin state, etc).
+ *
+ * @param nodeId
+ * Unique Identifier for the node of interest.
+ * @param mapping
+ * Old mapping to be updated.
+ *
+ * @return Result true/false based on status of operation.
+ */
boolean updateMapping(String nodeId, Mapping mapping);
/**
- * Returns all Mapping informations for a given ordm device.
- * This method returns all Mapping informations already stored in the MD-SAL
- * data store for a given openroadm device. Beyound the list of mappings, it
- * gives access to general node information as its version or its node type,
- * etc.
+ * Returns all Mapping informations for a given ordm device. This method returns
+ * all Mapping informations already stored in the MD-SAL data store for a given
+ * openroadm device. Beyound the list of mappings, it gives access to general
+ * node information as its version or its node type, etc.
*
* @param nodeId
* Unique Identifier for the node of interest.
import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_2_2_1;
import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_7_1_0;
+import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.Nodes;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.NodesKey;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.MappingBuilder;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.MappingKey;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.McCapabilities;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.McCapabilitiesKey;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210310.network.nodes.NodeInfo.OpenroadmVersion;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
}
}
-
-
@Override
public Mapping getMapping(String nodeId, String logicalConnPoint) {
return null;
}
+ @Override
+ public Mapping getMapping(String nodeId, String circuitPackName, String portName) {
+ KeyedInstanceIdentifier<Nodes, NodesKey> portMappingIID = InstanceIdentifier.create(Network.class)
+ .child(Nodes.class, new NodesKey(nodeId));
+ try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
+ Optional<Nodes> portMapppingOpt = readTx.read(LogicalDatastoreType.CONFIGURATION, portMappingIID).get();
+ if (!portMapppingOpt.isPresent()) {
+ LOG.warn("Could not get portMapping for node {}", nodeId);
+ return null;
+ }
+ Map<MappingKey, Mapping> mappings = portMapppingOpt.get().getMapping();
+ for (Mapping mapping : mappings.values()) {
+ if (circuitPackName.equals(mapping.getSupportingCircuitPackName())
+ && portName.equals(mapping.getSupportingPort())) {
+ return mapping;
+ }
+ }
+ } catch (InterruptedException | ExecutionException ex) {
+ LOG.error("Unable to get mapping list for nodeId {}", nodeId, ex);
+ }
+ return null;
+ }
@Override
public McCapabilities getMcCapbilities(String nodeId, String mcLcp) {
case 1:
return portMappingVersion121.updateMapping(nodeId, oldMapping);
case 2:
- MappingBuilder oldMapping2Bldr221 = new MappingBuilder()
- .setLogicalConnectionPoint(oldMapping.getLogicalConnectionPoint())
- .setPortDirection(oldMapping.getPortDirection());
- if (oldMapping.getConnectionMapLcp() != null) {
- oldMapping2Bldr221.setConnectionMapLcp(oldMapping.getConnectionMapLcp());
- }
- if (oldMapping.getPartnerLcp() != null) {
- oldMapping2Bldr221.setPartnerLcp(oldMapping.getPartnerLcp());
- }
- if (oldMapping.getPortQual() != null) {
- oldMapping2Bldr221.setPortQual(oldMapping.getPortQual());
- }
- if (oldMapping.getSupportingCircuitPackName() != null) {
- oldMapping2Bldr221.setSupportingCircuitPackName(oldMapping.getSupportingCircuitPackName());
- }
- if (oldMapping.getSupportingOms() != null) {
- oldMapping2Bldr221.setSupportingOms(oldMapping.getSupportingOms());
- }
- if (oldMapping.getSupportingOts() != null) {
- oldMapping2Bldr221.setSupportingOts(oldMapping.getSupportingOts());
- }
- if (oldMapping.getSupportingPort() != null) {
- oldMapping2Bldr221.setSupportingPort(oldMapping.getSupportingPort());
- }
- return portMappingVersion22.updateMapping(nodeId, oldMapping2Bldr221.build());
+ return portMappingVersion22.updateMapping(nodeId, oldMapping);
case 3:
- MappingBuilder oldMapping2Bldr710 = new MappingBuilder()
- .setLogicalConnectionPoint(oldMapping.getLogicalConnectionPoint())
- .setPortDirection(oldMapping.getPortDirection());
- if (oldMapping.getConnectionMapLcp() != null) {
- oldMapping2Bldr710.setConnectionMapLcp(oldMapping.getConnectionMapLcp());
- }
- if (oldMapping.getPartnerLcp() != null) {
- oldMapping2Bldr710.setPartnerLcp(oldMapping.getPartnerLcp());
- }
- if (oldMapping.getPortQual() != null) {
- oldMapping2Bldr710.setPortQual(oldMapping.getPortQual());
- }
- if (oldMapping.getSupportingCircuitPackName() != null) {
- oldMapping2Bldr710.setSupportingCircuitPackName(oldMapping.getSupportingCircuitPackName());
- }
- if (oldMapping.getSupportingOms() != null) {
- oldMapping2Bldr710.setSupportingOms(oldMapping.getSupportingOms());
- }
- if (oldMapping.getSupportingOts() != null) {
- oldMapping2Bldr710.setSupportingOts(oldMapping.getSupportingOts());
- }
- if (oldMapping.getSupportingPort() != null) {
- oldMapping2Bldr710.setSupportingPort(oldMapping.getSupportingPort());
- }
- return portMappingVersion710.updateMapping(nodeId, oldMapping2Bldr710.build());
+ return portMappingVersion710.updateMapping(nodeId, oldMapping);
default:
return false;
}
}
return null;
}
-
-
}
}
public boolean updateMapping(String nodeId, Mapping oldMapping) {
- InstanceIdentifier<Ports> portIId = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+ InstanceIdentifier<Ports> portId = InstanceIdentifier.create(OrgOpenroadmDevice.class)
.child(CircuitPacks.class, new CircuitPacksKey(oldMapping.getSupportingCircuitPackName()))
.child(Ports.class, new PortsKey(oldMapping.getSupportingPort()));
if ((oldMapping == null) || (nodeId == null)) {
return false;
}
try {
- Optional<Ports> portObject = deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, portIId, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (!portObject.isPresent()) {
- return false;
- }
- Ports port = portObject.get();
- Mapping newMapping = createMappingObject(nodeId, port, oldMapping.getSupportingCircuitPackName(),
- oldMapping.getLogicalConnectionPoint());
+ Ports port = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL,
+ portId, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get();
+ Mapping newMapping = updateMappingObject(nodeId, port, oldMapping);
LOG.debug("{} : Updating old mapping Data {} for {} by new mapping data {}",
nodeId, oldMapping, oldMapping.getLogicalConnectionPoint(), newMapping);
final WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
if (!logicalConnectionPoint.contains(StringConstants.TTP_TOKEN) || (port.getInterfaces() == null)) {
return mpBldr.build();
}
+ mpBldr = updateMappingInterfaces(nodeId, mpBldr, port);
+ return mpBldr.build();
+ }
+
+ private Mapping updateMappingObject(String nodeId, Ports port, Mapping oldmapping) {
+ MappingBuilder mpBldr = new MappingBuilder(oldmapping);
+ updateMappingStates(mpBldr, port, oldmapping);
+ if ((port.getInterfaces() == null)
+ || (!oldmapping.getLogicalConnectionPoint().contains(StringConstants.TTP_TOKEN)
+ && !oldmapping.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN))) {
+ return mpBldr.build();
+ }
+ // Get interfaces provisioned on the port
+ mpBldr = updateMappingInterfaces(nodeId, mpBldr, port);
+ return mpBldr.build();
+ }
+
+ private MappingBuilder updateMappingStates(MappingBuilder mpBldr, Ports port, Mapping oldmapping) {
+ if (port.getAdministrativeState() != null
+ && !port.getAdministrativeState().getName().equals(oldmapping.getPortAdminState())) {
+ mpBldr.setPortAdminState(port.getAdministrativeState().name());
+ }
+ if (port.getOperationalState() != null
+ && !port.getOperationalState().getName().equals(oldmapping.getPortOperState())) {
+ mpBldr.setPortOperState(port.getOperationalState().name());
+ }
+ return mpBldr;
+ }
- // Get OMS and OTS interface provisioned on the TTP's
+ private MappingBuilder updateMappingInterfaces(String nodeId, MappingBuilder mpBldr, Ports port) {
for (Interfaces interfaces : port.getInterfaces()) {
try {
Optional<Interface> openRoadmInterface = this.openRoadmInterfaces.getInterface(nodeId,
nodeId, interfaces.getInterfaceName(), ex);
}
}
- return mpBldr.build();
+ return mpBldr;
}
private Mapping createXpdrMappingObject(String nodeId, Ports port, String circuitPackName,
}
public boolean updateMapping(String nodeId, Mapping oldMapping) {
- InstanceIdentifier<Ports> portIId = InstanceIdentifier.create(OrgOpenroadmDevice.class)
- .child(CircuitPacks.class, new CircuitPacksKey(oldMapping.getSupportingCircuitPackName()))
- .child(Ports.class, new PortsKey(oldMapping.getSupportingPort()));
- if ((oldMapping == null) || (nodeId == null)) {
+ if (nodeId == null || oldMapping == null) {
LOG.error("Impossible to update mapping");
return false;
}
+ InstanceIdentifier<Ports> portId = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+ .child(CircuitPacks.class, new CircuitPacksKey(oldMapping.getSupportingCircuitPackName()))
+ .child(Ports.class, new PortsKey(oldMapping.getSupportingPort()));
try {
- Optional<Ports> portObject = deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, portIId, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (!portObject.isPresent()) {
- return false;
- }
- Ports port = portObject.get();
- Mapping newMapping = createMappingObject(nodeId, port, oldMapping.getSupportingCircuitPackName(),
- oldMapping.getLogicalConnectionPoint());
+ Ports port = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL,
+ portId, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get();
+ Mapping newMapping = updateMappingObject(nodeId, port, oldMapping);
LOG.debug("{} : Updating old mapping Data {} for {} by new mapping data {}",
nodeId, oldMapping, oldMapping.getLogicalConnectionPoint(), newMapping);
final WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
&& !logicalConnectionPoint.contains(StringConstants.NETWORK_TOKEN))) {
return mpBldr.build();
}
- // Get OMS and OTS interface provisioned on the TTP's
+ mpBldr = updateMappingInterfaces(nodeId, mpBldr, port);
+ return mpBldr.build();
+ }
+
+ private Mapping updateMappingObject(String nodeId, Ports port, Mapping oldmapping) {
+ MappingBuilder mpBldr = new MappingBuilder(oldmapping);
+ updateMappingStates(mpBldr, port, oldmapping);
+ if ((port.getInterfaces() == null)
+ || (!oldmapping.getLogicalConnectionPoint().contains(StringConstants.TTP_TOKEN)
+ && !oldmapping.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN))) {
+ return mpBldr.build();
+ }
+ // Get interfaces provisioned on the port
+ mpBldr = updateMappingInterfaces(nodeId, mpBldr, port);
+ return mpBldr.build();
+ }
+
+ private MappingBuilder updateMappingStates(MappingBuilder mpBldr, Ports port, Mapping oldmapping) {
+ if (port.getAdministrativeState() != null
+ && !port.getAdministrativeState().getName().equals(oldmapping.getPortAdminState())) {
+ mpBldr.setPortAdminState(port.getAdministrativeState().name());
+ }
+ if (port.getOperationalState() != null
+ && !port.getOperationalState().getName().equals(oldmapping.getPortOperState())) {
+ mpBldr.setPortOperState(port.getOperationalState().name());
+ }
+ return mpBldr;
+ }
+
+ private MappingBuilder updateMappingInterfaces(String nodeId, MappingBuilder mpBldr, Ports port) {
for (Interfaces interfaces : port.getInterfaces()) {
try {
Optional<Interface> openRoadmInterface = this.openRoadmInterfaces.getInterface(nodeId,
nodeId, interfaces.getInterfaceName(), ex);
}
}
- return mpBldr.build();
+ return mpBldr;
}
private Mapping createXpdrMappingObject(String nodeId, Ports port, String circuitPackName,
}
public boolean updateMapping(String nodeId, Mapping oldMapping) {
- InstanceIdentifier<Ports> portIId = InstanceIdentifier.create(OrgOpenroadmDevice.class)
+ InstanceIdentifier<Ports> portId = InstanceIdentifier.create(OrgOpenroadmDevice.class)
.child(CircuitPacks.class, new CircuitPacksKey(oldMapping.getSupportingCircuitPackName()))
.child(Ports.class, new PortsKey(oldMapping.getSupportingPort()));
if ((oldMapping == null) || (nodeId == null)) {
return false;
}
try {
- Optional<Ports> portObject = deviceTransactionManager.getDataFromDevice(nodeId,
- LogicalDatastoreType.OPERATIONAL, portIId, Timeouts.DEVICE_READ_TIMEOUT,
- Timeouts.DEVICE_READ_TIMEOUT_UNIT);
- if (!portObject.isPresent()) {
- return false;
- }
- Ports port = portObject.get();
- Mapping newMapping = createMappingObject(nodeId, port, oldMapping.getSupportingCircuitPackName(),
- oldMapping.getLogicalConnectionPoint());
+ Ports port = deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL,
+ portId, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT).get();
+ Mapping newMapping = updateMappingObject(nodeId, port, oldMapping);
LOG.debug("{} : Updating old mapping Data {} for {} by new mapping data {}",
nodeId, oldMapping, oldMapping.getLogicalConnectionPoint(), newMapping);
final WriteTransaction writeTransaction = this.dataBroker.newWriteOnlyTransaction();
&& !logicalConnectionPoint.contains(StringConstants.NETWORK_TOKEN))) {
return mpBldr.build();
}
- // Get OMS and OTS interface provisioned on the TTP's
+ mpBldr = updateMappingInterfaces(nodeId, mpBldr, port);
+ return mpBldr.build();
+ }
+
+ private Mapping updateMappingObject(String nodeId, Ports port, Mapping oldmapping) {
+ MappingBuilder mpBldr = new MappingBuilder(oldmapping);
+ updateMappingStates(mpBldr, port, oldmapping);
+ if ((port.getInterfaces() == null)
+ || (!oldmapping.getLogicalConnectionPoint().contains(StringConstants.TTP_TOKEN)
+ && !oldmapping.getLogicalConnectionPoint().contains(StringConstants.NETWORK_TOKEN))) {
+ return mpBldr.build();
+ }
+ // Get interfaces provisioned on the port
+ mpBldr = updateMappingInterfaces(nodeId, mpBldr, port);
+ return mpBldr.build();
+ }
+
+ private MappingBuilder updateMappingStates(MappingBuilder mpBldr, Ports port, Mapping oldmapping) {
+ if (port.getAdministrativeState() != null
+ && !port.getAdministrativeState().getName().equals(oldmapping.getPortAdminState())) {
+ mpBldr.setPortAdminState(port.getAdministrativeState().name());
+ }
+ if (port.getOperationalState() != null
+ && !port.getOperationalState().getName().equals(oldmapping.getPortOperState())) {
+ mpBldr.setPortOperState(port.getOperationalState().name());
+ }
+ return mpBldr;
+ }
+
+ private MappingBuilder updateMappingInterfaces(String nodeId, MappingBuilder mpBldr, Ports port) {
for (Interfaces interfaces : port.getInterfaces()) {
try {
Optional<Interface> openRoadmInterface = this.openRoadmInterfaces.getInterface(nodeId,
nodeId, interfaces.getInterfaceName(), ex);
}
}
- return mpBldr.build();
+ return mpBldr;
}
private Mapping createXpdrMappingObject(String nodeId, Ports port, String circuitPackName,