From: manuedelf Date: Wed, 27 May 2020 18:48:12 +0000 (+0200) Subject: GNPy stub for PCE X-Git-Tag: 2.0.0~110 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=882df7f693f64e3c7cbc4e12dab1629a2bb0c8be GNPy stub for PCE Add GNPy stub to simulate GNPy API Add class util to deserialize file content to GNPy Yang object Add example how to use GNPy stub Add JSON files for openroadm-network Add JSON file for opendroadm-topology Add JSON file for GNPy result Add JSON file for GNPY request Add simplelogger.properties file for unit tests log JIRA: TRNSPRTPCE-209 Change-Id: Id2ea6ba918636a35b99cad2acc6176115d3dbe2b --- diff --git a/pce/pom.xml b/pce/pom.xml index b84248f18..177eb971e 100644 --- a/pce/pom.xml +++ b/pce/pom.xml @@ -1,107 +1,125 @@ - + -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 + 4.0.0 -Author: Martial Coulibaly on behalf of Orange ---> - + + org.opendaylight.mdsal + binding-parent + 5.0.10 + + - 4.0.0 + org.opendaylight.transportpce + transportpce-pce + 2.0.0-SNAPSHOT + bundle - - org.opendaylight.mdsal - binding-parent - 5.0.10 - - + + + ${project.groupId} + transportpce-common + ${project.version} + + + org.jgrapht + jgrapht-core + 1.2.0 + - org.opendaylight.transportpce - transportpce-pce - 2.0.0-SNAPSHOT - bundle + + + com.google.code.findbugs + jsr305 + 3.0.2 + true + - - - ${project.groupId} - transportpce-common - ${project.version} - - - org.jgrapht - jgrapht-core - 1.2.0 - + + org.opendaylight.transportpce + test-common + ${project.version} + test + - - - com.google.code.findbugs - jsr305 - 3.0.2 - true - + + org.mockito + mockito-core + 2.25.0 + test + + + org.powermock + powermock-core + 2.0.2 + test + + + org.powermock + powermock-api-mockito2 + 2.0.2 + test + + + org.powermock + powermock-module-junit4 + 2.0.2 + test + + + org.glassfish.jersey.containers + jersey-container-grizzly2-http + test + + + org.glassfish.jersey.test-framework + jersey-test-framework-core + test + + + org.glassfish.jersey.test-framework.providers + jersey-test-framework-provider-grizzly2 + test + + + javax.activation + javax.activation-api + 1.2.0 + test + + - - org.opendaylight.transportpce - test-common - ${project.version} - test - + + + browserid-snapshots + browserid-snapshots + https://oss.sonatype.org/content/repositories/snapshots/ + + - - org.mockito - mockito-core - 2.25.0 - test - - - org.powermock - powermock-core - 2.0.2 - test - - - org.powermock - powermock-api-mockito2 - 2.0.2 - test - - - org.powermock - powermock-module-junit4 - 2.0.2 - test - - - - - - browserid-snapshots - browserid-snapshots - https://oss.sonatype.org/content/repositories/snapshots/ - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.6 - - - - test-jar - - - - - - + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + + test-jar + + + + + + diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java index 06a5838db..6bf59376a 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java @@ -14,6 +14,8 @@ import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.transportpce.common.DataStoreContext; import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; import org.opendaylight.transportpce.common.network.RequestProcessor; +import org.opendaylight.transportpce.pce.gnpy.ConnectToGnpyServer; +import org.opendaylight.transportpce.pce.gnpy.JerseyServer; import org.opendaylight.transportpce.pce.utils.PceTestData; import org.opendaylight.transportpce.pce.utils.PceTestUtils; import org.opendaylight.transportpce.pce.utils.TransactionUtils; @@ -27,6 +29,7 @@ public class PceSendingPceRPCsTest extends AbstractTest { private NetworkTransactionImpl networkTransaction; private DataStoreContext dataStoreContext = this.getDataStoreContextUtil(); private DataBroker dataBroker = this.getDataBroker(); + private JerseyServer jerseyServer = new JerseyServer(); @Before @@ -48,7 +51,13 @@ public class PceSendingPceRPCsTest extends AbstractTest { @Test public void pathComputationTest() throws Exception { + jerseyServer.setUp(); + pceSendingPceRPCs = + new PceSendingPceRPCs(PceTestData.getGnpyPCERequest("nodeA","nodeZ"), networkTransaction); pceSendingPceRPCs.pathComputation(); + ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer(); + Assert.assertTrue(connectToGnpy.isGnpyURLExist()); + jerseyServer.tearDown(); } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServerTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServerTest.java new file mode 100644 index 000000000..739d8b0b0 --- /dev/null +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/ConnectToGnpyServerTest.java @@ -0,0 +1,48 @@ +/* + * Copyright © 2020 Orange Labs, 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.pce.gnpy; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import javax.ws.rs.core.Application; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; +import org.junit.Test; + +public class ConnectToGnpyServerTest extends JerseyTest { + static { + //we must hardcode port because it's hardcoded in ConnectToGnpyServer + System.setProperty("jersey.config.test.container.port", "8008"); + } + + @Override + protected Application configure() { + return new ResourceConfig(GnpyStub.class); + } + + @Test + public void isGnpyURLExistTest() throws GnpyException, IOException { + ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer(); + assertTrue(connectToGnpy.isGnpyURLExist()); + } + + @Test + public void returnGnpyResponseTest() throws GnpyException, IOException { + ConnectToGnpyServer connectToGnpy = new ConnectToGnpyServer(); + String result = connectToGnpy.returnGnpyResponse(Files.readString( + Paths.get("src", "test", "resources", "gnpy", "gnpy_request.json"), StandardCharsets.US_ASCII)); + assertNotNull("result should not be null", result); + assertTrue("Result should not be empty", !result.isEmpty()); + } + +} diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java new file mode 100644 index 000000000..f2d1a87cf --- /dev/null +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyStub.java @@ -0,0 +1,78 @@ +/* + * Copyright © 2020 Orange Labs, 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.pce.gnpy; + +import com.google.gson.stream.JsonReader; +import java.io.IOException; +import java.io.StringReader; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import javax.ws.rs.Consumes; +import javax.ws.rs.HEAD; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import org.opendaylight.transportpce.pce.utils.JsonUtil; +import org.opendaylight.yang.gen.v1.gnpy.gnpy.api.rev190103.GnpyApi; +import org.opendaylight.yang.gen.v1.gnpy.path.rev200202.service.PathRequest; +import org.opendaylight.yangtools.yang.common.QName; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Path("/gnpy/api/v1.0/files") +public class GnpyStub { + private static final Logger LOG = LoggerFactory.getLogger(GnpyStub.class); + + @HEAD + public Response testConnection() { + return Response.ok().build(); + } + + @POST + @Produces({ "application/json" }) + @Consumes({ "application/json" }) + public Response computePath(String body) { + LOG.info("Received path request {}", body); + // as type-element and explicit route usage are not in the same namespace than + // gnpy-api, + // we add to add prefix if they are not set (request generated by + // GnpyUtilitiesImpl does not + // contain prefix) + if (body != null && !body.contains("gnpy-network-topology")) { + body = body.replaceAll("\"type\":\\s*\"", "\"type\":\"gnpy-network-topology:") + .replaceAll("\"length_units\":\\s*\"", "\"length_units\":\"gnpy-network-topology:"); + } + if (body != null && !body.contains("gnpy-path-computation-simplified")) { + body = body.replaceAll("\"explicit-route-usage\":\\s*\"", + "\"explicit-route-usage\":\"gnpy-path-computation-simplified:"); + } + GnpyApi request = (GnpyApi) JsonUtil.getInstance().getDataObjectFromJson(new JsonReader(new StringReader(body)), + QName.create("gnpy:gnpy-api", "2019-01-03", "gnpy-api")); + URI location = URI.create("http://127.0.0.1:8008/gnpy/api/v1.0/files"); + // TODO: return different response based on body data + try { + String response = null; + List pathRequest = request.getServiceFile().getPathRequest(); + // this condition is totally arbitrary and could be modified + if (!pathRequest.isEmpty() && "127.0.0.31".contentEquals(pathRequest.get(0).getSource().stringValue())) { + response = Files + .readString(Paths.get("src", "test", "resources", "gnpy", "gnpy_result_with_path.json")); + } else { + response = Files.readString(Paths.get("src", "test", "resources", "gnpy", "gnpy_result_no_path.json")); + } + + return Response.created(location).entity(response).build(); + } catch (IOException e) { + return Response.serverError().build(); + } + } + +} diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java index 23289ae17..7c2f42497 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java @@ -7,38 +7,128 @@ */ package org.opendaylight.transportpce.pce.gnpy; -import org.junit.Before; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + +import com.google.gson.stream.JsonReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; +import java.net.URI; +import java.util.concurrent.ExecutionException; +import org.glassfish.grizzly.http.server.HttpServer; +import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; +import org.glassfish.jersey.server.ResourceConfig; +import org.junit.AfterClass; +import org.junit.BeforeClass; import org.junit.Test; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; import org.opendaylight.transportpce.common.network.RequestProcessor; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc; +import org.opendaylight.transportpce.pce.utils.JsonUtil; import org.opendaylight.transportpce.pce.utils.PceTestData; -import org.opendaylight.transportpce.pce.utils.PceTestUtils; -import org.opendaylight.transportpce.pce.utils.TransactionUtils; import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.QName; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + public class GnpyUtilitiesImplTest extends AbstractTest { + private static final Logger LOG = LoggerFactory.getLogger(GnpyUtilitiesImplTest.class); private GnpyUtilitiesImpl gnpyUtilitiesImpl; private NetworkTransactionImpl networkTransaction; + private static HttpServer httpServer; - @Before - public void setUp()throws Exception { - PceTestUtils.writeNetworkIntoDataStore(this.getDataBroker(), this.getDataStoreContextUtil(), - TransactionUtils.getNetworkForSpanLoss()); + public GnpyUtilitiesImplTest() { networkTransaction = new NetworkTransactionImpl(new RequestProcessor(this.getDataBroker())); + JsonReader networkReader = null; + JsonReader topoReader = null; + + try { + // load openroadm-network + Reader gnpyNetwork = new FileReader("src/test/resources/gnpy/gnpy_network.json"); + + networkReader = new JsonReader(gnpyNetwork); + Networks networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(networkReader, + QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks")); + saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.UNDERLAY_NETWORK_ID); + // load openroadm-topology + Reader gnpyTopo = new FileReader("src/test/resources/gnpy/gnpy_topology.json"); + topoReader = new JsonReader(gnpyTopo); + networks = (Networks) JsonUtil.getInstance().getDataObjectFromJson(topoReader, + QName.create("urn:ietf:params:xml:ns:yang:ietf-network", "2018-02-26", "networks")); + saveOpenRoadmNetwork(networks.getNetwork().get(0), NetworkUtils.OVERLAY_NETWORK_ID); + } catch (FileNotFoundException | InterruptedException | ExecutionException e) { + LOG.error("Cannot init test ", e); + fail("Cannot init test "); + } finally { + try { + if (networkReader != null) { + networkReader.close(); + } + if (topoReader != null) { + topoReader.close(); + } + } catch (IOException e) { + LOG.warn("Cannot close reader ", e); + } + } } - @Test(expected = Exception.class) + @BeforeClass + public static void init() { + // here we cannot use JerseyTest as we already extends AbstractTest + final ResourceConfig rc = new ResourceConfig(GnpyStub.class); + httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create("http://127.0.0.1:8008"), rc); + } + + @AfterClass + public static void tearDown() { + httpServer.shutdownNow(); + } + + private void saveOpenRoadmNetwork(Network network, String networkId) + throws InterruptedException, ExecutionException { + InstanceIdentifier nwInstanceIdentifier = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(networkId))).build(); + WriteTransaction dataWriteTransaction = this.getDataBroker().newWriteOnlyTransaction(); + dataWriteTransaction.put(LogicalDatastoreType.CONFIGURATION, nwInstanceIdentifier, network); + dataWriteTransaction.commit().get(); + } + + @Test + public void askNewPathFromGnpyNullResultTest() throws Exception { + gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, + PceTestData.getGnpyPCERequest("XPONDER-1", "XPONDER-2")); + assertNull("No hard constraints should be available", gnpyUtilitiesImpl.askNewPathFromGnpy(null)); + + } + + @Test public void askNewPathFromGnpyTest() throws Exception { - gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest()); - PceConstraintsCalc constraints = - new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(), networkTransaction); + gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, + PceTestData.getGnpyPCERequest("XPONDER-3", "XPONDER-4")); + PceConstraintsCalc constraints = new PceConstraintsCalc(PceTestData.getPCE_simpletopology_test1_request(), + networkTransaction); PceConstraints pceHardConstraints = constraints.getPceHardConstraints(); - gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints); + assertNotNull("Hard constraints should be available",gnpyUtilitiesImpl.askNewPathFromGnpy(pceHardConstraints)); + + } @Test(expected = Exception.class) @@ -46,6 +136,4 @@ public class GnpyUtilitiesImplTest extends AbstractTest { gnpyUtilitiesImpl = new GnpyUtilitiesImpl(networkTransaction, PceTestData.getPCERequest()); gnpyUtilitiesImpl.gnpyResponseOneDirection(null); } - - } diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/JerseyServer.java b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/JerseyServer.java new file mode 100644 index 000000000..6678c94fc --- /dev/null +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/JerseyServer.java @@ -0,0 +1,27 @@ +/* + * Copyright © 2020 Orange Labs, 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.pce.gnpy; + +import javax.ws.rs.core.Application; +import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.test.JerseyTest; + + +public class JerseyServer extends JerseyTest { + + static { + //we must hardcode port because it's hardcoded in ConnectToGnpyServer + System.setProperty("jersey.config.test.container.port", "8008"); + } + + @Override + protected Application configure() { + return new ResourceConfig(GnpyStub.class); + } +} diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java new file mode 100644 index 000000000..b97d105eb --- /dev/null +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java @@ -0,0 +1,85 @@ +/* + * Copyright © 2020 Orange Labs, 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.pce.utils; + +import com.google.gson.stream.JsonReader; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.ServiceLoader; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; +import org.opendaylight.mdsal.binding.generator.impl.ModuleInfoBackedContext; +import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider; +import org.opendaylight.yangtools.yang.binding.YangModuleInfo; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; +import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + + +public final class JsonUtil { + private static final Logger LOG = LoggerFactory.getLogger(JsonUtil.class); + private static JsonUtil instance; + + private SchemaContext schemaCtx; + + private BindingNormalizedNodeCodecRegistry codecRegistry; + + private JsonUtil() { + List moduleInfos = new LinkedList<>(); + ServiceLoader yangProviderLoader = ServiceLoader.load(YangModelBindingProvider.class); + for (YangModelBindingProvider yangModelBindingProvider : yangProviderLoader) { + moduleInfos.add(yangModelBindingProvider.getModuleInfo()); + } + /* Create the schema context for loaded models */ + ModuleInfoBackedContext moduleInfoBackedCntxt = ModuleInfoBackedContext.create(); + moduleInfoBackedCntxt.addModuleInfos(moduleInfos); + schemaCtx = moduleInfoBackedCntxt.getSchemaContext(); + if (schemaCtx == null) { + throw new IllegalStateException("Failed to load schema context"); + } + // Create the binding binding normalized node codec registry + BindingRuntimeContext bindingRuntimeContext = BindingRuntimeContext.create(moduleInfoBackedCntxt, schemaCtx); + codecRegistry = new BindingNormalizedNodeCodecRegistry(bindingRuntimeContext); + } + + public static JsonUtil getInstance() { + if (instance == null) { + instance = new JsonUtil(); + } + return instance; + } + + public DataObject getDataObjectFromJson(JsonReader reader, QName pathQname) { + NormalizedNodeResult result = new NormalizedNodeResult(); + try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + JsonParserStream jsonParser = JsonParserStream.create(streamWriter, + JSONCodecFactorySupplier.RFC7951.getShared(schemaCtx), schemaCtx);) { + jsonParser.parse(reader); + YangInstanceIdentifier yangId = YangInstanceIdentifier.of(pathQname); + if (codecRegistry.fromNormalizedNode(yangId, result.getResult()) != null) { + return codecRegistry.fromNormalizedNode(yangId, result.getResult()).getValue(); + } else { + return null; + } + } catch (IOException | IllegalArgumentException e) { + LOG.error("Cannot deserialize JSON ", e); + return null; + } + + } +} diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java index 970954d48..cbb7afa44 100644 --- a/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java +++ b/pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java @@ -806,4 +806,96 @@ public final class PceTestData { return builtInput.build(); } + + public static PathComputationRequestInput getGnpyPCERequest(String nodeA, String nodeZ) { + ServiceHandlerHeader serviceHandlerHeader = new ServiceHandlerHeaderBuilder() + .setRequestId("request1") + .build(); + ServiceAEnd serviceAEnd = new ServiceAEndBuilder() + .setServiceFormat(ServiceFormat.Ethernet) + .setServiceRate(100L) + .setClli("clli11") + .setNodeId(nodeA) + .setTxDirection(new TxDirectionBuilder().setPort( + new PortBuilder() + .setPortDeviceName("Some port-device-name") + .setPortType("Some port-type") + .setPortName("Some port-name") + .setPortRack("Some port-rack") + .setPortShelf("Some port-shelf") + .setPortSlot("Some port-slot") + .setPortSubSlot("Some port-sub-slot") + .build() + ).build()) + .setRxDirection(new RxDirectionBuilder().setPort( + new PortBuilder() + .setPortDeviceName("Some port-device-name") + .setPortType("Some port-type") + .setPortName("Some port-name") + .setPortRack("Some port-rack") + .setPortShelf("Some port-shelf") + .setPortSlot("Some port-slot") + .setPortSubSlot("Some port-sub-slot") + .build() + ).build()) + .build(); + ServiceZEnd serviceZEnd = new ServiceZEndBuilder() + .setServiceFormat(ServiceFormat.Ethernet) + .setServiceRate(0L) + .setClli("Some clli11") + .setNodeId(nodeZ) + .setTxDirection(new TxDirectionBuilder().setPort( + new PortBuilder() + .setPortDeviceName("Some port-device-name") + .setPortType("Some port-type") + .setPortName("Some port-name") + .setPortRack("Some port-rack") + .setPortShelf("Some port-shelf") + .setPortSlot("Some port-slot") + .setPortSubSlot("Some port-sub-slot") + .build() + ).build()) + .setRxDirection(new RxDirectionBuilder().setPort( + new PortBuilder() + .setPortDeviceName("Some port-device-name") + .setPortType("Some port-type") + .setPortName("Some port-name") + .setPortRack("Some port-rack") + .setPortShelf("Some port-shelf") + .setPortSlot("Some port-slot") + .setPortSubSlot("Some port-sub-slot") + .build() + ).build()) + .build(); + PathComputationRequestInput input = new PathComputationRequestInputBuilder() + .setServiceName("service1") + .setResourceReserve(true) + .setPceMetric(PceMetric.HopCount) + .setLocallyProtectedLinks(true) + .setServiceHandlerHeader(serviceHandlerHeader) + .setServiceAEnd(serviceAEnd) + .setServiceZEnd(serviceZEnd) + .setHardConstraints(new HardConstraintsBuilder() + .setCustomerCode(Arrays.asList("Some customer-code")) + .setCoRoutingOrGeneral(new CoRoutingBuilder() + .setCoRouting(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.routing.constraints.rev171017 + .constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder() + .setExistingService(Arrays.asList("Some existing-service")) + .build()) + .build()) + .build()) + .setSoftConstraints(new SoftConstraintsBuilder() + .setCustomerCode(Arrays.asList("Some customer-code")) + .setCoRoutingOrGeneral(new CoRoutingBuilder() + .setCoRouting(new org.opendaylight.yang.gen.v1.http.org + .transportpce.b.c._interface.routing.constraints.rev171017 + .constraints.sp.co.routing.or.general.co.routing.CoRoutingBuilder() + .setExistingService(Arrays.asList("Some existing-service")) + .build()) + .build()) + .build()) + .build(); + return input; + } } diff --git a/pce/src/test/resources/gnpy/gnpy_network.json b/pce/src/test/resources/gnpy/gnpy_network.json new file mode 100644 index 000000000..231dc53c8 --- /dev/null +++ b/pce/src/test/resources/gnpy/gnpy_network.json @@ -0,0 +1,142 @@ +{ +"ietf-network:networks": +{ + "network": + { + "network-id": "openroadm-network", + "node": [ + { + "node-id": "XPONDER-1", + "org-openroadm-network:model": "1", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.11", + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node1" + } + ] + }, + { + "node-id": "XPONDER-2", + "org-openroadm-network:model": "1", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.21", + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "XPONDER-3", + "org-openroadm-network:model": "1", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.31", + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "XPONDER-4", + "org-openroadm-network:model": "1", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.41", + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node4" + } + ] + }, + { + "node-id": "XPONDER-5", + "org-openroadm-network:model": "1", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.51", + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node5" + } + ] + }, + { + "node-id": "OpenROADM-1", + "org-openroadm-network:model": "2", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.10", + "org-openroadm-common-network:node-type": "ROADM", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node1" + } + ] + }, + { + "node-id": "OpenROADM-2", + "org-openroadm-network:model": "2", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.20", + "org-openroadm-common-network:node-type": "ROADM", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "OpenROADM-3", + "org-openroadm-network:model": "2", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.30", + "org-openroadm-common-network:node-type": "ROADM", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "OpenROADM-4", + "org-openroadm-network:model": "2", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.40", + "org-openroadm-common-network:node-type": "ROADM", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node4" + } + ] + }, + { + "node-id": "OpenROADM-5", + "org-openroadm-network:model": "2", + "org-openroadm-network:vendor": "vendorA", + "org-openroadm-network:ip": "127.0.0.50", + "org-openroadm-common-network:node-type": "ROADM", + "supporting-node": [ + { + "network-ref": "clli-network", + "node-ref": "Node5" + } + ] + } + ] + } + +} +} \ No newline at end of file diff --git a/pce/src/test/resources/gnpy/gnpy_request.json b/pce/src/test/resources/gnpy/gnpy_request.json new file mode 100644 index 000000000..0219eef29 --- /dev/null +++ b/pce/src/test/resources/gnpy/gnpy_request.json @@ -0,0 +1,630 @@ +{ + "gnpy-api": { + "topology-file": { + "elements": [ + { + "uid": "127.0.0.40", + "type": "gnpy-network-topology:Roadm", + "metadata": { + "location": { + "region": "OpenROADM-4", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "target_pch_out_db": -20 + } + }, + { + "uid": "127.0.0.50", + "type": "gnpy-network-topology:Roadm", + "metadata": { + "location": { + "region": "OpenROADM-5", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "target_pch_out_db": -20 + } + }, + { + "uid": "127.0.0.20", + "type": "gnpy-network-topology:Roadm", + "metadata": { + "location": { + "region": "OpenROADM-2", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "target_pch_out_db": -20 + } + }, + { + "uid": "127.0.0.10", + "type": "gnpy-network-topology:Roadm", + "metadata": { + "location": { + "region": "OpenROADM-1", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "target_pch_out_db": -20 + } + }, + { + "uid": "127.0.0.30", + "type": "gnpy-network-topology:Roadm", + "metadata": { + "location": { + "region": "OpenROADM-3", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "target_pch_out_db": -20 + } + }, + { + "uid": "127.0.0.11", + "type": "gnpy-network-topology:Transceiver", + "metadata": { + "location": { + "region": "XPONDER-1", + "latitude": 0, + "longitude": 0 + } + } + }, + { + "uid": "127.0.0.51", + "type": "gnpy-network-topology:Transceiver", + "metadata": { + "location": { + "region": "XPONDER-5", + "latitude": 0, + "longitude": 0 + } + } + }, + { + "uid": "127.0.0.41", + "type": "gnpy-network-topology:Transceiver", + "metadata": { + "location": { + "region": "XPONDER-4", + "latitude": 0, + "longitude": 0 + } + } + }, + { + "uid": "127.0.0.31", + "type": "gnpy-network-topology:Transceiver", + "metadata": { + "location": { + "region": "XPONDER-3", + "latitude": 0, + "longitude": 0 + } + } + }, + { + "uid": "127.0.0.21", + "type": "gnpy-network-topology:Transceiver", + "metadata": { + "location": { + "region": "XPONDER-2", + "latitude": 0, + "longitude": 0 + } + } + }, + { + "uid": "243.0.0.1", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.11999999999999999555910790149937383830547332763671875, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.2", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.29, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.3", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 60, + "loss_coef": 0.12, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.4", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.29, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.5", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 60, + "loss_coef": 0.12, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.6", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 140, + "loss_coef": 0.2127659574468085124099303584443987347185611724853515625, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.7", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.29, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.8", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.11999999999999999555910790149937383830547332763671875, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.9", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.29, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.10", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 60, + "loss_coef": 0.12, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.11", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 60, + "loss_coef": 0.12, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.12", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.29, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.13", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 140, + "loss_coef": 0.2127659574468085124099303584443987347185611724853515625, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + }, + { + "uid": "243.0.0.14", + "type": "gnpy-network-topology:Fiber", + "type_variety": "SSMF", + "metadata": { + "location": { + "city": "N/A", + "region": "N/A", + "latitude": 0, + "longitude": 0 + } + }, + "params": { + "length": 100, + "loss_coef": 0.29, + "length_units": "gnpy-network-topology:km", + "att_in": 0, + "con_in": 0, + "con_out": 0 + } + } + ], + "connections": [ + { + "from_node": "127.0.0.51", + "to_node": "127.0.0.50" + }, + { + "from_node": "127.0.0.30", + "to_node": "127.0.0.31" + }, + { + "from_node": "127.0.0.10", + "to_node": "243.0.0.1" + }, + { + "from_node": "243.0.0.1", + "to_node": "127.0.0.30" + }, + { + "from_node": "127.0.0.20", + "to_node": "127.0.0.21" + }, + { + "from_node": "127.0.0.20", + "to_node": "243.0.0.2" + }, + { + "from_node": "243.0.0.2", + "to_node": "127.0.0.10" + }, + { + "from_node": "127.0.0.20", + "to_node": "243.0.0.3" + }, + { + "from_node": "243.0.0.3", + "to_node": "127.0.0.50" + }, + { + "from_node": "127.0.0.40", + "to_node": "127.0.0.41" + }, + { + "from_node": "127.0.0.40", + "to_node": "243.0.0.4" + }, + { + "from_node": "243.0.0.4", + "to_node": "127.0.0.30" + }, + { + "from_node": "127.0.0.50", + "to_node": "243.0.0.5" + }, + { + "from_node": "243.0.0.5", + "to_node": "127.0.0.30" + }, + { + "from_node": "127.0.0.31", + "to_node": "127.0.0.30" + }, + { + "from_node": "127.0.0.50", + "to_node": "127.0.0.51" + }, + { + "from_node": "127.0.0.20", + "to_node": "243.0.0.6" + }, + { + "from_node": "243.0.0.6", + "to_node": "127.0.0.30" + }, + { + "from_node": "127.0.0.30", + "to_node": "243.0.0.7" + }, + { + "from_node": "243.0.0.7", + "to_node": "127.0.0.40" + }, + { + "from_node": "127.0.0.11", + "to_node": "127.0.0.10" + }, + { + "from_node": "127.0.0.30", + "to_node": "243.0.0.8" + }, + { + "from_node": "243.0.0.8", + "to_node": "127.0.0.10" + }, + { + "from_node": "127.0.0.40", + "to_node": "243.0.0.9" + }, + { + "from_node": "243.0.0.9", + "to_node": "127.0.0.50" + }, + { + "from_node": "127.0.0.30", + "to_node": "243.0.0.10" + }, + { + "from_node": "243.0.0.10", + "to_node": "127.0.0.50" + }, + { + "from_node": "127.0.0.50", + "to_node": "243.0.0.11" + }, + { + "from_node": "243.0.0.11", + "to_node": "127.0.0.20" + }, + { + "from_node": "127.0.0.50", + "to_node": "243.0.0.12" + }, + { + "from_node": "243.0.0.12", + "to_node": "127.0.0.40" + }, + { + "from_node": "127.0.0.21", + "to_node": "127.0.0.20" + }, + { + "from_node": "127.0.0.41", + "to_node": "127.0.0.40" + }, + { + "from_node": "127.0.0.30", + "to_node": "243.0.0.13" + }, + { + "from_node": "243.0.0.13", + "to_node": "127.0.0.20" + }, + { + "from_node": "127.0.0.10", + "to_node": "127.0.0.11" + }, + { + "from_node": "127.0.0.10", + "to_node": "243.0.0.14" + }, + { + "from_node": "243.0.0.14", + "to_node": "127.0.0.20" + } + ] + }, + "service-file": { + "path-request": [ + { + "request-id": 2, + "bidirectional": false, + "source": "127.0.0.11", + "destination": "127.0.0.41", + "src-tp-id": "c3JjVHBJZA==", + "dst-tp-id": "ZHN0VHBJZA==", + "explicit-route-objects": { + "route-object-include-exclude": [ + { + "explicit-route-usage": "gnpy-path-computation-simplified:route-include-ero", + "index": 0, + "num-unnum-hop": { + "node-id": "127.0.0.20", + "link-tp-id": "1", + "hop-type": "STRICT" + } + }, + { + "explicit-route-usage": "gnpy-path-computation-simplified:route-include-ero", + "index": 1, + "num-unnum-hop": { + "node-id": "127.0.0.30", + "link-tp-id": "1", + "hop-type": "STRICT" + } + } + ] + }, + "path-constraints": { + "te-bandwidth": { + "technology": "flexi-grid", + "trx_type": "openroadm-beta1", + "trx_mode": "W100G", + "effective-freq-slot": [ + { + "N": 0, + "M": 4 + } + ], + "spacing": 50000000000, + "path_bandwidth": 100 + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/pce/src/test/resources/gnpy/gnpy_result_no_path.json b/pce/src/test/resources/gnpy/gnpy_result_no_path.json new file mode 100644 index 000000000..d0b58860d --- /dev/null +++ b/pce/src/test/resources/gnpy/gnpy_result_no_path.json @@ -0,0 +1,159 @@ +{ + "result": { + "response": [ + { + "response-id": 1, + "no-path": { + "no-path": "MODE_NOT_FEASIBLE", + "path-properties": { + "path-metric": [ + { + "metric-type": "SNR-bandwidth", + "accumulative-value": 13.06 + }, + { + "metric-type": "SNR-0.1nm", + "accumulative-value": 16.57 + }, + { + "metric-type": "OSNR-bandwidth", + "accumulative-value": 13.43 + }, + { + "metric-type": "OSNR-0.1nm", + "accumulative-value": 16.93 + }, + { + "metric-type": "reference_power", + "accumulative-value": 0.001 + }, + { + "metric-type": "path_bandwidth", + "accumulative-value": 100 + } + ], + "path-route-objects": [ + { + "path-route-object": { + "index": 0, + "num-unnum-hop": { + "node-id": "127.0.0.51", + "link-tp-id": "127.0.0.51" + } + } + }, + { + "path-route-object": { + "index": 1, + "transponder": { + "transponder-type": "openroadm-beta1", + "transponder-mode": "W100G" + } + } + }, + { + "path-route-object": { + "index": 2, + "num-unnum-hop": { + "node-id": "127.0.0.50", + "link-tp-id": "127.0.0.50" + } + } + }, + { + "path-route-object": { + "index": 3, + "num-unnum-hop": { + "node-id": "Edfa0_127.0.0.50", + "link-tp-id": "Edfa0_127.0.0.50" + } + } + }, + { + "path-route-object": { + "index": 4, + "num-unnum-hop": { + "node-id": "2.2.2.4", + "link-tp-id": "2.2.2.4" + } + } + }, + { + "path-route-object": { + "index": 5, + "num-unnum-hop": { + "node-id": "Edfa0_2.2.2.4", + "link-tp-id": "Edfa0_2.2.2.4" + } + } + }, + { + "path-route-object": { + "index": 6, + "num-unnum-hop": { + "node-id": "127.0.0.30", + "link-tp-id": "127.0.0.30" + } + } + }, + { + "path-route-object": { + "index": 7, + "num-unnum-hop": { + "node-id": "Edfa1_127.0.0.30", + "link-tp-id": "Edfa1_127.0.0.30" + } + } + }, + { + "path-route-object": { + "index": 8, + "num-unnum-hop": { + "node-id": "2.2.2.7", + "link-tp-id": "2.2.2.7" + } + } + }, + { + "path-route-object": { + "index": 9, + "num-unnum-hop": { + "node-id": "Edfa0_2.2.2.7", + "link-tp-id": "Edfa0_2.2.2.7" + } + } + }, + { + "path-route-object": { + "index": 10, + "num-unnum-hop": { + "node-id": "127.0.0.10", + "link-tp-id": "127.0.0.10" + } + } + }, + { + "path-route-object": { + "index": 11, + "num-unnum-hop": { + "node-id": "127.0.0.11", + "link-tp-id": "127.0.0.11" + } + } + }, + { + "path-route-object": { + "index": 12, + "transponder": { + "transponder-type": "openroadm-beta1", + "transponder-mode": "W100G" + } + } + } + ] + } + } + } + ] + } +} \ No newline at end of file diff --git a/pce/src/test/resources/gnpy/gnpy_result_with_path.json b/pce/src/test/resources/gnpy/gnpy_result_with_path.json new file mode 100644 index 000000000..0a4c853a9 --- /dev/null +++ b/pce/src/test/resources/gnpy/gnpy_result_with_path.json @@ -0,0 +1,399 @@ +{ + "result": { + "response": [ + { + "response-id": 2, + "path-properties": { + "path-metric": [ + { + "metric-type": "SNR-bandwidth", + "accumulative-value": 15.52 + }, + { + "metric-type": "SNR-0.1nm", + "accumulative-value": 19.02 + }, + { + "metric-type": "OSNR-bandwidth", + "accumulative-value": 16.51 + }, + { + "metric-type": "OSNR-0.1nm", + "accumulative-value": 20.01 + }, + { + "metric-type": "reference_power", + "accumulative-value": 0.0015848931924611136 + }, + { + "metric-type": "path_bandwidth", + "accumulative-value": 100 + } + ], + "path-route-objects": [ + { + "path-route-object": { + "index": 0, + "num-unnum-hop": { + "node-id": "127.0.0.11", + "link-tp-id": "127.0.0.11" + } + } + }, + { + "path-route-object": { + "index": 1, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 2, + "transponder": { + "transponder-type": "openroadm-beta1", + "transponder-mode": "W100G" + } + } + }, + { + "path-route-object": { + "index": 3, + "num-unnum-hop": { + "node-id": "127.0.0.10", + "link-tp-id": "127.0.0.10" + } + } + }, + { + "path-route-object": { + "index": 4, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 5, + "num-unnum-hop": { + "node-id": "Edfa1_127.0.0.10", + "link-tp-id": "Edfa1_127.0.0.10" + } + } + }, + { + "path-route-object": { + "index": 6, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 7, + "num-unnum-hop": { + "node-id": "243.0.0.14", + "link-tp-id": "243.0.0.14" + } + } + }, + { + "path-route-object": { + "index": 8, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 9, + "num-unnum-hop": { + "node-id": "Edfa0_243.0.0.14", + "link-tp-id": "Edfa0_243.0.0.14" + } + } + }, + { + "path-route-object": { + "index": 10, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 11, + "num-unnum-hop": { + "node-id": "127.0.0.20", + "link-tp-id": "127.0.0.20" + } + } + }, + { + "path-route-object": { + "index": 12, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 13, + "num-unnum-hop": { + "node-id": "Edfa1_127.0.0.20", + "link-tp-id": "Edfa1_127.0.0.20" + } + } + }, + { + "path-route-object": { + "index": 14, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 15, + "num-unnum-hop": { + "node-id": "243.0.0.3", + "link-tp-id": "243.0.0.3" + } + } + }, + { + "path-route-object": { + "index": 16, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 17, + "num-unnum-hop": { + "node-id": "Edfa0_243.0.0.3", + "link-tp-id": "Edfa0_243.0.0.3" + } + } + }, + { + "path-route-object": { + "index": 18, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 19, + "num-unnum-hop": { + "node-id": "127.0.0.50", + "link-tp-id": "127.0.0.50" + } + } + }, + { + "path-route-object": { + "index": 20, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 21, + "num-unnum-hop": { + "node-id": "Edfa0_127.0.0.50", + "link-tp-id": "Edfa0_127.0.0.50" + } + } + }, + { + "path-route-object": { + "index": 22, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 23, + "num-unnum-hop": { + "node-id": "243.0.0.5", + "link-tp-id": "243.0.0.5" + } + } + }, + { + "path-route-object": { + "index": 24, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 25, + "num-unnum-hop": { + "node-id": "Edfa0_243.0.0.5", + "link-tp-id": "Edfa0_243.0.0.5" + } + } + }, + { + "path-route-object": { + "index": 26, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 27, + "num-unnum-hop": { + "node-id": "127.0.0.30", + "link-tp-id": "127.0.0.30" + } + } + }, + { + "path-route-object": { + "index": 28, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 29, + "num-unnum-hop": { + "node-id": "Edfa0_127.0.0.30", + "link-tp-id": "Edfa0_127.0.0.30" + } + } + }, + { + "path-route-object": { + "index": 30, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 31, + "num-unnum-hop": { + "node-id": "243.0.0.7", + "link-tp-id": "243.0.0.7" + } + } + }, + { + "path-route-object": { + "index": 32, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 33, + "num-unnum-hop": { + "node-id": "Edfa0_243.0.0.7", + "link-tp-id": "Edfa0_243.0.0.7" + } + } + }, + { + "path-route-object": { + "index": 34, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 35, + "num-unnum-hop": { + "node-id": "127.0.0.40", + "link-tp-id": "127.0.0.40" + } + } + }, + { + "path-route-object": { + "index": 36, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 37, + "num-unnum-hop": { + "node-id": "127.0.0.41", + "link-tp-id": "127.0.0.41" + } + } + }, + { + "path-route-object": { + "index": 38, + "label-hop": { + "N": -284, + "M": 4 + } + } + }, + { + "path-route-object": { + "index": 39, + "transponder": { + "transponder-type": "openroadm-beta1", + "transponder-mode": "W100G" + } + } + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/pce/src/test/resources/gnpy/gnpy_topology.json b/pce/src/test/resources/gnpy/gnpy_topology.json new file mode 100644 index 000000000..649dbc245 --- /dev/null +++ b/pce/src/test/resources/gnpy/gnpy_topology.json @@ -0,0 +1,3178 @@ +{ +"ietf-network:networks":{ + "network": + { + "network-id": "openroadm-topology", + "ietf-network-topology:link": [ + { + "link-id": "XPONDER-1XPDR-NW1-TX-toOpenROADM-1-SRG1-SRG1-PP1-RX", + "source": { + "source-node": "XPONDER-1", + "source-tp": "XPDR-NW1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", + "destination": { + "dest-node": "OpenROADM-1-SRG1", + "dest-tp": "SRG1-PP1-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-SRG1-SRG1-PP1-TX-to-XPONDER-1XPDR-NW1-RX" + }, + { + "link-id": "XPONDER-2XPDR-NW1-TX-toOpenROADM-2-SRG1-SRG1-PP1-RX", + "source": { + "source-node": "XPONDER-2", + "source-tp": "XPDR-NW1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", + "destination": { + "dest-node": "OpenROADM-2-SRG1", + "dest-tp": "SRG1-PP1-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-PP1-TX-to-XPONDER-2XPDR-NW1-RX" + }, + { + "link-id": "XPONDER-3XPDR-NW1-TX-toOpenROADM-3-SRG1-SRG1-PP1-RX", + "source": { + "source-node": "XPONDER-3", + "source-tp": "XPDR-NW1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", + "destination": { + "dest-node": "OpenROADM-3-SRG1", + "dest-tp": "SRG1-PP1-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-PP1-TX-to-XPONDER-3XPDR-NW1-RX" + }, + { + "link-id": "XPONDER-4XPDR-NW1-TX-toOpenROADM-4-SRG1-SRG1-PP1-RX", + "source": { + "source-node": "XPONDER-4", + "source-tp": "XPDR-NW1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", + "destination": { + "dest-node": "OpenROADM-4-SRG1", + "dest-tp": "SRG1-PP1-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-SRG1-SRG1-PP1-TX-to-XPONDER-4XPDR-NW1-RX" + }, + { + "link-id": "XPONDER-5XPDR-NW1-TX-toOpenROADM-5-SRG1-SRG1-PP1-RX", + "source": { + "source-node": "XPONDER-5", + "source-tp": "XPDR-NW1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-OUTPUT", + "destination": { + "dest-node": "OpenROADM-5-SRG1", + "dest-tp": "SRG1-PP1-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-PP1-TX-to-XPONDER-5XPDR-NW1-RX" + }, + { + "link-id": "OpenROADM-1-SRG1-SRG1-PP1-TX-to-XPONDER-1XPDR-NW1-RX", + "source": { + "source-node": "OpenROADM-1-SRG1", + "source-tp": "SRG1-PP1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "destination": { + "dest-node": "XPONDER-1", + "dest-tp": "XPDR-NW1-RX" + }, + "org-openroadm-common-network:opposite-link": "XPONDER-1XPDR-NW1-TX-toOpenROADM-1-SRG1-SRG1-PP1-RX" + }, + { + "link-id": "OpenROADM-2-SRG1-SRG1-PP1-TX-to-XPONDER-2XPDR-NW1-RX", + "source": { + "source-node": "OpenROADM-2-SRG1", + "source-tp": "SRG1-PP1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "destination": { + "dest-node": "XPONDER-2", + "dest-tp": "XPDR-NW1-RX" + }, + "org-openroadm-common-network:opposite-link": "XPONDER-2XPDR-NW1-TX-toOpenROADM-2-SRG1-SRG1-PP1-RX" + }, + { + "link-id": "OpenROADM-3-SRG1-SRG1-PP1-TX-to-XPONDER-3XPDR-NW1-RX", + "source": { + "source-node": "OpenROADM-3-SRG1", + "source-tp": "SRG1-PP1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "destination": { + "dest-node": "XPONDER-3", + "dest-tp": "XPDR-NW1-RX" + }, + "org-openroadm-common-network:opposite-link": "XPONDER-3XPDR-NW1-TX-toOpenROADM-3-SRG1-SRG1-PP1-RX" + }, + { + "link-id": "OpenROADM-4-SRG1-SRG1-PP1-TX-to-XPONDER-4XPDR-NW1-RX", + "source": { + "source-node": "OpenROADM-4-SRG1", + "source-tp": "SRG1-PP1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "destination": { + "dest-node": "XPONDER-4", + "dest-tp": "XPDR-NW1-RX" + }, + "org-openroadm-common-network:opposite-link": "XPONDER-4XPDR-NW1-TX-toOpenROADM-4-SRG1-SRG1-PP1-RX" + }, + { + "link-id": "OpenROADM-5-SRG1-SRG1-PP1-TX-to-XPONDER-5XPDR-NW1-RX", + "source": { + "source-node": "OpenROADM-5-SRG1", + "source-tp": "SRG1-PP1-TX" + }, + "org-openroadm-common-network:link-type": "XPONDER-INPUT", + "destination": { + "dest-node": "XPONDER-5", + "dest-tp": "XPDR-NW1-RX" + }, + "org-openroadm-common-network:opposite-link": "XPONDER-5XPDR-NW1-TX-toOpenROADM-5-SRG1-SRG1-PP1-RX" + }, + { + "link-id": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-1-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-1-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-1-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-1-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-2-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-2-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-2-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-3-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-3-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-3-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX", + "source": { + "source-node": "OpenROADM-3-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG4", + "dest-tp": "DEG4-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-4-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-4-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-4-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-4-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-5-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-5-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-5-SRG1", + "source-tp": "SRG1-CP-TX" + }, + "org-openroadm-common-network:link-type": "ADD-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX" + }, + { + "link-id": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-1-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-1-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-1-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-1-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-SRG1-SRG1-CP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-2-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-2-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-2-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-2-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-2-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-2-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-SRG1-SRG1-CP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-3-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-3-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-3-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-3-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-3-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-3-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-3-DEG4", + "source-tp": "DEG4-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-3-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-SRG1-SRG1-CP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX" + }, + { + "link-id": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-4-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-4-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-4-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-4-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-SRG1-SRG1-CP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-5-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-5-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-5-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-5-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-SRG1-SRG1-CP-RX", + "source": { + "source-node": "OpenROADM-5-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "DROP-LINK", + "destination": { + "dest-node": "OpenROADM-5-SRG1", + "dest-tp": "SRG1-CP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-SRG1-SRG1-CP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-1-DEG1-to-OpenROADM-2-DEG1", + "source": { + "source-node": "OpenROADM-1-DEG1", + "source-tp": "DEG1-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber12", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-2-DEG1", + "dest-tp": "DEG1-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-to-OpenROADM-1-DEG1" + }, + { + "link-id": "OpenROADM-1-DEG2-to-OpenROADM-3-DEG1", + "source": { + "source-node": "OpenROADM-1-DEG2", + "source-tp": "DEG2-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 11.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 12, + "engineered-spanloss": 12.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber13", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-3-DEG1", + "dest-tp": "DEG1-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-to-OpenROADM-1-DEG2" + }, + { + "link-id": "OpenROADM-2-DEG1-to-OpenROADM-1-DEG1", + "source": { + "source-node": "OpenROADM-2-DEG1", + "source-tp": "DEG1-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber21", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-1-DEG1", + "dest-tp": "DEG1-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG1-to-OpenROADM-2-DEG1" + }, + { + "link-id": "OpenROADM-2-DEG2-to-OpenROADM-3-DEG2", + "source": { + "source-node": "OpenROADM-2-DEG2", + "source-tp": "DEG2-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 140000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber23", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-3-DEG2", + "dest-tp": "DEG2-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-to-OpenROADM-2-DEG2" + }, + { + "link-id": "OpenROADM-2-DEG3-to-OpenROADM-5-DEG3", + "source": { + "source-node": "OpenROADM-2-DEG3", + "source-tp": "DEG3-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 7.1, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 60000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 7.2, + "engineered-spanloss": 7.5, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber25", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-5-DEG3", + "dest-tp": "DEG3-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-to-OpenROADM-2-DEG3" + }, + { + "link-id": "OpenROADM-3-DEG1-to-OpenROADM-1-DEG2", + "source": { + "source-node": "OpenROADM-3-DEG1", + "source-tp": "DEG1-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 11.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 12, + "engineered-spanloss": 12.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber31", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-1-DEG2", + "dest-tp": "DEG2-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG2-to-OpenROADM-3-DEG1" + }, + { + "link-id": "OpenROADM-3-DEG2-to-OpenROADM-2-DEG2", + "source": { + "source-node": "OpenROADM-3-DEG2", + "source-tp": "DEG2-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 140000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber32", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-2-DEG2", + "dest-tp": "DEG2-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-to-OpenROADM-3-DEG2" + }, + { + "link-id": "OpenROADM-3-DEG3-to-OpenROADM-5-DEG2", + "source": { + "source-node": "OpenROADM-3-DEG3", + "source-tp": "DEG3-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 7.1, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 60000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 7.2, + "engineered-spanloss": 7.5, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber35", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-5-DEG2", + "dest-tp": "DEG2-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-to-OpenROADM-3-DEG3" + }, + { + "link-id": "OpenROADM-3-DEG4-to-OpenROADM-4-DEG2", + "source": { + "source-node": "OpenROADM-3-DEG4", + "source-tp": "DEG2-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber34", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-4-DEG2", + "dest-tp": "DEG2-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG2-to-OpenROADM-3-DEG4" + }, + { + "link-id": "OpenROADM-4-DEG1-to-OpenROADM-5-DEG1", + "source": { + "source-node": "OpenROADM-4-DEG1", + "source-tp": "DEG1-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber45", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-5-DEG1", + "dest-tp": "DEG1-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-to-OpenROADM-4-DEG1" + }, + { + "link-id": "OpenROADM-4-DEG2-to-OpenROADM-3-DEG4", + "source": { + "source-node": "OpenROADM-4-DEG2", + "source-tp": "DEG2-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber43", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-3-DEG4", + "dest-tp": "DEG4-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-to-OpenROADM-4-DEG2" + }, + { + "link-id": "OpenROADM-5-DEG1-to-OpenROADM-4-DEG1", + "source": { + "source-node": "OpenROADM-5-DEG1", + "source-tp": "DEG1-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 28.4, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 100000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 29, + "engineered-spanloss": 30.2, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber54", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-4-DEG1", + "dest-tp": "DEG1-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG1-to-OpenROADM-5-DEG1" + }, + { + "link-id": "OpenROADM-5-DEG2-to-OpenROADM-3-DEG3", + "source": { + "source-node": "OpenROADM-5-DEG2", + "source-tp": "DEG2-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 7.1, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 60000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 7.2, + "engineered-spanloss": 7.5, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber53", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-3-DEG3", + "dest-tp": "DEG3-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-to-OpenROADM-5-DEG2" + }, + { + "link-id": "OpenROADM-5-DEG3-to-OpenROADM-2-DEG3", + "source": { + "source-node": "OpenROADM-5-DEG3", + "source-tp": "DEG3-TTP-TX" + }, + "org-openroadm-network-topology:OMS-attributes": { + "span": { + "spanloss-base": 7.1, + "link-concatenation": [ + { + "SRLG-Id": 0, + "SRLG-length": 60000, + "pmd": 0.5, + "fiber-type": "smf" + } + ], + "spanloss-current": 7.2, + "engineered-spanloss": 7.5, + "auto-spanloss": true + } + }, + "org-openroadm-common-network:link-type": "ROADM-TO-ROADM", + "org-openroadm-common-network:clfi": "fiber52", + "org-openroadm-common-network:TE-metric": 10, + "org-openroadm-network-topology:link-latency": 1, + "destination": { + "dest-node": "OpenROADM-2-DEG3", + "dest-tp": "DEG3-TTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-to-OpenROADM-5-DEG3" + }, + { + "link-id": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-1-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-1-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-1-DEG2-DEG2-CTP-TXtoOpenROADM-1-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-1-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-1-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-1-DEG1-DEG1-CTP-TXtoOpenROADM-1-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-2-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-2-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-2-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-2-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-2-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG1-DEG1-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-2-DEG3-DEG3-CTP-TXtoOpenROADM-2-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-2-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-2-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-2-DEG2-DEG2-CTP-TXtoOpenROADM-2-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG4", + "dest-tp": "DEG4-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG4", + "dest-tp": "DEG4-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG4", + "dest-tp": "DEG4-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG4", + "source-tp": "DEG4-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG1-DEG1-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG4", + "source-tp": "DEG4-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG2-DEG2-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX" + }, + { + "link-id": "OpenROADM-3-DEG4-DEG4-CTP-TXtoOpenROADM-3-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-3-DEG4", + "source-tp": "DEG4-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-3-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-3-DEG3-DEG3-CTP-TXtoOpenROADM-3-DEG4-DEG4-CTP-RX" + }, + { + "link-id": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-4-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-4-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-4-DEG2-DEG2-CTP-TXtoOpenROADM-4-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-4-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-4-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-4-DEG1-DEG1-CTP-TXtoOpenROADM-4-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-5-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-5-DEG1", + "source-tp": "DEG1-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-5-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX", + "source": { + "source-node": "OpenROADM-5-DEG2", + "source-tp": "DEG2-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG3", + "dest-tp": "DEG3-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG1-DEG1-CTP-RX", + "source": { + "source-node": "OpenROADM-5-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG1", + "dest-tp": "DEG1-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG1-DEG1-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX" + }, + { + "link-id": "OpenROADM-5-DEG3-DEG3-CTP-TXtoOpenROADM-5-DEG2-DEG2-CTP-RX", + "source": { + "source-node": "OpenROADM-5-DEG3", + "source-tp": "DEG3-CTP-TX" + }, + "org-openroadm-common-network:link-type": "EXPRESS-LINK", + "destination": { + "dest-node": "OpenROADM-5-DEG2", + "dest-tp": "DEG2-CTP-RX" + }, + "org-openroadm-common-network:opposite-link": "OpenROADM-5-DEG2-DEG2-CTP-TXtoOpenROADM-5-DEG3-DEG3-CTP-RX" + } + ], + "node": [ + { + "node-id": "OpenROADM-1-SRG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-CP-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-CP" + }, + { + "tp-id": "SRG1-PP4-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP1-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP3-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP4-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-CP-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-CP" + }, + { + "tp-id": "SRG1-PP1-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP3-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "SRG", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-1" + }, + { + "network-ref":"clli-network", + "node-ref": "Node1" + } + ] + }, + { + "node-id": "OpenROADM-1-DEG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG1-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG1-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG1-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":1, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-1" + }, + { + "network-ref":"clli-network", + "node-ref": "Node1" + } + ] + }, + { + "node-id": "OpenROADM-1-DEG2", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG2-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG2-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG2-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":2, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-1" + }, + { + "network-ref":"clli-network", + "node-ref": "Node1" + } + ] + }, + { + "node-id": "OpenROADM-2-SRG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-CP-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-CP" + }, + { + "tp-id": "SRG1-PP4-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP1-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP3-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP4-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-CP-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-CP" + }, + { + "tp-id": "SRG1-PP1-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP3-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "SRG", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-2" + }, + { + "network-ref":"clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "OpenROADM-2-DEG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG1-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG1-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG1-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":1, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-2" + }, + { + "network-ref":"clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "OpenROADM-2-DEG2", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG2-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG2-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG2-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":2, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-2" + }, + { + "network-ref":"clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "OpenROADM-2-DEG3", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG3-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG3-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG3-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG3-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":3, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-2" + }, + { + "network-ref":"clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "OpenROADM-3-SRG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-CP-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-CP" + }, + { + "tp-id": "SRG1-PP4-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP1-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP3-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP4-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-CP-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-CP" + }, + { + "tp-id": "SRG1-PP1-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP3-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "SRG", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-3" + }, + { + "network-ref":"clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "OpenROADM-3-DEG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG1-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG1-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG1-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":1, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-3" + }, + { + "network-ref":"clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "OpenROADM-3-DEG2", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG2-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG2-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG2-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":2, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-3" + }, + { + "network-ref":"clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "OpenROADM-3-DEG3", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG3-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG3-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG3-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG3-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":3, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-3" + }, + { + "network-ref":"clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "OpenROADM-3-DEG4", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG4-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + }, + { + "tp-id": "DEG4-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG4-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG4-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":4, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-3" + }, + { + "network-ref":"clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "OpenROADM-4-SRG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-CP-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-CP" + }, + { + "tp-id": "SRG1-PP4-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP1-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP3-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP4-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-CP-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-CP" + }, + { + "tp-id": "SRG1-PP1-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP3-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "SRG", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-4" + }, + { + "network-ref":"clli-network", + "node-ref": "Node4" + } + ] + }, + { + "node-id": "OpenROADM-4-DEG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG1-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG1-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG1-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":1, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-4" + }, + { + "network-ref":"clli-network", + "node-ref": "Node4" + } + ] + }, + { + "node-id": "OpenROADM-4-DEG2", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG2-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG2-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG2-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":2, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-4" + }, + { + "network-ref":"clli-network", + "node-ref": "Node4" + } + ] + }, + { + "node-id": "OpenROADM-5-SRG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "SRG1-CP-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-CP" + }, + { + "tp-id": "SRG1-PP4-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP1-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP3-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP4-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP5-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-CP-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-CP" + }, + { + "tp-id": "SRG1-PP1-TX", + "org-openroadm-common-network:tp-type": "SRG-TX-PP" + }, + { + "tp-id": "SRG1-PP3-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + }, + { + "tp-id": "SRG1-PP2-RX", + "org-openroadm-common-network:tp-type": "SRG-RX-PP" + } + ], + "org-openroadm-network-topology:srg-attributes": { + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "SRG", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-5" + }, + { + "network-ref":"clli-network", + "node-ref": "Node5" + } + ] + }, + { + "node-id": "OpenROADM-5-DEG1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG1-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG1-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG1-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG1-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":1, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-5" + }, + { + "network-ref":"clli-network", + "node-ref": "Node5" + } + ] + }, + { + "node-id": "OpenROADM-5-DEG2", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG2-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG2-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG2-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG2-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":2, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-5" + }, + { + "network-ref":"clli-network", + "node-ref": "Node5" + } + ] + }, + { + "node-id": "OpenROADM-5-DEG3", + "ietf-network-topology:termination-point": [ + { + "tp-id": "DEG3-TTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-TTP" + }, + { + "tp-id": "DEG3-CTP-TX", + "org-openroadm-common-network:tp-type": "DEGREE-TX-CTP" + }, + { + "tp-id": "DEG3-CTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-CTP" + }, + { + "tp-id": "DEG3-TTP-RX", + "org-openroadm-common-network:tp-type": "DEGREE-RX-TTP" + } + ], + "org-openroadm-network-topology:degree-attributes": { + "degree-number":3, + "available-wavelengths": [ + { + "index": 10 + }, + { + "index": 9 + }, + { + "index": 6 + }, + { + "index": 5 + }, + { + "index": 8 + }, + { + "index": 7 + }, + { + "index": 2 + }, + { + "index": 1 + }, + { + "index": 4 + }, + { + "index": 3 + } + ] + }, + "org-openroadm-common-network:node-type": "DEGREE", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "OpenROADM-5" + }, + { + "network-ref":"clli-network", + "node-ref": "Node5" + } + ] + }, + { + "node-id": "XPONDER-1", + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR-NW1-RX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-RX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-RX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-RX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW1-TX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-RX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-TX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-TX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-TX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-TX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "XPONDER-1" + }, + { + "network-ref":"clli-network", + "node-ref": "Node1" + } + ] + }, + { + "node-id": "XPONDER-2", + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR-NW1-RX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-RX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-RX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-RX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW1-TX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-RX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-TX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-TX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-TX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-TX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "XPONDER-2" + }, + { + "network-ref":"clli-network", + "node-ref": "Node2" + } + ] + }, + { + "node-id": "XPONDER-3", + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR-NW1-RX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-RX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-RX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-RX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW1-TX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-RX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-TX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-TX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-TX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-TX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "XPONDER-3" + }, + { + "network-ref":"clli-network", + "node-ref": "Node3" + } + ] + }, + { + "node-id": "XPONDER-4", + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR-NW1-RX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-RX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-RX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-RX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW1-TX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-RX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-TX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-TX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-TX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-TX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "XPONDER-4" + }, + { + "network-ref":"clli-network", + "node-ref": "Node4" + } + ] + }, + { + "node-id": "XPONDER-5", + "ietf-network-topology:termination-point": [ + { + "tp-id": "XPDR-NW1-RX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-RX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-RX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-RX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW1-TX", + "transportpce-topology:associated-connection-map-port": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-RX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW2-TX", + "transportpce-topology:associated-connection-map-port": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW5-TX", + "transportpce-topology:associated-connection-map-port": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW3-TX", + "transportpce-topology:associated-connection-map-port": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "XPDR-NW4-TX", + "transportpce-topology:associated-connection-map-port": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-NETWORK" + }, + { + "tp-id": "Client-4", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-5", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-1", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-2", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + }, + { + "tp-id": "Client-3", + "org-openroadm-common-network:tp-type": "XPONDER-CLIENT" + } + ], + "org-openroadm-common-network:node-type": "XPONDER", + "supporting-node": [ + { + "network-ref":"openroadm-network", + "node-ref": "XPONDER-5" + }, + { + "network-ref":"clli-network", + "node-ref": "Node5" + } + ] + } + + ] + } + + } +} \ No newline at end of file diff --git a/pce/src/test/resources/simplelogger.properties b/pce/src/test/resources/simplelogger.properties new file mode 100644 index 000000000..6a3646948 --- /dev/null +++ b/pce/src/test/resources/simplelogger.properties @@ -0,0 +1,37 @@ +# SLF4J's SimpleLogger configuration file +# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err. + +# Default logging detail level for all instances of SimpleLogger. +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, defaults to "info". +org.slf4j.simpleLogger.defaultLogLevel=info + +# Logging detail level for a SimpleLogger instance named "xxxxx". +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, the default logging detail level is used. +org.slf4j.simpleLogger.log.org.opendaylight.transportpce.pce.gnpy=debug + +# Set to true if you want the current date and time to be included in output messages. +# Default is false, and will output the number of milliseconds elapsed since startup. +org.slf4j.simpleLogger.showDateTime=true + +# The date and time format to be used in the output messages. +# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. +# If the format is not specified or is invalid, the default format is used. +# The default format is yyyy-MM-dd HH:mm:ss:SSS Z. +org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z + +# Set to true if you want to output the current thread name. +# Defaults to true. +#org.slf4j.simpleLogger.showThreadName=true + +# Set to true if you want the Logger instance name to be included in output messages. +# Defaults to true. +#org.slf4j.simpleLogger.showLogName=true + +# Set to true if you want the last component of the name to be included in output messages. +# Defaults to false. +#org.slf4j.simpleLogger.showShortLogName=false + +#Should the level string be output in brackets? Defaults to false. +org.slf4j.simpleLogger.levelInBrackets=true \ No newline at end of file