import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.NetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.CpToDegreeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.CpToDegreeKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.McCapabilitiesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.McCapabilitiesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.NodeInfo.OpenroadmVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.SwitchingPoolLcp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.SwitchingPoolLcpBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.SwitchingPoolLcpKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.switching.pool.lcp.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.switching.pool.lcp.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev201012.network.nodes.switching.pool.lcp.NonBlockingListKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.cp.to.degree.CpToDegree;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.cp.to.degree.CpToDegreeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.cp.to.degree.CpToDegreeKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mc.capabilities.McCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.mc.capabilities.McCapabilitiesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.switching.pool.lcp.SwitchingPoolLcp;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.switching.pool.lcp.SwitchingPoolLcpBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.switching.pool.lcp.SwitchingPoolLcpKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.switching.pool.lcp.switching.pool.lcp.NonBlockingList;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210315.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.Direction;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PortQual;
}
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();
List<Ports> portList = new ArrayList<>(cp.nonnullPorts().values());
portList.sort(Comparator.comparing(Ports::getPortName));
for (Ports port : portList) {
- if (port.getPortQual() == null) {
- LOG.warn("{} : port {} on {} - PortQual was not found",
- nodeId, port.getPortName(), circuitPackName);
- continue;
- }
-
- switch (port.getPortQual()) {
-
- case XpdrClient:
- case SwitchClient:
- String lcp0 = createXpdrLogicalConnectionPort(1, client, StringConstants.CLIENT_TOKEN);
- lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp0);
- mappingMap.put(lcp0,
- createXpdrMappingObject(nodeId, port, circuitPackName, lcp0, null, null, null, null));
- client++;
- //continue;
- break;
-
- case XpdrNetwork:
- case SwitchNetwork:
- switch (port.getPortDirection()) {
-
- case Bidirectional:
- String lcp =
- createXpdrLogicalConnectionPort(1, line, StringConstants.NETWORK_TOKEN);
- lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp);
- mappingMap.put(lcp,
- createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, null,
- null)
- );
- line++;
- break;
-
- case Rx:
- case Tx:
- StringBuilder circuitPackName2 = new StringBuilder();
- Ports port2 = getPort2(port, nodeId, circuitPackName, circuitPackName2,
- circuitPackList, lcpMap);
-
- if (port2 == null) {
- //key already present or an error occured and was logged
- continue;
- }
-
- putXpdrLcpsInMaps(line, nodeId, 1, null,
- circuitPackName, circuitPackName2.toString(), port, port2,
- lcpMap, mappingMap);
- line += 2;
- break;
-
- default:
- LOG.error("{} : port {} on {} - unsupported Direction {}",
- nodeId, port.getPortName(), circuitPackName, port.getPortDirection());
- }
- break;
-
- default:
- LOG.error("{} : port {} on {} - unsupported PortQual {}",
- nodeId, port.getPortName(), circuitPackName, port.getPortQual());
- }
+ int[] counters = fillXpdrLcpsMaps(line, client, nodeId,
+ 1, null, circuitPackName, port,
+ circuitPackList, lcpMap, mappingMap);
+ line = counters[0];
+ client = counters[1];
}
}
} else {
int client = 1;
Integer xponderNb = xponder.getXpdrNumber().toJava();
XpdrNodeTypes xponderType = xponder.getXpdrType();
- for (XpdrPort xpdrPort : xponder.nonnullXpdrPort().values()) {
+ for (XpdrPort xpdrPort : xponder.nonnullXpdrPort().values().stream()
+ .sorted((xp1, xp2) -> xp1.getIndex().compareTo(xp2.getIndex())).collect(Collectors.toList())) {
String circuitPackName = xpdrPort.getCircuitPackName();
String portName = xpdrPort.getPortName().toString();
// If there xponder-subtree has missing circuit-packs or ports,
.findFirst().get().nonnullPorts().values().stream()
.filter(p -> p.getPortName().equals(portName))
.findFirst().get();
- if (port.getPortQual() == null) {
- LOG.warn("{} : port {} on {} - PortQual was not found",
- nodeId, port.getPortName(), circuitPackName);
- continue;
- }
-
- switch (port.getPortQual()) {
-
- case XpdrClient:
- case SwitchClient:
- String lcp0 =
- createXpdrLogicalConnectionPort(xponderNb, client, StringConstants.CLIENT_TOKEN);
- lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp0);
- mappingMap.put(lcp0,
- createXpdrMappingObject(nodeId, port, circuitPackName, lcp0, null, null, null, null));
- client++;
- //continue;
- break;
-
- case XpdrNetwork:
- case SwitchNetwork:
- switch (port.getPortDirection()) {
-
- case Bidirectional:
- String lcp =
- createXpdrLogicalConnectionPort(xponderNb, line, StringConstants.NETWORK_TOKEN);
- lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp);
- mappingMap.put(lcp,
- createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, null,
- xponderType));
- line++;
- break;
-
- case Rx:
- case Tx:
- StringBuilder circuitPackName2 = new StringBuilder();
- Ports port2 = getPort2(port, nodeId, circuitPackName, circuitPackName2,
- circuitPackList, lcpMap);
-
- if (port2 == null) {
- //key already present or an error occured and was logged
- continue;
- }
-
- putXpdrLcpsInMaps(line, nodeId, xponderNb, xponderType,
- circuitPackName, circuitPackName2.toString(), port, port2,
- lcpMap, mappingMap);
- line += 2;
- break;
-
- default:
- LOG.error("{} : port {} on {} - unsupported Direction {}",
- nodeId, port.getPortName(), circuitPackName, port.getPortDirection());
- }
- break;
-
- default:
- LOG.error("{} : port {} on {} - unsupported PortQual {}",
- nodeId, port.getPortName(), circuitPackName, port.getPortQual());
- }
+ int[] counters = fillXpdrLcpsMaps(line, client, nodeId,
+ xponderNb, xponderType, circuitPackName, port,
+ circuitPackList, lcpMap, mappingMap);
+ line = counters[0];
+ client = counters[1];
}
}
}
.setSupportingCircuitPackName(circuitPackName)
.setSupportingPort(port.getPortName())
.setPortDirection(port.getPortDirection().getName());
+ if (port.getAdministrativeState() != null) {
+ mpBldr.setPortAdminState(port.getAdministrativeState().name());
+ }
+ if (port.getOperationalState() != null) {
+ mpBldr.setPortOperState(port.getOperationalState().name());
+ }
if ((port.getInterfaces() == null)
|| (!logicalConnectionPoint.contains(StringConstants.TTP_TOKEN)
&& !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,
}
mpBldr.setSupportedInterfaceCapability(supportedIntf);
}
+ if (port.getAdministrativeState() != null) {
+ mpBldr.setPortAdminState(port.getAdministrativeState().name());
+ }
+ if (port.getOperationalState() != null) {
+ mpBldr.setPortOperState(port.getOperationalState().name());
+ }
return mpBldr.build();
}
return;
}
- private boolean createMcCapabilitiesList(String nodeId, Info deviceInfo,
- Map<McCapabilitiesKey, McCapabilities> mcCapabilitiesMap) {
+ private int[] fillXpdrLcpsMaps(int line, int client, String nodeId,
+ Integer xponderNb, XpdrNodeTypes xponderType,
+ String circuitPackName, Ports port,
+ List<CircuitPacks> circuitPackList, Map<String, String> lcpMap, Map<String, Mapping> mappingMap) {
+ if (port.getPortQual() == null) {
+ LOG.warn("{} : port {} on {} - PortQual was not found",
+ nodeId, port.getPortName(), circuitPackName);
+ return new int[] {line, client};
+ }
+
+ switch (port.getPortQual()) {
+
+ case XpdrClient:
+ case SwitchClient:
+ String lcp0 = createXpdrLogicalConnectionPort(xponderNb, client, StringConstants.CLIENT_TOKEN);
+ lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp0);
+ mappingMap.put(lcp0,
+ createXpdrMappingObject(nodeId, port, circuitPackName, lcp0, null, null, null, null));
+ client++;
+ break;
+ case XpdrNetwork:
+ case SwitchNetwork:
+ line = fillXpdrNetworkLcpsMaps(line, nodeId,
+ xponderNb, xponderType,
+ circuitPackName, port,
+ circuitPackList, lcpMap, mappingMap);
+ break;
+
+ default:
+ LOG.error("{} : port {} on {} - unsupported PortQual {}",
+ nodeId, port.getPortName(), circuitPackName, port.getPortQual());
+ }
+ return new int[] {line, client};
+ }
+
+ private int fillXpdrNetworkLcpsMaps(int line, String nodeId,
+ Integer xponderNb, XpdrNodeTypes xponderType,
+ String circuitPackName, Ports port,
+ List<CircuitPacks> circuitPackList, Map<String, String> lcpMap, Map<String, Mapping> mappingMap) {
+
+ switch (port.getPortDirection()) {
+
+ case Bidirectional:
+ String lcp = createXpdrLogicalConnectionPort(xponderNb, line, StringConstants.NETWORK_TOKEN);
+ lcpMap.put(circuitPackName + '+' + port.getPortName(), lcp);
+ mappingMap.put(lcp,
+ createXpdrMappingObject(nodeId, port, circuitPackName, lcp, null, null, null, xponderType));
+ line++;
+ break;
+
+ case Rx:
+ case Tx:
+ StringBuilder circuitPackName2 = new StringBuilder();
+ Ports port2 = getPort2(port, nodeId, circuitPackName, circuitPackName2,
+ circuitPackList, lcpMap);
+
+ if (port2 == null) {
+ //key already present or an error occured and was logged
+ return line;
+ }
+
+ putXpdrLcpsInMaps(line, nodeId, xponderNb, xponderType,
+ circuitPackName, circuitPackName2.toString(), port, port2,
+ lcpMap, mappingMap);
+ line += 2;
+ break;
+
+ default:
+ LOG.error("{} : port {} on {} - unsupported Direction {}",
+ nodeId, port.getPortName(), circuitPackName, port.getPortDirection());
+ }
+
+ return line;
+ }
+
+ private boolean createMcCapabilitiesList(String nodeId, Info deviceInfo,
+ Map<McCapabilitiesKey, McCapabilities> mcCapabilitiesMap) {
Map<Integer, Degree> degrees = getDegreesMap(nodeId, deviceInfo);
List<SharedRiskGroup> srgs = getSrgs(nodeId, deviceInfo);
mcCapabilitiesMap.putAll(getMcCapabilities(degrees, srgs, nodeId));
}
NodeInfoBuilder nodeInfoBldr = new NodeInfoBuilder()
- .setOpenroadmVersion(OpenroadmVersion._221)
+ .setOpenroadmVersion(OpenroadmNodeVersion._221)
.setNodeType(NodeTypes.forValue(deviceInfo.getNodeType().getIntValue()));
if (deviceInfo.getClli() != null && !deviceInfo.getClli().isEmpty()) {
nodeInfoBldr.setNodeClli(deviceInfo.getClli());