Merge changes I8b6da9f3,I425a1d19,Ia3dfe19f,Idd68c408,I73f0c083, ...
authorGilles Thouenon <gilles.thouenon@orange.com>
Fri, 29 Jul 2022 09:35:49 +0000 (09:35 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 29 Jul 2022 09:35:49 +0000 (09:35 +0000)
* changes:
  Migrate OTN E2E functional tests to RFC8040 step 6
  Migrate OTN E2E functional tests to RFC8040 step 5
  Migrate OTN E2E functional tests to RFC8040 step 4
  Migrate OTN E2E functional tests to RFC8040 step 3
  Migrate OTN E2E functional tests to RFC8040 step 2
  Migrate OTN E2E functional tests to RFC8040 step 1

101 files changed:
api/pom.xml
api/src/main/yang/nbi-notifications@2021-10-13.yang [moved from api/src/main/yang/nbi-notifications@2021-08-13.yang with 67% similarity]
api/src/main/yang/transportpce-networkutils@2022-06-30.yang [moved from api/src/main/yang/transportpce-networkutils@2017-08-18.yang with 57% similarity]
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/impl/DmaapClientProvider.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsListenerImpl.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/EventsApi.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/PublishNotificationProcessServiceModule.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/PublishNotificationProcessServiceSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/ServiceAEndSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/ServiceZEndSerializer.java
dmaap-client/src/test/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsListenerImplTest.java
docs/developer-guide.rst
docs/images/TransportPCE-Diagram-Sulfur.jpg [new file with mode: 0644]
docs/images/TransportPCE-tapi-nbinotifications-service-example.jpg [new file with mode: 0644]
lighty/pom.xml
lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java
lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java
nbinotifications/pom.xml
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/consumer/Subscriber.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsProvider.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImpl.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceDeserializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceSerializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceDeserializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceSerializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationDeserializer.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationSerializer.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/TopicManager.java [new file with mode: 0644]
nbinotifications/src/main/resources/OSGI-INF/blueprint/nobinotifications-blueprint.xml
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/consumer/SubscriberTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsProviderTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImplTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/producer/PublisherTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceDeserializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceSerializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceDeserializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceSerializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java
nbinotifications/src/test/resources/expected_event.json
nbinotifications/src/test/resources/expected_event_alarm_service.json
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/LinkIdUtil.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java
networkmodel/src/test/resources/openroadm-topology.xml
ordmodels/network/src/main/yang/transportpce-topology@2022-01-23.yang [deleted file]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java
pce/src/test/resources/gnpy/gnpy_topology.json
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListenerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/ServiceListener.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/listeners/ServiceListenerTest.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelListenerImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererListenerImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiContext.java
tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml
tapi/src/test/resources/openroadm-topology.xml
tapi/src/test/resources/otn-topology.xml
tests/install_honeynode.sh
tests/launch_tests.sh
tests/sample_configs/NW-for-test-5-4.xml
tests/sample_configs/NW-simple-topology.xml
tests/sample_configs/gnpy/openroadmTopology.json
tests/sample_configs/honeynode-otntopo400G.json
tests/sample_configs/honeynode-otntopo400GwithODUC4.json
tests/sample_configs/honeynode-otntopo400GwithOTUC4.json
tests/sample_configs/honeynode-topo.xml
tests/sample_configs/honeynode-topo400G.json
tests/sample_configs/openroadm/2.2.1/oper-ROADMA.xml
tests/test-requirements.txt
tests/transportpce_tests/1.2.1/test03_topology.py
tests/transportpce_tests/2.2.1/test03_topology.py
tests/transportpce_tests/2.2.1/test11_otn_end2end.py
tests/transportpce_tests/2.2.1/test14_otn_switch_end2end.py
tests/transportpce_tests/2.2.1/test15_otn_end2end_with_intermediate_switch.py
tests/transportpce_tests/common/test_utils.py
tests/transportpce_tests/hybrid/test02_B100G_end2end.py
tests/transportpce_tests/hybrid/test03_autonomous_reroute.py [new file with mode: 0644]
tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py [new file with mode: 0644]
tests/transportpce_tests/with_docker/test03_tapi_nbinotifications.py [new file with mode: 0644]
tox.ini

index cc6de817c2ef0a3287a09810802590544b01ee5b..ff32883bca7998ad33f1a5838196129dc31fe844 100644 (file)
@@ -37,6 +37,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>transportpce-ordmodels-service</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}.ordmodels</groupId>
+      <artifactId>transportpce-ordmodels-network</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>transportpce-tapimodels</artifactId>
similarity index 67%
rename from api/src/main/yang/nbi-notifications@2021-08-13.yang
rename to api/src/main/yang/nbi-notifications@2021-10-13.yang
index b90e196a3219b9334d725d9d1de9fa0c3e453932..e55b7816b9135a512fda8c58fd4903bf9417ec44 100644 (file)
@@ -12,6 +12,14 @@ module nbi-notifications {
   import org-openroadm-common-state-types {
     prefix org-openroadm-common-state-types;
   }
+  import tapi-common {
+    prefix tapi-common;
+    revision-date 2018-12-10;
+   }
+  import tapi-notification {
+    prefix tapi-notification;
+    revision-date 2018-12-10;
+  }
 
   organization
     "transportPCE";
@@ -21,6 +29,11 @@ module nbi-notifications {
     "YANG definitions for using REST API in NBI notifications module. Copyright
      (c) 2020 ORANGE and others. All rights reserved.";
 
+  revision 2021-10-13 {
+    description
+      "Implement new models, RPC for TAPI service notification";
+  }
+
   revision 2021-08-13 {
     description
       "Rename the groupings, containers and RPCs";
@@ -105,6 +118,69 @@ module nbi-notifications {
     }
   }
 
+  grouping notification-tapi-service {
+      leaf notification-type {
+        type tapi-notification:notification-type;
+        description "none";
+      }
+      leaf target-object-type {
+        type tapi-notification:object-type;
+        description "none";
+      }
+      leaf target-object-identifier {
+        type tapi-common:uuid;
+        description "none";
+      }
+      list target-object-name {
+        key 'value-name';
+        min-elements 1;
+        uses tapi-common:name-and-value;
+        description "none";
+      }
+      leaf event-time-stamp {
+        type tapi-common:date-and-time;
+        description "none";
+      }
+      leaf sequence-number {
+        type uint64;
+        config false;
+        description "A monotonous increasing sequence number associated with the notification.
+            The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined.";
+      }
+      leaf source-indicator {
+        type tapi-notification:source-indicator;
+        description "none";
+      }
+      leaf layer-protocol-name {
+        type tapi-common:layer-protocol-name;
+        description "none";
+      }
+      list changed-attributes {
+        key 'value-name';
+        uses tapi-notification:name-and-value-change;
+        description "none";
+      }
+      list additional-info {
+        key 'value-name';
+        uses tapi-common:name-and-value;
+        description "none";
+      }
+      leaf additional-text {
+        type string;
+        description "none";
+      }
+      container tca-info {
+        uses tapi-notification:tca-info;
+        description "none";
+      }
+      container alarm-info {
+        uses tapi-notification:alarm-info;
+        description "none";
+      }
+      uses tapi-common:resource-spec;
+      description "none";
+    }
+
   container notification-process-service {
     description
       "Model used to send a notification from a service request";
@@ -117,6 +193,12 @@ module nbi-notifications {
     uses notification-alarm-service;
     }
 
+  container notification-tapi-service {
+      description
+        "Model used to send a tapi notification";
+      uses notification-tapi-service;
+    }
+
   rpc get-notifications-process-service {
     description "Get the notifications service sent by ServiceHandler through filtering connection type";
     input {
@@ -196,4 +278,15 @@ module nbi-notifications {
      }
      uses notification-alarm-service;
   }
+
+  notification publish-tapi-notification-service {
+    description "Publish the TAPI notifications service for topic";
+    leaf topic {
+      type string;
+      mandatory true;
+      description
+        "Topic where to send the notification service";
+    }
+    uses tapi-notification:notification;
+  }
 }
similarity index 57%
rename from api/src/main/yang/transportpce-networkutils@2017-08-18.yang
rename to api/src/main/yang/transportpce-networkutils@2022-06-30.yang
index 8426fa31bc77988d66d974b1f1b5794406eadce7..1e58eef1d9739bc22cd95c3f44ed65d21a4287b8 100644 (file)
@@ -1,13 +1,69 @@
 module transportpce-networkutils {
-  yang-version 1;
+  yang-version 1.1;
   namespace "http://org/opendaylight/transportpce/networkutils";
   prefix org-opendaylight-transportpce-networkutils;
 
+  import ietf-network {
+    prefix nd;
+    revision-date 2018-02-26;
+  }
+  import ietf-network-topology {
+    prefix nwt;
+    revision-date 2018-02-26;
+  }
+  import org-openroadm-common-network {
+    prefix cnet;
+    revision-date 2021-12-10;
+  }
+
+  revision 2022-06-30 {
+    description
+      "Add transportpce augmentation to manage otn-link-type in otn-topology";
+  }
+
   revision 2017-08-18 {
     description
       "Initial revision of networkutils model";
   }
 
+  typedef otn-link-type {
+    type enumeration {
+      enum "OTU4" {
+        value 0;
+      }
+      enum "ODU4" {
+        value 1;
+      }
+      enum "ODTU4" {
+        value 2;
+      }
+      enum "ODU2e" {
+        value 3;
+      }
+      enum "ODU0" {
+        value 4;
+      }
+      enum "OTUC4" {
+        value 5;
+      }
+      enum "ODUC4" {
+        value 6;
+      }
+      enum "OTUC3" {
+        value 7;
+      }
+      enum "ODUC3" {
+        value 8;
+      }
+      enum "OTUC2" {
+        value 9;
+      }
+      enum "ODUC2" {
+        value 10;
+      }
+    }
+  }
+
   grouping links-input-grouping {
     container links-input {
       description
@@ -103,4 +159,17 @@ module transportpce-networkutils {
       }
     }
   }
+
+  augment "/nd:networks/nd:network/nwt:link" {
+    when "../nd:network-types/cnet:openroadm-common-network/otn-topology";
+    description
+      "Defines more accurate otn link types to differentiate otn links in otn-topology";
+    leaf otn-link-type {
+      when
+        "../cnet:link-type = 'OTN-LINK'";
+      type otn-link-type;
+      description
+        "type of otn link, to help link management inside transportpce";
+    }
+  }
 }
index 63bee535759a193a9fbd5a6ee41b3654db684f94..482a46b782716ca3c826f92349ba48f43e6972bb 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.transportpce.dmaap.client.impl;
 
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.transportpce.dmaap.client.listener.NbiNotificationsListenerImpl;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
index 4a91e6a4cf1d80cb2c9572797af898cc57a3d442..fcf0b000dd8c80e88ab4c782e025cc2b4af76c93 100644 (file)
@@ -17,9 +17,10 @@ import org.glassfish.jersey.logging.LoggingFeature;
 import org.opendaylight.transportpce.dmaap.client.resource.EventsApi;
 import org.opendaylight.transportpce.dmaap.client.resource.config.JsonConfigurator;
 import org.opendaylight.transportpce.dmaap.client.resource.model.CreatedEvent;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +56,9 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
 
     @Override
     public void onPublishNotificationAlarmService(PublishNotificationAlarmService notification) {
-
     }
 
+    @Override
+    public void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
+    }
 }
index e6f167824b5fe5be45a55bec1e35c6e6384bd72f..4284f8656dcd40659e7f17f77ea8be230a86a3e1 100644 (file)
@@ -14,7 +14,7 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import org.opendaylight.transportpce.dmaap.client.resource.model.CreatedEvent;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
 
 @Path("/events")
 public interface EventsApi {
index 9fcbf9f2a398c2854428640d7b550f2bd1477a2f..5ae404b156b91ddf10d5944c7af8d8abb208ba31 100644 (file)
@@ -13,9 +13,9 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.Lgx;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.Port;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEnd;
 
 //This class is a temporary workaround while waiting jackson
 //support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index b9b650ce0573324cf069bacf26528c588e5db6e1..5361e3fa00fec5b16588ca83c2d5792cadbc0fa3 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index e05e0fcbb6f91ab923d4b6cee91a51e509a15444..3d48bf57e2466fac24d5ece0c4c1c3789d112189 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEnd;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 2e1ae283596e3da6a2eb9e5c96bd326333d01425..b31bf5db62fbfd03e71351212828093f078a3c65 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEnd;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 363653b2a908ea240b4e11ebec119cbdcc5ba637..f3df78362adfc1cf0e69b74e388c0e72256b52eb 100644 (file)
@@ -28,11 +28,11 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.LoggerFactory;
index ca95df191d6ef4ecb078cdcb89b22823c0e5bd64..20817b27e8683a1b6cb1786af8a7c27658cfd7b6 100644 (file)
@@ -28,7 +28,7 @@ equipment\_ and Optical Line Management (OLM) is associated with a generic block
 relying on open models, each of them communicating through published APIs.
 
 
-.. figure:: ./images/TransportPCE-Diagram-Phosphorus.jpg
+.. figure:: ./images/TransportPCE-Diagram-Sulfur.jpg
    :alt: TransportPCE architecture
 
    TransportPCE architecture
@@ -1510,16 +1510,19 @@ odl-transportpce-tapi
 
 This feature allows TransportPCE application to expose at its northbound interface other APIs than
 those defined by the OpenROADM MSA. With this feature, TransportPCE provides part of the Transport-API
-specified by the Open Networking Foundation. More specifically, the Topology Service and Connectivity
-Service components are implemented, allowing to expose to higher level applications an abstraction of
-its OpenROADM topologies in the form of topologies respecting the T-API modelling, as well as
-creating/deleting connectivity services between the Service Interface Points (SIPs) exposed by the
-T-API topology. The current version of TransportPCE implements the *tapi-topology.yang* and
-*tapi-connectivity.yang* models in the revision 2018-12-10 (T-API v2.1.2).
+specified by the Open Networking Foundation. More specifically, the Topology Service, Connectivity and Notification
+Service components are implemented, allowing to:
 
-Additionally, support for the Notification Service component will be added in future releases, which
-will allow higher level applications to create/delete a Notification Subscription Service to receive
-several T-API notifications as defined in the *tapi-notification.yang* model.
+1. Expose to higher level applications an abstraction of its OpenROADM topologies in the form of topologies respecting the T-API modelling.
+2. Create/delete connectivity services between the Service Interface Points (SIPs) exposed by the T-API topology.
+3. Create/Delete Notification Subscription Service to expose to higher level applications T-API notifications through a Kafka server.
+
+The current version of TransportPCE implements the *tapi-topology.yang*,
+*tapi-connectivity.yang* and *tapi-notification.yang* models in the revision
+2018-12-10 (T-API v2.1.2).
+
+Additionally, support for the Path Computation Service will be added in future releases, which will allow T-PCE
+to compute a path over the T-API topology.
 
 T-API Topology Service
 ~~~~~~~~~~~~~~~~~~~~~~
@@ -1666,7 +1669,7 @@ The user can provide, either the Uuid associated to the attribute or its name.
     {
       "tapi-topology:input": {
         "tapi-topology:topology-id-or-name": "T0 - Full Multi-layer topology",
-        "tapi-topology:node-id-or-name": "ROADM-A1+PHOTONINC_MEDIA"
+        "tapi-topology:node-id-or-name": "ROADM-A1+PHOTONIC_MEDIA"
       }
     }
 
@@ -1682,8 +1685,8 @@ The user can provide, either the Uuid associated to the attribute or its name.
     {
       "tapi-topology:input": {
         "tapi-topology:topology-id-or-name": "T0 - Full Multi-layer topology",
-        "tapi-topology:node-id-or-name": "ROADM-A1+PHOTONINC_MEDIA",
-        "tapi-topology:ep-id-or-name": "ROADM-A1+PHOTONINC_MEDIA+DEG1-TTP-TXRX"
+        "tapi-topology:node-id-or-name": "ROADM-A1+PHOTONIC_MEDIA",
+        "tapi-topology:ep-id-or-name": "ROADM-A1+PHOTONIC_MEDIA+DEG1-TTP-TXRX"
       }
     }
 
@@ -1907,10 +1910,141 @@ connectivity service.
 T-API Notification Service
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-In future releases, the T-API notification service will be implemented. The objective will be to write and read
-T-API notifications stored in topics of a Kafka server as explained later in the odl-transportpce-nbinotifications
-section, but T-API based.
+-  RPC calls implemented:
+
+   -  create-notification-subscription-service
+
+   -  get-supported-notification-types
+
+   -  delete-notification-subscription-service
+
+   -  get-notification-subscription-service-details
+
+   -  get-notification-subscription-service-list
+
+   -  get-notification-list
+
+Sulfur SR1 extends the T-API interface support by implementing the T-API notification service. This feature
+allows TransportPCE to write and read tapi-notifications stored in topics of a Kafka server. It also upgrades
+the nbinotifications module to support the serialization and deserialization of tapi-notifications into JSON
+format and vice-versa. Current implementation of the notification service creates a Kafka topic and stores
+tapi-notification on reception of a create-notification-subscription-service request. Only connectivity-service
+related notifications are stored in the Kafka server.
+
+In comparison with openroadm notifications, in which several pre-defined kafka topics are created on nbinotification
+module instantiation, tapi-related kafka topics are created on-demand. Upon reception of a
+*create-notification-subscription-service request*, a new topic will be created in the Kafka server.
+This topic is named after the connectivity-service UUID.
+
+.. note::
+    Creating a Notification Subscription Service could include a list of T-API object UUIDs, therefore 1 topic per UUID
+    is created in the Kafka server.
+
+In the current implementation, only Connectivity Service related notification are supported.
+
+**REST API** : *POST /restconf/operations/tapi-notification:get-supported-notification-types*
+
+The response body will include the type of notifications supported and the object types
+
+Use the following RPC to create a Notification Subscription Service.
+
+**REST API** : *POST /restconf/operations/tapi-notification:create-notification-subscription-service*
+
+**Sample JSON Data**
+
+.. code:: json
+
+    {
+        "tapi-notification:input": {
+            "tapi-notification:subscription-filter": {
+                "tapi-notification:requested-notification-types": [
+                    "ALARM_EVENT"
+                ],
+                "tapi-notification:requested-object-types": [
+                    "CONNECTIVITY_SERVICE"
+                ],
+                "tapi-notification:requested-layer-protocols": [
+                    "<LAYER_PROTOCOL_NAME>"
+                ],
+                "tapi-notification:requested-object-identifier": [
+                    "<Service_UUID>"
+                ],
+                "tapi-notification:include-content": true,
+                "tapi-notification:local-id": "localId",
+                "tapi-notification:name": [
+                    {
+                        "tapi-notification:value-name": "Subscription name",
+                        "tapi-notification:value": "<notification_service_name>"
+                    }
+                ]
+            },
+            "tapi-notification:subscription-state": "ACTIVE"
+        }
+    }
+
+This call will return the *UUID* of the Notification Subscription service, which can later be used to retrieve the
+details of the created subscription, to delete the subscription (and all the related kafka topics) or to retrieve
+all the tapi notifications related to that subscription service.
+
+The figure below shows an example of the application of tapi and nbinotifications in order to notify when there is
+a connectivity service creation process. Depending on the status of the process a tapi-notification with the
+corresponding updated state of the connectivity service is sent to the topic "Service_UUID".
+
+.. figure:: ./images/TransportPCE-tapi-nbinotifications-service-example.jpg
+   :alt: Example of tapi connectivity service notifications using the feature nbinotifications in TransportPCE
+
+Additionally, when a connectivity service breaks down or is restored a tapi notification alarming the new status
+will be sent to a Kafka Server. Below an example of a tapi notification is shown.
+
+**Sample JSON T-API notification**
+
+.. code:: json
+
+    {
+      "nbi-notifications:notification-tapi-service": {
+        "layer-protocol-name": "<LAYER_PROTOCOL_NAME>",
+        "notification-type": "ATTRIBUTE_VALUE_CHANGE",
+        "changed-attributes": [
+          {
+            "value-name": "administrativeState",
+            "old-value": "<LOCKED_OR_UNLOCKED>",
+            "new-value": "<UNLOCKED_OR_LOCKED>"
+          },
+          {
+            "value-name": "operationalState",
+            "old-value": "DISABLED_OR_ENABLED",
+            "new-value": "ENABLED_OR_DISABLED"
+          }
+        ],
+        "target-object-name": [
+          {
+            "value-name": "Connectivity Service Name",
+            "value": "<SERVICE_UUID>"
+          }
+        ],
+        "uuid": "<NOTIFICATION_UUID>",
+        "target-object-type": "CONNECTIVITY_SERVICE",
+        "event-time-stamp": "2022-04-06T09:06:01+00:00",
+        "target-object-identifier": "<SERVICE_UUID>"
+      }
+    }
+
+To retrieve these tapi connectivity service notifications stored in the kafka server:
+
+**REST API** : *POST /restconf/operations/tapi-notification:get-notification-list*
+
+**Sample JSON Data**
+
+.. code:: json
+
+    {
+        "tapi-notification:input": {
+            "tapi-notification:subscription-id-or-name": "<SUBSCRIPTION_UUID_OR_NAME>",
+            "tapi-notification:time-period": "time-period"
+        }
+    }
 
+Further development will support more types of T-API objects, i.e., node, link, topology, connection...
 
 odl-transportpce-dmaap-client
 -----------------------------
diff --git a/docs/images/TransportPCE-Diagram-Sulfur.jpg b/docs/images/TransportPCE-Diagram-Sulfur.jpg
new file mode 100644 (file)
index 0000000..b39e8e0
Binary files /dev/null and b/docs/images/TransportPCE-Diagram-Sulfur.jpg differ
diff --git a/docs/images/TransportPCE-tapi-nbinotifications-service-example.jpg b/docs/images/TransportPCE-tapi-nbinotifications-service-example.jpg
new file mode 100644 (file)
index 0000000..8c85d2d
Binary files /dev/null and b/docs/images/TransportPCE-tapi-nbinotifications-service-example.jpg differ
index fbb62d8ff3829da518ac8dbc35f737224a456f24..f318582949394a4305dd8ada7cb5feab4a0dec03 100644 (file)
@@ -11,7 +11,7 @@
   <parent>
     <groupId>io.lighty.core</groupId>
     <artifactId>lighty-app-parent</artifactId>
-    <version>16.0.0</version>
+    <version>16.1.0</version>
     <relativePath/>
   </parent>
 
index fb3a8f828100277b2932919a53d8751062bbe377..a10b7f04bf50505210c020828200930af5f49938 100644 (file)
@@ -92,7 +92,7 @@ import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
 import org.opendaylight.transportpce.tapi.utils.TapiListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
@@ -215,7 +215,7 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
             R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
                     deviceTransactionManager, tapiLink);
             TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
-                    .getBindingDataBroker());
+                    .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
             TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
             TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
                     lightyServices.getBindingDataBroker());
@@ -230,7 +230,8 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
             TapiPortMappingListener tapiPortMappingListener =
                     new TapiPortMappingListener(tapiNetworkModelService);
             TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
-                    new TapiNetworkModelListenerImpl(networkTransaction);
+                    new TapiNetworkModelListenerImpl(networkTransaction,
+                            lightyServices.getBindingNotificationPublishService());
 
             tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
                     tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
@@ -240,8 +241,9 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
         if (activateNbiNotification) {
             LOG.info("Creating nbi-notifications beans ...");
             nbiNotificationsProvider = new NbiNotificationsProvider(
-                publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
-                lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
+                    publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
+                    lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
+                    networkTransaction);
         }
     }
 
index ab28ae2d88648eb0bf3203fc78c7a835134c5f82..18d5b5e7355c1173494aeea3262f56ddee3aac94 100644 (file)
@@ -310,7 +310,7 @@ public final class TPCEUtils {
             // API models / opendaylight
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102
             .$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.$YangModuleInfoImpl
                     .getInstance(),
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.$YangModuleInfoImpl
                     .getInstance(),
@@ -341,7 +341,6 @@ public final class TPCEUtils {
                     .$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.$YangModuleInfoImpl.getInstance(),
 
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.$YangModuleInfoImpl
                 .getInstance(),
@@ -365,7 +364,7 @@ public final class TPCEUtils {
                     .getInstance(),
             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.$YangModuleInfoImpl
                     .getInstance());
 
     private static final Set<YangModuleInfo> TPCE_YANG_MODEL = Stream.concat(
index 96ff011b67a401c537422e5ff2a43631ab004616..552c3c2b0e61e2701ae9d223ae3a0b7f1348c91b 100644 (file)
       <artifactId>transportpce-api</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>transportpce-tapimodels</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>transportpce-common</artifactId>
index 7ebc0bdf620cb09a11bc9e3e31fe691298374f5a..154cbb80f4d191bd225a8d24c2bc11f9d52d1de2 100644 (file)
@@ -18,6 +18,7 @@ import org.apache.kafka.clients.consumer.ConsumerConfig;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.apache.kafka.clients.consumer.ConsumerRecords;
 import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.apache.kafka.common.TopicPartition;
 import org.apache.kafka.common.serialization.StringDeserializer;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
@@ -39,6 +40,7 @@ public class Subscriber<T extends DataObject, D> {
         Properties propsConsumer = NbiNotificationsUtils.loadProperties("subscriber.properties");
         propsConsumer.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
         propsConsumer.put(ConsumerConfig.CLIENT_ID_CONFIG, id);
+        propsConsumer.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
         propsConsumer.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
         propsConsumer.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG , deserializerConf);
         propsConsumer.put(ConfigConstants.CONVERTER , deserializer);
@@ -55,7 +57,7 @@ public class Subscriber<T extends DataObject, D> {
         final ConsumerRecords<String, D> consumerRecords = consumer.poll(Duration.ofMillis(1000));
         List<D> notificationServiceList = new ArrayList<>();
         YangInstanceIdentifier.of(name);
-        for (ConsumerRecord<String, D> record : consumerRecords) {
+        for (ConsumerRecord<String, D> record : consumerRecords.records(new TopicPartition(topicName, 0))) {
             if (record.value() != null) {
                 notificationServiceList.add(record.value());
             }
index 77f6f8552c3cf590a60f2d82cb0fb98a30f0de07..0a23c16e00b706dc2306efd655bc6bb8f74338ec 100644 (file)
 package org.opendaylight.transportpce.nbinotifications.impl;
 
 import com.google.common.util.concurrent.ListenableFuture;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.nbinotifications.consumer.Subscriber;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceDeserializer;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceDeserializer;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsAlarmServiceInput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsAlarmServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsAlarmServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsProcessServiceInput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsProcessServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsProcessServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotificationDeserializer;
+import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceInput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceInput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.DeleteNotificationSubscriptionServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.DeleteNotificationSubscriptionServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.DeleteNotificationSubscriptionServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetSupportedNotificationTypesInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetSupportedNotificationTypesOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetSupportedNotificationTypesOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.UpdateNotificationSubscriptionServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.UpdateNotificationSubscriptionServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.output.SubscriptionService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.output.SubscriptionServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service.list.output.SubscriptionServiceKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.context.NotifSubscription;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.context.NotifSubscriptionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.context.NotifSubscriptionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.subscription.service.SubscriptionFilter;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.subscription.service.SubscriptionFilterBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NbiNotificationsImpl implements NbiNotificationsService {
+public class NbiNotificationsImpl implements NbiNotificationsService, TapiNotificationService {
     private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsImpl.class);
     private final JsonStringConverter<NotificationProcessService> converterService;
     private final JsonStringConverter<NotificationAlarmService> converterAlarmService;
+    private final JsonStringConverter<NotificationTapiService> converterTapiService;
     private final String server;
+    private final NetworkTransactionService networkTransactionService;
+    private final TopicManager topicManager;
 
     public NbiNotificationsImpl(JsonStringConverter<NotificationProcessService> converterService,
-                                JsonStringConverter<NotificationAlarmService> converterAlarmService, String server) {
+                                JsonStringConverter<NotificationAlarmService> converterAlarmService,
+                                JsonStringConverter<NotificationTapiService> converterTapiService, String server,
+                                NetworkTransactionService networkTransactionService, TopicManager topicManager) {
         this.converterService = converterService;
         this.converterAlarmService = converterAlarmService;
+        this.converterTapiService = converterTapiService;
         this.server = server;
+        this.networkTransactionService = networkTransactionService;
+        this.topicManager = topicManager;
     }
 
     @Override
@@ -75,4 +138,292 @@ public class NbiNotificationsImpl implements NbiNotificationsService {
         return RpcResultBuilder.success(new GetNotificationsAlarmServiceOutputBuilder()
                 .setNotificationsAlarmService(notificationAlarmServiceList).build()).buildFuture();
     }
+
+    @Override
+    public ListenableFuture<RpcResult<GetSupportedNotificationTypesOutput>>
+            getSupportedNotificationTypes(GetSupportedNotificationTypesInput input) {
+        NotificationContext notificationContext = getNotificationContext();
+        if (notificationContext == null) {
+            return RpcResultBuilder.<GetSupportedNotificationTypesOutput>failed()
+                .withError(ErrorType.APPLICATION, "Couldnt get Notification Context from Datastore")
+                .buildFuture();
+        }
+        if (notificationContext.getNotifSubscription() == null) {
+            return RpcResultBuilder.success(new GetSupportedNotificationTypesOutputBuilder()
+                .setSupportedNotificationTypes(new HashSet<>())
+                .setSupportedObjectTypes(new HashSet<>()).build()).buildFuture();
+        }
+        Set<NotificationType> notificationTypeList = new HashSet<>();
+        Set<ObjectType> objectTypeList = new HashSet<>();
+        for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) {
+            if (notifSubscription.getSupportedNotificationTypes() != null) {
+                notificationTypeList.addAll(notifSubscription.getSupportedNotificationTypes());
+            }
+            if (notifSubscription.getSupportedObjectTypes() != null) {
+                objectTypeList.addAll(notifSubscription.getSupportedObjectTypes());
+            }
+        }
+        return RpcResultBuilder.success(new GetSupportedNotificationTypesOutputBuilder()
+            .setSupportedNotificationTypes(notificationTypeList)
+            .setSupportedObjectTypes(objectTypeList).build()).buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>>
+            createNotificationSubscriptionService(CreateNotificationSubscriptionServiceInput input) {
+        for (Uuid uuid:input.getSubscriptionFilter().getRequestedObjectIdentifier()) {
+            LOG.info("Adding T-API topic: {} to Kafka server", uuid.getValue());
+            this.topicManager.addTapiTopic(uuid.getValue());
+        }
+        SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
+            .setName(input.getSubscriptionFilter().getName())
+            .setLocalId(input.getSubscriptionFilter().getLocalId())
+            .setIncludeContent(input.getSubscriptionFilter().getIncludeContent())
+            .setRequestedNotificationTypes(input.getSubscriptionFilter().getRequestedNotificationTypes())
+            .setRequestedLayerProtocols(input.getSubscriptionFilter().getRequestedLayerProtocols())
+            .setRequestedObjectIdentifier(input.getSubscriptionFilter().getRequestedObjectIdentifier())
+            .setRequestedObjectTypes(input.getSubscriptionFilter().getRequestedObjectTypes())
+            .build();
+        Uuid notifSubscriptionUuid = new Uuid(UUID.randomUUID().toString());
+        SubscriptionService subscriptionService = new SubscriptionServiceBuilder()
+            .setSubscriptionFilter(subscriptionFilter)
+            .setSubscriptionState(input.getSubscriptionState())
+            .setUuid(notifSubscriptionUuid)
+            .build();
+
+        NotifSubscriptionKey notifSubscriptionKey = new NotifSubscriptionKey(notifSubscriptionUuid);
+        Set<NotificationType> notificationTypes = (subscriptionFilter.getRequestedNotificationTypes() != null)
+            ? subscriptionFilter.getRequestedNotificationTypes()
+            : new HashSet<>(List.of(NotificationType.ALARMEVENT));
+        Set<ObjectType> objectTypes = (subscriptionFilter.getRequestedObjectTypes() != null)
+            ? subscriptionFilter.getRequestedObjectTypes()
+            : new HashSet<>(List.of(ObjectType.CONNECTIVITYSERVICE));
+        NotifSubscription notifSubscription = new NotifSubscriptionBuilder()
+            .setSubscriptionState(subscriptionService.getSubscriptionState())
+            .setSubscriptionFilter(subscriptionService.getSubscriptionFilter())
+            .setUuid(notifSubscriptionUuid)
+            .setSupportedNotificationTypes(notificationTypes)
+            .setSupportedObjectTypes(objectTypes)
+            .setName(subscriptionService.getName())
+            .build();
+        NotificationContext notificationContext = getNotificationContext();
+        Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>();
+        if (notificationContext != null && notificationContext.getNotifSubscription() != null) {
+            notifSubscriptions.putAll(notificationContext.getNotifSubscription());
+        }
+        notifSubscriptions.put(notifSubscriptionKey, notifSubscription);
+        NotificationContext notificationContext1 = new NotificationContextBuilder()
+            .setNotification(notificationContext == null ? new HashMap<>() : notificationContext.getNotification())
+            .setNotifSubscription(notifSubscriptions)
+            .build();
+        if (!updateNotificationContext(notificationContext1)) {
+            LOG.error("Failed to update Notification context");
+            return RpcResultBuilder.<CreateNotificationSubscriptionServiceOutput>failed()
+                .withError(ErrorType.RPC, "Failed to update notification context").buildFuture();
+        }
+        CreateNotificationSubscriptionServiceOutput serviceOutput =
+            new CreateNotificationSubscriptionServiceOutputBuilder()
+                .setSubscriptionService(subscriptionService)
+                .build();
+        return RpcResultBuilder.success(serviceOutput).buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<UpdateNotificationSubscriptionServiceOutput>>
+            updateNotificationSubscriptionService(UpdateNotificationSubscriptionServiceInput input) {
+        // TODO --> Not yet implemented
+        return null;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<DeleteNotificationSubscriptionServiceOutput>>
+            deleteNotificationSubscriptionService(DeleteNotificationSubscriptionServiceInput input) {
+        try {
+            if (input == null || input.getSubscriptionIdOrName() == null) {
+                LOG.warn("Missing mandatory params for input {}", input);
+                return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
+                    .withError(ErrorType.RPC, "Missing input parameters").buildFuture();
+            }
+            Uuid notifSubsUuid = getUuidFromIput(input.getSubscriptionIdOrName());
+            InstanceIdentifier<NotifSubscription> notifSubscriptionIID = InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class).child(NotificationContext.class).child(NotifSubscription.class,
+                    new NotifSubscriptionKey(notifSubsUuid)).build();
+            Optional<NotifSubscription> optionalNotifSub = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID).get();
+
+            if (!optionalNotifSub.isPresent()) {
+                return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
+                    .withError(ErrorType.APPLICATION,
+                        "Notification subscription doesnt exist").buildFuture();
+            }
+            NotifSubscription notifSubscription = optionalNotifSub.get();
+            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID);
+            this.networkTransactionService.commit().get();
+            for (Uuid objectUuid:notifSubscription.getSubscriptionFilter().getRequestedObjectIdentifier()) {
+                this.topicManager.deleteTapiTopic(objectUuid.getValue());
+            }
+            return RpcResultBuilder.success(new DeleteNotificationSubscriptionServiceOutputBuilder().build())
+                .buildFuture();
+        } catch (InterruptedException | ExecutionException | NoSuchElementException e) {
+            LOG.error("Failed to delete Notification subscription service", e);
+        }
+        return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
+            .withError(ErrorType.APPLICATION,
+                "Failed to delete notification subscription service").buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationSubscriptionServiceDetailsOutput>>
+            getNotificationSubscriptionServiceDetails(GetNotificationSubscriptionServiceDetailsInput input) {
+        if (input == null || input.getSubscriptionIdOrName() == null) {
+            LOG.warn("Missing mandatory params for input {}", input);
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Missing input parameters").buildFuture();
+        }
+        Uuid notifSubsUuid = getUuidFromIput(input.getSubscriptionIdOrName());
+        NotificationContext notificationContext = getNotificationContext();
+        if (notificationContext == null) {
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
+                .withError(ErrorType.APPLICATION, "Notification context is empty")
+                .buildFuture();
+        }
+        if (notificationContext.getNotifSubscription() == null) {
+            return RpcResultBuilder.success(new GetNotificationSubscriptionServiceDetailsOutputBuilder()
+                .setSubscriptionService(new org.opendaylight.yang.gen.v1
+                    .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service
+                        .details.output.SubscriptionServiceBuilder().build()).build()).buildFuture();
+        }
+        if (!notificationContext.getNotifSubscription().containsKey(new NotifSubscriptionKey(notifSubsUuid))) {
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
+                .withError(ErrorType.APPLICATION,
+                    "Notification subscription service doesnt exist").buildFuture();
+        }
+        return RpcResultBuilder.success(new GetNotificationSubscriptionServiceDetailsOutputBuilder()
+            .setSubscriptionService(new org.opendaylight.yang.gen.v1.urn
+                .onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service.details.output
+                .SubscriptionServiceBuilder(notificationContext.getNotifSubscription().get(
+                    new NotifSubscriptionKey(notifSubsUuid))).build()).build()).buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationSubscriptionServiceListOutput>>
+            getNotificationSubscriptionServiceList(GetNotificationSubscriptionServiceListInput input) {
+        NotificationContext notificationContext = getNotificationContext();
+        if (notificationContext == null) {
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceListOutput>failed()
+                .withError(ErrorType.APPLICATION, "Notification context is empty")
+                .buildFuture();
+        }
+        if (notificationContext.getNotifSubscription() == null) {
+            return RpcResultBuilder.success(new GetNotificationSubscriptionServiceListOutputBuilder()
+                .setSubscriptionService(new HashMap<>()).build()).buildFuture();
+        }
+        Map<SubscriptionServiceKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang
+            .tapi.notification.rev181210.get.notification.subscription.service.list.output.SubscriptionService>
+                notifSubsMap = new HashMap<>();
+        for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) {
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang
+                .tapi.notification.rev181210.get.notification.subscription.service.list.output.SubscriptionService
+                    subscriptionService = new org.opendaylight.yang.gen.v1
+                        .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service
+                            .list.output.SubscriptionServiceBuilder(notifSubscription).build();
+            notifSubsMap.put(subscriptionService.key(), subscriptionService);
+        }
+        return RpcResultBuilder.success(new GetNotificationSubscriptionServiceListOutputBuilder()
+            .setSubscriptionService(notifSubsMap).build()).buildFuture();
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationListOutput>> getNotificationList(GetNotificationListInput input) {
+        try {
+            LOG.info("RPC getNotificationList received");
+            if (input == null || input.getSubscriptionIdOrName() == null) {
+                LOG.warn("Missing mandatory params for input {}", input);
+                return RpcResultBuilder.<GetNotificationListOutput>failed().withError(ErrorType.RPC,
+                    "Missing input parameters").buildFuture();
+            }
+            Uuid notifSubsUuid = getUuidFromIput(input.getSubscriptionIdOrName());
+            InstanceIdentifier<NotifSubscription> notifSubscriptionIID = InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class).child(NotificationContext.class).child(NotifSubscription.class,
+                    new NotifSubscriptionKey(notifSubsUuid)).build();
+            Optional<NotifSubscription> optionalNotifSub = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID).get();
+
+            if (!optionalNotifSub.isPresent()) {
+                return RpcResultBuilder.<GetNotificationListOutput>failed()
+                    .withError(ErrorType.APPLICATION,
+                        "Notification subscription doesnt exist").buildFuture();
+            }
+            NotifSubscription notifSubscription = optionalNotifSub.get();
+            List<Notification> notificationTapiList = new ArrayList<>();
+            for (Uuid objectUuid:notifSubscription.getSubscriptionFilter().getRequestedObjectIdentifier()) {
+                if (!this.topicManager.getTapiTopicMap().containsKey(objectUuid.getValue())) {
+                    LOG.warn("Topic doesnt exist for {}", objectUuid.getValue());
+                    continue;
+                }
+                LOG.info("Going to get notifications for topic {}", objectUuid.getValue());
+                Subscriber<NotificationTapiService, Notification> subscriber = new Subscriber<>(
+                    objectUuid.getValue(), objectUuid.getValue(), server, converterTapiService,
+                    TapiNotificationDeserializer.class);
+                notificationTapiList.addAll(subscriber.subscribe(objectUuid.getValue(), Notification.QNAME));
+            }
+            LOG.info("TAPI notifications = {}", notificationTapiList);
+            Map<NotificationKey, Notification> notificationMap = new HashMap<>();
+            for (Notification notif:notificationTapiList) {
+                notificationMap.put(notif.key(), notif);
+            }
+            return RpcResultBuilder.success(new GetNotificationListOutputBuilder()
+                .setNotification(notificationMap).build()).buildFuture();
+        } catch (InterruptedException | ExecutionException | NoSuchElementException e) {
+            LOG.error("Failed to get Notifications from Kafka", e);
+        }
+        return RpcResultBuilder.<GetNotificationListOutput>failed()
+            .withError(ErrorType.APPLICATION,
+                "Notifications couldnt be retrieved from Kafka server").buildFuture();
+    }
+
+    private NotificationContext getNotificationContext() {
+        LOG.info("Getting tapi notification context");
+        try {
+            InstanceIdentifier<NotificationContext> notificationcontextIID =
+                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                    .child(NotificationContext.class).build();
+            Optional<NotificationContext> notificationContextOptional
+                = this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, notificationcontextIID).get();
+            if (!notificationContextOptional.isPresent()) {
+                LOG.error("Could not get TAPI notification context");
+                return null;
+            }
+            return notificationContextOptional.get();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Could not get TAPI notification context");
+        }
+        return null;
+    }
+
+    private boolean updateNotificationContext(NotificationContext notificationContext1) {
+        try {
+            InstanceIdentifier<NotificationContext> notificationcontextIID =
+                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                    .child(NotificationContext.class).build();
+            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, notificationcontextIID,
+                notificationContext1);
+            this.networkTransactionService.commit().get();
+            return true;
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Could not update TAPI notification context");
+        }
+        return false;
+    }
+
+    private Uuid getUuidFromIput(String serviceIdOrName) {
+        try {
+            UUID.fromString(serviceIdOrName);
+            LOG.info("Given attribute {} is a UUID", serviceIdOrName);
+            return new Uuid(serviceIdOrName);
+        } catch (IllegalArgumentException e) {
+            LOG.info("Given attribute {} is not a UUID", serviceIdOrName);
+            return new Uuid(UUID.nameUUIDFromBytes(serviceIdOrName.getBytes(StandardCharsets.UTF_8)).toString());
+        }
+    }
 }
index 24c0383e4dbfb516383666a734612d217a8b5089..863d689a3af8db038276ca6435902caf1f8b2c2d 100644 (file)
@@ -14,14 +14,16 @@ import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsListenerImpl;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
-import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceSerializer;
-import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceSerializer;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
+import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationService;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.slf4j.Logger;
@@ -36,30 +38,39 @@ public class NbiNotificationsProvider {
     private final NotificationService notificationService;
     private final JsonStringConverter<NotificationProcessService> converterService;
     private final JsonStringConverter<NotificationAlarmService> converterAlarmService;
+    private final JsonStringConverter<NotificationTapiService> converterTapiService;
     private final String subscriberServer;
     private ObjectRegistration<NbiNotificationsService> rpcRegistration;
     private ListenerRegistration<NbiNotificationsListener> listenerRegistration;
+    private TopicManager topicManager = TopicManager.getInstance();
+    private final NetworkTransactionService networkTransactionService;
 
 
     public NbiNotificationsProvider(List<String> publishersService, List<String> publishersAlarm,
-            String subscriberServer, String publisherServer,
-            RpcProviderService rpcProviderService, NotificationService notificationService,
-            BindingDOMCodecServices bindingDOMCodecServices) {
+                                    String subscriberServer, String publisherServer,
+                                    RpcProviderService rpcProviderService, NotificationService notificationService,
+                                    BindingDOMCodecServices bindingDOMCodecServices,
+                                    NetworkTransactionService networkTransactionService) {
         this.rpcService = rpcProviderService;
         this.notificationService = notificationService;
+        this.topicManager.setPublisherServer(publisherServer);
         converterService =  new JsonStringConverter<>(bindingDOMCodecServices);
+        this.topicManager.setProcessConverter(converterService);
         for (String publisherService: publishersService) {
             LOG.info("Creating publisher for the following class {}", publisherService);
-            publishersServiceMap.put(publisherService, new Publisher<>(publisherService, publisherServer,
-                    converterService, NotificationServiceSerializer.class));
+            this.topicManager.addProcessTopic(publisherService);
         }
         converterAlarmService = new JsonStringConverter<>(bindingDOMCodecServices);
+        this.topicManager.setAlarmConverter(converterAlarmService);
         for (String publisherAlarm: publishersAlarm) {
             LOG.info("Creating publisher for the following class {}", publisherAlarm);
-            publishersAlarmMap.put(publisherAlarm, new Publisher<>(publisherAlarm, publisherServer,
-                    converterAlarmService, NotificationAlarmServiceSerializer.class));
+            this.topicManager.addAlarmTopic(publisherAlarm);
         }
         this.subscriberServer = subscriberServer;
+        converterTapiService = new JsonStringConverter<>(bindingDOMCodecServices);
+        LOG.info("baozhi tapi converter: {}", converterTapiService);
+        this.topicManager.setTapiConverter(converterTapiService);
+        this.networkTransactionService = networkTransactionService;
     }
 
     /**
@@ -67,10 +78,15 @@ public class NbiNotificationsProvider {
      */
     public void init() {
         LOG.info("NbiNotificationsProvider Session Initiated");
-        rpcRegistration = rpcService.registerRpcImplementation(NbiNotificationsService.class,
-                new NbiNotificationsImpl(converterService, converterAlarmService, subscriberServer));
-        listenerRegistration = notificationService.registerNotificationListener(
-                new NbiNotificationsListenerImpl(publishersServiceMap, publishersAlarmMap));
+        NbiNotificationsImpl nbiImpl = new NbiNotificationsImpl(converterService, converterAlarmService,
+            converterTapiService, subscriberServer, this.networkTransactionService, this.topicManager);
+        rpcRegistration = rpcService.registerRpcImplementation(NbiNotificationsService.class, nbiImpl);
+        rpcService.registerRpcImplementation(TapiNotificationService.class, nbiImpl);
+        NbiNotificationsListenerImpl nbiNotificationsListener =
+                new NbiNotificationsListenerImpl(this.topicManager.getProcessTopicMap(),
+                        this.topicManager.getAlarmTopicMap(), this.topicManager.getTapiTopicMap());
+        listenerRegistration = notificationService.registerNotificationListener(nbiNotificationsListener);
+        this.topicManager.setNbiNotificationsListener(nbiNotificationsListener);
     }
 
     /**
index 37b4c0181618044108e0d79435ca70ad5a7fa102..797fca71966b61d8a654fd07b591a7127982022c 100644 (file)
@@ -7,27 +7,48 @@
  */
 package org.opendaylight.transportpce.nbinotifications.listener;
 
+import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AlarmInfoBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectName;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TcaInfoBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
     private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsListenerImpl.class);
-    private final Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
-    private final Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
+    private Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
+    private Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
+    private Map<String, Publisher<NotificationTapiService>> tapiPublisherMap;
 
     public NbiNotificationsListenerImpl(Map<String, Publisher<NotificationProcessService>> publishersServiceMap,
-                                        Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap) {
+                                        Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap,
+                                        Map<String, Publisher<NotificationTapiService>> tapiPublisherMap) {
         this.publishersServiceMap = publishersServiceMap;
         this.publishersAlarmMap = publishersAlarmMap;
+        this.tapiPublisherMap = tapiPublisherMap;
     }
 
     @Override
@@ -67,4 +88,85 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
                 .setServiceName(notification.getServiceName())
                         .build(), "alarm" + notification.getConnectionType().getName());
     }
+
+    @Override
+    public void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
+        LOG.info("Receiving request for publishing TAPI notification");
+        String topic = notification.getTopic();
+        if (!tapiPublisherMap.containsKey(topic)) {
+            LOG.error("Unknown topic {}", topic);
+            return;
+        }
+        Publisher<NotificationTapiService> publisher = tapiPublisherMap.get(topic);
+        publisher.sendEvent(new NotificationTapiServiceBuilder(transformTapiNotification(notification))
+                .build(), topic);
+    }
+
+    private NotificationTapiService transformTapiNotification(PublishTapiNotificationService notification) {
+        Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
+        if (notification.getAdditionalInfo() != null) {
+            for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo
+                addInfo:notification.getAdditionalInfo().values()) {
+                AdditionalInfo transAddInfo = new AdditionalInfoBuilder(addInfo).build();
+                addInfoMap.put(transAddInfo.key(), transAddInfo);
+            }
+        }
+        Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
+        if (notification.getChangedAttributes() != null) {
+            for (org.opendaylight.yang.gen.v1
+                .urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes
+                    changedAtt:notification.getChangedAttributes().values()) {
+                ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
+                changedAttMap.put(transChangedAtt.key(), transChangedAtt);
+            }
+        }
+        Map<NameKey, Name> nameMap = new HashMap<>();
+        if (notification.getName() != null) {
+            for (Name name:notification.getName().values()) {
+                Name transName = new NameBuilder(name).build();
+                nameMap.put(transName.key(), transName);
+            }
+        }
+        Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
+        if (notification.getTargetObjectName() != null) {
+            for (org.opendaylight.yang.gen.v1
+                .urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName
+                    targetObjectName:notification.getTargetObjectName().values()) {
+                TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
+                targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
+            }
+        }
+        LOG.info("Notification uuid = {}", notification.getUuid());
+        return new NotificationTapiServiceBuilder()
+            .setAlarmInfo(notification.getAlarmInfo() == null ? null
+                : new AlarmInfoBuilder(notification.getAlarmInfo()).build())
+            .setAdditionalText(notification.getAdditionalText())
+            .setAdditionalInfo(addInfoMap)
+            .setNotificationType(notification.getNotificationType())
+            .setChangedAttributes(changedAttMap)
+            .setEventTimeStamp(notification.getEventTimeStamp())
+            .setLayerProtocolName(notification.getLayerProtocolName())
+            .setName(nameMap)
+            .setSequenceNumber(notification.getSequenceNumber())
+            .setSourceIndicator(notification.getSourceIndicator())
+            .setTargetObjectIdentifier(notification.getTargetObjectIdentifier())
+            .setTargetObjectName(targetObjNameMap)
+            .setTargetObjectType(notification.getTargetObjectType())
+            .setTcaInfo(notification.getTcaInfo() == null ? null
+                : new TcaInfoBuilder(notification.getTcaInfo()).build())
+            .setUuid(notification.getUuid())
+            .build();
+    }
+
+    public void setPublishersServiceMap(Map<String, Publisher<NotificationProcessService>> publishersServiceMap) {
+        this.publishersServiceMap = publishersServiceMap;
+    }
+
+    public void setPublishersAlarmMap(Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap) {
+        this.publishersAlarmMap = publishersAlarmMap;
+    }
+
+    public void setTapiPublishersMap(Map<String, Publisher<NotificationTapiService>> tapiPublishersMap) {
+        this.tapiPublisherMap = tapiPublishersMap;
+    }
 }
index c08dbfb2fa9ceda56cd4a45569f65738437271a1..4f0d19fcaae2ffea7cc785c1139382d871cba006 100644 (file)
@@ -11,9 +11,9 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Deserializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index 9d0371a125cab43fab04588c34d0267a470c83d4..9816d9f6ff7cd70f4463210463bd575a15c30f16 100644 (file)
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Serializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index eab7f3618f9eb031e94a0c789a850f8d2b8d62fc..73e979310683355c0eb86d17e5dd4eaf5cb21d55 100644 (file)
@@ -11,9 +11,9 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Deserializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index dc2c3d775737d8a290baf77416d4f4726a90224b..8090ccd268f8538027a56aec5999465d5520f321 100644 (file)
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Serializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationDeserializer.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationDeserializer.java
new file mode 100644 (file)
index 0000000..c4317f3
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright Â© 2021 Nokia, 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.nbinotifications.serialization;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.kafka.common.serialization.Deserializer;
+import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfoBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfoKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AlarmInfoBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TcaInfoBuilder;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TapiNotificationDeserializer implements Deserializer<Notification> {
+    private static final Logger LOG = LoggerFactory.getLogger(TapiNotificationDeserializer.class);
+    private JsonStringConverter<NotificationTapiService> converter;
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void configure(Map<String, ?> configs, boolean isKey) {
+        LOG.info("Tapi Deserializer configuration {}", configs);
+        if (configs.containsKey(ConfigConstants.CONVERTER)
+            && configs.get(ConfigConstants.CONVERTER) instanceof JsonStringConverter<?>) {
+            converter = (JsonStringConverter<NotificationTapiService>) configs.get(ConfigConstants.CONVERTER);
+        }
+    }
+
+    @Override
+    public Notification deserialize(String topic, byte[] data) {
+        if (converter == null) {
+            throw new IllegalArgumentException(
+                "Converter should be configured through configure method of deserializer");
+        }
+        String value = new String(data, StandardCharsets.UTF_8);
+        // The message published is
+        // org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService
+        // we have to map it to
+        // org.opendaylight.yang.gen.v1
+        // .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification
+        NotificationTapiService mappedString = converter.createDataObjectFromJsonString(
+            YangInstanceIdentifier.of(NotificationTapiService.QNAME), value, JSONCodecFactorySupplier.RFC7951);
+        if (mappedString == null) {
+            return null;
+        }
+        LOG.info("Reading Tapi event {}", mappedString);
+        return transformNotificationTapiService(mappedString);
+    }
+
+    private Notification transformNotificationTapiService(NotificationTapiService mappedString) {
+        LOG.info("Transforming TAPI notification for getNotificationList rpc");
+        Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
+        if (mappedString.getAdditionalInfo() != null) {
+            for (org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo
+                    addInfo:mappedString.getAdditionalInfo().values()) {
+                AdditionalInfo transAddInfo = new AdditionalInfoBuilder()
+                    .setValue(addInfo.getValue())
+                    .setValueName(addInfo.getValueName())
+                    .build();
+                addInfoMap.put(transAddInfo.key(), transAddInfo);
+            }
+        }
+        Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
+        if (mappedString.getChangedAttributes() != null) {
+            for (org.opendaylight.yang.gen.v1
+                    .nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes changedAtt:mappedString
+                        .getChangedAttributes().values()) {
+                ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
+                changedAttMap.put(transChangedAtt.key(), transChangedAtt);
+            }
+        }
+        Map<NameKey, Name> nameMap = new HashMap<>();
+        if (mappedString.getName() != null) {
+            for (Name name:mappedString.getName().values()) {
+                Name transName = new NameBuilder(name).build();
+                nameMap.put(transName.key(), transName);
+            }
+        }
+        Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
+        if (mappedString.getTargetObjectName() != null) {
+            for (org.opendaylight.yang.gen.v1
+                    .nbi.notifications.rev211013.notification.tapi.service.TargetObjectName
+                        targetObjectName:mappedString.getTargetObjectName().values()) {
+                TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
+                targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
+            }
+        }
+        LOG.info("Notification uuid = {}", mappedString.getUuid().getValue());
+        return new NotificationBuilder()
+            .setAlarmInfo(mappedString.getAlarmInfo() == null ? null
+                : new AlarmInfoBuilder(mappedString.getAlarmInfo()).build())
+            .setAdditionalText(mappedString.getAdditionalText())
+            .setAdditionalInfo(addInfoMap)
+            .setNotificationType(mappedString.getNotificationType())
+            .setChangedAttributes(changedAttMap)
+            .setEventTimeStamp(mappedString.getEventTimeStamp())
+            .setLayerProtocolName(mappedString.getLayerProtocolName())
+            .setName(nameMap)
+            .setSequenceNumber(mappedString.getSequenceNumber())
+            .setSourceIndicator(mappedString.getSourceIndicator())
+            .setTargetObjectIdentifier(mappedString.getTargetObjectIdentifier())
+            .setTargetObjectName(targetObjNameMap)
+            .setTargetObjectType(mappedString.getTargetObjectType())
+            .setTcaInfo(mappedString.getTcaInfo() == null ? null
+                : new TcaInfoBuilder(mappedString.getTcaInfo()).build())
+            .setUuid(mappedString.getUuid())
+            .build();
+    }
+}
+
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationSerializer.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationSerializer.java
new file mode 100644 (file)
index 0000000..7525fcf
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright Â© 2021 Nokia, 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.nbinotifications.serialization;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import org.apache.kafka.common.serialization.Serializer;
+import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TapiNotificationSerializer implements Serializer<NotificationTapiService> {
+    private static final Logger LOG = LoggerFactory.getLogger(TapiNotificationSerializer.class);
+    private JsonStringConverter<NotificationTapiService> converter;
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void configure(Map<String, ?> configs, boolean isKey) {
+        LOG.info("Deserializer configuration {}", configs);
+        if (configs.containsKey(ConfigConstants.CONVERTER)
+                && configs.get(ConfigConstants.CONVERTER) instanceof JsonStringConverter<?>) {
+            converter = (JsonStringConverter<NotificationTapiService>) configs.get(ConfigConstants.CONVERTER);
+        }
+    }
+
+    @Override
+    public byte[] serialize(String topic, NotificationTapiService data) {
+        if (converter == null) {
+            throw new IllegalArgumentException(
+                    "Converter should be configured through configure method of serializer");
+        }
+        if (data == null) {
+            LOG.error("Notification data is empty");
+            return new byte[0];
+        }
+        try {
+            InstanceIdentifier<NotificationTapiService> iid = InstanceIdentifier.builder(NotificationTapiService.class)
+                .build();
+            String serialized = converter.createJsonStringFromDataObject(iid, data, JSONCodecFactorySupplier.RFC7951);
+            LOG.info("Serialized event {}", serialized);
+            return serialized.getBytes(StandardCharsets.UTF_8);
+        } catch (IOException e) {
+            LOG.error("Event couldnt be serialized", e);
+            return new byte[0];
+        }
+    }
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/TopicManager.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/TopicManager.java
new file mode 100644 (file)
index 0000000..ea596de
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright Â© 2021 Nokia, 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.nbinotifications.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsListenerImpl;
+import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
+import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceSerializer;
+import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceSerializer;
+import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotificationSerializer;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class TopicManager {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TopicManager.class);
+    private static TopicManager instance = new TopicManager();
+
+    private Map<String, Publisher<NotificationTapiService>> tapiPublisherMap = new HashMap<>();
+    private String publisherServer;
+    private JsonStringConverter<NotificationTapiService> tapiConverter;
+    private NbiNotificationsListenerImpl nbiNotificationsListener;
+    private Map<String, Publisher<NotificationAlarmService>> alarmPublisherMap = new HashMap<>();
+    private Map<String, Publisher<NotificationProcessService>> processPublisherMap = new HashMap<>();
+    private JsonStringConverter<NotificationProcessService> processConverter;
+    private JsonStringConverter<NotificationAlarmService> alarmConverter;
+    private int calledSetConverter = 0;
+
+    private TopicManager() {
+    }
+
+    public static TopicManager getInstance() {
+        return instance;
+    }
+
+    public void setNbiNotificationsListener(NbiNotificationsListenerImpl nbiNotificationsListener) {
+        this.nbiNotificationsListener = nbiNotificationsListener;
+    }
+
+    public void setProcessConverter(JsonStringConverter<NotificationProcessService> processConverter) {
+        this.processConverter = processConverter;
+    }
+
+    public void setAlarmConverter(JsonStringConverter<NotificationAlarmService> alarmConverter) {
+        this.alarmConverter = alarmConverter;
+    }
+
+    public void setTapiConverter(JsonStringConverter<NotificationTapiService> tapiConverter) {
+        this.tapiConverter = tapiConverter;
+        this.calledSetConverter++;
+    }
+
+    public void setPublisherServer(String publisherServer) {
+        this.publisherServer = publisherServer;
+    }
+
+    public void addProcessTopic(String topic) {
+        LOG.info("Adding process topic: {}", topic);
+        processPublisherMap.put(topic, new Publisher<>(topic, publisherServer, processConverter,
+            NotificationServiceSerializer.class));
+        if (this.nbiNotificationsListener != null) {
+            this.nbiNotificationsListener.setPublishersServiceMap(processPublisherMap);
+        }
+    }
+
+    public void addAlarmTopic(String topic) {
+        LOG.info("Adding alarm topic: {}", topic);
+        alarmPublisherMap.put(topic, new Publisher<>(topic, publisherServer, alarmConverter,
+                NotificationAlarmServiceSerializer.class));
+        if (this.nbiNotificationsListener != null) {
+            this.nbiNotificationsListener.setPublishersAlarmMap(alarmPublisherMap);
+        }
+    }
+
+    public void addTapiTopic(String topic) {
+        if (tapiPublisherMap.containsKey(topic)) {
+            LOG.info("Tapi topic: {} already exists", topic);
+            return;
+        }
+        LOG.info("Adding new tapi topic: {}", topic);
+        tapiPublisherMap.put(topic, new Publisher<>(topic, publisherServer, tapiConverter,
+            TapiNotificationSerializer.class));
+        if (this.nbiNotificationsListener != null) {
+            this.nbiNotificationsListener.setTapiPublishersMap(tapiPublisherMap);
+        }
+    }
+
+    public void deleteTapiTopic(String topic) {
+        if (!tapiPublisherMap.containsKey(topic)) {
+            LOG.info("Tapi topic: {} doesnt exist", topic);
+            return;
+        }
+        LOG.info("Deleting tapi topic: {}", topic);
+        tapiPublisherMap.remove(topic);
+        if (this.nbiNotificationsListener != null) {
+            this.nbiNotificationsListener.setTapiPublishersMap(tapiPublisherMap);
+        }
+    }
+
+    public Map<String, Publisher<NotificationTapiService>> getTapiTopicMap() {
+        return this.tapiPublisherMap;
+    }
+
+    public Map<String, Publisher<NotificationAlarmService>> getAlarmTopicMap() {
+        return this.alarmPublisherMap;
+    }
+
+    public Map<String, Publisher<NotificationProcessService>> getProcessTopicMap() {
+        return this.processPublisherMap;
+    }
+}
index d938b9d28d1608a29e35effd823a46fe8deff714..39bb0c041418fec801173e0a71a78bd7b2cedb18 100644 (file)
@@ -15,6 +15,8 @@ xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
     <reference id="rpcService" interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
     <reference id="notificationService" interface="org.opendaylight.mdsal.binding.api.NotificationService"/>
     <reference id="bindingDOMCodecServices" interface="org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices" />
+    <reference id="networkTransactionImpl"
+               interface="org.opendaylight.transportpce.common.network.NetworkTransactionService" />
     <bean id="provider"
         class="org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider"
         init-method="init" destroy-method="close">
@@ -36,5 +38,6 @@ xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
         <argument ref="rpcService" />
         <argument ref="notificationService" />
         <argument ref="bindingDOMCodecServices" />
+        <argument ref="networkTransactionImpl" />
     </bean>
 </blueprint>
index 7e5fcf615a00f5bbb55194a2df6fe253b3fe44f5..c32142f23b57e047cca5707190ddbb77b0927351 100644 (file)
@@ -22,10 +22,10 @@ import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
 
 public class SubscriberTest extends AbstractTest {
     private static final String TOPIC = "topic";
index 825193f01fdc95c221dd0d0d144321cdda322474..018c2d62257796d9afdf3bc7d09ec4c8717b1730 100644 (file)
@@ -13,27 +13,43 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.concurrent.ExecutionException;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mock;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.common.network.RequestProcessor;
+import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsAlarmServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsAlarmServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsProcessServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.GetNotificationsProcessServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public class NbiNotificationsImplTest extends AbstractTest {
     private NbiNotificationsImpl nbiNotificationsImpl;
+    public static NetworkTransactionService networkTransactionService;
+
+    @Mock
+    private TopicManager topicManager;
 
     @Before
     public void setUp() {
+        networkTransactionService = new NetworkTransactionImpl(
+            new RequestProcessor(getDataStoreContextUtil().getDataBroker()));
         JsonStringConverter<NotificationProcessService> converter = new JsonStringConverter<>(
                 getDataStoreContextUtil().getBindingDOMCodecServices());
         JsonStringConverter<NotificationAlarmService> converterAlarm = new JsonStringConverter<>(
                 getDataStoreContextUtil().getBindingDOMCodecServices());
-        nbiNotificationsImpl = new NbiNotificationsImpl(converter, converterAlarm,"localhost:8080");
+        JsonStringConverter<NotificationTapiService> converterTapi = new JsonStringConverter<>(
+            getDataStoreContextUtil().getBindingDOMCodecServices());
+
+        nbiNotificationsImpl = new NbiNotificationsImpl(converter, converterAlarm, converterTapi,
+            "localhost:8080", networkTransactionService, topicManager);
     }
 
     @Test
index 2b917aab040360084fd2006133e0f0421b1b6414..93827286f55d8cf73e5011f3158b12fb2a5dd172 100644 (file)
@@ -18,10 +18,14 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.common.network.RequestProcessor;
 import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsListenerImpl;
 import org.opendaylight.transportpce.test.AbstractTest;
 
 public class NbiNotificationsProviderTest  extends AbstractTest {
+    public static NetworkTransactionService networkTransactionService;
 
     @Mock
     RpcProviderService rpcProviderRegistry;
@@ -37,12 +41,14 @@ public class NbiNotificationsProviderTest  extends AbstractTest {
 
     @Test
     public void initTest() {
+        networkTransactionService = new NetworkTransactionImpl(
+            new RequestProcessor(getDataStoreContextUtil().getDataBroker()));
         NbiNotificationsProvider provider = new NbiNotificationsProvider(
                 Arrays.asList("topic1", "topic2"), Arrays.asList("topic1", "topic2"), "localhost:8080",
                 "localhost:8080", rpcProviderRegistry, notificationService,
-                getDataStoreContextUtil().getBindingDOMCodecServices());
+                getDataStoreContextUtil().getBindingDOMCodecServices(), networkTransactionService);
         provider.init();
-        verify(rpcProviderRegistry, times(1))
+        verify(rpcProviderRegistry, times(2))
                 .registerRpcImplementation(any(), any(NbiNotificationsImpl.class));
         verify(notificationService, times(1))
                 .registerNotificationListener(any(NbiNotificationsListenerImpl.class));
index c0fa4d1ba39f7b4fe10437c04dcc229a8fb23c13..1743723e6883853be8d9a3563d6fad0199953e23 100644 (file)
@@ -12,6 +12,7 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
+import java.util.HashMap;
 import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
@@ -21,12 +22,12 @@ import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
 
 public class NbiNotificationsListenerImplTest extends AbstractTest {
     @Mock
@@ -42,7 +43,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
     @Test
     public void onPublishNotificationServiceTest() {
         NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
-                Map.of("test", publisherAlarm));
+                Map.of("test", publisherAlarm), new HashMap<>());
         PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder()
                 .setPublisherName("test")
                 .setCommonId("commonId")
@@ -58,7 +59,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
     @Test
     public void onPublishNotificationServiceWrongPublisherTest() {
         NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
-                Map.of("test", publisherAlarm));
+                Map.of("test", publisherAlarm), new HashMap<>());
         PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder()
                 .setPublisherName("wrongPublisher")
                 .setCommonId("commonId")
@@ -74,7 +75,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
     @Test
     public void onPublishNotificationAlarmServiceTest() {
         NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
-                Map.of("test", publisherAlarm));
+                Map.of("test", publisherAlarm), new HashMap<>());
         PublishNotificationAlarmService notification = new PublishNotificationAlarmServiceBuilder()
                 .setPublisherName("test")
                 .setConnectionType(ConnectionType.Service)
@@ -89,7 +90,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
     @Test
     public void onPublishNotificationAlarmServiceWrongPublisherTest() {
         NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
-                Map.of("test", publisherAlarm));
+                Map.of("test", publisherAlarm), new HashMap<>());
         PublishNotificationAlarmService notification = new PublishNotificationAlarmServiceBuilder()
                 .setPublisherName("wrongPublisher")
                 .setConnectionType(ConnectionType.Service)
index 4b9e160f585428727d90592833295b15055f8f62..1d988fc0ce2700b4bd6ca9d43fc7cb168879f181 100644 (file)
@@ -22,8 +22,8 @@ import org.opendaylight.transportpce.nbinotifications.serialization.ConfigConsta
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceSerializer;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceSerializer;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 
index b0d156a2a66af52ad617f562c0fc76bbc85f5604..d1c5c39a4bc94bec2c9d6e38fecde84efe343943 100755 (executable)
@@ -16,8 +16,8 @@ import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
 
 public class NotificationAlarmServiceDeserializerTest extends AbstractTest {
 
index 605c85158d6b34c1ea11fea8c8e60bb23f1cb4ea..b850f5b7956a8bc6a7526929ff42c65fd536cd45 100755 (executable)
@@ -20,7 +20,7 @@ import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 
index 12f7a80f33c2bdf19a2f1d0709878833f711ab8e..0c47b49bcdf1362a565d521670dd632f1ff6939e 100644 (file)
@@ -16,8 +16,8 @@ import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
 
 public class NotificationServiceDeserializerTest extends AbstractTest {
 
index 4a4868bbd29d36a66f69bcd44da38b910de70372..51d83fa14af08548b0a3118f5663df5882e3627e 100644 (file)
@@ -20,7 +20,7 @@ import java.util.Map;
 import org.junit.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 
index de4cb5f01565d5d2c90a9a7d4829688e38cf5532..ea8c5496a548b8c22b0fdff46b7795578bb71b04 100644 (file)
@@ -20,14 +20,14 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.NotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
index 47209dd7dc7b96c60378e63a8ec22c97cd4034f5..4e277d8a5171859faefbd8018330ffe8f2fc7648 100644 (file)
 {
   "nbi-notifications:notification-process-service": {
-    "common-id": "commond-id",
-    "message": "message",
-    "operational-state": "inService",
+    "connection-type": "service",
     "service-z-end": {
-      "node-id": "XPONDER-1-2",
-      "service-rate": 1,
-      "clli": "clli",
-      "is-split-lambda": false,
-      "service-format": "OC",
       "tx-direction": [
         {
           "index": 0,
+          "lgx": {
+            "lgx-port-rack": "lgx port rack",
+            "lgx-device-name": "lgx device name",
+            "lgx-port-shelf": "lgx port shelf",
+            "lgx-port-name": "lgx port name"
+          },
           "port": {
-            "port-name": "port name",
-            "port-slot": "port slot",
+            "port-type": "port type",
             "port-sub-slot": "port subslot",
+            "port-name": "port name",
+            "port-rack": "port rack",
             "port-device-name": "device name",
-            "port-shelf": "port shelf",
-            "port-type": "port type",
-            "port-rack": "port rack"
-          },
-          "lgx": {
-            "lgx-port-shelf": "lgx port shelf",
-            "lgx-port-rack": "lgx port rack",
-            "lgx-port-name": "lgx port name",
-            "lgx-device-name": "lgx device name"
+            "port-slot": "port slot",
+            "port-shelf": "port shelf"
           }
         }
       ],
+      "node-id": "XPONDER-1-2",
+      "service-format": "OC",
+      "service-rate": 1,
       "rx-direction": [
         {
           "index": 0,
+          "lgx": {
+            "lgx-port-rack": "lgx port rack",
+            "lgx-device-name": "lgx device name",
+            "lgx-port-shelf": "lgx port shelf",
+            "lgx-port-name": "lgx port name"
+          },
           "port": {
-            "port-name": "port name",
-            "port-slot": "port slot",
+            "port-type": "port type",
             "port-sub-slot": "port subslot",
+            "port-name": "port name",
+            "port-rack": "port rack",
             "port-device-name": "device name",
-            "port-shelf": "port shelf",
-            "port-type": "port type",
-            "port-rack": "port rack"
-          },
-          "lgx": {
-            "lgx-port-shelf": "lgx port shelf",
-            "lgx-port-rack": "lgx port rack",
-            "lgx-port-name": "lgx port name",
-            "lgx-device-name": "lgx device name"
+            "port-slot": "port slot",
+            "port-shelf": "port shelf"
           }
         }
-      ]
+      ],
+      "is-split-lambda": false,
+      "clli": "clli"
     },
-    "service-name": "service1",
-    "connection-type": "service",
+    "message": "message",
     "service-a-end": {
-      "node-id": "XPONDER-1-2",
-      "service-rate": 1,
-      "clli": "clli",
-      "is-split-lambda": false,
-      "service-format": "OC",
       "tx-direction": [
         {
           "index": 0,
+          "lgx": {
+            "lgx-port-rack": "lgx port rack",
+            "lgx-device-name": "lgx device name",
+            "lgx-port-shelf": "lgx port shelf",
+            "lgx-port-name": "lgx port name"
+          },
           "port": {
-            "port-name": "port name",
-            "port-slot": "port slot",
+            "port-type": "port type",
             "port-sub-slot": "port subslot",
+            "port-name": "port name",
+            "port-rack": "port rack",
             "port-device-name": "device name",
-            "port-shelf": "port shelf",
-            "port-type": "port type",
-            "port-rack": "port rack"
-          },
-          "lgx": {
-            "lgx-port-shelf": "lgx port shelf",
-            "lgx-port-rack": "lgx port rack",
-            "lgx-port-name": "lgx port name",
-            "lgx-device-name": "lgx device name"
+            "port-slot": "port slot",
+            "port-shelf": "port shelf"
           }
         }
       ],
+      "node-id": "XPONDER-1-2",
+      "service-format": "OC",
+      "service-rate": 1,
       "rx-direction": [
         {
           "index": 0,
+          "lgx": {
+            "lgx-port-rack": "lgx port rack",
+            "lgx-device-name": "lgx device name",
+            "lgx-port-shelf": "lgx port shelf",
+            "lgx-port-name": "lgx port name"
+          },
           "port": {
-            "port-name": "port name",
-            "port-slot": "port slot",
+            "port-type": "port type",
             "port-sub-slot": "port subslot",
+            "port-name": "port name",
+            "port-rack": "port rack",
             "port-device-name": "device name",
-            "port-shelf": "port shelf",
-            "port-type": "port type",
-            "port-rack": "port rack"
-          },
-          "lgx": {
-            "lgx-port-shelf": "lgx port shelf",
-            "lgx-port-rack": "lgx port rack",
-            "lgx-port-name": "lgx port name",
-            "lgx-device-name": "lgx device name"
+            "port-slot": "port slot",
+            "port-shelf": "port shelf"
           }
         }
-      ]
+      ],
+      "is-split-lambda": false,
+      "clli": "clli"
     },
-    "response-failed": ""
+    "operational-state": "inService",
+    "common-id": "commond-id",
+    "response-failed": "",
+    "service-name": "service1"
   }
-}
+}
\ No newline at end of file
index 68480455ff4ab4654738d55fecdc428ffb52b17c..4b71fd0d8352615e80a9869cdecfb9453bb07ac5 100755 (executable)
@@ -1,8 +1,8 @@
 {
   "nbi-notifications:notification-alarm-service": {
+    "connection-type": "service",
     "message": "The service is now inService",
-    "operational-state": "inService",
     "service-name": "service1",
-    "connection-type": "service"
+    "operational-state": "inService"
   }
 }
\ No newline at end of file
index f1c56764f1e7305e2ce99413552c1fd34e056c74..0abee07537959a79b96cb48a0081ba83422c5934 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
 import org.opendaylight.transportpce.networkmodel.listeners.ServiceHandlerListener;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.util.TpceNetwork;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.Network;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener;
index 1d799ada4ff093e42cb4ffa9b6176a7d194fce8f..b954aa37e3162d7b661a8d098016b8a626e5ea4c 100644 (file)
@@ -15,19 +15,19 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.DeleteLinkOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRdmXpdrLinksInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRdmXpdrLinksOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRdmXpdrLinksOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitXpdrRdmLinksInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitXpdrRdmLinksOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitXpdrRdmLinksOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 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;
index ba108903f330fd8bddc774bbff1a424b6fe558da..26c8f4b6dda256c2f6254dc3c895bcdf59aec8d8 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil;
 import org.opendaylight.transportpce.networkmodel.util.TopologyUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
index 6c05f8a663920b53e8e51265b22f72a3b6a699e4..a40e55bbdcb3ef3d84cb557e331140c22f46c784 100644 (file)
@@ -25,7 +25,7 @@ import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.util.TopologyUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.Network;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.cp.to.degree.CpToDegree;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
index 8f126883815e2b37d7d28b318201e2805d5d2022..1a518514c40f1aff462be53547ad3b9f79e20f91 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil;
 import org.opendaylight.transportpce.networkmodel.util.TopologyUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.links.input.grouping.LinksInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.links.input.grouping.LinksInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
index a0f506ae64460acbb336a4364cafc3e65e9381f2..dbbf0aaaf0e3cbb4f5ad18408522a15ba398df94 100644 (file)
@@ -8,9 +8,9 @@
 package org.opendaylight.transportpce.networkmodel.service;
 
 import java.util.List;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
index c9ddfe112c7c94a7b11916e54f7365cfdb92bee6..e71c5dc52b722a422b984c7d41b1e27e1c0f9891 100644 (file)
@@ -38,6 +38,7 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmo
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChanges;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.OpenroadmNodeVersion;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.nodes.NodeInfo;
@@ -46,7 +47,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.link.tp.LinkTp;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.link.tp.LinkTpBuilder;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
 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.NodeId;
index 22742cfe4d14bb5b362038ed4ea4c45a0d5af416..5e8bf12ecc18af3c20d8c18f3a978f8d44d11711 100644 (file)
@@ -8,7 +8,7 @@
 
 package org.opendaylight.transportpce.networkmodel.util;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.InitRoadmNodesInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
 
 
index 58824cc50a0e9bacafbb82b448fecf60718a7ce8..9843bd987473553859c3ddc99535b28aa00cbe24 100644 (file)
@@ -20,6 +20,7 @@ import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.dto.OtnTopoNode;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
@@ -59,7 +60,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.Supp
 import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev191129.SwitchingPoolTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPool;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPoolBuilder;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
@@ -298,12 +298,14 @@ public final class OpenRoadmOtnTopology {
         for (Link link : suppOtuLinks) {
             if (link.augmentation(Link1.class) == null
                     || link.augmentation(
-                        org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class) == null) {
+                            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
+                                    .Link1.class) == null) {
                 LOG.error(OTN_PARAMS_ERROR, link.getLinkId().getValue());
                 return new TopologyShard(null, null, null);
             }
             OtnLinkType otnLinkType = link.augmentation(
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class).getOtnLinkType();
+                    org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.Link1.class)
+                    .getOtnLinkType();
             if (!OTNLINKTYPE_OTU_BW_MAP.containsKey(otnLinkType)) {
             //TODO shouldn't other link type listed in OTNLINKTYPE_BW_MAP be handled too ?
                 LOG.warn("Unexpected otn-link-type {} for link {}", otnLinkType, link.getLinkId());
@@ -327,8 +329,8 @@ public final class OpenRoadmOtnTopology {
         List<Link> links = new ArrayList<>();
         String nodeATopo = formatNodeName(nodeA, tpA);
         String nodeZTopo = formatNodeName(nodeZ, tpZ);
-        org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1 tpceLink1
-            = new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1Builder()
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.Link1 tpceLink1
+            = new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.Link1Builder()
                 .setOtnLinkType(linkType).build();
         Link1Builder otnLink1Bldr = new Link1Builder()
             .setUsedBandwidth(Uint32.valueOf(0));
@@ -737,20 +739,20 @@ public final class OpenRoadmOtnTopology {
                 new TpId(mapping.getLogicalConnectionPoint()),
                 tpType,
                 otnTp1Bldr.build(),
-                new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder(),
                 mapping);
         }
     }
 
     private static void setclientNwTpAttr(Map<TerminationPointKey, TerminationPoint> tpMap, OtnTopoNode node, TpId tpId,
-            OpenroadmTpType tpType, TerminationPoint1 otnTp1,
-            org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder tpceTp1Bldr,
-            Mapping mapping) {
-
+            OpenroadmTpType tpType, TerminationPoint1 otnTp1, Mapping mapping) {
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder cnTP1BLdr
+                = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    .TerminationPoint1Builder();
         switch (tpType) {
             case XPONDERNETWORK:
                 if (node.getXpdrNetConnectionMap().get(tpId.getValue()) != null) {
-                    tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrNetConnectionMap().get(tpId.getValue()));
+                    cnTP1BLdr.setAssociatedConnectionMapTp(Set.of(
+                            new TpId(node.getXpdrNetConnectionMap().get(tpId.getValue()))));
                 }
                 SupportingTerminationPoint stp = new SupportingTerminationPointBuilder()
                     .setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))
@@ -758,14 +760,15 @@ public final class OpenRoadmOtnTopology {
                     .setTpRef(tpId)
                     .build();
                 TerminationPoint ietfTpNw =
-                    buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, Map.of(stp.key(), stp), mapping);
+                    buildIetfTp(cnTP1BLdr, otnTp1, tpType, tpId, Map.of(stp.key(), stp), mapping);
                 tpMap.put(ietfTpNw.key(),ietfTpNw);
                 break;
             case XPONDERCLIENT:
                 if (node.getXpdrCliConnectionMap().get(tpId.getValue()) != null) {
-                    tpceTp1Bldr.setAssociatedConnectionMapPort(node.getXpdrCliConnectionMap().get(tpId.getValue()));
+                    cnTP1BLdr.setAssociatedConnectionMapTp(Set.of(
+                            new TpId(node.getXpdrCliConnectionMap().get(tpId.getValue()))));
                 }
-                TerminationPoint ietfTpCl = buildIetfTp(tpceTp1Bldr, otnTp1, tpType, tpId, null, mapping);
+                TerminationPoint ietfTpCl = buildIetfTp(cnTP1BLdr, otnTp1, tpType, tpId, null, mapping);
                 tpMap.put(ietfTpCl.key(),ietfTpCl);
                 break;
             default:
@@ -818,14 +821,11 @@ public final class OpenRoadmOtnTopology {
     }
 
     private static TerminationPoint buildIetfTp(
-            org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1Builder tpceTp1Bldr,
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder cnTP1BLdr,
             TerminationPoint1 otnTp1, OpenroadmTpType tpType, TpId tpId,
             Map<SupportingTerminationPointKey, SupportingTerminationPoint> supportTpMap, Mapping mapping) {
 
         TerminationPointBuilder ietfTpBldr = new TerminationPointBuilder();
-        if (tpceTp1Bldr.getAssociatedConnectionMapPort() != null) {
-            ietfTpBldr.addAugmentation(tpceTp1Bldr.build());
-        }
         if (supportTpMap != null) {
             ietfTpBldr.setSupportingTerminationPoint(supportTpMap);
         }
@@ -833,13 +833,11 @@ public final class OpenRoadmOtnTopology {
             .setTpId(tpId)
             .withKey(new TerminationPointKey(tpId))
             .addAugmentation(otnTp1)
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                    .setTpType(tpType)
+            .addAugmentation(cnTP1BLdr.setTpType(tpType)
                     .setAdministrativeState(TopologyUtils.setNetworkAdminState(mapping.getPortAdminState()))
                     .setOperationalState(TopologyUtils.setNetworkOperState(mapping.getPortOperState()))
                     .build())
-            .build();
+                .build();
     }
 
     private static String formatNodeName(String nodeName, String tpName) {
index 55aa8a869c9565aaa952cbef9d5aa6b2b3a9351a..bcdab98ab74e7e80847df6d3879e480205097902 100644 (file)
@@ -8,11 +8,14 @@
 
 package org.opendaylight.transportpce.networkmodel.util;
 
+import static org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes.Tpdr;
+
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
@@ -27,8 +30,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.XpdrNodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder;
@@ -72,6 +73,17 @@ public final class OpenRoadmTopology {
 
     private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmTopology.class);
 
+    private static Map<String, OpenroadmTpType> PORTQUAL_ORD_TYPE_MAP = Map.of(
+        "xpdr-network", OpenroadmTpType.XPONDERNETWORK,
+        "switch-network", OpenroadmTpType.XPONDERNETWORK,
+        "xpdr-client", OpenroadmTpType.XPONDERCLIENT
+    );
+    private static Map<String, List<OpenroadmTpType>> PORTDIR_ORD_TYPE_MAP = Map.of(
+        "bidirectional", List.of(OpenroadmTpType.DEGREETXRXTTP, OpenroadmTpType.SRGTXRXPP),
+        "tx", List.of(OpenroadmTpType.DEGREETXTTP, OpenroadmTpType.SRGTXPP),
+        "rx", List.of(OpenroadmTpType.DEGREERXTTP, OpenroadmTpType.SRGRXPP)
+    );
+
     private OpenRoadmTopology() {
     }
 
@@ -80,225 +92,187 @@ public final class OpenRoadmTopology {
     }
 
     public static TopologyShard createTopologyShard(Nodes mappingNode, boolean firstMount) {
-        int numOfDegrees;
-        int numOfSrgs;
-        List<Node> nodes = new ArrayList<>();
-        List<Link> links = new ArrayList<>();
+        switch (mappingNode.getNodeInfo().getNodeType()) {
+            case Rdm :
+                return createRdmTopologyShard(mappingNode, firstMount);
+            case Xpdr :
+                return createXpdrTopologyShard(mappingNode);
+            default :
+                LOG.error("Device node Type not managed yet");
+                return null;
+        }
+    }
 
-        // Check if node is ROADM
-        if (NodeTypes.Rdm.getIntValue() == mappingNode.getNodeInfo().getNodeType().getIntValue()) {
-            LOG.info("creating rdm node in openroadmtopology for node {}",
-                    mappingNode.getNodeId());
-            // transform flat mapping list to per degree and per srg mapping lists
-            Map<String, List<Mapping>> mapDeg = new HashMap<>();
-            Map<String, List<Mapping>> mapSrg = new HashMap<>();
-            List<Mapping> mappingList = new ArrayList<>(mappingNode.nonnullMapping().values());
-            mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint));
-            List<String> nodeShardList = new ArrayList<>();
-            for (Mapping mapping : mappingList) {
-                String str = mapping.getLogicalConnectionPoint().split("-")[0];
-                if (!nodeShardList.contains(str)) {
-                    nodeShardList.add(str);
-                }
-            }
-            for (String str : nodeShardList) {
-                List<Mapping> interList =
-                        mappingList.stream()
-                                .filter(x -> x.getLogicalConnectionPoint().split("-")[0].equals(str))
-                                .collect(Collectors.toList());
-                if (str.contains("DEG")) {
-                    mapDeg.put(str, interList);
-                } else if (str.contains("SRG")) {
-                    mapSrg.put(str, interList);
-                } else {
-                    LOG.error("unknow element");
-                }
-            }
-            // create degree nodes
-            for (Map.Entry<String, List<Mapping>> entry : mapDeg.entrySet()) {
-                NodeBuilder ietfNode =
-                        createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
-                                mappingNode.getNodeInfo().getNodeClli(), firstMount);
-                nodes.add(ietfNode.build());
+    public static TopologyShard createRdmTopologyShard(Nodes mappingNode, boolean firstMount) {
+        List<Node> nodes = new ArrayList<>();
+        LOG.info("creating rdm node in openroadmtopology for node {}",
+                mappingNode.getNodeId());
+        // transform flat mapping list to per degree and per srg mapping lists
+        Map<String, List<Mapping>> mapDeg = new HashMap<>();
+        Map<String, List<Mapping>> mapSrg = new HashMap<>();
+        List<Mapping> mappingList = new ArrayList<>(mappingNode.nonnullMapping().values());
+        mappingList.sort(Comparator.comparing(Mapping::getLogicalConnectionPoint));
+        List<String> nodeShardList = new ArrayList<>();
+        for (Mapping mapping : mappingList) {
+            String str = mapping.getLogicalConnectionPoint().split("-")[0];
+            if (!nodeShardList.contains(str)) {
+                nodeShardList.add(str);
             }
-            // create srg nodes
-            for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
-                NodeBuilder ietfNode =
-                        createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
-                                mappingNode.getNodeInfo().getNodeClli(), firstMount);
-                nodes.add(ietfNode.build());
+        }
+        for (String str : nodeShardList) {
+            List<Mapping> interList =
+                    mappingList.stream()
+                            .filter(x -> x.getLogicalConnectionPoint().split("-")[0].equals(str))
+                            .collect(Collectors.toList());
+            if (str.contains("DEG")) {
+                mapDeg.put(str, interList);
+            } else if (str.contains("SRG")) {
+                mapSrg.put(str, interList);
+            } else {
+                LOG.error("unknow element");
             }
+        }
+        // create degree nodes
+        for (Map.Entry<String, List<Mapping>> entry : mapDeg.entrySet()) {
+            nodes.add(
+                createDegree(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
+                        mappingNode.getNodeInfo().getNodeClli(), firstMount)
+                    .build());
+        }
+        // create srg nodes
+        for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
+            nodes.add(
+                createSrg(entry.getKey(), entry.getValue(), mappingNode.getNodeId(),
+                        mappingNode.getNodeInfo().getNodeClli(), firstMount)
+                    .build());
+        }
+        LOG.info("adding links numOfDegrees={} numOfSrgs={}", mapDeg.size(), mapSrg.size());
+        List<Link> links = createNewLinks(nodes);
+        LOG.info("created nodes/links: {}/{}", nodes.size(), links.size());
+        return new TopologyShard(nodes, links);
+    }
 
-            numOfDegrees = mapDeg.size();
-            numOfSrgs = mapSrg.size();
-
-            LOG.info("adding links numOfDegrees={} numOfSrgs={}", numOfDegrees, numOfSrgs);
-            links.addAll(createNewLinks(nodes));
-            LOG.info("created nodes/links: {}/{}", nodes.size(), links.size());
-            return new TopologyShard(nodes, links);
-        } else if (NodeTypes.Xpdr.getIntValue() ==  mappingNode.getNodeInfo().getNodeType().getIntValue()) {
-            // Check if node is Xpdr is a Transponder
-            List<Mapping> networkMappings =
-                    mappingNode.nonnullMapping().values()
-                            .stream().filter(k -> k.getLogicalConnectionPoint().contains("NETWORK"))
-                            .collect(Collectors.toList());
-            List<Integer> tpdrList = new ArrayList<>();
-            for (Mapping mapping : networkMappings) {
-                List<Mapping> extractedMappings = null;
-                Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
-                if (!tpdrList.contains(xpdrNb)) {
-                    tpdrList.add(xpdrNb);
-                    extractedMappings = mappingNode.nonnullMapping().values().stream()
-                            .filter(lcp -> lcp.getLogicalConnectionPoint().contains("XPDR" + xpdrNb))
-                            .collect(Collectors.toList());
-                    NodeBuilder ietfNode;
-                    if (mapping.getXponderType() == null
-                            || XpdrNodeTypes.Tpdr.getIntValue() == mapping.getXponderType().getIntValue()) {
-                        LOG.info("creating xpdr node {} of type Tpdr in openroadm-topology",
-                                mappingNode.getNodeId() + "-XPDR" + xpdrNb);
-                        ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb,
-                                extractedMappings, false);
-                        nodes.add(ietfNode.build());
-                    } else if (XpdrNodeTypes.Mpdr.getIntValue() == mapping.getXponderType().getIntValue()
-                            || XpdrNodeTypes.Switch.getIntValue() == mapping.getXponderType().getIntValue()) {
-                        LOG.info("creating xpdr node {} of type {} in openroadm-topology",
-                                mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName());
-                        ietfNode = createXpdr(mappingNode.getNodeId(), mappingNode.getNodeInfo().getNodeClli(), xpdrNb,
-                                extractedMappings, true);
-                        nodes.add(ietfNode.build());
-                    }
+    public static TopologyShard createXpdrTopologyShard(Nodes mappingNode) {
+        List<Node> nodes = new ArrayList<>();
+        List<Mapping> networkMappings =
+                mappingNode.nonnullMapping().values()
+                        .stream().filter(k -> k.getLogicalConnectionPoint().contains("NETWORK"))
+                        .collect(Collectors.toList());
+        List<Integer> tpdrList = new ArrayList<>();
+        for (Mapping mapping : networkMappings) {
+            Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
+            if (!tpdrList.contains(xpdrNb)) {
+                tpdrList.add(xpdrNb);
+                List<Mapping> extractedMappings = mappingNode.nonnullMapping().values()
+                        .stream().filter(lcp -> lcp.getLogicalConnectionPoint().contains("XPDR" + xpdrNb))
+                        .collect(Collectors.toList());
+                Boolean isOtn;
+                String xpdrType;
+                switch (mapping.getXponderType() == null ? Tpdr : mapping.getXponderType()) {
+                    case Tpdr :
+                        isOtn = false;
+                        xpdrType = "Tpdr";
+                        break;
+                    case Mpdr :
+                    case Switch :
+                        isOtn = true;
+                        xpdrType = mapping.getXponderType().getName();
+                        break;
+                    default :
+                        LOG.warn("cannot create xpdr node {} in openroadm-topology: type {} not supported",
+                             mappingNode.getNodeId() + "-XPDR" + xpdrNb, mapping.getXponderType().getName());
+                        continue;
                 }
-            }
-            if (nodes.isEmpty()) {
-                return null;
-            } else {
-                return new TopologyShard(nodes, links);
+                LOG.info("creating xpdr node {} of type {} in openroadm-topology",
+                        mappingNode.getNodeId() + "-XPDR" + xpdrNb, xpdrType);
+                nodes.add(createXpdr(
+                                mappingNode.getNodeId(),
+                                mappingNode.getNodeInfo().getNodeClli(),
+                                xpdrNb,
+                                extractedMappings,
+                                isOtn)
+                          .build());
             }
         }
-        LOG.error("Device node Type not managed yet");
-        return null;
+        return nodes.isEmpty() ? null : new TopologyShard(nodes, new ArrayList<Link>());
     }
 
     private static NodeBuilder createXpdr(String nodeId, String clli, Integer xpdrNb, List<Mapping> mappings,
                                           boolean isOtn) {
-        // Create openroadm-network-topo augmentation to set node type to Xponder
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 ocnNode1 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
-                        .setNodeType(OpenroadmNodeType.XPONDER)
-                        .setAdministrativeState(AdminStates.InService)
-                        .setOperationalState(State.InService)
-                        .build();
         // Create ietf node setting supporting-node data
-        NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId, clli);
-        // set node-id
         String nodeIdtopo = new StringBuilder().append(nodeId).append("-XPDR").append(xpdrNb).toString();
-        ietfNodeBldr.setNodeId(new NodeId(nodeIdtopo))
+        NodeBuilder ietfNodeBldr = createTopoLayerNode(nodeId, clli)
+                .setNodeId(new NodeId(nodeIdtopo))
                 .withKey((new NodeKey(new NodeId(nodeIdtopo))))
-                .addAugmentation(ocnNode1);
-
+                .addAugmentation(
+                    // Create openroadm-network-topo augmentation to set node type to Xponder
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                        .setNodeType(OpenroadmNodeType.XPONDER)
+                        .setAdministrativeState(AdminStates.InService)
+                        .setOperationalState(State.InService)
+                        .build());
         // Create tp-map
         Map<TerminationPointKey, TerminationPoint> tpMap = new HashMap<>();
-        TerminationPointBuilder ietfTpBldr;
         for (Mapping m : mappings) {
-            if (!isOtn) {
-                ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
-                // Add openroadm-network-topology tp augmentations
-                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder
-                        ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
-                            .org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                                .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
-                                .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
-                if (m.getPortQual().equals("xpdr-network")) {
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERNETWORK);
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 =
-                            new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123
-                                    .TerminationPoint1Builder()
-                                    .setAssociatedConnectionMapPort(m.getConnectionMapLcp()).build();
-                    ietfTpBldr
-                            .addAugmentation(ocnTp1Bldr.build())
-                            .addAugmentation(tpceTp1);
-                    TerminationPoint ietfTp = ietfTpBldr.build();
-                    tpMap.put(ietfTp.key(),ietfTp);
-                } else if (m.getPortQual().equals("xpdr-client")) {
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.XPONDERCLIENT);
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 =
-                        new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123
-                            .TerminationPoint1Builder()
-                                .setAssociatedConnectionMapPort(m.getConnectionMapLcp())
-                                .build();
-                    ietfTpBldr
-                            .addAugmentation(ocnTp1Bldr.build())
-                            .addAugmentation(tpceTp1);
-                    TerminationPoint ietfTp = ietfTpBldr.build();
-                    tpMap.put(ietfTp.key(),ietfTp);
-                }
-            } else {
-                if (m.getPortQual().equals("xpdr-network") || m.getPortQual().equals("switch-network")) {
-                    ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder
-                        ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
-                            .org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                                    .setTpType(OpenroadmTpType.XPONDERNETWORK)
-                                    .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
-                                    .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
-                    ietfTpBldr
-                            .addAugmentation(ocnTp1Bldr.build());
-                    TerminationPoint ietfTp = ietfTpBldr.build();
-                    tpMap.put(ietfTp.key(),ietfTp);
-                }
+            if (!PORTQUAL_ORD_TYPE_MAP.containsKey(m.getPortQual())) {
+                continue;
+            }
+            if (isOtn && m.getPortQual().equals("xpdr-client")) {
+                continue;
             }
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder
+                    ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    .TerminationPoint1Builder()
+                    .setTpType(PORTQUAL_ORD_TYPE_MAP.get(m.getPortQual()))
+                    .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                    .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
+            if (!isOtn && m.getConnectionMapLcp() != null) {
+                ocnTp1Bldr.setAssociatedConnectionMapTp(Set.of(new TpId(m.getConnectionMapLcp())));
+            }
+            TerminationPointBuilder ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint())
+                .addAugmentation(
+                    // Add openroadm-network-topology tp augmentations
+                        ocnTp1Bldr.build());
+            TerminationPoint ietfTp = ietfTpBldr.build();
+            tpMap.put(ietfTp.key(),ietfTp);
         }
         // Create ietf node augmentation to support ietf tp-list
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder
-            ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-                .Node1Builder()
-                    .setTerminationPoint(tpMap);
-        ietfNodeBldr.addAugmentation(ietfNode1.build());
-        return ietfNodeBldr;
+        return ietfNodeBldr.addAugmentation(
+            new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder()
+                    .setTerminationPoint(tpMap)
+                    .build());
     }
 
     private static NodeBuilder createDegree(String degNb, List<Mapping> degListMap, String nodeId, String clli,
                                             boolean firstMount) {
         // Create tp-list
         Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
-        TerminationPointBuilder ietfTpBldr;
         for (Mapping m : degListMap) {
-            ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
             // Add openroadm-common-network tp type augmentations
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder
-                ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                    .TerminationPoint1Builder()
-                        .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
-                        .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
-
             // Added states to degree port. TODO: add to mapping relation between abstracted and physical node states
-            switch (m.getPortDirection()) {
-                case "bidirectional":
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXRXTTP);
-                    break;
-                case "tx":
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREETXTTP);
-                    break;
-                case "rx":
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.DEGREERXTTP);
-                    break;
-                default:
-                    LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint());
+            if (!PORTDIR_ORD_TYPE_MAP.containsKey(m.getPortDirection())) {
+                LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint());
             }
-            ietfTpBldr.addAugmentation(ocnTp1Bldr.build());
-            TerminationPoint ietfTp = ietfTpBldr.build();
+            TerminationPoint ietfTp =  createTpBldr(m.getLogicalConnectionPoint())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                            .TerminationPoint1Builder()
+                        .setTpType(PORTDIR_ORD_TYPE_MAP.get(m.getPortDirection()).get(0))
+                        .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                        .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()))
+                        .build())
+                .build();
             tpMap.put(ietfTp.key(),ietfTp);
         }
         // Add CTP to tp-list + added states. TODO: same comment as before with the relation between states
-        ietfTpBldr = createTpBldr(degNb + "-CTP-TXRX");
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1 ocnTp1 =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                .setTpType(OpenroadmTpType.DEGREETXRXCTP)
-                .setAdministrativeState(AdminStates.InService)
-                .setOperationalState(State.InService)
-                .build();
-        ietfTpBldr.addAugmentation(ocnTp1);
-        TerminationPoint ietfTp = ietfTpBldr.build();
+        TerminationPoint ietfTp = createTpBldr(degNb + "-CTP-TXRX")
+                .addAugmentation(new org.opendaylight.yang.gen.v1.http
+                    .org.openroadm.common.network.rev211210.TerminationPoint1Builder()
+                         .setTpType(OpenroadmTpType.DEGREETXRXCTP)
+                         .setAdministrativeState(AdminStates.InService)
+                         .setOperationalState(State.InService)
+                         .build())
+                 .build();
         tpMap.put(ietfTp.key(),ietfTp);
         // set degree-attributes
         DegreeAttributesBuilder degAttBldr = new DegreeAttributesBuilder()
@@ -307,116 +281,102 @@ public final class OpenRoadmTopology {
             degAttBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available());
         }
         DegreeAttributes degAtt = degAttBldr.build();
-        // Create ietf node augmentation to support ietf tp-list
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder
-            ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-                .Node1Builder().setTerminationPoint(tpMap);
         // set node-id
         String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(degNb).toString();
-        Node1 ontNode1 = new Node1Builder().setDegreeAttributes(degAtt).build();
-        // Create openroadm-common-network augmentation to set node type to DEGREE
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 ocnNode1 =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
-                .setNodeType(OpenroadmNodeType.DEGREE)
-                .setAdministrativeState(AdminStates.InService)
-                .setOperationalState(State.InService)
-                .build();
         // Create ietf node setting supporting-node data
         return createTopoLayerNode(nodeId, clli)
                 .setNodeId(new NodeId(nodeIdtopo))
                 .withKey((new NodeKey(new NodeId(nodeIdtopo))))
-                .addAugmentation(ontNode1)
-                .addAugmentation(ocnNode1)
-                .addAugmentation(ietfNode1.build());
+                .addAugmentation(new Node1Builder().setDegreeAttributes(degAtt).build())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                            .Node1Builder()
+                        .setNodeType(OpenroadmNodeType.DEGREE)
+                        .setAdministrativeState(AdminStates.InService)
+                        .setOperationalState(State.InService)
+                        .build())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                            .Node1Builder()
+                        .setTerminationPoint(tpMap)
+                        .build());
     }
 
     private static NodeBuilder createSrg(String srgNb, List<Mapping> srgListMap, String nodeId, String clli,
                                          boolean firstMount) {
         // Create tp-list
         Map<TerminationPointKey,TerminationPoint> tpMap = new HashMap<>();
-        TerminationPointBuilder ietfTpBldr;
         for (Mapping m : srgListMap) {
-            ietfTpBldr = createTpBldr(m.getLogicalConnectionPoint());
-            // Add openroadm-common-network tp type augmentations
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                .TerminationPoint1Builder ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http
-                    .org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                        .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
-                        .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
             // Added states to srg port. TODO: add to mapping relation between abstracted and physical node states
-            switch (m.getPortDirection()) {
-                case "bidirectional":
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXRXPP);
-                    break;
-                case "tx":
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.SRGTXPP);
-                    break;
-                case "rx":
-                    ocnTp1Bldr.setTpType(OpenroadmTpType.SRGRXPP);
-                    break;
-                default:
-                    LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint());
+            if (!PORTDIR_ORD_TYPE_MAP.containsKey(m.getPortDirection())) {
+                LOG.error("impossible to set tp-type to {}", m.getLogicalConnectionPoint());
             }
-            ietfTpBldr.addAugmentation(ocnTp1Bldr.build());
-            TerminationPoint ietfTp = ietfTpBldr.build();
+            TerminationPoint ietfTp = createTpBldr(m.getLogicalConnectionPoint())
+                .addAugmentation(
+                    // Add openroadm-common-network tp type augmentations
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                            .TerminationPoint1Builder()
+                        .setTpType(PORTDIR_ORD_TYPE_MAP.get(m.getPortDirection()).get(1))
+                        .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                        .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()))
+                        .build())
+                .build();
             tpMap.put(ietfTp.key(),ietfTp);
         }
         // Add CP to tp-list + added states. TODO: same comment as before with the relation between states
-        ietfTpBldr = createTpBldr(srgNb + "-CP-TXRX");
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-            .TerminationPoint1 ocnTp1 = new org.opendaylight.yang.gen.v1
-                .http.org.openroadm.common.network.rev211210.TerminationPoint1Builder()
+        TerminationPoint ietfTp = createTpBldr(srgNb + "-CP-TXRX")
+            .addAugmentation(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                        .TerminationPoint1Builder()
                     .setTpType(OpenroadmTpType.SRGTXRXCP)
                     .setAdministrativeState(AdminStates.InService)
                     .setOperationalState(State.InService)
-                    .build();
-        ietfTpBldr.addAugmentation(ocnTp1);
-        TerminationPoint ietfTp = ietfTpBldr.build();
+                    .build())
+            .build();
         tpMap.put(ietfTp.key(),ietfTp);
-        // Create openroadm-common-network augmentation to set node type to SRG
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 ocnNode1 =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
-                .setNodeType(OpenroadmNodeType.SRG)
-                .setAdministrativeState(AdminStates.InService)
-                .setOperationalState(State.InService)
-                .build();
         // set srg-attributes
         SrgAttributesBuilder srgAttrBldr = new SrgAttributesBuilder();
         if (firstMount) {
             srgAttrBldr.setAvailFreqMaps(GridUtils.initFreqMaps4FixedGrid2Available());
         }
         SrgAttributes srgAttr = srgAttrBldr.build();
-        Node1 ontNode1 = new Node1Builder().setSrgAttributes(srgAttr).build();
         // Create ietf node augmentation to support ietf tp-list
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder
-            ietfNode1 = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-                .Node1Builder().setTerminationPoint(tpMap);
         // Create ietf node setting supporting-node data
         String nodeIdtopo = new StringBuilder().append(nodeId).append("-").append(srgNb).toString();
         return createTopoLayerNode(nodeId, clli)
-                .setNodeId(new NodeId(nodeIdtopo))
-                .withKey((new NodeKey(new NodeId(nodeIdtopo))))
-                .addAugmentation(ontNode1)
-                .addAugmentation(ocnNode1)
-                .addAugmentation(ietfNode1.build());
+            .setNodeId(new NodeId(nodeIdtopo))
+            .withKey((new NodeKey(new NodeId(nodeIdtopo))))
+            .addAugmentation(new Node1Builder().setSrgAttributes(srgAttr).build())
+            .addAugmentation(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                        .Node1Builder()
+                    .setNodeType(OpenroadmNodeType.SRG)
+                    .setAdministrativeState(AdminStates.InService)
+                    .setOperationalState(State.InService)
+                    .build())
+            .addAugmentation(
+                new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                       .Node1Builder()
+                    .setTerminationPoint(tpMap)
+                    .build());
     }
 
     private static NodeBuilder createTopoLayerNode(String nodeId, String clli) {
         // Sets the value of Network-ref and Node-ref as a part of the supporting node
         // attribute
-        SupportingNodeBuilder support1bldr = new SupportingNodeBuilder()
+        SupportingNode support1 = new SupportingNodeBuilder()
                 .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID), new NodeId(nodeId)))
                 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
-                .setNodeRef(new NodeId(nodeId));
-        SupportingNodeBuilder support2bldr = new SupportingNodeBuilder()
+                .setNodeRef(new NodeId(nodeId))
+                .build();
+        SupportingNode support2 = new SupportingNodeBuilder()
                 .withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID), new NodeId(clli)))
                 .setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID))
-                .setNodeRef(new NodeId(clli));
+                .setNodeRef(new NodeId(clli))
+                .build();
         Map<SupportingNodeKey, SupportingNode> supportlist = new HashMap<>();
-        SupportingNode support1 = support1bldr.build();
-        supportlist.put(support1.key(),support1);
-        SupportingNode support2 = support2bldr.build();
-        supportlist.put(support2.key(),support2);
+        supportlist.put(support1.key(), support1);
+        supportlist.put(support2.key(), support2);
         return new NodeBuilder().setSupportingNode(supportlist);
     }
 
@@ -428,18 +388,18 @@ public final class OpenRoadmTopology {
     }
 
     private static LinkBuilder createLink(String srcNode, String destNode, String srcTp, String destTp) {
-        //create source link
-        SourceBuilder ietfSrcLinkBldr = new SourceBuilder()
-            .setSourceNode(new NodeId(srcNode))
-            .setSourceTp(new TpId(srcTp));
-        //create destination link
-        DestinationBuilder ietfDestLinkBldr = new DestinationBuilder()
-                .setDestNode(new NodeId(destNode))
-                .setDestTp(new TpId(destTp));
         LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp);
         return new LinkBuilder()
-                .setSource(ietfSrcLinkBldr.build())
-                .setDestination(ietfDestLinkBldr.build())
+                .setSource(
+                    new SourceBuilder()
+                        .setSourceNode(new NodeId(srcNode))
+                        .setSourceTp(new TpId(srcTp))
+                        .build())
+                .setDestination(
+                    new DestinationBuilder()
+                        .setDestNode(new NodeId(destNode))
+                        .setDestTp(new TpId(destTp))
+                        .build())
                 .setLinkId(linkId)
                 .withKey(new LinkKey(linkId));
     }
@@ -468,30 +428,25 @@ public final class OpenRoadmTopology {
                         .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
                         .findFirst().get().getTpId().getValue();
                 Link1Builder ocnAzLinkBldr = new Link1Builder();
+                Link1Builder ocnZaLinkBldr = new Link1Builder();
                 int srcNodeType = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.http
                         .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue();
                 int destNodeType = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.http
                         .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue();
+
                 if (srcNodeType == 11 && destNodeType == 11) {
                     ocnAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
+                    ocnZaLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
                 } else if (srcNodeType == 11 && destNodeType == 12) {
                     ocnAzLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK);
+                    ocnZaLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK);
                 } else if (srcNodeType == 12 && destNodeType == 11) {
                     ocnAzLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK);
-                } else {
-                    continue;
-                }
-                // Z to A direction
-                Link1Builder ocnZaLinkBldr = new Link1Builder();
-                if (srcNodeType == 11 && destNodeType == 11) {
-                    ocnZaLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
-                } else if (destNodeType == 11 && srcNodeType == 12) {
                     ocnZaLinkBldr.setLinkType(OpenroadmLinkType.DROPLINK);
-                } else if (destNodeType == 12 && srcNodeType == 11) {
-                    ocnZaLinkBldr.setLinkType(OpenroadmLinkType.ADDLINK);
                 } else {
                     continue;
                 }
+
                 // Add state to link. Based on the operational state of the TPs at the edge of the link.
                 // Similar to getting srcTp and destTp
                 State srcTpState = nodes.get(i)
@@ -500,8 +455,8 @@ public final class OpenRoadmTopology {
                         .getTerminationPoint().values().stream()
                         .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
                         .findFirst().get()
-                        .augmentation(org.opendaylight.yang.gen.v1.http
-                                .org.openroadm.common.network.rev211210.TerminationPoint1.class)
+                        .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                            .TerminationPoint1.class)
                         .getOperationalState();
                 State destTpState = nodes.get(j)
                         .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
@@ -509,8 +464,8 @@ public final class OpenRoadmTopology {
                         .getTerminationPoint().values().stream()
                         .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
                         .findFirst().get()
-                        .augmentation(org.opendaylight.yang.gen.v1.http
-                                .org.openroadm.common.network.rev211210.TerminationPoint1.class)
+                        .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                            .TerminationPoint1.class)
                         .getOperationalState();
                 if (State.InService.equals(srcTpState) && State.InService.equals(destTpState)) {
                     ocnAzLinkBldr.setAdministrativeState(AdminStates.InService)
@@ -561,23 +516,25 @@ public final class OpenRoadmTopology {
                 .child(Link.class, new LinkKey(linkId));
             java.util.Optional<Link> link =
                     networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,linkIID.build()).get();
-            if (link.isPresent()) {
-                LinkBuilder linkBuilder = new LinkBuilder(link.get());
-                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder link1Builder =
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder(
-                        linkBuilder
-                            .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
-                                .Link1.class));
-                linkBuilder.removeAugmentation(Link1.class)
-                        .addAugmentation(link1Builder.build());
-                networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, linkIID.build(),
-                        linkBuilder.build());
-                networkTransactionService.commit().get(1, TimeUnit.SECONDS);
-                return true;
-            } else {
+            if (link.isEmpty()) {
                 LOG.error("No link found for given LinkId: {}", linkId);
                 return false;
             }
+            LinkBuilder linkBuilder = new LinkBuilder(link.get());
+            networkTransactionService.merge(
+                LogicalDatastoreType.CONFIGURATION,
+                linkIID.build(),
+                linkBuilder
+                    .removeAugmentation(Link1.class)
+                    .addAugmentation(
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+                            .Link1Builder(linkBuilder
+                                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+                                    .Link1.class))
+                                .build())
+                    .build());
+            networkTransactionService.commit().get(1, TimeUnit.SECONDS);
+            return true;
 
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error("Error deleting link {}", linkId.getValue(), e);
@@ -596,12 +553,12 @@ public final class OpenRoadmTopology {
         return InstanceIdentifier.builder(Networks.class)
                 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
                 .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
-                         .networks.network.Node.class,
+                        .networks.network.Node.class,
                     new NodeKey(new NodeId(nodeId)))
                 .augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
                     .Node1.class)
-                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks
-                         .network.node.TerminationPoint.class,
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                        .networks.network.node.TerminationPoint.class,
                     new TerminationPointKey(new TpId(tpId)))
                 .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
                         .TerminationPoint1.class);
index 2db827b4c57c1c376554d748283c53719818f5a2..04dec312dc3c22401616a9d053e8df4c58fba81c 100644 (file)
@@ -26,7 +26,7 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 
 @RunWith(MockitoJUnitRunner.StrictStubs.class)
 public class NetworkModelProviderTest extends AbstractTest {
index bccb0ff2afe96f32ce0a24dea2fd3fdf060f35b9..5c5f959df9561955a0c2cc650e9e629954af780b 100644 (file)
@@ -35,6 +35,7 @@ import org.junit.Test;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
 import org.opendaylight.transportpce.networkmodel.util.test.JsonUtil;
 import org.opendaylight.transportpce.networkmodel.util.test.NetworkmodelTestUtil;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.Network;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.MappingBuilder;
@@ -43,6 +44,7 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmappi
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.NodesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
@@ -62,8 +64,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10
 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2e;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCH;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
@@ -149,7 +149,12 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals("XPDR1-CLIENT1", tps.get(0).getTpId().getValue());
         assertEquals(
             "XPDR1-NETWORK1",
-            tps.get(0).augmentation(TerminationPoint1.class).getAssociatedConnectionMapPort());
+            tps.get(0)
+                    .augmentation(TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp()
+                    .iterator()
+                    .next()
+                    .getValue());
         assertEquals(
             "only If100GE interface capabitily expected",
             1,
@@ -170,15 +175,16 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             "first TP must be of type client",
             OpenroadmTpType.XPONDERCLIENT,
-            tps.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                        .TerminationPoint1.class)
-                .getTpType());
+            tps.get(0).augmentation(TerminationPoint1.class).getTpType());
         //tests network tp
         assertEquals("XPDR1-NETWORK1", tps.get(2).getTpId().getValue());
         assertEquals(
             "XPDR1-CLIENT1",
-            tps.get(2).augmentation(TerminationPoint1.class).getAssociatedConnectionMapPort());
+            tps.get(2).augmentation(TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp()
+                    .iterator()
+                    .next()
+                    .getValue());
         assertEquals(
             "only IfOCH interface capabitily expected",
             1,
@@ -209,9 +215,7 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             "third TP must be of type network",
             OpenroadmTpType.XPONDERNETWORK,
-            tps.get(2).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
-                .getTpType());
+            tps.get(2).augmentation(TerminationPoint1.class).getTpType());
     }
 
     @Test
@@ -275,7 +279,7 @@ public class OpenRoadmOtnTopologyTest {
             "otn link type should be OTU4",
             OtnLinkType.OTU4,
             sortedLinks.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class)
+                    org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.Link1.class)
                 .getOtnLinkType());
     }
 
@@ -349,8 +353,8 @@ public class OpenRoadmOtnTopologyTest {
             "otn link type should be ODTU4",
             OtnLinkType.ODTU4,
             sortedLinks.get(0)
-                .augmentation(
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class)
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
+                        .Link1.class)
                 .getOtnLinkType());
 
         assertEquals("list of TPs should contain 2 updated TPs", 2, topoShard.getTps().size());
@@ -977,19 +981,11 @@ public class OpenRoadmOtnTopologyTest {
             assertEquals(
                 "TP should be of type client",
                 OpenroadmTpType.XPONDERCLIENT,
-                tpList.get(2)
-                    .augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                            .TerminationPoint1.class)
-                    .getTpType());
+                tpList.get(2).augmentation(TerminationPoint1.class).getTpType());
             assertEquals(
                 "TP should be of type network",
                 OpenroadmTpType.XPONDERNETWORK,
-                tpList.get(4)
-                    .augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                            .TerminationPoint1.class)
-                    .getTpType());
+                tpList.get(4).augmentation(TerminationPoint1.class).getTpType());
         } else if (xpdrNb.equals(Uint16.valueOf(2))) {
             assertEquals("should contain 8 TPs", 8, tpList.size());
             assertEquals("XPDR2-CLIENT1", tpList.get(0).getTpId().getValue());
@@ -1030,18 +1026,10 @@ public class OpenRoadmOtnTopologyTest {
             }
             assertEquals(
                 "TP should be of type client", OpenroadmTpType.XPONDERCLIENT,
-                tpList.get(2)
-                    .augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                            .TerminationPoint1.class)
-                    .getTpType());
+                tpList.get(2).augmentation(TerminationPoint1.class).getTpType());
             assertEquals(
                 "TP should be of type network", OpenroadmTpType.XPONDERNETWORK,
-                tpList.get(6)
-                    .augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                            .TerminationPoint1.class)
-                    .getTpType());
+                tpList.get(6).augmentation(TerminationPoint1.class).getTpType());
         }
     }
 }
index b8c3c62e13b252a1e3a36e1205586be4d6a633a4..4acee5cbda6f2b79394b0f1e47bd0f8be18f7c83 100644 (file)
@@ -363,14 +363,19 @@ public class OpenRoadmTopologyTest {
         assertEquals(4, tps.size());
         assertEquals("XPDR1-CLIENT1", tps.get(0).getTpId().getValue());
         assertEquals(OpenroadmTpType.XPONDERCLIENT, tps.get(0).augmentation(TerminationPoint1.class).getTpType());
-        assertEquals("XPDR1-NETWORK1", tps.get(0).augmentation(
-            org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
-            .getAssociatedConnectionMapPort());
+        assertEquals("XPDR1-NETWORK1", tps.get(0).augmentation(TerminationPoint1.class)
+                .getAssociatedConnectionMapTp()
+                .iterator()
+                .next()
+                .getValue());
         assertEquals("XPDR1-NETWORK1", tps.get(2).getTpId().getValue());
         assertEquals(OpenroadmTpType.XPONDERNETWORK, tps.get(2).augmentation(TerminationPoint1.class).getTpType());
         assertEquals("XPDR1-CLIENT1", tps.get(2).augmentation(
-            org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
-            .getAssociatedConnectionMapPort());
+                TerminationPoint1.class)
+                .getAssociatedConnectionMapTp()
+                .iterator()
+                .next()
+                .getValue());
     }
 
     private void checkOtnXpdrNode(Node node) {
index 897c1ca76c3b2b76334e474f786e69501372c331..bfc6f672f7a2adbc2aca650319c27f56782d03fa 100644 (file)
@@ -15,6 +15,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.MappingBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.MappingKey;
@@ -43,7 +44,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOC
 import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPool;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPoolBuilder;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
@@ -113,7 +113,8 @@ public final class NetworkmodelTestUtil {
                     .setUsedBandwidth(Uint32.valueOf(100000 - availBW.intValue()))
                     .build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
+                    .Link1Builder()
                     .setOtnLinkType(type)
                     .build())
             .build();
@@ -137,7 +138,8 @@ public final class NetworkmodelTestUtil {
                     .setUsedBandwidth(Uint32.valueOf(100000 - availBW.intValue()))
                     .build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
+                        .Link1Builder()
                     .setOtnLinkType(type)
                     .build())
             .build();
index d8d90aa8ddc93686926c823d46de405af47c6cc4..28f50657b9d1b5c7105151ab24bbe6baada34f10 100644 (file)
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT1</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT2</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK2</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
     </termination-point>
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK1</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
       <xpdr-network-attributes
         xmlns="http://org/openroadm/network/topology">
         <tail-equipment-id>ROADM-C1-SRG1--SRG1-PP1-TXRX
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT1</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT2</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK2</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
     </termination-point>
     <termination-point
       xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK1</tp-id>
-      <associated-connection-map-port
-        xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
       <xpdr-network-attributes
         xmlns="http://org/openroadm/network/topology">
         <tail-equipment-id>ROADM-A1-SRG1--SRG1-PP1-TXRX
diff --git a/ordmodels/network/src/main/yang/transportpce-topology@2022-01-23.yang b/ordmodels/network/src/main/yang/transportpce-topology@2022-01-23.yang
deleted file mode 100644 (file)
index 39c7399..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-module transportpce-topology {
-    yang-version 1.1;
-    namespace "http://transportpce/topology";
-    prefix "transportpce-topology";
-
-    import ietf-network {
-        prefix nd;
-        revision-date 2018-02-26;
-      }
-    import ietf-network-topology {
-        prefix nwt;
-        revision-date 2018-02-26;
-      }
-    import org-openroadm-common-network {
-        prefix cnet;
-      }
-
-    organization
-        "TransportPCE team";
-    contact
-        "TransportPCE team";
-
-    revision 2022-01-23 {
-        description "Update otn-link-type enum for intermediate rates (B100G)";
-    }
-    revision 2021-05-11 {
-        description "Update otn-link-type enum for higher rates";
-    }
-    revision 2020-10-19 {
-        description "Update to 7.1.0 Openroadm network and common models";
-    }
-    revision 2020-01-29 {
-        description "Add transportpce augmentation to manage otn-link-type in otn-topology";
-    }
-    revision 2020-01-23 {
-        description "Add transportpce augmentation for otn-topology";
-    }
-    revision 2019-06-25 {
-        description "Initial revision";
-    }
-
-    typedef otn-link-type {
-      type enumeration {
-        enum "OTU4" {
-          value 0;
-        }
-        enum "ODU4" {
-          value 1;
-        }
-        enum "ODTU4" {
-          value 2;
-        }
-        enum "ODU2e" {
-          value 3;
-        }
-        enum "ODU0" {
-          value 4;
-        }
-        enum "OTUC4" {
-          value 5;
-        }
-        enum "ODUC4" {
-          value 6;
-        }
-        enum "OTUC3" {
-          value 7;
-        }
-        enum "ODUC3" {
-          value 8;
-        }
-        enum "OTUC2" {
-          value 9;
-        }
-        enum "ODUC2" {
-          value 10;
-        }
-      }
-    }
-
-    augment "/nd:networks/nd:network/nd:node/nwt:termination-point" {
-        when "../../nd:network-types/cnet:openroadm-common-network/openroadm-topology or ../../nd:network-types/cnet:openroadm-common-network/otn-topology";
-        description
-          "Defines associated logical-connection-point for XPDR port.";
-        leaf associated-connection-map-port {
-          when
-            "../cnet:tp-type = 'XPONDER-CLIENT' or ../cnet:tp-type = 'XPONDER-NETWORK'";
-          type string;
-          description
-            "The xpdr port connectable regarding the device connection-map";
-        }
-    }
-
-    augment "/nd:networks/nd:network/nwt:link" {
-        when "../nd:network-types/cnet:openroadm-common-network/otn-topology";
-        description
-          "Defines more accurate otn link types to differentiate otn links in otn-topology";
-        leaf otn-link-type {
-          when
-            "../cnet:link-type = 'OTN-LINK'";
-          type otn-link-type;
-          description
-              "type of otn link, to help link management inside transportpce";
-          }
-    }
-}
index 7eb06d8cbd3e463d7aac79a772a51c88233c6a20..9e28aa9bdec02f9acb68469af2dab6d777e16b9e 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
@@ -22,7 +23,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev21121
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
@@ -319,7 +319,8 @@ public class PceLink implements Serializable {
         }
 
         OtnLinkType otnLinkType = link
-            .augmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.Link1.class)
+            .augmentation(org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils
+                    .rev220630.Link1.class)
             .getOtnLinkType();
         if (this.availableBandwidth == 0L) {
             LOG.error("PceLink: No bandwidth available for OTN Link, link {}  is ignored ", linkId);
index 7e96ea39860a053edfa02c9c8caae4bccdcc52b9..01bf4d34cd22012090d892679659f6b2b2b4c83a 100644 (file)
@@ -285,11 +285,8 @@ public class PceOpticalNode implements PceNode {
                 continue;
             }
             // find Client of this network TP
-            org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1 tpceTp1 =
-                    tp.augmentation(org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123
-                            .TerminationPoint1.class);
-            if (tpceTp1 != null) {
-                String client = tpceTp1.getAssociatedConnectionMapPort();
+            if (cntp1.getAssociatedConnectionMapTp() != null) {
+                String client = cntp1.getAssociatedConnectionMapTp().iterator().next().getValue();
                 if (client != null) {
                     this.clientPerNwTp.put(tp.getTpId().getValue(), client);
                     this.valid = true;
index 9f902b809424a178b62aa0d7b90b8f8fa91d260c..da07adf49466a356eca54c6dda0364471f310bef 100644 (file)
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                         },
                         {
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                         },
                         {
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                         },
                         {
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                         },
                         {
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "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:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                         },
                         {
index 4add60c57d1f78a0964e8299b6d9315718ac0a85..f8e22e28b68fa793ab8edb546a37b04c47a279cb 100644 (file)
@@ -41,6 +41,7 @@ import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OtnDeviceRen
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.RollbackProcessor;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
@@ -72,7 +73,6 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.link.tp.LinkTp;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.olm.get.pm.input.ResourceIdentifierBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210930.optical.renderer.nodes.Nodes;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.Uint32;
index 109531e342c5670c17ff96b665bf3d38720b072b..37e7c1a223a14507f7f7a0accc7c51b903bcfd2a 100644 (file)
@@ -105,10 +105,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempSer
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo.TailRetention;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
index 74d659a24ec44479b73bb7341223f2aa669d915a..1fd4cbb39dff1ecbe6008a74c5220124d2ece430 100644 (file)
@@ -26,10 +26,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index a30c7d2378cffc7656ea27af9c952b044cbecdea..f983d37745e172a30a9e4d0a6f19ef2ee2ff9b17 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
@@ -28,11 +29,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.OtnLinkType;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 73702010884f06c062614745e51950879bf21547..64d46b4cf7f33bbf4431f5c0f1078d52d147dc32 100644 (file)
@@ -39,8 +39,8 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
index a18f8da39a6beed57664d7ed06224e532ed4059d..b8d5290f08784e55871349b216fb007ae3dd4d06 100755 (executable)
@@ -10,6 +10,7 @@ package org.opendaylight.transportpce.servicehandler.listeners;
 
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
@@ -19,6 +20,7 @@ import static org.mockito.Mockito.when;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Optional;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -26,10 +28,14 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEnd;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEndBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceZEnd;
@@ -42,17 +48,22 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev2
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliencyBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev210813.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
-@RunWith(MockitoJUnitRunner.StrictStubs.class)
+@RunWith(MockitoJUnitRunner.class)
 public class ServiceListenerTest {
 
     @Mock
@@ -88,7 +99,7 @@ public class ServiceListenerTest {
     }
 
     @Test
-    public void testOnDataTreeChangedWhenAddService() {
+    public void testOnDataTreeChangedWhenServiceBecomesOutOfService() {
         @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
                 mock(DataObjectModification.class);
         final Collection<DataTreeModification<Services>> changes = new HashSet<>();
@@ -96,7 +107,7 @@ public class ServiceListenerTest {
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(service);
 
-        Services serviceDown = buildService(State.OutOfService, AdminStates.OutOfService);
+        Services serviceDown = buildService(State.OutOfService, AdminStates.InService);
         when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
         when(service.getDataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
         when(service.getDataAfter()).thenReturn(serviceDown);
@@ -107,11 +118,9 @@ public class ServiceListenerTest {
         verify(service, times(1)).getModificationType();
         verify(service, times(3)).getDataBefore();
         verify(service, times(1)).getDataAfter();
-        PublishNotificationAlarmService publishNotificationAlarmService =
-                buildNotificationAlarmService(serviceDown, "The service is now outOfService");
         try {
             verify(notificationPublishService, times(1))
-                    .putNotification(publishNotificationAlarmService);
+                    .putNotification(buildNotificationAlarmService(serviceDown, "The service is now outOfService"));
         } catch (InterruptedException e) {
             fail("Failed publishing notification");
         }
@@ -142,17 +151,97 @@ public class ServiceListenerTest {
         }
     }
 
+    @Test
+    public void testOnDataTreeChangedWhenServiceDegradedShouldBeRerouted() {
+        @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
+                mock(DataObjectModification.class);
+        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
+        changes.add(ch);
+        when(ch.getRootNode()).thenReturn(service);
+
+        ServiceResiliency serviceResiliency = new ServiceResiliencyBuilder().setResiliency(Restorable.class).build();
+        Services serviceAfter = new ServicesBuilder(buildService(State.OutOfService, AdminStates.InService))
+                .setServiceResiliency(serviceResiliency)
+                .build();
+        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(service.getDataBefore()).thenReturn(
+                new ServicesBuilder(buildService(State.InService, AdminStates.InService))
+                        .setServiceResiliency(serviceResiliency)
+                        .build());
+        when(service.getDataAfter()).thenReturn(serviceAfter);
+        when(serviceDataStoreOperations.getService(anyString())).thenReturn(Optional.of(serviceAfter));
+        when(servicehandler.serviceDelete(any())).thenReturn(
+                RpcResultBuilder.success(
+                        new ServiceDeleteOutputBuilder()
+                                .setConfigurationResponseCommon(
+                                        new ConfigurationResponseCommonBuilder()
+                                                .setResponseCode(ResponseCodes.RESPONSE_OK)
+                                                .build())
+                                .build())
+                        .buildFuture());
+        when(servicehandler.serviceCreate(any())).thenReturn(
+                RpcResultBuilder.success(
+                        new ServiceCreateOutputBuilder()
+                                .setConfigurationResponseCommon(
+                                        new ConfigurationResponseCommonBuilder()
+                                                .setResponseCode(ResponseCodes.RESPONSE_OK)
+                                                .build())
+                                .build())
+                        .buildFuture());
+        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+                notificationPublishService);
+        listener.onDataTreeChanged(changes);
+        verify(ch, times(1)).getRootNode();
+        verify(service, times(1)).getModificationType();
+        verify(service, times(3)).getDataBefore();
+        verify(service, times(1)).getDataAfter();
+        verify(servicehandler, times(1)).serviceDelete(any());
+
+        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+        listener.onDataTreeChanged(changes);
+        verify(servicehandler, times(1)).serviceCreate(any());
+    }
+
+    @Test
+    public void testOnDataTreeChangedWhenServiceDegradedShouldNotBeRerouted() {
+        @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
+                mock(DataObjectModification.class);
+        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
+        changes.add(ch);
+        when(ch.getRootNode()).thenReturn(service);
+
+        Services serviceAfter = buildService(State.OutOfService, AdminStates.InService);
+        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(service.getDataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
+        when(service.getDataAfter()).thenReturn(serviceAfter);
+        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+                notificationPublishService);
+        listener.onDataTreeChanged(changes);
+        verify(ch, times(1)).getRootNode();
+        verify(service, times(1)).getModificationType();
+        verify(service, times(3)).getDataBefore();
+        verify(service, times(1)).getDataAfter();
+        verify(servicehandler, times(0)).serviceDelete(any());
+
+        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+        listener.onDataTreeChanged(changes);
+        verify(servicehandler, times(0)).serviceCreate(any());
+    }
+
     private Services buildService(State state, AdminStates adminStates) {
         ServiceAEnd serviceAEnd = getServiceAEndBuild().build();
         ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
                 .setClli("clli")
-                .setServiceFormat(ServiceFormat.OC)
+                .setServiceFormat(ServiceFormat.Ethernet)
                 .setServiceRate(Uint32.valueOf(1))
                 .setNodeId(new NodeIdType("XPONDER-3-2"))
                 .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()), getTxDirection()))
                 .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
                 .build();
         ServicesBuilder builtInput = new ServicesBuilder()
+                .setSdncRequestHeader(new SdncRequestHeaderBuilder().build())
                 .setCommonId("commonId")
                 .setConnectionType(ConnectionType.Service)
                 .setCustomer("Customer")
@@ -168,7 +257,7 @@ public class ServiceListenerTest {
     private ServiceAEndBuilder getServiceAEndBuild() {
         return new ServiceAEndBuilder()
                 .setClli("clli")
-                .setServiceFormat(ServiceFormat.OC)
+                .setServiceFormat(ServiceFormat.Ethernet)
                 .setServiceRate(Uint32.valueOf(1))
                 .setNodeId(new NodeIdType("XPONDER-1-2"))
                 .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()), getTxDirection()))
index b68f43ccf5c26fb0c0c6a23b9248a211f4558ae1..0f87998752fc82b895f5338895f6c4de0bd69478 100644 (file)
@@ -99,13 +99,13 @@ public class TapiProvider {
     private TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl;
 
     public TapiProvider(DataBroker dataBroker, RpcProviderService rpcProviderService,
-            OrgOpenroadmServiceService serviceHandler, ServiceDataStoreOperations serviceDataStoreOperations,
+            OrgOpenroadmServiceService serviceHandler,ServiceDataStoreOperations serviceDataStoreOperations,
             TapiListener tapiListener, NetworkTransactionService networkTransactionService,
             TapiNetconfTopologyListener topologyListener, TapiPortMappingListener tapiPortMappingListener,
             TransportpceTapinetworkutilsService tapiNetworkUtils, TapiPceListenerImpl pceListenerImpl,
             TapiRendererListenerImpl rendererListenerImpl, TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
             NotificationService notificationService, TapiOrLinkListener orLinkListener,
-                        TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
+            TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
         this.dataBroker = dataBroker;
         this.rpcProviderService = rpcProviderService;
         this.serviceHandler = serviceHandler;
@@ -121,6 +121,7 @@ public class TapiProvider {
         this.notificationService = notificationService;
         this.orLinkListener = orLinkListener;
         this.tapiNetworkModelListenerImpl = tapiNetworkModelListenerImpl;
+        //this.notificationPublishService = notificationPublishService;
     }
 
     /**
@@ -142,6 +143,7 @@ public class TapiProvider {
         TapiConnectivityImpl tapi = new TapiConnectivityImpl(this.serviceHandler, tapiContext, connectivityUtils,
                 pceListenerImpl, rendererListenerImpl);
         TapiTopologyImpl topo = new TapiTopologyImpl(this.dataBroker, tapiContext, topologyUtils, tapiLink);
+
         rpcRegistration = rpcProviderService.registerRpcImplementation(TapiConnectivityService.class, tapi);
         rpcProviderService.registerRpcImplementation(TapiTopologyService.class, topo);
         rpcProviderService.registerRpcImplementation(TapiCommonService.class, topo);
index 995fee80c11afa355cb40defe5b0a8073e17552a..2d92919b9f6d884d8f024e4e50eceab0be71194e 100644 (file)
@@ -8,6 +8,9 @@
 package org.opendaylight.transportpce.tapi.listeners;
 
 import java.nio.charset.StandardCharsets;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -19,15 +22,21 @@ import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationServiceBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.DateAndTime;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnection;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection;
@@ -42,6 +51,12 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev18121
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.NodeEdgePointRef;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
@@ -64,12 +79,14 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
     private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(StandardCharsets.UTF_8)).toString());
     private final List<LayerProtocolName> orderedServiceLayerList;
+    private final NotificationPublishService notificationPublishService;
 
-
-    public TapiNetworkModelListenerImpl(NetworkTransactionService networkTransactionService) {
+    public TapiNetworkModelListenerImpl(NetworkTransactionService networkTransactionService,
+                                        NotificationPublishService notificationPublishService) {
         this.networkTransactionService = networkTransactionService;
         this.orderedServiceLayerList = List.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU,
             LayerProtocolName.DSR, LayerProtocolName.ETH);
+        this.notificationPublishService = notificationPublishService;
     }
 
     @Override
@@ -88,7 +105,64 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
                     .map(NameAndValueChange::getNewValue)
                     .collect(Collectors.toList()));
             updateConnectivityServices();
-            // todo  create NotificationPublishSerivce (Tapi) object + send Notification
+            // todo set attributes
+            for (ConnectivityService connService : this.connectivityServiceChanges) {
+                sendNbiNotification(createNbiNotification(connService));
+            }
+        }
+    }
+
+    private PublishTapiNotificationService createNbiNotification(ConnectivityService connService) {
+        if (connService == null) {
+            LOG.error("ConnService is null");
+            return null;
+        }
+        Map<ChangedAttributesKey, ChangedAttributes> changedStates = new HashMap<>();
+        changedStates.put(new ChangedAttributesKey("administrativeState"),
+            new ChangedAttributesBuilder()
+                .setNewValue(connService.getAdministrativeState().getName())
+                .setOldValue(connService.getAdministrativeState().equals(AdministrativeState.UNLOCKED)
+                    ? AdministrativeState.LOCKED.getName() : AdministrativeState.UNLOCKED.getName())
+                .setValueName("administrativeState").build());
+        changedStates.put(new ChangedAttributesKey("operationalState"),
+            new ChangedAttributesBuilder()
+                .setNewValue(connService.getOperationalState().getName())
+                .setOldValue(connService.getOperationalState().equals(OperationalState.ENABLED)
+                    ? OperationalState.DISABLED.getName() : OperationalState.ENABLED.getName())
+                .setValueName("operationalState").build());
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
+        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
+        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
+        Map<TargetObjectNameKey, TargetObjectName> targetObjectNames = new HashMap<>();
+        if (connService.getName() != null) {
+            for (Map.Entry<NameKey, Name> entry : connService.getName().entrySet()) {
+                targetObjectNames.put(new TargetObjectNameKey(entry.getKey().getValueName()),
+                    new TargetObjectNameBuilder()
+                        .setValueName(entry.getValue().getValueName())
+                        .setValue(entry.getValue().getValue())
+                        .build());
+            }
+        }
+
+        return new PublishTapiNotificationServiceBuilder()
+            .setUuid(new Uuid(UUID.randomUUID().toString()))
+            .setTopic(connService.getUuid().getValue())
+            .setTargetObjectIdentifier(connService.getUuid())
+            .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
+            .setChangedAttributes(changedStates)
+            .setEventTimeStamp(datetime)
+            .setTargetObjectName(targetObjectNames)
+            .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
+            .setLayerProtocolName(connService.getServiceLayer())
+            .build();
+    }
+
+    private void sendNbiNotification(PublishTapiNotificationService service) {
+        try {
+            this.notificationPublishService.putNotification(service);
+        } catch (InterruptedException e) {
+            LOG.warn("Cannot send notification to nbi", e);
+            Thread.currentThread().interrupt();
         }
     }
 
@@ -119,8 +193,8 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
                 OperationalState operState = (OperationalState) states.get(connService.getUuid())[1];
 
                 InstanceIdentifier<ConnectivityService> connServIID = InstanceIdentifier
-                    .builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi
-                        .connectivity.rev181210.Context1.class)
+                    .builder(Context.class).augmentation(org.opendaylight.yang.gen.v1
+                                .urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
                     .child(ConnectivityContext.class)
                     .child(ConnectivityService.class, new ConnectivityServiceKey(connService.getUuid()))
                     .build();
index 24d5e30975a166e9a45e1c3492b8ffe4a879e26d..0080c77c1e8e44b778cc2f074bfe32a87f147d8a 100644 (file)
@@ -8,22 +8,33 @@
 package org.opendaylight.transportpce.tapi.listeners;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.common.network.RequestProcessor;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationServiceBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.DateAndTime;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey;
@@ -31,6 +42,14 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev18121
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceKey;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.Connection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,10 +61,12 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
     private Uuid serviceUuid;
     private RendererRpcResultSp serviceRpcResultSp;
     private final NetworkTransactionService networkTransactionService;
+    private final NotificationPublishService notificationPublishService;
 
-    public TapiRendererListenerImpl(DataBroker dataBroker) {
+    public TapiRendererListenerImpl(DataBroker dataBroker, NotificationPublishService notificationPublishService) {
         this.dataBroker = dataBroker;
         this.networkTransactionService = new NetworkTransactionImpl(new RequestProcessor(this.dataBroker));
+        this.notificationPublishService = notificationPublishService;
     }
 
     @Override
@@ -98,7 +119,7 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
             LOG.error("Couldnt retrieve service from datastore");
             return;
         }
-        LOG.info("Connectivity service = {}", connectivityService.toString());
+        LOG.info("Connectivity service = {}", connectivityService);
         // TODO --> this throws error because the renderer goes really fast. Is this normal??
         ConnectivityService updtConnServ = new ConnectivityServiceBuilder(connectivityService)
             .setAdministrativeState(AdministrativeState.UNLOCKED)
@@ -109,6 +130,8 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
             updateConnectionState(connection.getConnectionUuid());
         }
         updateConnectivityService(updtConnServ);
+        // TODO: need to send notification to kafka in case the topic exists!!
+        sendNbiNotification(createNbiNotification(updtConnServ));
     }
 
     /**
@@ -118,7 +141,7 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
     private void onFailedServiceImplementation(String serviceName) {
         LOG.error("Renderer implementation failed !");
         LOG.info("PCE cancel resource done OK !");
-        Uuid suuid = new Uuid(UUID.nameUUIDFromBytes(serviceName.getBytes(Charset.forName("UTF-8")))
+        Uuid suuid = new Uuid(UUID.nameUUIDFromBytes(serviceName.getBytes(StandardCharsets.UTF_8))
                 .toString());
         // get connections of connectivity service and remove them from tapi context and then remove
         //  service from context. The CEPs are maintained as they could be reused by another service
@@ -278,6 +301,66 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
         }
     }
 
+    private void sendNbiNotification(PublishTapiNotificationService service) {
+        try {
+            this.notificationPublishService.putNotification(service);
+        } catch (InterruptedException e) {
+            LOG.warn("Cannot send notification to nbi", e);
+            Thread.currentThread().interrupt();
+        }
+    }
+
+    private PublishTapiNotificationService createNbiNotification(ConnectivityService connService) {
+        if (connService == null) {
+            LOG.error("ConnService is null");
+            return null;
+        }
+        /*
+        Map<ChangedAttributesKey, ChangedAttributes> changedStates = changedAttributesMap.entrySet()
+                .stream()
+                .filter(e -> e.getKey().getValueName().equals("administrative")
+                        || e.getKey().getValueName().equals("operational"))
+                .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
+
+         */
+        Map<ChangedAttributesKey, ChangedAttributes> changedStates = new HashMap<>();
+        changedStates.put(new ChangedAttributesKey("administrativeState"),
+            new ChangedAttributesBuilder()
+                .setNewValue(connService.getAdministrativeState().getName())
+                .setOldValue(AdministrativeState.LOCKED.getName())
+                .setValueName("administrativeState").build());
+        changedStates.put(new ChangedAttributesKey("operationalState"),
+            new ChangedAttributesBuilder()
+                .setNewValue(connService.getOperationalState().getName())
+                .setOldValue(OperationalState.DISABLED.getName())
+                .setValueName("operationalState").build());
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
+        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
+        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
+        Map<TargetObjectNameKey, TargetObjectName> targetObjectNames = new HashMap<>();
+        if (connService.getName() != null) {
+            for (Map.Entry<NameKey, Name> entry : connService.getName().entrySet()) {
+                targetObjectNames.put(new TargetObjectNameKey(entry.getKey().getValueName()),
+                    new TargetObjectNameBuilder()
+                        .setValueName(entry.getValue().getValueName())
+                        .setValue(entry.getValue().getValue())
+                        .build());
+            }
+        }
+
+        return new PublishTapiNotificationServiceBuilder()
+            .setUuid(new Uuid(UUID.randomUUID().toString()))
+            .setTopic(connService.getUuid().getValue())
+            .setTargetObjectIdentifier(connService.getUuid())
+            .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
+            .setChangedAttributes(changedStates)
+            .setEventTimeStamp(datetime)
+            .setTargetObjectName(targetObjectNames)
+            .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
+            .setLayerProtocolName(connService.getServiceLayer())
+            .build();
+    }
+
     public void setServiceUuid(Uuid serviceUuid) {
         this.serviceUuid = serviceUuid;
     }
index 03a39fac62d957c50a626c56aaaf81531a4991ff..d7c5c21f539411f7fe87904550abde6e0c52163c 100644 (file)
@@ -365,9 +365,9 @@ public class ConvertORTopoToTapiFullTopo {
         int count = 1;
         for (TerminationPoint tp : this.oorNetworkPortList) {
             TpId tpid1 = tp.getTpId();
-            TpId tpid2 = new TpId(tp.augmentation(
-                org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
-                .getAssociatedConnectionMapPort());
+            TpId tpid2 = tp.augmentation(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp().iterator().next();
             Set<TpId> tpList = new HashSet<>();
             tpList.add(tpid1);
             tpList.add(tpid2);
index 7abf12f2578e813b6f718463a0df4b9a420ab615..aab9df4b0d1b5435e5142d39ba74cf9c57b6c2cf 100644 (file)
@@ -293,9 +293,9 @@ public class ConvertORTopoToTapiTopo {
         int count = 1;
         for (TerminationPoint tp : this.oorNetworkPortList) {
             TpId tpid1 = tp.getTpId();
-            TpId tpid2 = new TpId(tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
-                .getAssociatedConnectionMapPort());
+            TpId tpid2 = tp.augmentation(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp().iterator().next();
             Set<TpId> tpList = new HashSet<>();
             tpList.add(tpid1);
             tpList.add(tpid2);
index edfa562c0facea57fc96ce2621f0ebd5331719b5..57990165125d57822f4696a28c00b2c9f68bba3a 100644 (file)
@@ -409,8 +409,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService
         String networkLcp;
         if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)) {
             networkLcp = tp.augmentation(
-                org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
-                .getAssociatedConnectionMapPort();
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp().iterator().next().getValue();
         } else {
             networkLcp = tp.getTpId().getValue();
         }
index af77db43a9896d9583886b1f3a9fb3424fdc7865..02cba20e2c94c4627b7b5b4ddb359c8994390196 100644 (file)
@@ -222,8 +222,8 @@ public final class TopologyUtils {
         String networkLcp;
         if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)) {
             networkLcp = tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class)
-                    .getAssociatedConnectionMapPort();
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp().iterator().next().getValue();
         } else {
             networkLcp = tp.getTpId().getValue();
         }
index 12f86017532d5590df78c032c001bd151f973563..a44e508104b4d07b2bc8316b4420037f9d28f86f 100644 (file)
@@ -38,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev18121
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepList;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepListBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContextBuilder;
 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
@@ -102,13 +103,22 @@ public class TapiContext {
                         .build())
                     .build();
 
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1 notificationContext
+                = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1Builder()
+                    .setNotificationContext(new NotificationContextBuilder()
+                        .setNotification(new HashMap<>())
+                        .setNotifSubscription(new HashMap<>())
+                        .build())
+                    .build();
+
             ContextBuilder contextBuilder = new ContextBuilder()
                     .setName(Map.of(contextName.key(), contextName))
                     .setUuid(
                         new Uuid(UUID.nameUUIDFromBytes(TAPI_CONTEXT.getBytes(Charset.forName("UTF-8"))).toString()))
                     .setServiceInterfacePoint(new HashMap<>())
                     .addAugmentation(connectivityContext)
-                    .addAugmentation(topologyContext);
+                    .addAugmentation(topologyContext)
+                    .addAugmentation(notificationContext);
 
             // todo: add notification context
             InstanceIdentifier<Context> contextIID = InstanceIdentifier.builder(Context.class).build();
index 62a1d9633fb08fdfd6b876dd24e3e870ae8bf948..419993e791bc2d26152023cf308e8b63af672076 100644 (file)
@@ -52,6 +52,7 @@ Author: Gilles Thouenon <gilles.thouenon@orange.com>
 
     <bean id="tapiRendererListener" class="org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl">
         <argument ref="dataBroker" />
+        <argument ref="notificationPublishService" />
     </bean>
 
     <bean id="tapiServiceHandlerListener" class="org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl">
@@ -60,6 +61,7 @@ Author: Gilles Thouenon <gilles.thouenon@orange.com>
 
     <bean id="tapiNetworkModelListenerImpl" class="org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl">
         <argument ref="networkTransactionImpl" />
+        <argument ref="notificationPublishService" />
     </bean>
 
     <bean id="tapiNetworkModelService" class="org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl">
index 54068af2237707aac4b5473baa929ccc3be29cc7..f0da0c7fb5d366dffa727bf68c48b05d18432cf5 100644 (file)
     <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT1</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT2</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK2</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK1</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
       <xpdr-network-attributes xmlns="http://org/openroadm/network/topology">
         <tail-equipment-id>ROADM-C1-SRG1--SRG1-PP1-TXRX</tail-equipment-id>
       </xpdr-network-attributes>
     <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT1</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT2</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK2</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-NETWORK1</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
       <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
       <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
       <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
index e02d8d0316d64dcc66ecdb6b4c3b3c226287c059..c2086f6505084f33bb10c824dd4c28c6e273ebae 100644 (file)
@@ -12,7 +12,7 @@
     <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT1</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE</if-cap-type>
@@ -25,7 +25,7 @@
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT2</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE</if-cap-type>
@@ -43,7 +43,7 @@
         <node-ref>XPDR-C1-XPDR1</node-ref>
         <tp-ref>XPDR1-NETWORK2</tp-ref>
       </supporting-termination-point>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH</if-cap-type>
@@ -61,7 +61,7 @@
         <node-ref>XPDR-C1-XPDR1</node-ref>
         <tp-ref>XPDR1-NETWORK1</tp-ref>
       </supporting-termination-point>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH</if-cap-type>
     <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT1</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE</if-cap-type>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
       <tp-id>XPDR1-CLIENT2</tp-id>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-100GE</if-cap-type>
         <node-ref>XPDR-A1-XPDR1</node-ref>
         <tp-ref>XPDR1-NETWORK2</tp-ref>
       </supporting-termination-point>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH</if-cap-type>
         <node-ref>XPDR-A1-XPDR1</node-ref>
         <tp-ref>XPDR1-NETWORK1</tp-ref>
       </supporting-termination-point>
-      <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+      <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
       <tp-supported-interfaces xmlns="http://org/openroadm/otn/network/topology">
         <supported-interface-capability>
           <if-cap-type xmlns:x="http://org/openroadm/port/types">x:if-OCH</if-cap-type>
       <dest-tp>XPDR1-NETWORK1</dest-tp>
       <dest-node>SPDR-SA1-XPDR1</dest-node>
     </destination>
-    <otn-link-type xmlns="http://transportpce/topology">OTU4</otn-link-type>
+    <otn-link-type xmlns="http://org/opendaylight/transportpce/networkutils">OTU4</otn-link-type>
   </link>
   <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
     <link-id>OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1</link-id>
       <dest-tp>XPDR1-NETWORK1</dest-tp>
       <dest-node>SPDR-SC1-XPDR1</dest-node>
     </destination>
-    <otn-link-type xmlns="http://transportpce/topology">OTU4</otn-link-type>
+    <otn-link-type xmlns="http://org/opendaylight/transportpce/networkutils">OTU4</otn-link-type>
   </link>
   <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
     <link-id>ODTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1</link-id>
       <dest-tp>XPDR1-NETWORK1</dest-tp>
       <dest-node>SPDR-SA1-XPDR1</dest-node>
     </destination>
-    <otn-link-type xmlns="http://transportpce/topology">ODTU4</otn-link-type>
+    <otn-link-type xmlns="http://org/opendaylight/transportpce/networkutils">ODTU4</otn-link-type>
   </link>
   <link xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
     <link-id>ODTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1</link-id>
       <dest-tp>XPDR1-NETWORK1</dest-tp>
       <dest-node>SPDR-SC1-XPDR1</dest-node>
     </destination>
-    <otn-link-type xmlns="http://transportpce/topology">ODTU4</otn-link-type>
+    <otn-link-type xmlns="http://org/opendaylight/transportpce/networkutils">ODTU4</otn-link-type>
   </link>
 </network>
 </networks>
index 1d0b3de98418d13170aa121b7ad34fd8d76aadfc..7ad3de221342044b68cd4cdbb8fb187f8936c1b5 100755 (executable)
@@ -20,9 +20,9 @@ do
     case "$VERSION" in
         "1.2.1") PLUGIN_VERSION=1.0.9
         ;;
-        "2.2.1") PLUGIN_VERSION=2.0.9
+        "2.2.1") PLUGIN_VERSION=2.0.10
         ;;
-        "7.1") PLUGIN_VERSION=7.1.6
+        "7.1") PLUGIN_VERSION=7.1.7
         ;;
         *) echo "unsupported device version" >&2
         continue
index a2f3f1997ddd50e7c02b198161c05aa9f687ea12..54d1cd1033eb34aca16125e960b430bfd71d2718 100755 (executable)
@@ -31,7 +31,7 @@ else
     done
 fi
 if [ -z "$LAUNCHER" ]; then
-    LAUNCHER="nosetests --with-xunit";
+    LAUNCHER="python3 -m pytest -q";
 fi
 
 for script in $scriptlist; do
index 20d05c964eb3b93698b06094b601d7fb0c075cb9..e0f1176d81eb17e359415a5d59dbb2148a63ac5f 100644 (file)
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
index 646868ba25a46528a548b9e582ad30e6f1a98890..6153b9700d0406c2b25fd3015cdde4161fcf10fc 100644 (file)
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW1-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-1</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW1</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW1</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW2-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-2</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW2</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW2</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW3-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-3</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW3</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW3</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW4-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-4</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW4</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW4</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-RX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>XPDR-NW5-TX</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">Client-5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">Client-5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
     <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
         <tp-id>Client-5</tp-id>
         <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-        <associated-connection-map-port xmlns="http://transportpce/topology">XPDR-NW5</associated-connection-map-port>
+        <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR-NW5</associated-connection-map-tp>
         <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
         <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
     </termination-point>
index 3029dcaccb24843c0e27ca6c65990a7de4b9d159..283c4c6b9fa5fc74db5bfe9e1f16a18342fd7ffc 100644 (file)
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW1-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW1-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW1-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW1-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                     "ietf-network-topology:termination-point": [
                         {
                             "tp-id": "XPDR-NW1-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW1-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-1"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-RX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW2-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-2",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-2"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW5-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-5",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-5"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW3-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-3",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-3"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
                         },
                         {
                             "tp-id": "XPDR-NW4-TX",
-                            "transportpce-topology:associated-connection-map-port": "Client-4",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "Client-4"
+                            ],
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
                             "administrative-state": "inService",
                             "operational-state": "inService"
index c23fb1b00c72dd22c07b83867a674fcf8faeee84..a4cd5f3a3f692e9f4ad7e2f959f8b1e8baa4cc50 100644 (file)
@@ -24,7 +24,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
@@ -45,7 +47,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
@@ -84,7 +88,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
index 5d69ad00f2480ea89acce1c7c541f687e6635b5b..548b0b291d69db00e5a927846de22f381a4c069f 100644 (file)
@@ -24,7 +24,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
@@ -45,7 +47,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
@@ -84,7 +88,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                     "org-openroadm-otn-network-topology:available-bandwidth": "0",
                     "org-openroadm-otn-network-topology:used-bandwidth": "400000",
                     "org-openroadm-common-network:link-type": "OTN-LINK",
-                    "transportpce-topology:otn-link-type": "OTUC4",
+                    "transportpce-networkutils:otn-link-type": "OTUC4",
                     "org-openroadm-common-network:operational-state": "inService",
                     "org-openroadm-common-network:administrative-state": "inService",
                     "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1"
                     "org-openroadm-common-network:link-type": "OTN-LINK",
                     "org-openroadm-common-network:operational-state": "inService",
                     "org-openroadm-common-network:administrative-state": "inService",
-                    "transportpce-topology:otn-link-type": "OTUC4",
+                    "transportpce-networkutils:otn-link-type": "OTUC4",
                     "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1"
                 },
                 {
                     "org-openroadm-otn-network-topology:available-bandwidth": "400000",
                     "org-openroadm-otn-network-topology:used-bandwidth": "0",
                     "org-openroadm-common-network:link-type": "OTN-LINK",
-                    "transportpce-topology:otn-link-type": "ODUC4",
+                    "transportpce-networkutils:otn-link-type": "ODUC4",
                     "org-openroadm-common-network:operational-state": "inService",
                     "org-openroadm-common-network:administrative-state": "inService",
                     "org-openroadm-common-network:opposite-link": "ODUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1"
                     "org-openroadm-common-network:link-type": "OTN-LINK",
                     "org-openroadm-common-network:operational-state": "inService",
                     "org-openroadm-common-network:administrative-state": "inService",
-                    "transportpce-topology:otn-link-type": "ODUC4",
+                    "transportpce-networkutils:otn-link-type": "ODUC4",
                     "org-openroadm-common-network:opposite-link": "ODUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1"
                 }
             ]
index 74f345a35ee95b7f05509a70f2efca4507398833..09acf29bc5d4a89aba63195b1185901a713d2009 100644 (file)
@@ -24,7 +24,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
@@ -45,7 +47,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
@@ -84,7 +88,9 @@
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT"
                                     }
                                 ]
                             },
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1",
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ],
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK"
                     "org-openroadm-otn-network-topology:available-bandwidth": "400000",
                     "org-openroadm-otn-network-topology:used-bandwidth": "0",
                     "org-openroadm-common-network:link-type": "OTN-LINK",
-                    "transportpce-topology:otn-link-type": "OTUC4",
+                    "transportpce-networkutils:otn-link-type": "OTUC4",
                     "org-openroadm-common-network:operational-state": "inService",
                     "org-openroadm-common-network:administrative-state": "inService",
                     "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1"
                     "org-openroadm-common-network:link-type": "OTN-LINK",
                     "org-openroadm-common-network:operational-state": "inService",
                     "org-openroadm-common-network:administrative-state": "inService",
-                    "transportpce-topology:otn-link-type": "OTUC4",
+                    "transportpce-networkutils:otn-link-type": "OTUC4",
                     "org-openroadm-common-network:opposite-link": "OTUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1"
                 }
             ]
index 86f80015b039260d09fb63742dc35484cecfc0c7..67eeadbbfb691eb55330a340cd6377688a0fb92d 100644 (file)
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-NETWORK2</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-CLIENT2</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-CLIENT1</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-NETWORK1</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-NETWORK2</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT2</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT2</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-CLIENT2</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK2</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK2</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-CLIENT1</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-CLIENT</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-NETWORK1</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-NETWORK1</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
         <termination-point xmlns="urn:ietf:params:xml:ns:yang:ietf-network-topology">
             <tp-id>XPDR1-NETWORK1</tp-id>
             <tp-type xmlns="http://org/openroadm/common/network">XPONDER-NETWORK</tp-type>
-            <associated-connection-map-port xmlns="http://transportpce/topology">XPDR1-CLIENT1</associated-connection-map-port>
+            <associated-connection-map-tp xmlns="http://org/openroadm/common/network">XPDR1-CLIENT1</associated-connection-map-tp>
             <administrative-state xmlns="http://org/openroadm/common/network">inService</administrative-state>
             <operational-state xmlns="http://org/openroadm/common/network">inService</operational-state>
         </termination-point>
index 854adea78d767b089d60a2a6dcc99d80fbb99f87..12b66cdc85b66ecc25d58c351ecab6f0b9cd3092 100644 (file)
@@ -76,7 +76,9 @@
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT",
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1"
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ]
                         },
                         {
                             "tp-id": "XPDR1-NETWORK1",
@@ -86,7 +88,9 @@
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1"
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ]
                         }
                     ],
                     "supporting-node": [
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-CLIENT",
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-NETWORK1"
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-NETWORK1"
+                            ]
                         },
                         {
                             "tp-id": "XPDR1-NETWORK1",
                             "org-openroadm-common-network:operational-state": "inService",
                             "org-openroadm-common-network:administrative-state": "inService",
                             "org-openroadm-common-network:tp-type": "XPONDER-NETWORK",
-                            "transportpce-topology:associated-connection-map-port": "XPDR1-CLIENT1"
+                            "org-openroadm-common-network:associated-connection-map-tp": [
+                                "XPDR1-CLIENT1"
+                            ]
                         }
                     ],
                     "supporting-node": [
index d17bf8ca67556b57ea30e894724224e856447a30..2a0b485e7ccc863be60179af3ac48f7cb184ab6c 100644 (file)
       </measurement>
       <measurement>
         <granularity>24Hour</granularity>
-        <pmParameterValue>-49.3</pmParameterValue>
+        <pmParameterValue>-21.3</pmParameterValue>
         <pmParameterUnit>dBm</pmParameterUnit>
         <validity>complete</validity>
       </measurement>
       </measurement>
       <measurement>
         <granularity>24Hour</granularity>
-        <pmParameterValue>-49.3</pmParameterValue>
+        <pmParameterValue>-21.3</pmParameterValue>
         <pmParameterUnit>dBm</pmParameterUnit>
         <validity>complete</validity>
       </measurement>
   </current-pm-entry>
   </current-pm-list>
 
+  <current-pm-description xmlns="http://honeynode-simulator/pm-handling">
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+  </current-pm-description>
+
  </data>
index 55c4d55e6bdc6dc0bb99237d94d1833da73e6d5b..2049e9133df8777b93e138827476059dd4089395 100644 (file)
@@ -1 +1 @@
-nose # LGPL v2 or later
+pytest # MIT License
index 1600fe200b2286e4aea8ed8c697ec83777fe8cb9..d6ac68084bd8f2c3af1e13d8360d29dd0325e424 100644 (file)
@@ -230,9 +230,11 @@ class TransportPCETopologyTesting(unittest.TestCase):
                     elif tpType == 'XPONDER-NETWORK':
                         network += 1
                     if tpId == 'XPDR1-NETWORK2':
-                        self.assertEqual(tp['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT3')
+                        self.assertEqual(
+                            tp['org-openroadm-common-network:associated-connection-map-tp'], ['XPDR1-CLIENT3'])
                     elif tpId == 'XPDR1-CLIENT3':
-                        self.assertEqual(tp['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2')
+                        self.assertEqual(
+                            tp['org-openroadm-common-network:associated-connection-map-tp'], ['XPDR1-NETWORK2'])
                 self.assertTrue(client == 4)
                 self.assertTrue(network == 2)
                 listNode.remove(nodeId)
index 88ae14f69ea583e11aef79472de9071e62eaf1e0..be11ec3ab60d3d2938f53192cd045fd7ee93b5ed 100644 (file)
@@ -233,9 +233,11 @@ class TransportPCEtesting(unittest.TestCase):
                     elif tpType == 'XPONDER-NETWORK':
                         network += 1
                     if tpId == 'XPDR1-NETWORK2':
-                        self.assertEqual(tp['transportpce-topology:associated-connection-map-port'], 'XPDR1-CLIENT2')
+                        self.assertEqual(
+                            tp['org-openroadm-common-network:associated-connection-map-tp'], ['XPDR1-CLIENT2'])
                     if tpId == 'XPDR1-CLIENT2':
-                        self.assertEqual(tp['transportpce-topology:associated-connection-map-port'], 'XPDR1-NETWORK2')
+                        self.assertEqual(
+                            tp['org-openroadm-common-network:associated-connection-map-tp'], ['XPDR1-NETWORK2'])
                 self.assertEqual(client, 2)
                 self.assertEqual(network, 2)
                 listNode.remove(nodeId)
index 07a493a5ed83fbf617c253508fd974114f9859d6..f91440c2ef0667a699c7a648015c4596a52c1a1a 100644 (file)
@@ -412,7 +412,7 @@ class TransportPCEtesting(unittest.TestCase):
         for link in response['network'][0]['ietf-network-topology:link']:
             self.assertIn(link['link-id'], listLinkId)
             self.assertEqual(
-                link['transportpce-topology:otn-link-type'], 'OTU4')
+                link['transportpce-networkutils:otn-link-type'], 'OTU4')
             self.assertEqual(
                 link['org-openroadm-common-network:link-type'], 'OTN-LINK')
             self.assertEqual(
@@ -532,7 +532,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(
                     link['org-openroadm-otn-network-topology:used-bandwidth'], 0)
                 self.assertEqual(
-                    link['transportpce-topology:otn-link-type'], 'ODTU4')
+                    link['transportpce-networkutils:otn-link-type'], 'ODTU4')
                 self.assertEqual(
                     link['org-openroadm-common-network:link-type'], 'OTN-LINK')
                 self.assertIn(link['org-openroadm-common-network:opposite-link'],
index 4169b086090ab881ea32bb8cbd10b480d292a67a..22707c43eea07aec84fe65150069de697b547e85 100644 (file)
@@ -595,7 +595,7 @@ class TransportPCEtesting(unittest.TestCase):
         for link in res['network'][0]['ietf-network-topology:link']:
             self.assertIn(link['link-id'], listLinkId)
             self.assertEqual(
-                link['transportpce-topology:otn-link-type'], 'OTU4')
+                link['transportpce-networkutils:otn-link-type'], 'OTU4')
             self.assertEqual(
                 link['org-openroadm-common-network:link-type'], 'OTN-LINK')
             self.assertEqual(
@@ -847,7 +847,7 @@ class TransportPCEtesting(unittest.TestCase):
         for link in res['network'][0]['ietf-network-topology:link']:
             self.assertIn(link['link-id'], listLinkId)
             self.assertEqual(
-                link['transportpce-topology:otn-link-type'], 'OTU4')
+                link['transportpce-networkutils:otn-link-type'], 'OTU4')
             self.assertEqual(
                 link['org-openroadm-common-network:link-type'], 'OTN-LINK')
             self.assertEqual(
index 388c4fa25079c21999fca09b64aef081ccd284ff..11de7104007c392eb7860173434f4484c1a07631 100644 (file)
@@ -424,7 +424,7 @@ class TransportPCEtesting(unittest.TestCase):
         for link in res['network'][0]['ietf-network-topology:link']:
             self.assertIn(link['link-id'], listLinkId)
             self.assertEqual(
-                link['transportpce-topology:otn-link-type'], 'OTU4')
+                link['transportpce-networkutils:otn-link-type'], 'OTU4')
             self.assertEqual(
                 link['org-openroadm-common-network:link-type'], 'OTN-LINK')
             self.assertEqual(
@@ -486,7 +486,7 @@ class TransportPCEtesting(unittest.TestCase):
         for link in res['network'][0]['ietf-network-topology:link']:
             self.assertIn(link['link-id'], listLinkId)
             self.assertEqual(
-                link['transportpce-topology:otn-link-type'], 'OTU4')
+                link['transportpce-networkutils:otn-link-type'], 'OTU4')
             self.assertEqual(
                 link['org-openroadm-common-network:link-type'], 'OTN-LINK')
             self.assertEqual(
@@ -695,7 +695,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(
                     link['org-openroadm-otn-network-topology:used-bandwidth'], 0)
                 self.assertEqual(
-                    link['transportpce-topology:otn-link-type'], 'ODTU4')
+                    link['transportpce-networkutils:otn-link-type'], 'ODTU4')
                 self.assertEqual(
                     link['org-openroadm-common-network:link-type'], 'OTN-LINK')
                 self.assertIn(link['org-openroadm-common-network:opposite-link'],
index 2a7dee015fe96bc3b147f47e3723507a10dec43d..65ca5e212677a6346c605a81175c07d53c2d1b53 100644 (file)
@@ -45,6 +45,7 @@ URL_CONFIG_CLLI_NET = "{}/config/ietf-network:networks/network/clli-network/"
 URL_CONFIG_ORDM_NET = "{}/config/ietf-network:networks/network/openroadm-network/"
 URL_PORTMAPPING = "{}/config/transportpce-portmapping:network/nodes/"
 URL_OPER_SERV_LIST = "{}/operational/org-openroadm-service:service-list/"
+URL_OPER_SERV_PATH_LIST = "{}/operational/transportpce-service-path:service-path-list/"
 URL_GET_NBINOTIFICATIONS_PROCESS_SERV = "{}/operations/nbi-notifications:get-notifications-process-service/"
 URL_GET_NBINOTIFICATIONS_ALARM_SERV = "{}/operations/nbi-notifications:get-notifications-alarm-service/"
 URL_SERV_CREATE = "{}/operations/org-openroadm-service:service-create"
@@ -53,13 +54,17 @@ URL_SERVICE_PATH = "{}/operations/transportpce-device-renderer:service-path"
 URL_OTN_SERVICE_PATH = "{}/operations/transportpce-device-renderer:otn-service-path"
 URL_TAPI_CREATE_CONNECTIVITY = "{}/operations/tapi-connectivity:create-connectivity-service"
 URL_TAPI_DELETE_CONNECTIVITY = "{}/operations/tapi-connectivity:delete-connectivity-service"
+URL_TAPI_GET_CONNECTIVITY = "{}/operations/tapi-connectivity:get-connectivity-service-details"
 URL_CREATE_OTS_OMS = "{}/operations/transportpce-device-renderer:create-ots-oms"
 URL_PATH_COMPUTATION_REQUEST = "{}/operations/transportpce-pce:path-computation-request"
 URL_FULL_PORTMAPPING = "{}/config/transportpce-portmapping:network"
 URL_TAPI_TOPOLOGY_DETAILS = "{}/operations/tapi-topology:get-topology-details"
 URL_TAPI_NODE_DETAILS = "{}/operations/tapi-topology:get-node-details"
+URL_TAPI_NEP_DETAILS = "{}/operations/tapi-topology:get-node-edge-point-details"
 URL_TAPI_SIP_LIST = "{}/operations/tapi-common:get-service-interface-point-list"
 URL_TAPI_SERVICE_LIST = "{}/operations/tapi-connectivity:get-connectivity-service-list"
+URL_TAPI_NOTIFICATION_SUBS_SERVICE = "{}/operations/tapi-notification:create-notification-subscription-service"
+URL_TAPI_GET_NOTIFICATION_LIST = "{}/operations/tapi-notification:get-notification-list"
 
 TYPE_APPLICATION_JSON = {'Content-Type': 'application/json', 'Accept': 'application/json'}
 TYPE_APPLICATION_XML = {'Content-Type': 'application/xml', 'Accept': 'application/xml'}
@@ -408,8 +413,11 @@ def get_notifications_alarm_service_request(attr):
 
 
 def get_service_list_request(suffix: str):
-    url = URL_OPER_SERV_LIST + suffix
-    return get_request(url)
+    return get_request(URL_OPER_SERV_LIST + suffix)
+
+
+def get_service_path_list_request(suffix: str):
+    return get_request(URL_OPER_SERV_PATH_LIST + suffix)
 
 
 def service_create_request(attr):
@@ -489,6 +497,13 @@ def tapi_create_connectivity_request(topologyidorname):
     return post_request(URL_TAPI_CREATE_CONNECTIVITY, topologyidorname)
 
 
+def tapi_get_connectivity_request(serviceidorname):
+    attr = {
+        "input": {
+            "service-id-or-name": serviceidorname}}
+    return post_request(URL_TAPI_GET_CONNECTIVITY, attr)
+
+
 def tapi_delete_connectivity_request(serviceidorname):
     attr = {
         "input": {
@@ -511,6 +526,15 @@ def tapi_get_node_details_request(topologyidorname, nodeidorname):
     return post_request(URL_TAPI_NODE_DETAILS, attr)
 
 
+def tapi_get_node_edge_point_details_request(topologyidorname, nodeidorname, nepidorname):
+    attr = {
+        "input": {
+            "topology-id-or-name": topologyidorname,
+            "node-id-or-name": nodeidorname,
+            "ep-id-or-name": nepidorname}}
+    return post_request(URL_TAPI_NEP_DETAILS, attr)
+
+
 def tapi_get_sip_details_request():
     return post_request(URL_TAPI_SIP_LIST, "")
 
@@ -519,6 +543,14 @@ def tapi_get_service_list_request():
     return post_request(URL_TAPI_SERVICE_LIST, "")
 
 
+def tapi_create_notification_subscription_service_request(attr):
+    return post_request(URL_TAPI_NOTIFICATION_SUBS_SERVICE, attr)
+
+
+def tapi_get_notifications_list_request(attr):
+    return post_request(URL_TAPI_GET_NOTIFICATION_LIST, attr)
+
+
 def shutdown_process(process):
     if process is not None:
         for child in psutil.Process(process.pid).children():
index fa90adc38e0684497c567719f75cd2d29a661483..2bd319118ee204569bec52104d6bfc11a5c752f9 100644 (file)
@@ -445,7 +445,7 @@ class TransportPCEtesting(unittest.TestCase):
         for link in res['network'][0]['ietf-network-topology:link']:
             self.assertIn(link['link-id'], listLinkId)
             self.assertEqual(
-                link['transportpce-topology:otn-link-type'], 'OTUC4')
+                link['transportpce-networkutils:otn-link-type'], 'OTUC4')
             self.assertEqual(
                 link['org-openroadm-common-network:link-type'], 'OTN-LINK')
             self.assertEqual(
@@ -570,7 +570,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(
                     link['org-openroadm-otn-network-topology:used-bandwidth'], 0)
                 self.assertEqual(
-                    link['transportpce-topology:otn-link-type'], 'ODUC4')
+                    link['transportpce-networkutils:otn-link-type'], 'ODUC4')
                 self.assertEqual(
                     link['org-openroadm-common-network:link-type'], 'OTN-LINK')
                 self.assertIn(link['org-openroadm-common-network:opposite-link'],
diff --git a/tests/transportpce_tests/hybrid/test03_autonomous_reroute.py b/tests/transportpce_tests/hybrid/test03_autonomous_reroute.py
new file mode 100644 (file)
index 0000000..bd7f3f9
--- /dev/null
@@ -0,0 +1,1197 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2022 Orange, Inc. and others.  All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# pylint: disable=invalid-name
+# pylint: disable=no-member
+# pylint: disable=too-many-public-methods
+# pylint: disable=too-many-lines
+
+import json
+import unittest
+import time
+import requests
+# pylint: disable=wrong-import-order
+import sys
+
+sys.path.append('transportpce_tests/common/')
+# pylint: disable=wrong-import-position
+# pylint: disable=import-error
+import test_utils  # nopep8
+
+
+class TransportPCEtesting(unittest.TestCase):
+    processes = None
+    WAITING = 20  # nominal value is 300
+    NODE_VERSION_221 = '2.2.1'
+    NODE_VERSION_71 = '7.1'
+
+    cr_serv_sample_data = {
+        "input": {
+            "sdnc-request-header": {
+                "request-id": "request-1",
+                "rpc-action": "service-create",
+                "request-system-id": "appname"
+            },
+            "service-name": "service1",
+            "common-id": "commonId",
+            "connection-type": "service",
+            "service-resiliency": {
+                "resiliency": "org-openroadm-common-service-types:restorable"
+            },
+            "service-a-end": {
+                "service-rate": "400",
+                "node-id": "XPDR-A2",
+                "service-format": "Ethernet",
+                "clli": "NodeA",
+                "tx-direction": [
+                    {
+                        "index": 0
+                    }
+                ],
+                "rx-direction": [
+                    {
+                        "index": 0
+                    }
+                ],
+                "optic-type": "gray"
+            },
+            "service-z-end": {
+                "service-rate": "400",
+                "node-id": "XPDR-C2",
+                "service-format": "Ethernet",
+                "clli": "NodeC",
+                "tx-direction": [
+                    {
+                        "index": 0
+                    }
+                ],
+                "rx-direction": [
+                    {
+                        "index": 0
+                    }
+                ],
+                "optic-type": "gray"
+            },
+            "due-date": "2018-06-15T00:00:01Z",
+            "operator-contact": "pw1234"
+        }
+    }
+
+    service_path_service_1_AtoZ = [
+        {
+            "id": "16",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-CP-TXRX",
+                "tp-node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "17",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "14",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-CTP-TXRX",
+                "tp-node-id": "ROADM-C1-DEG1"
+            }
+        },
+        {
+            "id": "15",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
+            }
+        },
+        {
+            "id": "18",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-PP1-TXRX",
+                "tp-node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "19",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
+            }
+        },
+        {
+            "id": "1",
+            "resource": {
+                "state": "inService",
+                "node-id": "XPDR-A2-XPDR1"
+            }
+        },
+        {
+            "id": "2",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-NETWORK1",
+                "tp-node-id": "XPDR-A2-XPDR1"
+            }
+        },
+        {
+            "id": "0",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-CLIENT1",
+                "tp-node-id": "XPDR-A2-XPDR1"
+            }
+        },
+        {
+            "id": "5",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "6",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-CP-TXRX",
+                "tp-node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "3",
+            "resource": {
+                "state": "inService",
+                "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
+            }
+        },
+        {
+            "id": "4",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-PP1-TXRX",
+                "tp-node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "9",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-A1-DEG2"
+            }
+        },
+        {
+            "id": "7",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
+            }
+        },
+        {
+            "id": "8",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-CTP-TXRX",
+                "tp-node-id": "ROADM-A1-DEG2"
+            }
+        },
+        {
+            "id": "20",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-NETWORK1",
+                "tp-node-id": "XPDR-C2-XPDR1"
+            }
+        },
+        {
+            "id": "12",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-TTP-TXRX",
+                "tp-node-id": "ROADM-C1-DEG1"
+            }
+        },
+        {
+            "id": "13",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-C1-DEG1"
+            }
+        },
+        {
+            "id": "10",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-TTP-TXRX",
+                "tp-node-id": "ROADM-A1-DEG2"
+            }
+        },
+        {
+            "id": "21",
+            "resource": {
+                "state": "inService",
+                "node-id": "XPDR-C2-XPDR1"
+            }
+        },
+        {
+            "id": "11",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
+            }
+        },
+        {
+            "id": "22",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-CLIENT1",
+                "tp-node-id": "XPDR-C2-XPDR1"
+            }
+        }
+    ]
+
+    service_path_service_1_rerouted_AtoZ = [
+        {
+            "id": "27",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C2-XPDR1-XPDR1-NETWORK1"
+            }
+        },
+        {
+            "id": "28",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-NETWORK1",
+                "tp-node-id": "XPDR-C2-XPDR1"
+            }
+        },
+        {
+            "id": "25",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "26",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-PP1-TXRX",
+                "tp-node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "29",
+            "resource": {
+                "state": "inService",
+                "node-id": "XPDR-C2-XPDR1"
+            }
+        },
+        {
+            "id": "30",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-CLIENT1",
+                "tp-node-id": "XPDR-C2-XPDR1"
+            }
+        },
+        {
+            "id": "12",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-TTP-TXRX",
+                "tp-node-id": "ROADM-B1-DEG1"
+            }
+        },
+        {
+            "id": "13",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-B1-DEG1"
+            }
+        },
+        {
+            "id": "10",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-TTP-TXRX",
+                "tp-node-id": "ROADM-A1-DEG1"
+            }
+        },
+        {
+            "id": "11",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
+            }
+        },
+        {
+            "id": "16",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-CTP-TXRX",
+                "tp-node-id": "ROADM-B1-DEG2"
+            }
+        },
+        {
+            "id": "17",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-B1-DEG2"
+            }
+        },
+        {
+            "id": "14",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-CTP-TXRX",
+                "tp-node-id": "ROADM-B1-DEG1"
+            }
+        },
+        {
+            "id": "15",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
+            }
+        },
+        {
+            "id": "18",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-TTP-TXRX",
+                "tp-node-id": "ROADM-B1-DEG2"
+            }
+        },
+        {
+            "id": "19",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
+            }
+        },
+        {
+            "id": "1",
+            "resource": {
+                "state": "inService",
+                "node-id": "XPDR-A2-XPDR1"
+            }
+        },
+        {
+            "id": "2",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-NETWORK1",
+                "tp-node-id": "XPDR-A2-XPDR1"
+            }
+        },
+        {
+            "id": "0",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR1-CLIENT1",
+                "tp-node-id": "XPDR-A2-XPDR1"
+            }
+        },
+        {
+            "id": "5",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "6",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-CP-TXRX",
+                "tp-node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "3",
+            "resource": {
+                "state": "inService",
+                "link-id": "XPDR-A2-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX"
+            }
+        },
+        {
+            "id": "4",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-PP1-TXRX",
+                "tp-node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "9",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-A1-DEG1"
+            }
+        },
+        {
+            "id": "7",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
+            }
+        },
+        {
+            "id": "8",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-CTP-TXRX",
+                "tp-node-id": "ROADM-A1-DEG1"
+            }
+        },
+        {
+            "id": "20",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-TTP-TXRX",
+                "tp-node-id": "ROADM-C1-DEG2"
+            }
+        },
+        {
+            "id": "23",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
+            }
+        },
+        {
+            "id": "24",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-CP-TXRX",
+                "tp-node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "21",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-C1-DEG2"
+            }
+        },
+        {
+            "id": "22",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-CTP-TXRX",
+                "tp-node-id": "ROADM-C1-DEG2"
+            }
+        }
+    ]
+
+    service_path_service_2_AtoZ = [
+        {
+            "id": "16",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-CP-TXRX",
+                "tp-node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "17",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "14",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-CTP-TXRX",
+                "tp-node-id": "ROADM-C1-DEG1"
+            }
+        },
+        {
+            "id": "15",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
+            }
+        },
+        {
+            "id": "18",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-PP2-TXRX",
+                "tp-node-id": "ROADM-C1-SRG1"
+            }
+        },
+        {
+            "id": "19",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-C1-SRG1-SRG1-PP2-TXRXtoXPDR-C2-XPDR3-XPDR3-NETWORK1"
+            }
+        },
+        {
+            "id": "1",
+            "resource": {
+                "state": "inService",
+                "node-id": "XPDR-A2-XPDR3"
+            }
+        },
+        {
+            "id": "2",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR3-NETWORK1",
+                "tp-node-id": "XPDR-A2-XPDR3"
+            }
+        },
+        {
+            "id": "0",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR3-CLIENT1",
+                "tp-node-id": "XPDR-A2-XPDR3"
+            }
+        },
+        {
+            "id": "5",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "6",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-CP-TXRX",
+                "tp-node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "3",
+            "resource": {
+                "state": "inService",
+                "link-id": "XPDR-A2-XPDR3-XPDR3-NETWORK1toROADM-A1-SRG1-SRG1-PP2-TXRX"
+            }
+        },
+        {
+            "id": "4",
+            "resource": {
+                "state": "inService",
+                "tp-id": "SRG1-PP2-TXRX",
+                "tp-node-id": "ROADM-A1-SRG1"
+            }
+        },
+        {
+            "id": "9",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-A1-DEG2"
+            }
+        },
+        {
+            "id": "7",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
+            }
+        },
+        {
+            "id": "8",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-CTP-TXRX",
+                "tp-node-id": "ROADM-A1-DEG2"
+            }
+        },
+        {
+            "id": "20",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR3-NETWORK1",
+                "tp-node-id": "XPDR-C2-XPDR3"
+            }
+        },
+        {
+            "id": "12",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG1-TTP-TXRX",
+                "tp-node-id": "ROADM-C1-DEG1"
+            }
+        },
+        {
+            "id": "13",
+            "resource": {
+                "state": "inService",
+                "node-id": "ROADM-C1-DEG1"
+            }
+        },
+        {
+            "id": "10",
+            "resource": {
+                "state": "inService",
+                "tp-id": "DEG2-TTP-TXRX",
+                "tp-node-id": "ROADM-A1-DEG2"
+            }
+        },
+        {
+            "id": "21",
+            "resource": {
+                "state": "inService",
+                "node-id": "XPDR-C2-XPDR3"
+            }
+        },
+        {
+            "id": "11",
+            "resource": {
+                "state": "inService",
+                "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
+            }
+        },
+        {
+            "id": "22",
+            "resource": {
+                "state": "inService",
+                "tp-id": "XPDR3-CLIENT1",
+                "tp-node-id": "XPDR-C2-XPDR3"
+            }
+        }
+    ]
+
+    @classmethod
+    def setUpClass(cls):
+        cls.processes = test_utils.start_tpce()
+        cls.processes = test_utils.start_sims([('xpdra2', cls.NODE_VERSION_71),
+                                               ('roadma', cls.NODE_VERSION_221),
+                                               ('roadmb', cls.NODE_VERSION_221),
+                                               ('roadmc', cls.NODE_VERSION_221),
+                                               ('xpdrc2', cls.NODE_VERSION_71)])
+
+    @classmethod
+    def tearDownClass(cls):
+        # pylint: disable=not-an-iterable
+        for process in cls.processes:
+            test_utils.shutdown_process(process)
+        print("all processes killed")
+
+    def setUp(self):
+        time.sleep(2)
+
+    def test_01_connect_xpdra2(self):
+        response = test_utils.mount_device("XPDR-A2", ('xpdra2', self.NODE_VERSION_71))
+        self.assertEqual(response.status_code,
+                         requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_02_connect_xpdrc2(self):
+        response = test_utils.mount_device("XPDR-C2", ('xpdrc2', self.NODE_VERSION_71))
+        self.assertEqual(response.status_code,
+                         requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_03_connect_rdma(self):
+        response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code,
+                         requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_04_connect_rdmb(self):
+        response = test_utils.mount_device("ROADM-B1", ('roadmb', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code,
+                         requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_05_connect_rdmc(self):
+        response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code,
+                         requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_06_connect_xprda2_1_N1_to_roadma_PP1(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-A2", "1", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Xponder Roadm Link created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_07_connect_roadma_PP1_to_xpdra2_1_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-A2", "1", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Roadm Xponder links created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_08_connect_xprdc2_1_N1_to_roadmc_PP1(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-C2", "1", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Xponder Roadm Link created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_09_connect_roadmc_PP1_to_xpdrc2_1_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-C2", "1", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Roadm Xponder links created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_10_connect_xprda2_3_N1_to_roadma_PP2(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-A2", "3", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP2-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Xponder Roadm Link created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_11_connect_roadma_PP2_to_xpdra2_3_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-A2", "3", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP2-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Roadm Xponder links created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_12_connect_xprdc2_3_N1_to_roadmc_PP2(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-C2", "3", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP2-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Xponder Roadm Link created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_13_connect_roadmc_PP2_to_xpdrc2_3_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-C2", "3", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP2-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Roadm Xponder links created successfully',
+                      response.json()["output"]["result"])
+        time.sleep(2)
+
+    def test_14_add_omsAttributes_roadma_roadmc(self):
+        # Config ROADMA-ROADMC oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_15_add_omsAttributes_roadmc_roadma(self):
+        # Config ROADMC-ROADMA oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_16_add_omsAttributes_roadma_roadmb(self):
+        # Config ROADMA-ROADMB oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_17_add_omsAttributes_roadmb_roadma(self):
+        # Config ROADMB-ROADMA oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_18_add_omsAttributes_roadmb_roadmc(self):
+        # Config ROADMB-ROADMC oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_19_add_omsAttributes_roadmc_roadmb(self):
+        # Config ROADMC-ROADMB oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_20_create_OTS_ROADMA_DEG1(self):
+        response = test_utils.create_ots_oms_request("ROADM-A1", "DEG1-TTP-TXRX")
+        time.sleep(5)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-A1',
+                      response.json()["output"]["result"])
+
+    def test_21_create_OTS_ROADMC_DEG2(self):
+        response = test_utils.create_ots_oms_request("ROADM-C1", "DEG2-TTP-TXRX")
+        time.sleep(5)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-C1',
+                      response.json()["output"]["result"])
+
+    def test_22_create_OTS_ROADMB_DEG1(self):
+        response = test_utils.create_ots_oms_request("ROADM-B1", "DEG1-TTP-TXRX")
+        time.sleep(5)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Interfaces OTS-DEG1-TTP-TXRX - OMS-DEG1-TTP-TXRX successfully created on node ROADM-B1',
+                      response.json()["output"]["result"])
+
+    def test_23_create_OTS_ROADMB_DEG2(self):
+        response = test_utils.create_ots_oms_request("ROADM-B1", "DEG2-TTP-TXRX")
+        time.sleep(5)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Interfaces OTS-DEG2-TTP-TXRX - OMS-DEG2-TTP-TXRX successfully created on node ROADM-B1',
+                      response.json()["output"]["result"])
+
+    def test_24_calculate_span_loss_base_all(self):
+        data = {
+            "input": {
+                "src-type": "all"
+            }
+        }
+        response = test_utils.post_request("{}/operations/transportpce-olm:calculate-spanloss-base", data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Success',
+                      res["output"]["result"])
+        self.assertIn({
+            "spanloss": "25.7",
+            "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX"
+        }, res["output"]["spans"])
+        self.assertIn({
+            "spanloss": "23.6",
+            "link-id": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX"
+        }, res["output"]["spans"])
+        self.assertIn({
+            "spanloss": "23.6",
+            "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX"
+        }, res["output"]["spans"])
+        self.assertIn({
+            "spanloss": "17.6",
+            "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
+        }, res["output"]["spans"])
+        self.assertIn({
+            "spanloss": "25.7",
+            "link-id": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX"
+        }, res["output"]["spans"])
+        self.assertIn({
+            "spanloss": "17.6",
+            "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX"
+        }, res["output"]["spans"])
+
+    # test service-create for Eth service from xpdr to xpdr with service-resiliency
+    def test_25_create_eth_service1_with_service_resiliency_restorable(self):
+        self.cr_serv_sample_data["input"]["service-name"] = "service1"
+        response = test_utils.service_create_request(self.cr_serv_sample_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('PCE calculation in progress',
+                      response.json()['output']['configuration-response-common']['response-message'])
+        time.sleep(self.WAITING)
+
+    def test_26_get_eth_service1(self):
+        response = test_utils.get_service_list_request("services/service1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['operational-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['administrative-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service1')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        self.assertEqual(
+            res['services'][0]['service-resiliency']['resiliency'], 'org-openroadm-common-service-types:restorable')
+        time.sleep(2)
+
+    def test_27_get_service_path_service_1(self):
+        response = test_utils.get_service_path_list_request("service-paths/service1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertCountEqual(self.service_path_service_1_AtoZ,
+                              response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
+
+    # test service-create for Eth service from xpdr to xpdr without service-resiliency
+    def test_28_create_eth_service2_without_service_resiliency(self):
+        self.cr_serv_sample_data["input"]["service-name"] = "service2"
+        del self.cr_serv_sample_data["input"]["service-resiliency"]
+        response = test_utils.service_create_request(self.cr_serv_sample_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('PCE calculation in progress',
+                      response.json()['output']['configuration-response-common']['response-message'])
+        time.sleep(self.WAITING)
+
+    def test_29_get_eth_service2(self):
+        response = test_utils.get_service_list_request("services/service2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['operational-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['administrative-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service2')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        self.assertNotIn('service-resiliency', res['services'][0])
+        time.sleep(2)
+
+    def test_30_get_service_path_service_2(self):
+        response = test_utils.get_service_path_list_request("service-paths/service2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertCountEqual(self.service_path_service_2_AtoZ,
+                              response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
+
+    # Degrade ROADM-A1-ROADM-C1 link
+    def test_31_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
+        url = "{}/operations/pm-handling:pm-interact"
+        body = {
+            "input": {
+                "rpc-action": "set",
+                "pm-to-be-set-or-created": {
+                    "current-pm-entry": [
+                        {
+                            "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
+                                                    ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
+                            "pm-resource-type": "interface",
+                            "pm-resource-type-extension": "",
+                            "current-pm": [
+                                {
+                                    "type": "opticalPowerInput",
+                                    "extension": "",
+                                    "location": "nearEnd",
+                                    "direction": "rx",
+                                    "measurement": [
+                                        {
+                                            "granularity": "15min",
+                                            "pmParameterValue": -30,
+                                            "pmParameterUnit": "dBm",
+                                            "validity": "complete"
+                                        },
+                                        {
+                                            "granularity": "24Hour",
+                                            "pmParameterValue": -21.3,
+                                            "pmParameterUnit": "dBm",
+                                            "validity": "complete"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        }
+        response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
+        time.sleep(self.WAITING * 2)
+
+    def test_32_get_eth_service1(self):
+        self.test_26_get_eth_service1()
+
+    def test_33_get_service_path_service_1(self):
+        response = test_utils.get_service_path_list_request("service-paths/service1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        print(response.json())
+        self.assertCountEqual(self.service_path_service_1_rerouted_AtoZ,
+                              response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
+
+    def test_34_get_eth_service2(self):
+        response = test_utils.get_service_list_request("services/service2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['operational-state'], 'outOfService')
+        self.assertEqual(
+            res['services'][0]['administrative-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], 'service2')
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        self.assertNotIn('service-resiliency', res['services'][0])
+        time.sleep(2)
+
+    def test_35_get_service_path_service_2(self):
+        response = test_utils.get_service_path_list_request("service-paths/service2")
+        index = self.service_path_service_2_AtoZ.index(
+            {
+                'id': '10',
+                'resource': {
+                    'state': 'inService',
+                    'tp-id': 'DEG2-TTP-TXRX',
+                    'tp-node-id': 'ROADM-A1-DEG2'
+                }
+            }
+        )
+        service_path_expected = self.service_path_service_2_AtoZ[:index] + [{
+            'id': '10',
+            'resource': {
+                'state': 'outOfService',
+                'tp-id': 'DEG2-TTP-TXRX',
+                'tp-node-id': 'ROADM-A1-DEG2'
+            }
+        }] + self.service_path_service_2_AtoZ[index + 1:]
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertCountEqual(service_path_expected,
+                              response.json()['service-paths'][0]['path-description']['aToZ-direction']['aToZ'])
+
+    # Restore ROADM-A1-ROADM-C1 link
+    def test_36_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
+        url = "{}/operations/pm-handling:pm-interact"
+        body = {
+            "input": {
+                "rpc-action": "clear",
+                "pm-to-get-clear-or-delete": {
+                    "current-pm-entry": [
+                        {
+                            "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
+                                                    ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
+                            "pm-resource-type": "interface",
+                            "pm-resource-type-extension": "",
+                            "current-pm": [
+                                {
+                                    "type": "opticalPowerInput",
+                                    "extension": "",
+                                    "location": "nearEnd",
+                                    "direction": "rx"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            }
+        }
+        response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
+        time.sleep(2)
+
+    def test_37_get_eth_service1(self):
+        self.test_26_get_eth_service1()
+
+    def test_38_get_service_path_service_1(self):
+        self.test_33_get_service_path_service_1()
+
+    def test_39_get_eth_service2(self):
+        self.test_29_get_eth_service2()
+
+    def test_40_get_service_path_service_2(self):
+        self.test_30_get_service_path_service_2()
+
+    def test_41_delete_eth_service2(self):
+        response = test_utils.service_delete_request("service2")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Renderer service delete in progress',
+                      response.json()['output']['configuration-response-common']['response-message'])
+        time.sleep(self.WAITING)
+
+    def test_42_delete_eth_service1(self):
+        response = test_utils.service_delete_request("service1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        self.assertIn('Renderer service delete in progress',
+                      response.json()['output']['configuration-response-common']['response-message'])
+        time.sleep(self.WAITING)
+
+    def test_43_disconnect_xponders_from_roadm(self):
+        url = "{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:link/"
+        response = test_utils.get_ordm_topo_request("")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        links = response.json()['network'][0]['ietf-network-topology:link']
+        for link in links:
+            if link["org-openroadm-common-network:link-type"] in ('XPONDER-OUTPUT', 'XPONDER-INPUT'):
+                self.assertEqual(test_utils.delete_request(url + link["link-id"]).status_code, requests.codes.ok)
+
+    def test_44_disconnect_xpdra2(self):
+        response = test_utils.unmount_device("XPDR-A2")
+        self.assertEqual(response.status_code, requests.codes.ok,
+                         test_utils.CODE_SHOULD_BE_200)
+
+    def test_45_disconnect_xpdrc2(self):
+        response = test_utils.unmount_device("XPDR-C2")
+        self.assertEqual(response.status_code, requests.codes.ok,
+                         test_utils.CODE_SHOULD_BE_200)
+
+    def test_46_disconnect_roadmA(self):
+        response = test_utils.unmount_device("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok,
+                         test_utils.CODE_SHOULD_BE_200)
+
+    def test_47_disconnect_roadmB(self):
+        response = test_utils.unmount_device("ROADM-B1")
+        self.assertEqual(response.status_code, requests.codes.ok,
+                         test_utils.CODE_SHOULD_BE_200)
+
+    def test_48_disconnect_roadmC(self):
+        response = test_utils.unmount_device("ROADM-C1")
+        self.assertEqual(response.status_code, requests.codes.ok,
+                         test_utils.CODE_SHOULD_BE_200)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py b/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py
new file mode 100644 (file)
index 0000000..8c029aa
--- /dev/null
@@ -0,0 +1,965 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2021 Orange, Inc. and others.  All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# pylint: disable=no-member
+# pylint: disable=too-many-public-methods
+import os
+import json
+import unittest
+import time
+import requests
+# pylint: disable=wrong-import-order
+import sys
+sys.path.append('transportpce_tests/common/')
+# pylint: disable=wrong-import-position
+# pylint: disable=import-error
+import test_utils  # nopep8
+
+# pylint: disable=too-few-public-methods
+
+
+class UuidServices:
+    def __init__(self):
+        # pylint: disable=invalid-name
+        self.pm = None
+        self.odu = None
+        self.dsr = None
+        self.eth = None
+
+
+class TransportPCEFulltesting(unittest.TestCase):
+
+    cr_serv_sample_data = {
+        "input": {
+            "end-point": [
+                {
+                    "layer-protocol-name": "DSR",
+                    "service-interface-point": {
+                        "service-interface-point-uuid": "b1f4bd3b-7fa9-367b-a8ab-6e80293238df"
+                    },
+                    "administrative-state": "UNLOCKED",
+                    "operational-state": "ENABLED",
+                    "direction": "BIDIRECTIONAL",
+                    "role": "SYMMETRIC",
+                    "protection-role": "WORK",
+                    "local-id": "XPDR-C1-XPDR1",
+                    "name": [
+                        {
+                            "value-name": "OpenROADM node id",
+                            "value": "XPDR-C1-XPDR1"
+                        }
+                    ]
+                },
+                {
+                    "layer-protocol-name": "DSR",
+                    "service-interface-point": {
+                        "service-interface-point-uuid": "b5964ce9-274c-3f68-b4d1-83c0b61bc74e"
+                    },
+                    "administrative-state": "UNLOCKED",
+                    "operational-state": "ENABLED",
+                    "direction": "BIDIRECTIONAL",
+                    "role": "SYMMETRIC",
+                    "protection-role": "WORK",
+                    "local-id": "XPDR-A1-XPDR1",
+                    "name": [
+                        {
+                            "value-name": "OpenROADM node id",
+                            "value": "XPDR-A1-XPDR1"
+                        }
+                    ]
+                }
+            ],
+            "connectivity-constraint": {
+                "service-layer": "ETH",
+                "service-type": "POINT_TO_POINT_CONNECTIVITY",
+                "service-level": "Some service-level",
+                "requested-capacity": {
+                    "total-size": {
+                        "value": "100",
+                        "unit": "GB"
+                    }
+                }
+            },
+            "state": "Some state"
+        }
+    }
+
+    processes = []
+    uuid_services = UuidServices()
+    WAITING = 25  # nominal value is 300
+    NODE_VERSION_221 = '2.2.1'
+
+    @classmethod
+    def setUpClass(cls):
+        # pylint: disable=unsubscriptable-object
+        cls.init_failed = False
+        os.environ['JAVA_MIN_MEM'] = '1024M'
+        os.environ['JAVA_MAX_MEM'] = '4096M'
+        cls.processes = test_utils.start_tpce()
+        # TAPI feature is not installed by default in Karaf
+        if "USE_LIGHTY" not in os.environ or os.environ['USE_LIGHTY'] != 'True':
+            print("installing tapi feature...")
+            result = test_utils.install_karaf_feature("odl-transportpce-tapi")
+            if result.returncode != 0:
+                cls.init_failed = True
+            print("Restarting OpenDaylight...")
+            test_utils.shutdown_process(cls.processes[0])
+            cls.processes[0] = test_utils.start_karaf()
+            test_utils.process_list[0] = cls.processes[0]
+            cls.init_failed = not test_utils.wait_until_log_contains(
+                test_utils.KARAF_LOG, test_utils.KARAF_OK_START_MSG, time_to_wait=60)
+        if cls.init_failed:
+            print("tapi installation feature failed...")
+            test_utils.shutdown_process(cls.processes[0])
+            sys.exit(2)
+        cls.processes = test_utils.start_tpce()
+        cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_221),
+                                               ('roadma', cls.NODE_VERSION_221),
+                                               ('roadmc', cls.NODE_VERSION_221),
+                                               ('xpdrc', cls.NODE_VERSION_221)])
+
+    @classmethod
+    def tearDownClass(cls):
+        # pylint: disable=not-an-iterable
+        for process in cls.processes:
+            test_utils.shutdown_process(process)
+        print("all processes killed")
+        time.sleep(10)
+
+    def setUp(self):  # instruction executed before each test method
+        # pylint: disable=consider-using-f-string
+        print("execution of {}".format(self.id().split(".")[-1]))
+
+    def test_01_connect_xpdrA(self):
+        response = test_utils.mount_device("XPDR-A1", ('xpdra', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_02_connect_xpdrC(self):
+        response = test_utils.mount_device("XPDR-C1", ('xpdrc', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_03_connect_rdmA(self):
+        response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_04_connect_rdmC(self):
+        response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_06_connect_roadmA_PP1_to_xpdrA_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-A1", "1", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-C1", "1", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_08_connect_roadmC_PP1_to_xpdrC_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-C1", "1", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_09_add_omsAttributes_ROADMA_ROADMC(self):
+        # Config ROADMA-ROADMC oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_10_add_omsAttributes_ROADMC_ROADMA(self):
+        # Config ROADMC-ROADMA oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+# test service-create for Eth service from xpdr to xpdr
+    def test_11_create_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_create_connectivity_request(self.cr_serv_sample_data)
+        time.sleep(self.WAITING)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.uuid_services.eth = res['output']['service']['uuid']
+        # pylint: disable=consider-using-f-string
+
+        input_dict_1 = {'administrative-state': 'LOCKED',
+                        'lifecycle-state': 'PLANNED',
+                        'operational-state': 'DISABLED',
+                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
+                        'service-layer': 'ETH',
+                        'connectivity-direction': 'BIDIRECTIONAL'
+                        }
+        input_dict_2 = {'value-name': 'OpenROADM node id',
+                        'value': 'XPDR-C1-XPDR1'}
+        input_dict_3 = {'value-name': 'OpenROADM node id',
+                        'value': 'XPDR-A1-XPDR1'}
+
+        self.assertDictEqual(dict(input_dict_1, **res['output']['service']),
+                             res['output']['service'])
+        self.assertDictEqual(dict(input_dict_2, **res['output']['service']['end-point'][0]['name'][0]),
+                             res['output']['service']['end-point'][0]['name'][0])
+        self.assertDictEqual(dict(input_dict_3, **res['output']['service']['end-point'][1]['name'][0]),
+                             res['output']['service']['end-point'][1]['name'][0])
+        # If the gate fails is because of the waiting time not being enough
+        time.sleep(self.WAITING)
+
+    def test_12_get_service_Ethernet(self):
+        response = test_utils.get_service_list_request("services/" + str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['administrative-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], self.uuid_services.eth)
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(2)
+
+    def test_13_get_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_get_connectivity_request(str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['output']['service']['operational-state'], 'ENABLED')
+        self.assertEqual(
+            res['output']['service']['name'][0]['value'], self.uuid_services.eth)
+        self.assertEqual(
+            res['output']['service']['administrative-state'], 'UNLOCKED')
+        self.assertEqual(
+            res['output']['service']['lifecycle-state'], 'INSTALLED')
+        time.sleep(2)
+
+    def test_14_change_status_line_port_xpdrc(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
+        body = {"ports": [{
+            "port-name": "1",
+            "port-type": "CFP2",
+            "administrative-state": "outOfService",
+            "port-qual": "xpdr-network"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8144/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_15_check_update_portmapping(self):
+        response = test_utils.portmapping_request("XPDR-C1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        mapping_list = res['nodes'][0]['mapping']
+        for mapping in mapping_list:
+            if mapping['logical-connection-point'] == 'XPDR1-NETWORK1':
+                self.assertEqual(mapping['port-oper-state'], 'OutOfService',
+                                 "Operational State should be 'OutOfService'")
+                self.assertEqual(mapping['port-admin-state'], 'OutOfService',
+                                 "Administrative State should be 'OutOfService'")
+            else:
+                self.assertEqual(mapping['port-oper-state'], 'InService',
+                                 "Operational State should be 'InService'")
+                self.assertEqual(mapping['port-admin-state'], 'InService',
+                                 "Administrative State should be 'InService'")
+        time.sleep(1)
+
+    def test_16_check_update_openroadm_topo(self):
+        url = test_utils.URL_CONFIG_ORDM_TOPO
+        response = test_utils.get_request(url)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        node_list = res['network'][0]['node']
+        nb_updated_tp = 0
+        for node in node_list:
+            self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService')
+            tp_list = node['ietf-network-topology:termination-point']
+            for tp in tp_list:
+                if node['node-id'] == 'XPDR-C1-XPDR1' and tp['tp-id'] == 'XPDR1-NETWORK1':
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'outOfService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'outOfService')
+                    nb_updated_tp += 1
+                else:
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'inService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_tp, 1, "Only one termination-point should have been modified")
+
+        link_list = res['network'][0]['ietf-network-topology:link']
+        updated_links = ['XPDR-C1-XPDR1-XPDR1-NETWORK1toROADM-C1-SRG1-SRG1-PP1-TXRX',
+                         'ROADM-C1-SRG1-SRG1-PP1-TXRXtoXPDR-C1-XPDR1-XPDR1-NETWORK1']
+        nb_updated_link = 0
+        for link in link_list:
+            if link['link-id'] in updated_links:
+                self.assertEqual(link['org-openroadm-common-network:operational-state'], 'outOfService')
+                self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'outOfService')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService')
+                self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified")
+        time.sleep(1)
+
+    def test_17_check_update_tapi_neps(self):
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "XPDR-C1-XPDR1+OTSi")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        nb_updated_neps = 0
+        for nep in nep_list:
+            if 'XPDR1-NETWORK1' in nep['name'][0]['value']:
+                self.assertEqual(nep['operational-state'], 'DISABLED',
+                                 "Operational State should be 'DISABLED'")
+                self.assertEqual(nep['administrative-state'], 'LOCKED',
+                                 "Administrative State should be 'LOCKED'")
+                nb_updated_neps += 1
+            else:
+                self.assertEqual(nep['operational-state'], 'ENABLED',
+                                 "Operational State should be 'ENABLED'")
+                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                                 "Administrative State should be 'UNLOCKED'")
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "XPDR-C1-XPDR1+DSR")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        for nep in nep_list:
+            if 'XPDR1-NETWORK1' in nep['name'][0]['value']:
+                self.assertEqual(nep['operational-state'], 'DISABLED',
+                                 "Operational State should be 'DISABLED'")
+                self.assertEqual(nep['administrative-state'], 'LOCKED',
+                                 "Administrative State should be 'LOCKED'")
+                nb_updated_neps += 1
+            else:
+                self.assertEqual(nep['operational-state'], 'ENABLED',
+                                 "Operational State should be 'ENABLED'")
+                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                                 "Administrative State should be 'UNLOCKED'")
+        self.assertEqual(nb_updated_neps, 4, "Only two xponder neps should have been modified")
+        time.sleep(1)
+
+    def test_18_check_update_tapi_links(self):
+        response = test_utils.tapi_get_topology_details_request("T0 - Full Multi-layer topology")
+        time.sleep(2)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        link_list = res['output']['topology']['link']
+        nb_updated_link = 0
+        for link in link_list:
+            if all(x in link['name'][0]['value'] for x in ['XPDR-C1-XPDR1', 'XPDR1-NETWORK1']):
+                self.assertEqual(link['operational-state'], 'DISABLED')
+                self.assertEqual(link['administrative-state'], 'LOCKED')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['operational-state'], 'ENABLED')
+                self.assertEqual(link['administrative-state'], 'UNLOCKED')
+        self.assertEqual(nb_updated_link, 2,
+                         "Only two xponder-output/input & xponder-transi links should have been modified")
+        time.sleep(1)
+
+    def test_19_check_update_service_Ethernet(self):
+        response = test_utils.get_service_list_request(
+            "services/" + str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(res['services'][0]['operational-state'], 'outOfService')
+        self.assertEqual(res['services'][0]['administrative-state'], 'inService')
+        time.sleep(1)
+
+    def test_20_check_update_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_get_connectivity_request(str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['output']['service']['operational-state'], 'DISABLED')
+        self.assertEqual(
+            res['output']['service']['administrative-state'], 'LOCKED')
+        time.sleep(1)
+
+    def test_21_restore_status_line_port_xpdrc(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
+        body = {"ports": [{
+            "port-name": "1",
+            "port-type": "CFP2",
+            "administrative-state": "inService",
+            "port-qual": "xpdr-network"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8144/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_22_check_update_portmapping_ok(self):
+        response = test_utils.portmapping_request("XPDR-C1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        mapping_list = res['nodes'][0]['mapping']
+        for mapping in mapping_list:
+            self.assertEqual(mapping['port-oper-state'], 'InService',
+                             "Operational State should be 'InService'")
+            self.assertEqual(mapping['port-admin-state'], 'InService',
+                             "Administrative State should be 'InService'")
+        time.sleep(1)
+
+    def test_23_check_update_openroadm_topo_ok(self):
+        url = test_utils.URL_CONFIG_ORDM_TOPO
+        response = test_utils.get_request(url)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        node_list = res['network'][0]['node']
+        for node in node_list:
+            self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService')
+            tp_list = node['ietf-network-topology:termination-point']
+            for tp in tp_list:
+                self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'inService')
+                self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'inService')
+
+        link_list = res['network'][0]['ietf-network-topology:link']
+        for link in link_list:
+            self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService')
+        time.sleep(1)
+
+    def test_24_check_update_tapi_neps_ok(self):
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "XPDR-C1-XPDR1+OTSi")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        for nep in nep_list:
+            self.assertEqual(nep['operational-state'], 'ENABLED',
+                             "Operational State should be 'ENABLED'")
+            self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                             "Administrative State should be 'UNLOCKED'")
+
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "XPDR-C1-XPDR1+DSR")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        for nep in nep_list:
+            self.assertEqual(nep['operational-state'], 'ENABLED',
+                             "Operational State should be 'ENABLED'")
+            self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                             "Administrative State should be 'UNLOCKED'")
+        time.sleep(1)
+
+    def test_25_check_update_tapi_links_ok(self):
+        response = test_utils.tapi_get_topology_details_request(
+            "T0 - Full Multi-layer topology")
+        time.sleep(2)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        link_list = res['output']['topology']['link']
+        for link in link_list:
+            self.assertEqual(link['operational-state'], 'ENABLED')
+            self.assertEqual(link['administrative-state'], 'UNLOCKED')
+
+        time.sleep(1)
+
+    def test_26_check_update_service1_ok(self):
+        self.test_12_get_service_Ethernet()
+
+    def test_27_check_update_connectivity_service_Ethernet_ok(self):
+        self.test_13_get_connectivity_service_Ethernet()
+
+    def test_28_change_status_port_roadma_srg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
+        body = {"ports": [{
+            "port-name": "C1",
+            "logical-connection-point": "SRG1-PP1",
+            "port-type": "client",
+            "circuit-id": "SRG1",
+            "administrative-state": "outOfService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_29_check_update_portmapping(self):
+        response = test_utils.portmapping_request("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        mapping_list = res['nodes'][0]['mapping']
+        for mapping in mapping_list:
+            if mapping['logical-connection-point'] == 'SRG1-PP1-TXRX':
+                self.assertEqual(mapping['port-oper-state'], 'OutOfService',
+                                 "Operational State should be 'OutOfService'")
+                self.assertEqual(mapping['port-admin-state'], 'OutOfService',
+                                 "Administrative State should be 'OutOfService'")
+            else:
+                self.assertEqual(mapping['port-oper-state'], 'InService',
+                                 "Operational State should be 'InService'")
+                self.assertEqual(mapping['port-admin-state'], 'InService',
+                                 "Administrative State should be 'InService'")
+        time.sleep(1)
+
+    def test_30_check_update_openroadm_topo(self):
+        url = test_utils.URL_CONFIG_ORDM_TOPO
+        response = test_utils.get_request(url)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        node_list = res['network'][0]['node']
+        nb_updated_tp = 0
+        for node in node_list:
+            self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService')
+            tp_list = node['ietf-network-topology:termination-point']
+            for tp in tp_list:
+                if node['node-id'] == 'ROADM-A1-SRG1' and tp['tp-id'] == 'SRG1-PP1-TXRX':
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'outOfService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'outOfService')
+                    nb_updated_tp += 1
+                else:
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'inService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_tp, 1, "Only one termination-point should have been modified")
+
+        link_list = res['network'][0]['ietf-network-topology:link']
+        updated_links = ['XPDR-A1-XPDR1-XPDR1-NETWORK1toROADM-A1-SRG1-SRG1-PP1-TXRX',
+                         'ROADM-A1-SRG1-SRG1-PP1-TXRXtoXPDR-A1-XPDR1-XPDR1-NETWORK1']
+        nb_updated_link = 0
+        for link in link_list:
+            if link['link-id'] in updated_links:
+                self.assertEqual(link['org-openroadm-common-network:operational-state'], 'outOfService')
+                self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'outOfService')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService')
+                self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified")
+        time.sleep(1)
+
+    def test_31_check_update_tapi_neps(self):
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "ROADM-A1+PHOTONIC_MEDIA")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        nb_updated_neps = 0
+        for nep in nep_list:
+            if 'SRG1-PP1-TXRX' in nep['name'][0]['value']:
+                self.assertEqual(nep['operational-state'], 'DISABLED',
+                                 "Operational State should be 'DISABLED'")
+                self.assertEqual(nep['administrative-state'], 'LOCKED',
+                                 "Administrative State should be 'LOCKED'")
+                nb_updated_neps += 1
+            else:
+                self.assertEqual(nep['operational-state'], 'ENABLED',
+                                 "Operational State should be 'ENABLED'")
+                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                                 "Administrative State should be 'UNLOCKED'")
+        self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified")
+        time.sleep(1)
+
+    def test_32_check_update_tapi_links(self):
+        response = test_utils.tapi_get_topology_details_request(
+            "T0 - Full Multi-layer topology")
+        time.sleep(2)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        link_list = res['output']['topology']['link']
+        nb_updated_link = 0
+        for link in link_list:
+            if all(x in link['name'][0]['value'] for x in ['ROADM-A1', 'SRG1-PP1-TXRX']):
+                self.assertEqual(link['operational-state'], 'DISABLED')
+                self.assertEqual(link['administrative-state'], 'LOCKED')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['operational-state'], 'ENABLED')
+                self.assertEqual(link['administrative-state'], 'UNLOCKED')
+        self.assertEqual(nb_updated_link, 1,
+                         "Only one xponder-output/input link should have been modified")
+        time.sleep(1)
+
+    def test_33_check_update_service_Ethernet(self):
+        self.test_19_check_update_service_Ethernet()
+
+    def test_34_check_update_connectivity_service_Ethernet(self):
+        self.test_20_check_update_connectivity_service_Ethernet()
+
+    def test_35_restore_status_port_roadma_srg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
+        body = {"ports": [{
+            "port-name": "C1",
+            "logical-connection-point": "SRG1-PP1",
+            "port-type": "client",
+            "circuit-id": "SRG1",
+            "administrative-state": "inService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_36_check_update_portmapping_ok(self):
+        response = test_utils.portmapping_request("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        mapping_list = res['nodes'][0]['mapping']
+        for mapping in mapping_list:
+            self.assertEqual(mapping['port-oper-state'], 'InService',
+                             "Operational State should be 'InService'")
+            self.assertEqual(mapping['port-admin-state'], 'InService',
+                             "Administrative State should be 'InService'")
+        time.sleep(1)
+
+    def test_37_check_update_openroadm_topo_ok(self):
+        self.test_23_check_update_openroadm_topo_ok()
+
+    def test_38_check_update_tapi_neps_ok(self):
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "ROADM-A1+PHOTONIC_MEDIA")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        for nep in nep_list:
+            self.assertEqual(nep['operational-state'], 'ENABLED',
+                             "Operational State should be 'ENABLED'")
+            self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                             "Administrative State should be 'UNLOCKED'")
+
+        time.sleep(1)
+
+    def test_39_check_update_tapi_links_ok(self):
+        self.test_25_check_update_tapi_links_ok()
+
+    def test_40_check_update_service1_ok(self):
+        self.test_12_get_service_Ethernet()
+
+    def test_41_check_update_connectivity_service_Ethernet_ok(self):
+        self.test_13_get_connectivity_service_Ethernet()
+
+    def test_42_change_status_line_port_roadma_deg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/2%2F0/ports/L1"
+        body = {"ports": [{
+            "port-name": "L1",
+            "logical-connection-point": "DEG2-TTP-TXRX",
+            "port-type": "LINE",
+            "circuit-id": "1",
+            "administrative-state": "outOfService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_43_check_update_portmapping(self):
+        response = test_utils.portmapping_request("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        mapping_list = res['nodes'][0]['mapping']
+        for mapping in mapping_list:
+            if mapping['logical-connection-point'] == 'DEG2-TTP-TXRX':
+                self.assertEqual(mapping['port-oper-state'], 'OutOfService',
+                                 "Operational State should be 'OutOfService'")
+                self.assertEqual(mapping['port-admin-state'], 'OutOfService',
+                                 "Administrative State should be 'OutOfService'")
+            else:
+                self.assertEqual(mapping['port-oper-state'], 'InService',
+                                 "Operational State should be 'InService'")
+                self.assertEqual(mapping['port-admin-state'], 'InService',
+                                 "Administrative State should be 'InService'")
+        time.sleep(1)
+
+    def test_44_check_update_openroadm_topo(self):
+        url = test_utils.URL_CONFIG_ORDM_TOPO
+        response = test_utils.get_request(url)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        node_list = res['network'][0]['node']
+        nb_updated_tp = 0
+        for node in node_list:
+            self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService')
+            tp_list = node['ietf-network-topology:termination-point']
+            for tp in tp_list:
+                if node['node-id'] == 'ROADM-A1-DEG2' and tp['tp-id'] == 'DEG2-TTP-TXRX':
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'outOfService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'outOfService')
+                    nb_updated_tp += 1
+                else:
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'inService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_tp, 1, "Only one termination-point should have been modified")
+
+        link_list = res['network'][0]['ietf-network-topology:link']
+        updated_links = ['ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX',
+                         'ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX']
+        nb_updated_link = 0
+        for link in link_list:
+            if link['link-id'] in updated_links:
+                self.assertEqual(link['org-openroadm-common-network:operational-state'], 'outOfService')
+                self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'outOfService')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService')
+                self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified")
+        time.sleep(1)
+
+    def test_45_check_update_tapi_neps(self):
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "ROADM-A1+PHOTONIC_MEDIA")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        nb_updated_neps = 0
+        for nep in nep_list:
+            if 'DEG2-TTP-TXRX' in nep['name'][0]['value']:
+                self.assertEqual(nep['operational-state'], 'DISABLED',
+                                 "Operational State should be 'DISABLED'")
+                self.assertEqual(nep['administrative-state'], 'LOCKED',
+                                 "Administrative State should be 'LOCKED'")
+                nb_updated_neps += 1
+            else:
+                self.assertEqual(nep['operational-state'], 'ENABLED',
+                                 "Operational State should be 'ENABLED'")
+                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                                 "Administrative State should be 'UNLOCKED'")
+        self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified")
+        time.sleep(1)
+
+    def test_46_check_update_tapi_links(self):
+        response = test_utils.tapi_get_topology_details_request(
+            "T0 - Full Multi-layer topology")
+        time.sleep(2)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        link_list = res['output']['topology']['link']
+        nb_updated_link = 0
+        for link in link_list:
+            if all(x in link['name'][0]['value'] for x in ['ROADM-A1', 'DEG2-TTP-TXRX']):
+                self.assertEqual(link['operational-state'], 'DISABLED')
+                self.assertEqual(link['administrative-state'], 'LOCKED')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['operational-state'], 'ENABLED')
+                self.assertEqual(link['administrative-state'], 'UNLOCKED')
+        self.assertEqual(nb_updated_link, 1,
+                         "Only one rdm-rdm link should have been modified")
+        time.sleep(1)
+
+    def test_47_check_update_service_Ethernet(self):
+        self.test_19_check_update_service_Ethernet()
+
+    def test_48_check_update_connectivity_service_Ethernet(self):
+        self.test_20_check_update_connectivity_service_Ethernet()
+
+    def test_49_restore_status_line_port_roadma_deg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/2%2F0/ports/L1"
+        body = {"ports": [{
+            "port-name": "L1",
+            "logical-connection-point": "DEG2-TTP-TXRX",
+            "port-type": "LINE",
+            "circuit-id": "1",
+            "administrative-state": "inService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_50_check_update_portmapping_ok(self):
+        self.test_36_check_update_portmapping_ok()
+
+    def test_51_check_update_openroadm_topo_ok(self):
+        self.test_23_check_update_openroadm_topo_ok()
+
+    def test_52_check_update_tapi_neps_ok(self):
+        self.test_38_check_update_tapi_neps_ok()
+
+    def test_53_check_update_tapi_links_ok(self):
+        self.test_25_check_update_tapi_links_ok()
+
+    def test_54_check_update_service1_ok(self):
+        self.test_12_get_service_Ethernet()
+
+    def test_55_check_update_connectivity_service_Ethernet_ok(self):
+        self.test_13_get_connectivity_service_Ethernet()
+
+    def test_56_change_status_port_roadma_srg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C2"
+        body = {"ports": [{
+            "port-name": "C2",
+            "logical-connection-point": "SRG1-PP2",
+            "port-type": "client",
+            "circuit-id": "SRG1",
+            "administrative-state": "outOfService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        time.sleep(2)
+
+    def test_57_check_update_portmapping(self):
+        response = test_utils.portmapping_request("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        mapping_list = res['nodes'][0]['mapping']
+        for mapping in mapping_list:
+            if mapping['logical-connection-point'] == 'SRG1-PP2-TXRX':
+                self.assertEqual(mapping['port-oper-state'], 'OutOfService',
+                                 "Operational State should be 'OutOfService'")
+                self.assertEqual(mapping['port-admin-state'], 'OutOfService',
+                                 "Administrative State should be 'OutOfService'")
+            else:
+                self.assertEqual(mapping['port-oper-state'], 'InService',
+                                 "Operational State should be 'InService'")
+                self.assertEqual(mapping['port-admin-state'], 'InService',
+                                 "Administrative State should be 'InService'")
+        time.sleep(1)
+
+    def test_58_check_update_openroadm_topo(self):
+        url = test_utils.URL_CONFIG_ORDM_TOPO
+        response = test_utils.get_request(url)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        node_list = res['network'][0]['node']
+        nb_updated_tp = 0
+        for node in node_list:
+            self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService')
+            tp_list = node['ietf-network-topology:termination-point']
+            for tp in tp_list:
+                if node['node-id'] == 'ROADM-A1-SRG1' and tp['tp-id'] == 'SRG1-PP2-TXRX':
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'outOfService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'outOfService')
+                    nb_updated_tp += 1
+                else:
+                    self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'inService')
+                    self.assertEqual(tp['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_tp, 1, "Only one termination-point should have been modified")
+
+        link_list = res['network'][0]['ietf-network-topology:link']
+        nb_updated_link = 0
+        for link in link_list:
+            self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService')
+            self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService')
+        self.assertEqual(nb_updated_link, 0, "No link should have been modified")
+        time.sleep(1)
+
+    def test_59_check_update_tapi_neps(self):
+        response = test_utils.tapi_get_node_details_request("T0 - Full Multi-layer topology", "ROADM-A1+PHOTONIC_MEDIA")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        nep_list = res['output']['node']['owned-node-edge-point']
+        nb_updated_neps = 0
+        for nep in nep_list:
+            if 'SRG1-PP2-TXRX' in nep['name'][0]['value']:
+                self.assertEqual(nep['operational-state'], 'DISABLED',
+                                 "Operational State should be 'DISABLED'")
+                self.assertEqual(nep['administrative-state'], 'LOCKED',
+                                 "Administrative State should be 'LOCKED'")
+                nb_updated_neps += 1
+            else:
+                self.assertEqual(nep['operational-state'], 'ENABLED',
+                                 "Operational State should be 'ENABLED'")
+                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+                                 "Administrative State should be 'UNLOCKED'")
+        self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified")
+        time.sleep(1)
+
+    def test_60_check_update_tapi_links(self):
+        response = test_utils.tapi_get_topology_details_request(
+            "T0 - Full Multi-layer topology")
+        time.sleep(2)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        link_list = res['output']['topology']['link']
+        nb_updated_link = 0
+        for link in link_list:
+            if all(x in link['name'][0]['value'] for x in ['ROADM-A1', 'SRG1-PP2-TXRX']):
+                self.assertEqual(link['operational-state'], 'DISABLED')
+                self.assertEqual(link['administrative-state'], 'LOCKED')
+                nb_updated_link += 1
+            else:
+                self.assertEqual(link['operational-state'], 'ENABLED')
+                self.assertEqual(link['administrative-state'], 'UNLOCKED')
+        self.assertEqual(nb_updated_link, 0,
+                         "No link should have been modified")
+        time.sleep(1)
+
+    def test_61_check_update_service1_ok(self):
+        self.test_12_get_service_Ethernet()
+
+    def test_62_check_update_connectivity_service_Ethernet_ok(self):
+        self.test_13_get_connectivity_service_Ethernet()
+
+    def test_63_delete_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_delete_connectivity_request(str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.no_content)
+        time.sleep(self.WAITING)
+
+    def test_64_disconnect_xponders_from_roadm(self):
+        url = "{}/config/ietf-network:networks/network/openroadm-topology/ietf-network-topology:link/"
+        response = test_utils.get_ordm_topo_request("")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        links = res['network'][0]['ietf-network-topology:link']
+        for link in links:
+            if link["org-openroadm-common-network:link-type"] in ('XPONDER-OUTPUT', 'XPONDER-INPUT'):
+                link_name = link["link-id"]
+                response = test_utils.delete_request(url+link_name)
+                self.assertEqual(response.status_code, requests.codes.ok)
+
+    def test_65_disconnect_XPDRA(self):
+        response = test_utils.unmount_device("XPDR-A1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+    def test_66_disconnect_XPDRC(self):
+        response = test_utils.unmount_device("XPDR-C1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+    def test_67_disconnect_ROADMA(self):
+        response = test_utils.unmount_device("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+    def test_68_disconnect_ROADMC(self):
+        response = test_utils.unmount_device("ROADM-C1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/tests/transportpce_tests/with_docker/test03_tapi_nbinotifications.py b/tests/transportpce_tests/with_docker/test03_tapi_nbinotifications.py
new file mode 100644 (file)
index 0000000..d66f5e2
--- /dev/null
@@ -0,0 +1,421 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2020 Orange, Inc. and others.  All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# pylint: disable=no-member
+# pylint: disable=too-many-public-methods
+
+import os
+import json
+# pylint: disable=wrong-import-order
+import sys
+import unittest
+import time
+import requests
+sys.path.append('transportpce_tests/common/')
+# pylint: disable=wrong-import-position
+# pylint: disable=import-error
+import test_utils  # nopep8
+
+
+# pylint: disable=too-few-public-methods
+class UuidServices:
+    def __init__(self):
+        # pylint: disable=invalid-name
+        self.pm = None
+        self.odu = None
+        self.dsr = None
+        self.eth = None
+
+
+# pylint: disable=too-few-public-methods
+class UuidSubscriptions:
+    def __init__(self):
+        # pylint: disable=invalid-name
+        self.pm = None
+        self.odu = None
+        self.dsr = None
+        self.eth = None
+
+
+class TransportNbiNotificationstesting(unittest.TestCase):
+    cr_serv_sample_data = {
+        "input": {
+            "end-point": [
+                {
+                    "layer-protocol-name": "DSR",
+                    "service-interface-point": {
+                        "service-interface-point-uuid": "b1f4bd3b-7fa9-367b-a8ab-6e80293238df"
+                    },
+                    "administrative-state": "UNLOCKED",
+                    "operational-state": "ENABLED",
+                    "direction": "BIDIRECTIONAL",
+                    "role": "SYMMETRIC",
+                    "protection-role": "WORK",
+                    "local-id": "XPDR-C1-XPDR1",
+                    "name": [
+                        {
+                            "value-name": "OpenROADM node id",
+                            "value": "XPDR-C1-XPDR1"
+                        }
+                    ]
+                },
+                {
+                    "layer-protocol-name": "DSR",
+                    "service-interface-point": {
+                        "service-interface-point-uuid": "b5964ce9-274c-3f68-b4d1-83c0b61bc74e"
+                    },
+                    "administrative-state": "UNLOCKED",
+                    "operational-state": "ENABLED",
+                    "direction": "BIDIRECTIONAL",
+                    "role": "SYMMETRIC",
+                    "protection-role": "WORK",
+                    "local-id": "XPDR-A1-XPDR1",
+                    "name": [
+                        {
+                            "value-name": "OpenROADM node id",
+                            "value": "XPDR-A1-XPDR1"
+                        }
+                    ]
+                }
+            ],
+            "connectivity-constraint": {
+                "service-layer": "ETH",
+                "service-type": "POINT_TO_POINT_CONNECTIVITY",
+                "service-level": "Some service-level",
+                "requested-capacity": {
+                    "total-size": {
+                        "value": "100",
+                        "unit": "GB"
+                    }
+                }
+            },
+            "state": "Some state"
+        }
+    }
+
+    cr_notif_subs_sample_data = {
+        "input": {
+            "subscription-filter": {
+                "requested-notification-types": [
+                    "ALARM_EVENT"
+                ],
+                "requested-object-types": [
+                    "CONNECTIVITY_SERVICE"
+                ],
+                "requested-layer-protocols": [
+                    "ETH"
+                ],
+                "requested-object-identifier": [
+                    "76d8f07b-ead5-4132-8eb8-cf3fdef7e079"
+                ],
+                "include-content": True,
+                "local-id": "localId",
+                "name": [
+                    {
+                        "value-name": "Subscription name",
+                        "value": "test subscription"
+                    }
+                ]
+            },
+            "subscription-state": "ACTIVE"
+        }
+    }
+
+    cr_get_notif_list_sample_data = {
+        "input": {
+            "subscription-id-or-name": "c07e7fd1-0377-4fbf-8928-36c17b0d0d68",
+            "time-period": "time-period"
+        }
+    }
+
+    processes = []
+    uuid_services = UuidServices()
+    uuid_subscriptions = UuidSubscriptions()
+    WAITING = 25  # nominal value is 300
+    NODE_VERSION_221 = '2.2.1'
+
+    @classmethod
+    def setUpClass(cls):
+        # pylint: disable=unsubscriptable-object
+        # TODO: for lighty manage the activation of NBI notification feature
+        cls.init_failed_nbi = False
+        cls.init_failed_tapi = False
+        os.environ['JAVA_MIN_MEM'] = '1024M'
+        os.environ['JAVA_MAX_MEM'] = '4096M'
+        cls.processes = test_utils.start_tpce()
+        # NBI notification feature is not installed by default in Karaf
+        if "USE_LIGHTY" not in os.environ or os.environ['USE_LIGHTY'] != 'True':
+            print("installing NBI notification feature...")
+            result = test_utils.install_karaf_feature("odl-transportpce-nbinotifications")
+            if result.returncode != 0:
+                cls.init_failed_nbi = True
+            print("installing tapi feature...")
+            result = test_utils.install_karaf_feature("odl-transportpce-tapi")
+            if result.returncode != 0:
+                cls.init_failed_tapi = True
+            print("Restarting OpenDaylight...")
+            test_utils.shutdown_process(cls.processes[0])
+            cls.processes[0] = test_utils.start_karaf()
+            test_utils.process_list[0] = cls.processes[0]
+            cls.init_failed = not test_utils.wait_until_log_contains(
+                test_utils.KARAF_LOG, test_utils.KARAF_OK_START_MSG, time_to_wait=60)
+        if cls.init_failed_nbi:
+            print("NBI notification installation feature failed...")
+            test_utils.shutdown_process(cls.processes[0])
+            sys.exit(2)
+        if cls.init_failed_tapi:
+            print("tapi installation feature failed...")
+            test_utils.shutdown_process(cls.processes[0])
+            sys.exit(2)
+        cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_221),
+                                               ('roadma', cls.NODE_VERSION_221),
+                                               ('roadmc', cls.NODE_VERSION_221),
+                                               ('xpdrc', cls.NODE_VERSION_221)])
+
+    @classmethod
+    def tearDownClass(cls):
+        # pylint: disable=not-an-iterable
+        for process in cls.processes:
+            test_utils.shutdown_process(process)
+        print("all processes killed")
+
+    def setUp(self):  # instruction executed before each test method
+        # pylint: disable=consider-using-f-string
+        print("execution of {}".format(self.id().split(".")[-1]))
+
+    def test_01_connect_xpdrA(self):
+        response = test_utils.mount_device("XPDR-A1", ('xpdra', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_02_connect_xpdrC(self):
+        response = test_utils.mount_device("XPDR-C1", ('xpdrc', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_03_connect_rdmA(self):
+        response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_04_connect_rdmC(self):
+        response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
+        self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
+
+    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-A1", "1", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_06_connect_roadmA_PP1_to_xpdrA_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-A1", "1", "1",
+                                                          "ROADM-A1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+        response = test_utils.connect_xpdr_to_rdm_request("XPDR-C1", "1", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Xponder Roadm Link created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_08_connect_roadmC_PP1_to_xpdrC_N1(self):
+        response = test_utils.connect_rdm_to_xpdr_request("XPDR-C1", "1", "1",
+                                                          "ROADM-C1", "1", "SRG1-PP1-TXRX")
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertIn('Roadm Xponder links created successfully', res["output"]["result"])
+        time.sleep(2)
+
+    def test_09_add_omsAttributes_ROADMA_ROADMC(self):
+        # Config ROADMA-ROADMC oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    def test_10_add_omsAttributes_ROADMC_ROADMA(self):
+        # Config ROADMC-ROADMA oms-attributes
+        data = {"span": {
+            "auto-spanloss": "true",
+            "spanloss-base": 11.4,
+            "spanloss-current": 12,
+            "engineered-spanloss": 12.2,
+            "link-concatenation": [{
+                "SRLG-Id": 0,
+                "fiber-type": "smf",
+                "SRLG-length": 100000,
+                "pmd": 0.5}]}}
+        response = test_utils.add_oms_attr_request("ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX", data)
+        self.assertEqual(response.status_code, requests.codes.created)
+
+    # test service-create for Eth service from xpdr to xpdr
+    def test_11_create_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_create_connectivity_request(self.cr_serv_sample_data)
+        time.sleep(self.WAITING)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.uuid_services.eth = res['output']['service']['uuid']
+        # pylint: disable=consider-using-f-string
+
+        input_dict_1 = {'administrative-state': 'LOCKED',
+                        'lifecycle-state': 'PLANNED',
+                        'operational-state': 'DISABLED',
+                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
+                        'service-layer': 'ETH',
+                        'connectivity-direction': 'BIDIRECTIONAL'
+                        }
+        input_dict_2 = {'value-name': 'OpenROADM node id',
+                        'value': 'XPDR-C1-XPDR1'}
+        input_dict_3 = {'value-name': 'OpenROADM node id',
+                        'value': 'XPDR-A1-XPDR1'}
+
+        self.assertDictEqual(dict(input_dict_1, **res['output']['service']),
+                             res['output']['service'])
+        self.assertDictEqual(dict(input_dict_2, **res['output']['service']['end-point'][0]['name'][0]),
+                             res['output']['service']['end-point'][0]['name'][0])
+        self.assertDictEqual(dict(input_dict_3, **res['output']['service']['end-point'][1]['name'][0]),
+                             res['output']['service']['end-point'][1]['name'][0])
+        # If the gate fails is because of the waiting time not being enough
+        time.sleep(self.WAITING)
+
+    def test_12_get_service_Ethernet(self):
+        response = test_utils.get_service_list_request("services/" + str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['services'][0]['administrative-state'], 'inService')
+        self.assertEqual(
+            res['services'][0]['service-name'], self.uuid_services.eth)
+        self.assertEqual(
+            res['services'][0]['connection-type'], 'service')
+        self.assertEqual(
+            res['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(2)
+
+    def test_13_get_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_get_connectivity_request(str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(
+            res['output']['service']['operational-state'], 'ENABLED')
+        self.assertEqual(
+            res['output']['service']['name'][0]['value'], self.uuid_services.eth)
+        self.assertEqual(
+            res['output']['service']['administrative-state'], 'UNLOCKED')
+        self.assertEqual(
+            res['output']['service']['lifecycle-state'], 'INSTALLED')
+        time.sleep(2)
+
+    def test_14_create_notifications_subscription_service(self):
+        self.cr_notif_subs_sample_data["input"]["subscription-filter"]["requested-object-identifier"][0] = str(
+            self.uuid_services.eth)
+        response = test_utils.tapi_create_notification_subscription_service_request(self.cr_notif_subs_sample_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.uuid_subscriptions.eth = res['output']['subscription-service']['uuid']
+        self.assertEqual(res['output']['subscription-service']['subscription-filter']
+                         ['requested-object-types'][0], 'CONNECTIVITY_SERVICE')
+        self.assertEqual(res['output']['subscription-service']['subscription-filter']
+                         ['requested-notification-types'][0], 'ALARM_EVENT')
+        self.assertEqual(res['output']['subscription-service']['subscription-filter']
+                         ['requested-object-identifier'][0], str(self.uuid_services.eth))
+        time.sleep(2)
+
+    def test_15_change_status_port_roadma_srg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
+        body = {"ports": [{
+            "port-name": "C1",
+            "logical-connection-point": "SRG1-PP1",
+            "port-type": "client",
+            "circuit-id": "SRG1",
+            "administrative-state": "outOfService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        # If the gate fails is because of the waiting time not being enough
+        time.sleep(2)
+
+    def test_16_get_tapi_notifications_connectivity_service_Ethernet(self):
+        self.cr_get_notif_list_sample_data["input"]["subscription-id-or-name"] = str(self.uuid_subscriptions.eth)
+        response = test_utils.tapi_get_notifications_list_request(self.cr_get_notif_list_sample_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(res['output']['notification'][0]['target-object-identifier'], str(self.uuid_services.eth))
+        self.assertEqual(res['output']['notification'][0]['target-object-type'], 'CONNECTIVITY_SERVICE')
+        self.assertEqual(res['output']['notification'][0]['changed-attributes'][0]['new-value'], 'LOCKED')
+        self.assertEqual(res['output']['notification'][0]['changed-attributes'][1]['new-value'], 'DISABLED')
+        time.sleep(2)
+
+    def test_17_restore_status_port_roadma_srg(self):
+        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
+        body = {"ports": [{
+            "port-name": "C1",
+            "logical-connection-point": "SRG1-PP1",
+            "port-type": "client",
+            "circuit-id": "SRG1",
+            "administrative-state": "inService",
+            "port-qual": "roadm-external"}]}
+        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
+                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
+                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD))
+        self.assertEqual(response.status_code, requests.codes.ok)
+        # If the gate fails is because of the waiting time not being enough
+        time.sleep(2)
+
+    def test_18_get_tapi_notifications_connectivity_service_Ethernet(self):
+        self.cr_get_notif_list_sample_data["input"]["subscription-id-or-name"] = str(self.uuid_subscriptions.eth)
+        response = test_utils.tapi_get_notifications_list_request(self.cr_get_notif_list_sample_data)
+        self.assertEqual(response.status_code, requests.codes.ok)
+        res = response.json()
+        self.assertEqual(res['output']['notification'][1]['target-object-identifier'], str(self.uuid_services.eth))
+        self.assertEqual(res['output']['notification'][1]['target-object-type'], 'CONNECTIVITY_SERVICE')
+        self.assertEqual(res['output']['notification'][1]['changed-attributes'][0]['new-value'], 'UNLOCKED')
+        self.assertEqual(res['output']['notification'][1]['changed-attributes'][1]['new-value'], 'ENABLED')
+        time.sleep(2)
+
+    def test_19_delete_connectivity_service_Ethernet(self):
+        response = test_utils.tapi_delete_connectivity_request(str(self.uuid_services.eth))
+        self.assertEqual(response.status_code, requests.codes.no_content)
+        time.sleep(self.WAITING)
+
+    def test_20_disconnect_XPDRA(self):
+        response = test_utils.unmount_device("XPDR-A1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+    def test_21_disconnect_XPDRC(self):
+        response = test_utils.unmount_device("XPDR-C1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+    def test_22_disconnect_ROADMA(self):
+        response = test_utils.unmount_device("ROADM-A1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+    def test_23_disconnect_ROADMC(self):
+        response = test_utils.unmount_device("ROADM-C1")
+        self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/tox.ini b/tox.ini
index b290f79383273a3bb40fda39da7cec9b43c39f9f..20a4e027494464428aa1bcb92f7ebccc4d3f8c43 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -203,6 +203,7 @@ passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION OLM_TIMER1 OLM_TIMER2
 setenv =
     OLM_TIMER1=3000
     OLM_TIMER2=2000
+    INSTALL_TAPI=True
     INSTALL_NBINOTIFICATIONS=True
 
 commands =