--- /dev/null
+.idea
+*.iml
+cache
+journal
+snapshots
+target
--- /dev/null
+# Lighty-TransportPCE Controller
+
+This project starts [TransportPCE](https://git.opendaylight.org/gerrit/#/admin/projects/transportpce) without karaf framework.
+
+## Build & Run
+* Make sure you have JDK8 or later installed
+* Make sure you have [maven 3.5.0](https://maven.apache.org/download.cgi) or later installed.
+* Make sure you have proper [settings.xml](https://github.com/opendaylight/odlparent/blob/master/settings.xml) in your ``~/.m2`` directory.
+
+#### Before compiling Lighty-TransportPCE
+Make sure upstream projects are compiled locally and stored in local ``~/.m2/repository``:
+1. compile __transportpce/master__
+```
+git clone https://git.opendaylight.org/gerrit/transportpce && (cd transportpce && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg https://git.opendaylight.org/gerrit/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
+cd transportpce
+```
+Before compilation, make sure that deviations are not present in models:
+```
+transportpce/ordmodels/network/src/main/yang/org-openroadm-otn-network-topology@2018-11-30.yang
+transportpce/ordmodels/network/src/main/yang/org-openroadm-network-topology@2018-11-30.yang
+transportpce/ordmodels/network/src/main/yang/org-openroadm-network@2018-11-30.yang
+```
+After deviations are removed from models, compile the project.
+```
+mvn clean install -DskipTests
+```
+2. compile __lighty-core/10.0.x__
+```
+git clone https://github.com/PantheonTechnologies/lighty-core.git
+cd lighty-core
+git checkout 10.0.x
+mvn clean install -DskipTests
+```
+#### Compile Lighty-TransportPCE
+* Project is build using maven command:
+```
+cd ../lighty
+mvn clean install
+```
+* After project build is done, use binary package to run the TransportPCE controller.
+```
+cd target
+unzip lighty-transportpce-10.0.1-SNAPSHOT-bin.zip
+cd lighty-transportpce-10.0.1-SNAPSHOT
+./start-controller.sh
+```
+
+## TransportPCE lighty.io - karaf comparison
+
+### Application Boot test
+This test compares TransportPCE application on lighty.io and karaf.
+After TransportPCE is started, performance is measured using [visualvm](https://visualvm.github.io/) tool.
+
+| Property Name | ODL/Karaf * | lighty.io ** |
+|-----------------------------------|----------------|--------------|
+| Build size | 225M | 64M |
+| Startup Time | ~15s | ~6s |
+| Shutdown Time | ~5s | ~100ms |
+| Process memory allocated (RSS)*** | 1236 MB | 353 MB |
+| HEAP memory (used/allocated) | 135 / 1008 MB | 58 / 128 MB |
+| Metaspace (used/allocated) | 115 / 132 MB | 62 / 65 MB |
+| Threads (live/daemon) | 111 / 48 | 70 / 11 |
+| Classes loaded | 22027 | 12019 |
+| No. of jars | 680 | 244 |
+
+### test_end2end_lighty.py
+This test compares TransportPCE application on lighty.io and karaf while running __test_end2end_lighty.py__ (4 connected netconf devices).
+
+| Property Name | ODL/Karaf * | lighty.io ** |
+|-----------------------------------|----------------|--------------|
+| Build size | 225M | 64M |
+| Startup Time | ~15s | ~6s |
+| Shutdown Time | ~5s | ~100ms |
+| Process memory allocated (RSS)*** | 1185 MB | 440 MB |
+| HEAP memory (used/allocated) | 158 / 960 MB | 85 / 128 MB |
+| Metaspace (used/allocated) | 128 / 146 MB | 83 / 87 MB |
+| Threads (live/daemon) | 148 / 60 | 129 / 26 |
+| Classes loaded | 24326 | 16155 |
+| No. of jars | 680 | 244 |
+
+`* JVM parameters: -Xms128M -Xmx2048m ...`
+`** JVM parameters: -Xms128m -Xmx128m -XX:MaxMetaspaceSize=128m`
+`*** sudo ps -o pid,rss,user,command ax | grep java | grep transportpce`
+
+### Integration Test results
+| Test Name | Failed | All | Comment |
+|---------------------------------------|--------|-----|----------------------------|
+| test_portmapping.py | 0 | 18 | |
+| test_topoPortMapping.py | 1 | 6 | (same results with karaf) |
+| test_topology.py | 0 | 33 | |
+| test_renderer_service_path_nominal.py | 0 | 24 | |
+| test_pce.py | 0 | 22 | |
+| test_olm.py | 1 | 40 | (same results with karaf) |
+| test_end2end_lighty.py | 18 | 52 | (same as karaf, need check)|
+
+`karaf: executable = "../karaf/target/assembly/bin/karaf"`
+`lighty.io executable = "../lighty/target/lighty-transportpce-10.0.1-SNAPSHOT/start-controller.sh": `
+
+* __Total Success: 175__
+* __Total Failed: 20__
+
+### Postman collection
+Check this [postman collection](docs/TransportPCE.postman_collection.json) for RESTCONF examples.
--- /dev/null
+{
+ "variables": [],
+ "info": {
+ "name": "TransportPCE",
+ "_postman_id": "2a8c7902-5793-e48c-ebab-72256fcac793",
+ "description": "",
+ "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
+ },
+ "item": [
+ {
+ "name": "test_portmapping",
+ "description": "",
+ "item": [
+ {
+ "name": "test_01_rdm_device_connected",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json",
+ "description": ""
+ },
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"node\" : {\n \"node-id\": \"ROADMA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17830,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}\n"
+ },
+ "description": "connect device 01"
+ },
+ "response": []
+ },
+ {
+ "name": "test_02_rdm_device_connected",
+ "request": {
+ "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_03_rdm_portmapping_DEG1_TTP_TXRX",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA/mapping/DEG1-TTP-TXRX",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_04_rdm_portmapping_SRG1_PP7_TXRX",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA/mapping/SRG1-PP7-TXRX",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_05_rdm_portmapping_SRG3_PP1_TXRX",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA/mapping/SRG3-PP1-TXRX",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_06_xpdr_device_connected",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA",
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json",
+ "description": ""
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"node\" : {\n \"node-id\": \"XPDRA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17831,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}"
+ },
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_07_xpdr_device_connected",
+ "request": {
+ "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/XPDRA",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_08_xpdr_portmapping_NETWORK1",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-NETWORK1",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_09_xpdr_portmapping_NETWORK2",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-NETWORK2",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_10_xpdr_portmapping_CLIENT1",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-CLIENT1",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_11_xpdr_portmapping_CLIENT2",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-CLIENT2",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_12_xpdr_portmapping_CLIENT4",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-CLIENT4",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_13_xpdr_device_disconnected",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA",
+ "method": "DELETE",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_14_xpdr_device_disconnected",
+ "request": {
+ "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/XPDRA",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_15_xpdr_device_disconnected",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_16_rdm_device_disconnected",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "DELETE",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_17_rdm_device_disconnected",
+ "request": {
+ "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ },
+ {
+ "name": "test_18_rdm_device_disconnected",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA",
+ "method": "GET",
+ "header": [],
+ "body": {},
+ "description": ""
+ },
+ "response": []
+ }
+ ]
+ },
+ {
+ "name": "Get Modules",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/modules",
+ "method": "GET",
+ "header": [
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": ""
+ },
+ "description": "Get installed yang models "
+ },
+ "response": []
+ },
+ {
+ "name": "Get List Of Network Topologies",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology",
+ "method": "GET",
+ "header": [
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {},
+ "description": "Get List Of Network Topologies"
+ },
+ "response": []
+ },
+ {
+ "name": "Create NetConf device ",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/new-netconf-device",
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json",
+ "description": ""
+ },
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"node\" : {\n \"node-id\": \"new-netconf-device\",\n \"host\": \"127.0.0.1\",\n \"port\": 17830,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0\n }\n}\n"
+ },
+ "description": "Create NetConf device "
+ },
+ "response": []
+ },
+ {
+ "name": "disconnect device 01",
+ "request": {
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "DELETE",
+ "header": [],
+ "body": {},
+ "description": "Delete NetConf device"
+ },
+ "response": []
+ },
+ {
+ "name": "disconnect device 02",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA",
+ "method": "DELETE",
+ "header": [
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {},
+ "description": "Delete NetConf device"
+ },
+ "response": []
+ },
+ {
+ "name": "Get Topologies Operational",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/operational/network-topology:network-topology",
+ "method": "GET",
+ "header": [
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {},
+ "description": "Get Topologies Operational"
+ },
+ "response": []
+ },
+ {
+ "name": "connect device 01",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json",
+ "description": ""
+ },
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"node\" : {\n \"node-id\": \"ROADMA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17830,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}\n"
+ },
+ "description": "connect device 01"
+ },
+ "response": []
+ },
+ {
+ "name": "connect device 02",
+ "request": {
+ "auth": {
+ "type": "basic",
+ "basic": {
+ "username": "admin",
+ "password": "admin",
+ "saveHelperData": true,
+ "showPassword": false
+ }
+ },
+ "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA",
+ "method": "PUT",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/json",
+ "description": ""
+ },
+ {
+ "key": "Authorization",
+ "value": "Basic YWRtaW46YWRtaW4=",
+ "description": ""
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"node\" : {\n \"node-id\": \"XPDRA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17831,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}\n"
+ },
+ "description": "connect device 02"
+ },
+ "response": []
+ }
+ ]
+}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>io.lighty.core</groupId>
+ <artifactId>lighty-app-parent</artifactId>
+ <version>10.0.1-SNAPSHOT</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>io.lighty.examples.controllers</groupId>
+ <artifactId>lighty-transportpce</artifactId>
+ <version>10.0.1-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <properties>
+ <application.main.class>io.lighty.controllers.tpce.Main</application.main.class>
+ <application.attach.zip>true</application.attach.zip>
+ <maven.deploy.skip>true</maven.deploy.skip>
+ </properties>
+
+ <dependencies>
+
+ <!-- TPCE Models - BEGIN -->
+ <dependency>
+ <groupId>org.opendaylight.transportpce</groupId>
+ <artifactId>transportpce-api</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.transportpce.ordmodels</groupId>
+ <artifactId>transportpce-ordmodels-common</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.transportpce.ordmodels</groupId>
+ <artifactId>transportpce-ordmodels-device</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.transportpce.ordmodels</groupId>
+ <artifactId>transportpce-ordmodels-network</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.transportpce.ordmodels</groupId>
+ <artifactId>transportpce-ordmodels-service</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <!-- TPCE Models - END -->
+
+ <!-- TPCE bundles - BEGIN -->
+ <dependency>
+ <groupId>org.opendaylight.transportpce</groupId>
+ <artifactId>transportpce-pce</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.transportpce</groupId>
+ <artifactId>transportpce-olm</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.transportpce</groupId>
+ <artifactId>transportpce-servicehandler</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </dependency>
+ <!-- TPCE bundles - END -->
+
+ <dependency>
+ <groupId> org.opendaylight.mdsal</groupId>
+ <artifactId>yang-binding</artifactId>
+ <version>1.0.8</version>
+ </dependency>
+
+ <dependency>
+ <groupId>io.lighty.modules</groupId>
+ <artifactId>lighty-netconf-sb</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.lighty.modules</groupId>
+ <artifactId>lighty-restconf-nb-community</artifactId>
+ <exclusions>
+ <!-- FIXME: why is this exclusion needed? can we move it somewhere else? -->
+ <exclusion>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>io.lighty.resources</groupId>
+ <artifactId>singlenode-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.lighty.resources</groupId>
+ <artifactId>log4j-properties</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-webapp</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlets</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-server</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.containers</groupId>
+ <artifactId>jersey-container-jetty-http</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.inject</groupId>
+ <artifactId>jersey-hk2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-client</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+#!/bin/bash
+
+BASEDIR=$(dirname "$0")
+#echo "${BASEDIR}"
+cd ${BASEDIR}
+
+#start controller
+java -ms128m -mx128m -XX:MaxMetaspaceSize=128m -jar lighty-transportpce-10.0.1-SNAPSHOT.jar
--- /dev/null
+/*
+ * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
+ */
+package io.lighty.controllers.tpce;
+
+import io.lighty.controllers.tpce.module.TransportPCE;
+import io.lighty.controllers.tpce.module.TransportPCEImpl;
+import io.lighty.controllers.tpce.utils.TPCEUtils;
+import io.lighty.core.controller.api.LightyController;
+import io.lighty.core.controller.api.LightyModule;
+import io.lighty.core.controller.impl.LightyControllerBuilder;
+import io.lighty.core.controller.impl.config.ConfigurationException;
+import io.lighty.core.controller.impl.config.ControllerConfiguration;
+import io.lighty.core.controller.impl.util.ControllerConfigUtils;
+import io.lighty.modules.northbound.restconf.community.impl.CommunityRestConf;
+import io.lighty.modules.northbound.restconf.community.impl.CommunityRestConfBuilder;
+import io.lighty.modules.northbound.restconf.community.impl.config.JsonRestConfServiceType;
+import io.lighty.modules.northbound.restconf.community.impl.config.RestConfConfiguration;
+import io.lighty.modules.northbound.restconf.community.impl.util.RestConfConfigUtils;
+import io.lighty.modules.southbound.netconf.impl.NetconfSBPlugin;
+import io.lighty.modules.southbound.netconf.impl.NetconfTopologyPluginBuilder;
+import io.lighty.modules.southbound.netconf.impl.config.NetconfConfiguration;
+import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils;
+import io.lighty.server.LightyServerBuilder;
+import java.net.InetSocketAddress;
+import java.util.concurrent.ExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Main {
+
+ private static final Logger LOG = LoggerFactory.getLogger(Main.class);
+
+ private ShutdownHook shutdownHook;
+
+ public void start() {
+ start(new String[] {}, false);
+ }
+
+ public void start(String[] args, boolean registerShutdownHook) {
+ long startTime = System.nanoTime();
+ LOG.info(" ___________ ___________________ ___________");
+ LOG.info(" \\__ ___/ \\______ \\_ ___ \\\\_ _____/");
+ LOG.info(" | | ______ | ___/ \\ \\/ | __)_");
+ LOG.info(" | | /_____/ | | \\ \\____| \\");
+ LOG.info(" |____| |____| \\______ /_______ /");
+ LOG.info(" \\/ \\/");
+ LOG.info(".__ .__ .__ __ .__ ");
+ LOG.info("| | |__| ____ | |___/ |_ ___.__. |__| ____ ");
+ LOG.info("| | | |/ ___\\| | \\ __< | | | |/ _ \\");
+ LOG.info("| |_| / /_/ > Y \\ | \\___ | | ( <_> )");
+ LOG.info("|____/__\\___ /|___| /__| / ____| /\\ |__|\\____/");
+ LOG.info(" /_____/ \\/ \\/ \\/ ");
+ LOG.info("Starting lighty.io TransportPCE application ...");
+ LOG.info("https://lighty.io/");
+ LOG.info("https://github.com/PantheonTechnologies/lighty-core");
+ try {
+ LOG.info("using default configuration ...");
+ //1. get controller configuration
+ ControllerConfiguration defaultSingleNodeConfiguration =
+ ControllerConfigUtils.getDefaultSingleNodeConfiguration(TPCEUtils.yangModels);
+ //2. get RESTCONF NBP configuration
+ RestConfConfiguration restConfConfig =
+ RestConfConfigUtils.getDefaultRestConfConfiguration();
+ restConfConfig.setJsonRestconfServiceType(JsonRestConfServiceType.DRAFT_02);
+ restConfConfig.setHttpPort(8181);
+ //3. NETCONF SBP configuration
+ NetconfConfiguration netconfSBPConfig = NetconfConfigUtils.createDefaultNetconfConfiguration();
+ startLighty(defaultSingleNodeConfiguration, restConfConfig, netconfSBPConfig, registerShutdownHook);
+ float duration = (System.nanoTime() - startTime) / 1_000_000f;
+ LOG.info("lighty.io and RESTCONF-NETCONF started in {}ms", duration);
+ } catch (Exception e) {
+ LOG.error("Main RESTCONF-NETCONF application exception: ", e);
+ }
+ }
+
+ private void startLighty(ControllerConfiguration controllerConfiguration,
+ RestConfConfiguration restConfConfiguration,
+ NetconfConfiguration netconfSBPConfiguration, boolean registerShutdownHook)
+ throws ConfigurationException, ExecutionException, InterruptedException {
+
+ //1. initialize and start Lighty controller (MD-SAL, Controller, YangTools, Akka)
+ LightyControllerBuilder lightyControllerBuilder = new LightyControllerBuilder();
+ LightyController lightyController = lightyControllerBuilder.from(controllerConfiguration).build();
+ lightyController.start().get();
+
+ //2. start RestConf server
+ CommunityRestConfBuilder communityRestConfBuilder = new CommunityRestConfBuilder();
+ LightyServerBuilder jettyServerBuilder = new LightyServerBuilder(new InetSocketAddress(
+ restConfConfiguration.getInetAddress(), restConfConfiguration.getHttpPort()));
+ CommunityRestConf communityRestConf = communityRestConfBuilder.from(RestConfConfigUtils
+ .getRestConfConfiguration(restConfConfiguration, lightyController.getServices()))
+ .withLightyServer(jettyServerBuilder)
+ .build();
+ communityRestConf.start().get();
+ communityRestConf.startServer();
+
+ //3. start NetConf SBP
+ NetconfSBPlugin netconfSouthboundPlugin;
+ netconfSBPConfiguration = NetconfConfigUtils.injectServicesToTopologyConfig(
+ netconfSBPConfiguration, lightyController.getServices());
+ NetconfTopologyPluginBuilder netconfSBPBuilder = new NetconfTopologyPluginBuilder();
+ netconfSouthboundPlugin = netconfSBPBuilder
+ .from(netconfSBPConfiguration, lightyController.getServices())
+ .build();
+ netconfSouthboundPlugin.start().get();
+
+ //4. start TransportPCE beans
+ TransportPCE transportPCE = new TransportPCEImpl(lightyController.getServices());
+ transportPCE.start().get();
+
+ //5. Register shutdown hook for graceful shutdown.
+ shutdownHook = new ShutdownHook(lightyController, communityRestConf, netconfSouthboundPlugin, transportPCE);
+ if (registerShutdownHook) {
+ Runtime.getRuntime().addShutdownHook(shutdownHook);
+ }
+ }
+
+ public void shutdown() {
+ shutdownHook.run();
+ }
+
+ public static void main(String[] args) {
+ Main app = new Main();
+ app.start(args, true);
+ }
+
+ private static class ShutdownHook extends Thread {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ShutdownHook.class);
+ private final LightyController lightyController;
+ private final CommunityRestConf communityRestConf;
+ private final LightyModule netconfSouthboundPlugin;
+ private final TransportPCE transportPCE;
+
+ ShutdownHook(LightyController lightyController, CommunityRestConf communityRestConf,
+ LightyModule netconfSouthboundPlugin, TransportPCE transportPCE) {
+ this.lightyController = lightyController;
+ this.communityRestConf = communityRestConf;
+ this.netconfSouthboundPlugin = netconfSouthboundPlugin;
+ this.transportPCE = transportPCE;
+ }
+
+ @Override
+ public void run() {
+ LOG.info("lighty.io and RESTCONF-NETCONF shutting down ...");
+ long startTime = System.nanoTime();
+ try {
+ transportPCE.shutdown().get();
+ } catch (Exception e) {
+ LOG.error("Exception while shutting down TransportPCE: ", e);
+ }
+ try {
+ communityRestConf.shutdown().get();
+ } catch (Exception e) {
+ LOG.error("Exception while shutting down RESTCONF: ", e);
+ }
+ try {
+ netconfSouthboundPlugin.shutdown().get();
+ } catch (Exception e) {
+ LOG.error("Exception while shutting down NETCONF: ", e);
+ }
+ try {
+ lightyController.shutdown().get();
+ } catch (Exception e) {
+ LOG.error("Exception while shutting down lighty.io controller:", e);
+ }
+ float duration = (System.nanoTime() - startTime)/1_000_000f;
+ LOG.info("lighty.io and RESTCONF-NETCONF stopped in {}ms", duration);
+ }
+
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
+ */
+
+package io.lighty.controllers.tpce.module;
+
+import io.lighty.core.controller.api.LightyModule;
+
+public interface TransportPCE extends LightyModule {
+}
--- /dev/null
+/*
+ * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
+ */
+
+package io.lighty.controllers.tpce.module;
+
+import io.lighty.core.controller.api.AbstractLightyModule;
+import io.lighty.core.controller.api.LightyServices;
+import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
+import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
+import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
+import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
+import org.opendaylight.transportpce.common.fixedflex.FixedFlexImpl;
+import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
+import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
+import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
+import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.common.network.RequestProcessor;
+import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
+import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
+import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
+import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
+import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
+import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
+import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
+import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
+import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory;
+import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology121;
+import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology22;
+import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
+import org.opendaylight.transportpce.olm.OlmProvider;
+import org.opendaylight.transportpce.olm.power.PowerMgmt;
+import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
+import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
+import org.opendaylight.transportpce.pce.impl.PceProvider;
+import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
+import org.opendaylight.transportpce.renderer.NetworkModelWavelengthServiceImpl;
+import org.opendaylight.transportpce.renderer.RendererProvider;
+import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
+import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
+import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
+import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
+import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
+import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
+
+ private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
+ private static final long MaxDurationToSubmitTransaction = 1500;
+
+ // common beans
+ private final DeviceTransactionManagerImpl deviceTransactionManager;
+ private final MappingUtilsImpl mappingUtils;
+ private final OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121;
+ private final OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221;
+ private final OpenRoadmInterfacesImpl openRoadmInterfaces;
+ private final PortMappingVersion221 portMappingVersion221;
+ private final RequestProcessor requestProcessor;
+ private final NetworkTransactionImpl networkTransaction;
+ private final PortMappingVersion121 portMappingVersion121;
+ private final PortMappingImpl portMapping;
+ private final CrossConnectImpl121 crossConnectImpl121;
+ private final CrossConnectImpl221 crossConnectImpl221;
+ private final CrossConnectImpl crossConnect;
+ private final FixedFlexImpl fixedFlex;
+
+ // pce beans
+ private final PathComputationServiceImpl pathComputationService;
+ private final PceProvider pceProvider;
+
+ // network model beans
+ private final OpenRoadmTopology121 openRoadmTopology121;
+ private final OpenRoadmTopology22 openRoadmTopology22;
+ private final OpenRoadmFactory openRoadmFactory;
+ private final R2RLinkDiscovery linkDiscoveryImpl;
+ private final NetworkUtilsImpl networkutilsServiceImpl;
+ private final NetworkModelServiceImpl networkModelService;
+ private final NetConfTopologyListener netConfTopologyListener;
+ private final NetworkModelProvider networkModelProvider;
+
+ // OLM beans
+ private final PowerMgmt powerMgmt;
+ private final OlmPowerServiceImpl olmPowerService;
+ private final OlmProvider olmProvider;
+ private final OlmPowerServiceRpcImpl olmPowerServiceRpc;
+
+ // renderer beans
+ private final OpenRoadmInterface121 openRoadmInterface121;
+ private final OpenRoadmInterface221 openRoadmInterface22;
+ private final OpenRoadmInterfaceFactory openRoadmInterfaceFactory;
+ private final DeviceRendererServiceImpl deviceRendererService;
+ private final DeviceRendererRPCImpl deviceRendererRPC;
+ private final NetworkModelWavelengthServiceImpl networkModelWavelengthService;
+ private final RendererServiceOperationsImpl rendererServiceOperations;
+ private final RendererProvider rendererProvider;
+
+ // service-handler beans
+ private final ServicehandlerProvider servicehandlerProvider;
+
+ public TransportPCEImpl(LightyServices lightyServices) {
+ LOG.info("Creating common beans ...");
+ deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getControllerBindingMountPointService(), MaxDurationToSubmitTransaction);
+ mappingUtils = new MappingUtilsImpl(lightyServices.getControllerBindingPingPongDataBroker());
+ openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager);
+ openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(deviceTransactionManager);
+ openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121, openRoadmInterfacesImpl221);
+ portMappingVersion221 = new PortMappingVersion221(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmInterfaces);
+ requestProcessor = new RequestProcessor(lightyServices.getControllerBindingPingPongDataBroker());
+ networkTransaction = new NetworkTransactionImpl(requestProcessor);
+ portMappingVersion121 = new PortMappingVersion121(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmInterfaces);
+ portMapping = new PortMappingImpl(lightyServices.getControllerBindingPingPongDataBroker(), portMappingVersion221, mappingUtils, portMappingVersion121);
+ crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
+ crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
+ crossConnect = new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221);
+ fixedFlex = new FixedFlexImpl();
+
+ LOG.info("Creating PCE beans ...");
+ pathComputationService = new PathComputationServiceImpl(lightyServices.getControllerBindingPingPongDataBroker(), lightyServices.getControllerBindingNotificationPublishService());
+ pceProvider = new PceProvider(lightyServices.getControllerRpcProviderRegistry(), pathComputationService);
+
+ LOG.info("Creating network-model beans ...");
+ openRoadmTopology121 = new OpenRoadmTopology121(networkTransaction, deviceTransactionManager);
+ openRoadmTopology22 = new OpenRoadmTopology22(networkTransaction, deviceTransactionManager);
+ openRoadmFactory = new OpenRoadmFactory(mappingUtils, openRoadmTopology121, openRoadmTopology22);
+ linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmFactory, networkTransaction);
+ networkutilsServiceImpl = new NetworkUtilsImpl(lightyServices.getControllerBindingPingPongDataBroker(), openRoadmFactory);
+ networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl, deviceTransactionManager, openRoadmFactory, portMapping);
+ netConfTopologyListener = new NetConfTopologyListener(networkModelService, lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager);
+ networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getControllerBindingPingPongDataBroker(), lightyServices.getControllerRpcProviderRegistry(), networkutilsServiceImpl, netConfTopologyListener, openRoadmFactory);
+
+ LOG.info("Creating OLM beans ...");
+ powerMgmt = new PowerMgmtImpl(lightyServices.getControllerBindingPingPongDataBroker(), openRoadmInterfaces, crossConnect, deviceTransactionManager);
+ olmPowerService = new OlmPowerServiceImpl(lightyServices.getControllerBindingPingPongDataBroker(), powerMgmt, deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
+ olmProvider = new OlmProvider(lightyServices.getControllerRpcProviderRegistry(), olmPowerService);
+ olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
+
+ LOG.info("Creating renderer beans ...");
+ openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
+ openRoadmInterface22 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces, fixedFlex);
+ openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface22);
+ deviceRendererService = new DeviceRendererServiceImpl(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory, openRoadmInterfaces, crossConnect, portMapping);
+ deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService);
+ networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(lightyServices.getControllerBindingPingPongDataBroker());
+ rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService, olmPowerServiceRpc, lightyServices.getControllerBindingPingPongDataBroker(), networkModelWavelengthService, lightyServices.getControllerBindingNotificationPublishService());
+ rendererProvider = new RendererProvider(lightyServices.getControllerRpcProviderRegistry(), deviceRendererRPC, rendererServiceOperations);
+
+ LOG.info("Creating service-handler beans ...");
+ servicehandlerProvider = new ServicehandlerProvider(lightyServices.getControllerBindingPingPongDataBroker(), lightyServices.getControllerRpcProviderRegistry(), lightyServices.getControllerBindingNotificationService(),
+ pathComputationService, rendererServiceOperations, networkModelWavelengthService, lightyServices.getControllerBindingNotificationPublishService());
+
+ }
+
+ @Override
+ protected boolean initProcedure() {
+ LOG.info("Initializing common beans ...");
+ LOG.info("Initializing PCE beans ...");
+ pathComputationService.init();
+ pceProvider.init();
+ LOG.info("Initializing network-model beans ...");
+ networkModelProvider.init();
+ LOG.info("Initializing OLM beans ...");
+ olmPowerService.init();
+ olmProvider.init();
+ LOG.info("Initializing renderer beans ...");
+ rendererProvider.init();
+ LOG.info("Initializing service-handler beans ...");
+ servicehandlerProvider.init();
+ LOG.info("Init done.");
+ return true;
+ }
+
+ @Override
+ protected boolean stopProcedure() {
+ LOG.info("Shutting down service-handler beans ...");
+ servicehandlerProvider.close();
+ LOG.info("Shutting down renderer beans ...");
+ rendererProvider.close();
+ LOG.info("Shutting down OLM beans ...");
+ olmProvider.close();
+ olmPowerService.close();
+ LOG.info("Shutting down network-model beans ...");
+ networkModelProvider.close();
+ LOG.info("Shutting down PCE beans ...");
+ pathComputationService.close();
+ pceProvider.close();
+ LOG.info("Shutting down common beans ...");
+ networkTransaction.close();
+ deviceTransactionManager.preDestroy();
+ LOG.info("Shutdown done.");
+ return true;
+ }
+
+}
--- /dev/null
+/*
+ * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html
+ */
+
+package io.lighty.controllers.tpce.utils;
+
+import com.google.common.collect.ImmutableSet;
+import io.lighty.modules.northbound.restconf.community.impl.util.RestConfConfigUtils;
+import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils;
+import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public final class TPCEUtils {
+
+ public static final Set<YangModuleInfo> TPCE_MODELS = ImmutableSet.of(
+
+ // common models
+ org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.amplifier.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.equipment.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.layerrate.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev170929.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev170929.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.probablecause.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.probablecause.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.user.mgmt.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.user.mgmt.rev171215.$YangModuleInfoImpl.getInstance(),
+
+ // device models
+ org.opendaylight.yang.gen.v1.http.org.openroadm.database.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.database.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.de.device.resource.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.de.swdl.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.de.swdl.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.file.transfer.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.file.transfer.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.fwdl.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.fwdl.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.loopback.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.loopback.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.testsignal.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.testsignal.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.optical.multiplex.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.rev170626.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.physical.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.physical.types.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.pluggable.optics.holder.capability.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.prot.otn.linear.aps.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.rstp.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.rstp.rev181019.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.syslog.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.syslog.rev171215.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev171215.$YangModuleInfoImpl.getInstance(),
+
+ // network models
+ org.opendaylight.yang.gen.v1.http.org.openroadm.amplifier.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.external.pluggable.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.roadm.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev181130.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.$YangModuleInfoImpl.getInstance(),
+
+ // service models
+ org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constrains.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.$YangModuleInfoImpl.getInstance(),
+
+ // 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.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev170930.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev171017.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.$YangModuleInfoImpl.getInstance(),
+
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.$YangModuleInfoImpl.getInstance(),
+
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.$YangModuleInfoImpl.getInstance(),
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.$YangModuleInfoImpl.getInstance()
+
+ );
+
+ public static final Set<YangModuleInfo> yangModels = Stream.concat(
+ Stream.concat(
+ RestConfConfigUtils.YANG_MODELS.stream(),
+ NetconfConfigUtils.NETCONF_TOPOLOGY_MODELS.stream())
+ .collect(Collectors.toSet()).stream(), TPCE_MODELS.stream())
+ .collect(Collectors.toSet());
+
+ private TPCEUtils() {
+ throw new UnsupportedOperationException("Please do not instantiate utility class.");
+ }
+
+}
--- /dev/null
+log4j.rootLogger=INFO, STDOUT
+log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
+log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
+log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n