From 4f612167d648ea58503f97ec616a8a1fcf593d48 Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Thu, 17 Jun 2021 15:31:12 +0200 Subject: [PATCH] Move serviceType affectation to common ServiceType is needed by both PCE and Renderer. It makes sence to get it easily from common module instead of duplicating the treatment to obtain it from the service-create rpc inputs. Add also specific getOtnServiceType method for otn-services. JIRA: TRNSPRTPCE-488 Signed-off-by: Gilles Thouenon Change-Id: Ie51255620623fb3e3030b25d1f6343455e427adb --- .../common/service/ServiceTypes.java | 126 ++++++++++++++++++ .../pce/networkanalyzer/PceCalculation.java | 83 ++---------- tests/transportpce_tests/7.1/test_pce_400G.py | 4 +- 3 files changed, 142 insertions(+), 71 deletions(-) create mode 100644 common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java diff --git a/common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java b/common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java new file mode 100644 index 000000000..3a10d1174 --- /dev/null +++ b/common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java @@ -0,0 +1,126 @@ +/* + * Copyright © 2021 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.common.service; + +import org.opendaylight.transportpce.common.StringConstants; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class ServiceTypes { + private static final Logger LOG = LoggerFactory.getLogger(ServiceTypes.class); + + private ServiceTypes() { + } + + public static String getServiceType(String serviceFormat, Uint32 serviceRate, Mapping mapping) { + String serviceType = null; + if ("Ethernet".equals(serviceFormat)) { + switch (serviceRate.intValue()) { + case 1: + serviceType = StringConstants.SERVICE_TYPE_1GE; + break; + case 10: + serviceType = StringConstants.SERVICE_TYPE_10GE; + break; + case 100: + serviceType = StringConstants.SERVICE_TYPE_100GE_T; + if (mapping != null && PortQual.SwitchClient.getName().equals(mapping.getPortQual())) { + serviceType = StringConstants.SERVICE_TYPE_100GE_M; + } + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_400GE; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + if ("OC".equals(serviceFormat) && Uint32.valueOf(100).equals(serviceRate)) { + serviceType = StringConstants.SERVICE_TYPE_100GE_T; + } + if ("OTU".equals(serviceFormat)) { + switch (serviceRate.intValue()) { + case 100: + serviceType = StringConstants.SERVICE_TYPE_OTU4; + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_OTUC4; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + if ("ODU".equals(serviceFormat)) { + switch (serviceRate.intValue()) { + case 100: + serviceType = StringConstants.SERVICE_TYPE_ODU4; + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_ODUC4; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + return serviceType; + } + + public static String getOtnServiceType(String serviceFormat, Uint32 serviceRate) { + String serviceType = null; + if ("Ethernet".equals(serviceFormat)) { + switch (serviceRate.intValue()) { + case 1: + serviceType = StringConstants.SERVICE_TYPE_1GE; + break; + case 10: + serviceType = StringConstants.SERVICE_TYPE_10GE; + break; + case 100: + serviceType = StringConstants.SERVICE_TYPE_100GE_M; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + if ("OTU".equals(serviceFormat)) { + switch (serviceRate.intValue()) { + case 100: + serviceType = StringConstants.SERVICE_TYPE_OTU4; + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_OTUC4; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + if ("ODU".equals(serviceFormat)) { + switch (serviceRate.intValue()) { + case 100: + serviceType = StringConstants.SERVICE_TYPE_ODU4; + break; + case 400: + serviceType = StringConstants.SERVICE_TYPE_ODUC4; + break; + default: + LOG.warn("Invalid service-rate {}", serviceRate); + break; + } + } + return serviceType; + } +} diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index 3dc3e41f3..d48c0e2d8 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -27,6 +27,7 @@ import org.opendaylight.transportpce.common.mapping.MappingUtils; import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.network.NetworkTransactionService; +import org.opendaylight.transportpce.common.service.ServiceTypes; import org.opendaylight.transportpce.pce.PceComplianceCheck; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev210701.PathComputationRequestInput; @@ -36,7 +37,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529. import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; @@ -49,6 +49,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +65,7 @@ public class PceCalculation { private String serviceFormatA = ""; private String serviceFormatZ = ""; private String serviceType = ""; - private Long serviceRate = 0L; + private Uint32 serviceRate = Uint32.valueOf(0); private PceConstraints pceHardConstraints; @@ -136,11 +137,20 @@ public class PceCalculation { } serviceFormatA = input.getServiceAEnd().getServiceFormat().getName(); serviceFormatZ = input.getServiceZEnd().getServiceFormat().getName(); - serviceRate = input.getServiceAEnd().getServiceRate().toJava(); + serviceRate = input.getServiceAEnd().getServiceRate(); + if (NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId()).getNodeInfo().getNodeType()) + && input.getServiceAEnd().getTxDirection() != null + && input.getServiceAEnd().getTxDirection().getPort() != null + && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null) { + Mapping mapping = portMapping.getMapping(input.getServiceAEnd().getNodeId(), + input.getServiceAEnd().getTxDirection().getPort().getPortName()); + serviceType = ServiceTypes.getServiceType(serviceFormatA, serviceRate, mapping); + } else { + serviceType = ServiceTypes.getServiceType(serviceFormatA, serviceRate, null); + } LOG.info("parseInput: A and Z :[{}] and [{}]", anodeId, znodeId); - setServiceType(); getAZnodeId(); returnStructure.setRate(input.getServiceAEnd().getServiceRate().toJava()); @@ -162,71 +172,6 @@ public class PceCalculation { } } - private void setServiceType() { - if ("Ethernet".equals(serviceFormatA)) { - switch (serviceRate.intValue()) { - case 1: - serviceType = StringConstants.SERVICE_TYPE_1GE; - break; - case 10: - serviceType = StringConstants.SERVICE_TYPE_10GE; - break; - case 100: - serviceType = StringConstants.SERVICE_TYPE_100GE_T; - if (NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId()) - .getNodeInfo().getNodeType())) { - if (input.getServiceAEnd().getTxDirection() != null - && input.getServiceAEnd().getTxDirection().getPort() != null - && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null) { - String lcp = input.getServiceAEnd().getTxDirection().getPort().getPortName(); - if (portMapping.getMapping(input.getServiceAEnd().getNodeId(), lcp) != null) { - Mapping mapping = portMapping.getMapping(input.getServiceAEnd().getNodeId(), lcp); - if (PortQual.SwitchClient.getName().equals(mapping.getPortQual())) { - serviceType = StringConstants.SERVICE_TYPE_100GE_M; - } - } - } - } - break; - case 400: - serviceType = StringConstants.SERVICE_TYPE_400GE; - break; - default: - LOG.warn("Invalid service-rate {}", serviceRate); - break; - } - } - if ("OC".equals(serviceFormatA) && Long.valueOf(100L).equals(serviceRate)) { - serviceType = StringConstants.SERVICE_TYPE_100GE_T; - } - if ("OTU".equals(serviceFormatA)) { - switch (serviceRate.intValue()) { - case 100: - serviceType = StringConstants.SERVICE_TYPE_OTU4; - break; - case 400: - serviceType = StringConstants.SERVICE_TYPE_OTUC4; - break; - default: - LOG.warn("Invalid service-rate {}", serviceRate); - break; - } - } - if ("ODU".equals(serviceFormatA)) { - switch (serviceRate.intValue()) { - case 100: - serviceType = StringConstants.SERVICE_TYPE_ODU4; - break; - case 400: - serviceType = StringConstants.SERVICE_TYPE_ODUC4; - break; - default: - LOG.warn("Invalid service-rate {}", serviceRate); - break; - } - } - } - private boolean readMdSal() { InstanceIdentifier nwInstanceIdentifier = null; switch (serviceType) { diff --git a/tests/transportpce_tests/7.1/test_pce_400G.py b/tests/transportpce_tests/7.1/test_pce_400G.py index a8a563e49..2979105ec 100644 --- a/tests/transportpce_tests/7.1/test_pce_400G.py +++ b/tests/transportpce_tests/7.1/test_pce_400G.py @@ -182,11 +182,11 @@ class TransportPCE400Gtesting(unittest.TestCase): def test_07_path_computation_ODUC4_xpdr_bi(self): response = test_utils.path_computation_request("request-1", "service-ODUC4", {"service-rate": "400", "clli": "NodeA", "service-format": "ODU", - "node-id": "XPDR-A2-XPDR2", + "node-id": "XPDR-A2", "tx-direction": {"port": {"port-device-name": "XPDR-A2-XPDR2"}} }, {"service-rate": "400", "clli": "NodeC", "service-format": "ODU", - "node-id": "XPDR-C2-XPDR2", + "node-id": "XPDR-C2", "tx-direction": {"port": {"port-device-name": "XPDR-C2-XPDR2"}} }) self.assertEqual(response.status_code, requests.codes.ok) -- 2.36.6