Adding TestVNF netconf server 59/71159/1
authora.sreekumar <ajith.sreekumar@ericsson.com>
Wed, 24 Oct 2018 15:07:36 +0000 (16:07 +0100)
committera.sreekumar <ajith.sreekumar@ericsson.com>
Wed, 24 Oct 2018 15:08:17 +0000 (16:08 +0100)
TestVNF netconf server is a partial implementation of a netconfserver for netconf termination.
TestVNF is configurable and can be used for testing purposes.

Issue-ID: INT-355
Change-Id: I98594d7df57ca14582159bb006d8df51dca74ec7
Signed-off-by: a.sreekumar <ajith.sreekumar@ericsson.com>
125 files changed:
vnfs/TestVNF/LICENSE.txt [new file with mode: 0644]
vnfs/TestVNF/README.md [new file with mode: 0644]
vnfs/TestVNF/docker/NetconfServerDocker/DockerFile [new file with mode: 0644]
vnfs/TestVNF/docker/README.md [new file with mode: 0644]
vnfs/TestVNF/netconfserver/pom.xml [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/Server.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/builder/ServerBuilder.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/ActionHelper.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/CustomParser.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/HelperUtils.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/Hello.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/NetconfMessage.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/RpcData.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/SchemaDetails.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/netconf/NetconfHandler.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/netconf/NetconfSubsystem.java [new file with mode: 0644]
vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/requestqueue/RequestQueueHandler.java [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/RCAPoCModel@2017-04-27.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/RCAPoCModel@2017-04-27.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/acme-system@2007-06-09.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/acme-system@2007-06-09.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/afr-machine@2013-12-27.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/afr-machine@2013-12-27.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config-schema.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response-bak.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response.xml.bak2 [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/hello.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/iana-crypt-hash@2014-08-06.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/iana-crypt-hash@2014-08-06.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/iana-if-type@2014-05-08.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/iana-if-type@2014-05-08.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-datastores@2017-08-17.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-datastores@2017-08-17.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-inet-types@2013-07-15.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-inet-types@2013-07-15.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-interfaces@2014-05-08.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-interfaces@2014-05-08.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ip@2014-06-16.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ip@2014-06-16.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-keystore@2016-10-31.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-keystore@2016-10-31.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-acm@2012-02-22.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-acm@2012-02-22.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-monitoring@2010-10-04.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-monitoring@2010-10-04.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-notifications@2012-02-06.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-notifications@2012-02-06.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-server@2016-11-02.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-server@2016-11-02.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-with-defaults@2011-06-01.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-with-defaults@2011-06-01.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf@2011-06-01.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf@2011-06-01.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ssh-server@2016-11-02.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ssh-server@2016-11-02.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-system@2014-08-06.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-system@2014-08-06.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-tls-server@2016-11-02.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-tls-server@2016-11-02.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-x509-cert-to-name@2014-12-10.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-x509-cert-to-name@2014-12-10.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-library@2017-08-17.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-library@2017-08-17.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-metadata@2016-08-05.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-metadata@2016-08-05.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-types@2013-07-15.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-types@2013-07-15.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/nc-notifications@2008-07-14.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/nc-notifications@2008-07-14.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/notifications@2008-07-14.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/notifications@2008-07-14.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/rpc-reply.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/system/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/turing-machine/response.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/schema-reply-template.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/schema-reply.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/schema.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/schema2.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/schema3.xml [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/send-event-schema.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/send-event/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/send-models-schema.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/send-models/NA/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/server-config.properties [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/turing-machine@2013-12-27.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/turing-machine@2013-12-27.yin [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/validate/candidate/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/validate/running/response.groovy [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/yang@2017-02-20.yang [new file with mode: 0644]
vnfs/TestVNF/netconftemplates/netconftemplates/yang@2017-02-20.yin [new file with mode: 0644]
vnfs/TestVNF/sample rpc requests/R13_get_running.xml [new file with mode: 0644]
vnfs/TestVNF/sample rpc requests/edit_config_sample_request_httpAddress.xml [new file with mode: 0644]
vnfs/TestVNF/sample rpc requests/get_schema_sample_request.xml [new file with mode: 0644]
vnfs/TestVNF/sample rpc requests/send_event_sample_request.xml [new file with mode: 0644]
vnfs/TestVNF/sample rpc requests/send_models_sample_request.xml [new file with mode: 0644]
vnfs/TestVNF/sample rpc requests/test.xml [new file with mode: 0644]

diff --git a/vnfs/TestVNF/LICENSE.txt b/vnfs/TestVNF/LICENSE.txt
new file mode 100644 (file)
index 0000000..d1737da
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
\ No newline at end of file
diff --git a/vnfs/TestVNF/README.md b/vnfs/TestVNF/README.md
new file mode 100644 (file)
index 0000000..299be94
--- /dev/null
@@ -0,0 +1,66 @@
+# TestVNF - NetconfServer
+
+TestVNF - NetconfServer is a partial implementation of a netconf server for netconf termination. It uses [Apache MINA SSHD](https://github.com/apache/mina-sshd) and extends a netconf subsystem.
+The system doesn't provide persistence out of the box even though it could be done through groovy files, which remain external to the system and takes actions based on netconf operations.
+
+## Requirements
+* Java 8
+* Maven
+* MariaDB
+
+## Usage
+
+### To run the maven project
+Go to netconfserver and execute the following commands in a terminal.
+
+       $ mvn package
+
+The jar file is created in the target folder
+       
+       $ java -cp target/netconfsystem-jar-with-dependencies.jar com.ericsson.testvnf.server.Server <NETCONFTEMPLATESDIRECTORY> <TIMEDELAYFORSENDINGEVENTS>
+
+Run the jar file. Also, specify the arguments.
+       
+NETCONFTEMPLATESDIRECTORY is the directory which contains the netconf templates, YANG models and the groovy files to be executed based on netconf RPC request.
+TIMEDELAYFORSENDINGEVENTS is the time delay in milliseconds set between sending each of the events by the VNF.
+
+The values for host and port are taken from <NETCONFTEMPLATESDIRECTORY>/netconftemplates/server-config.properties. If the config file is missing, then the server is started on the default value 0.0.0.0:2052
+
+* __sample rpc requests__ directory contains some sample rpc requests to test the TestVNF.
+
+* __netconftemplates__ directory contains sample netconftemplates and groovy files for performing actions based on netconf requests.
+
+### To run in docker
+Go to docker directory for details on how to run the netconf server in docker.
+
+## Description
+TestVNF - NetconfServer is a partial implementation of a netconf server for netconf termination. It uses Apache MINA SSHD and extends a netconf subsystem..
+Action taken by the netconf server is kept independent of the server implementation. Groovy files used to perform actions based on netconf RPC operations are kept external to the project in a directory or in an FTP server. The location is passed while running the project. This external directory will also contain the sample templates and yang models to be used by the server.
+
+## Example
+A client is connecting to the netconf server.
+The server sends back a hello message from the location <NETCONFTEMPLATESDIRECTORY>/netconftemplates/hello.xml
+
+The client then sends an edit-config netconf request on the candidate data store.
+The server parses the RPC request from the client and gets the operation and configuration datastore. Based on these the correct groovy file is selected and the data is sent to that groovy file. 
+
+<NETCONFTEMPLATESDIRECTORY>/netconftemplates/edit-config/candidate/response.groovy is the groovy file selected in this case.
+
+If the operation doesn't involve a configuration data store, for example, for close-session
+
+<NETCONFTEMPLATESDIRECTORY>/netconftemplates/close-session/NA/response.groovy is executed by the system.
+
+### Custom operations
+The netconf system supports custom operations without the need for recompiling the project.
+Consider a custom operation send-models which send events to a specified target one by one with a time delay.
+
+A client can get the schema of this operation by sending a get-schema request to the server.
+The server picks up the correct yang models and sends back to the client. For this, the model has to be present in the netconftemplates directory as <operation_name>-schema.yang.
+
+<NETCONFTEMPLATESDIRECTORY>/netconftemplates/send-models-schema.yang is selected in the aforementioned case.
+
+When the client sends a send-models request to the server, the action is performed by executing the below groovy file.
+
+<NETCONFTEMPLATESDIRECTORY>/netconftemplates/send-models/NA/response.groovy
+
+When an edit-config request with the same target name as specified in send-models request is sent to the netconf system, the sending of events is terminated.
diff --git a/vnfs/TestVNF/docker/NetconfServerDocker/DockerFile b/vnfs/TestVNF/docker/NetconfServerDocker/DockerFile
new file mode 100644 (file)
index 0000000..4160a29
--- /dev/null
@@ -0,0 +1,11 @@
+FROM openjdk:8-jre-alpine
+
+RUN mkdir /app
+
+COPY netconfsystem-jar-with-dependencies.jar /app
+
+EXPOSE 2052
+
+WORKDIR /app
+
+CMD java -cp netconfsystem-jar-with-dependencies.jar com.ericsson.testvnf.server.Server $NETCONFTEMPLATESDIRECTORY $TIMEDELAYFORSENDINGEVENTS
diff --git a/vnfs/TestVNF/docker/README.md b/vnfs/TestVNF/docker/README.md
new file mode 100644 (file)
index 0000000..48f71ef
--- /dev/null
@@ -0,0 +1,27 @@
+# Running TestVNF in Docker
+
+## Create the docker image for the netconfserver.
+Start docker. 
+Go to NetconfServerDocker directory. Place the jar created by building the netconfserver maven project into this directory.
+The directory also contains the DockerFile to create a docker image.
+Run the command:
+
+       $ docker build -t testnetconfserver .
+       
+A docker image testnetconfserver is now created.
+
+## Running docker containers
+First run a mariadb container, which then can be linked to netconfserver container.
+
+       $ docker run -it --name=testmariadbserver -v /mariadb/:/var/lib/mysql -e MYSQL_USER=root -e MYSQL_DATABASE=netconf_db -e MYSQL_PASSWORD=root -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d jbergstroem/mariadb-alpine
+       
+Next, run the container for netconfserver. Also link the mariadb container to it.
+
+       $ docker run -e NETCONFTEMPLATESDIRECTORY="/var/netconf/netconftemplates" -e TIMEDELAYFORSENDINGEVENTS="__timeDelayForSendingEvents__" -p 4002:2052  -it --link testmariadbserver:mariadb --name testnetconfserver -v "__host_location__":"/var/netconf/netconftemplates" testnetconfserver
+       
+       __timeDelayForSendingEvents__ needs to be replaced with an actual value required in milliseconds (for example: 15000)
+       __host_location__ needs to be replaced with the actual location in the host machine which contains the netconftemplates (for example: /home/ubuntu/netconftemplates).
+
+The container testmariadbserver is linked to container testnetconfserver.
+So as per the above command, in the groovy files used to execute actions by the netconfserver, use 'mariadb' as the host name to connect to the mariadb database.
+
diff --git a/vnfs/TestVNF/netconfserver/pom.xml b/vnfs/TestVNF/netconfserver/pom.xml
new file mode 100644 (file)
index 0000000..5a822cc
--- /dev/null
@@ -0,0 +1,146 @@
+<!--
+  ============LICENSE_START=======================================================
+   Copyright (C) 2016-2018 Ericsson. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+<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>
+       <groupId>dummyvnf</groupId>
+       <artifactId>netconfserver</artifactId>
+       <version>0.0.1-SNAPSHOT</version>
+
+       <packaging>jar</packaging>
+
+       <name>test</name>
+       <url>http://maven.apache.org</url>
+
+       <properties>
+               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+       </properties>
+
+       <build>
+               <finalName>netconfsystem</finalName>
+               <plugins>
+
+                       <!-- download source code in Eclipse, best practice -->
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-eclipse-plugin</artifactId>
+                               <version>2.9</version>
+                               <configuration>
+                                       <downloadSources>true</downloadSources>
+                                       <downloadJavadocs>false</downloadJavadocs>
+                               </configuration>
+                       </plugin>
+
+                       <!-- Set a compiler level -->
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                               <version>2.3.2</version>
+                               <configuration>
+                                       <source>1.8</source>
+                                       <target>1.8</target>
+                               </configuration>
+                       </plugin>
+
+                       <!-- Maven Assembly Plugin -->
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-assembly-plugin</artifactId>
+                               <version>2.4.1</version>
+                               <configuration>
+                                       <!-- get all project dependencies -->
+                                       <descriptorRefs>
+                                               <descriptorRef>jar-with-dependencies</descriptorRef>
+                                       </descriptorRefs>
+                                       <!-- MainClass in mainfest make a executable jar -->
+                                       <archive>
+                                               <manifest>
+                                                       <mainClass>server.Server</mainClass>
+                                               </manifest>
+                                       </archive>
+
+                               </configuration>
+                               <executions>
+                                       <execution>
+                                               <id>make-assembly</id>
+                                               <!-- bind to the packaging phase -->
+                                               <phase>package</phase>
+                                               <goals>
+                                                       <goal>single</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                       </plugin>
+
+               </plugins>
+       </build>
+
+
+       <dependencies>
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <version>3.8.1</version>
+                       <scope>test</scope>
+               </dependency>
+               <!-- https://mvnrepository.com/artifact/org.apache.sshd/sshd-core -->
+               <dependency>
+                       <groupId>org.apache.sshd</groupId>
+                       <artifactId>sshd-core</artifactId>
+                       <version>2.0.0</version>
+               </dependency>
+               <dependency>
+                       <groupId>commons-logging</groupId>
+                       <artifactId>commons-logging</artifactId>
+                       <version>1.1.1</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.mariadb.jdbc</groupId>
+                       <artifactId>mariadb-java-client</artifactId>
+                       <version>2.1.2</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.codehaus.groovy</groupId>
+                       <artifactId>groovy</artifactId>
+                       <version>2.5.2</version>
+               </dependency>
+               <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-sql -->
+               <dependency>
+                       <groupId>org.codehaus.groovy</groupId>
+                       <artifactId>groovy-sql</artifactId>
+                       <version>2.0.1</version>
+               </dependency>
+               <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-json -->
+               <dependency>
+                       <groupId>org.codehaus.groovy</groupId>
+                       <artifactId>groovy-json</artifactId>
+                       <version>2.5.2</version>
+               </dependency>
+
+               <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-xml -->
+               <dependency>
+                       <groupId>org.codehaus.groovy</groupId>
+                       <artifactId>groovy-xml</artifactId>
+                       <version>2.5.2</version>
+               </dependency>
+       </dependencies>
+</project>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/Server.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/Server.java
new file mode 100644 (file)
index 0000000..51651ba
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.ericsson.testvnf.server.builder.ServerBuilder;
+
+/**
+ * Netconf server using Apache MINA SSHD and netconf4j
+ * The SSHD server extends a netconf subsystem
+ * 
+ * @author Ajith Sreekumar
+ * 
+ */
+public class Server {
+
+       private static final int DEFAULT_PORT = 2052;
+
+       private static final String DEFAULT_HOST = "0.0.0.0";
+
+       private static final Log log = LogFactory.getLog(Server.class);
+
+       private static String netconfTemplatesDirectory;
+
+       private  static String timeDelayForSendingEvents; // time delay in milliseconds
+       
+       public static String getNetconfTemplatesDirectory() {
+               return netconfTemplatesDirectory;
+       }
+
+       public static void setNetconfTemplatesDirectory(String netconfTemplatesDirectory) {
+               Server.netconfTemplatesDirectory = netconfTemplatesDirectory;
+       }
+
+       public static String getTimeDelayForSendingEvents() {
+               return timeDelayForSendingEvents;
+       }
+
+       public static void setTimeDelayForSendingEvents(String timeDelayForSendingEvents) {
+               Server.timeDelayForSendingEvents = timeDelayForSendingEvents;
+       }
+
+
+       public static void main(String[] args) throws IOException{
+               setNetconfTemplatesDirectory(args[0]); // the directory which contains the groovy files to perform actions based on netconf requests, and also contains other netconf templates to be sent back to the client
+               setTimeDelayForSendingEvents(args[1]); // the delay between sending each event by the VNF
+               ServerBuilder serverBuilder = new ServerBuilder();
+               
+               Properties prop = new Properties();
+               String host = DEFAULT_HOST;
+               int port = DEFAULT_PORT;
+               try {
+                       InputStream input = new FileInputStream(getNetconfTemplatesDirectory()+ "/netconftemplates/server-config.properties");
+                       log.info("Setting host and port from the properties file.");
+                       prop.load(input);
+                       if(null!=prop.getProperty("host"))
+                               host = prop.getProperty("host");
+                       if(null!=prop.getProperty("port"))
+                               port = Integer.parseInt(prop.getProperty("port"));
+               }catch(FileNotFoundException e) {
+                       log.info("server-config.properties file not found. " + e);
+                       log.info("Using default host and port");
+
+               }
+
+               serverBuilder.initializeServer(host,port);
+               serverBuilder.startServer();
+               
+               // read lines from input
+               BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
+
+               while (true) {
+                       if (buffer.readLine().equalsIgnoreCase("EXIT")) {
+                               break;
+                       }
+               }
+
+               log.info("Exiting");
+               serverBuilder.stopServer();
+               System.exit(0);
+       }
+
+
+}
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/builder/ServerBuilder.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/builder/ServerBuilder.java
new file mode 100644 (file)
index 0000000..d6ec18a
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.builder;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.server.SshServer;
+import org.apache.sshd.server.command.Command;
+import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
+import org.apache.sshd.server.session.ServerSession;
+
+import com.ericsson.testvnf.server.netconf.NetconfSubsystem;
+
+/**
+ * Build the server by extending a netconf subsystem
+ */
+public class ServerBuilder {
+
+       private static final Log log = LogFactory.getLog(ServerBuilder.class);
+       private SshServer sshd;
+       
+       // initialize the server
+       public void initializeServer(String host, int listeningPort) {
+               log.info("Configuring server...");
+               sshd = SshServer.setUpDefaultServer();
+               sshd.setHost(host);
+               sshd.setPort(listeningPort);
+
+               log.info("Host: '" + host + "', listenig port: " + listeningPort);
+
+                // set the password authenticator, here the access is granted always.
+               sshd.setPasswordAuthenticator((String username, String password, ServerSession session) -> true);
+                
+               sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
+
+               List<NamedFactory<Command>> subsystemFactories = new ArrayList<>();
+               subsystemFactories.add(NetconfSubsystem.Factory.createFactory()); 
+               sshd.setSubsystemFactories(subsystemFactories); // add the netconf subystem to the server.
+
+               log.info("Server configured.");
+       }
+
+       // start the server
+       public void startServer(){
+               log.info("Starting server...");
+               try {
+                       sshd.start();
+               } catch (IOException e) {
+                       log.error("Error starting server!", e);
+               }
+               log.info("Server started.");
+       }
+
+       // stop the server
+       public void stopServer() throws IOException {
+               log.info("Stopping server...");
+               sshd.stop();
+               log.info("Server stopped.");
+       }
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/ActionHelper.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/ActionHelper.java
new file mode 100644 (file)
index 0000000..d9714ff
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.helper;
+
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.ericsson.testvnf.server.Server;
+import com.ericsson.testvnf.server.models.NetconfMessage;
+import com.ericsson.testvnf.server.models.RpcData;
+
+/*
+ * The helper class which performs actions based on netconf requests
+ */
+public class ActionHelper {
+       
+       private static final Log log = LogFactory.getLog(ActionHelper.class);
+       private OutputStream                                    out;
+       private Thread groovyCallerThread;
+       
+       public ActionHelper(OutputStream out){
+               this.out = out;
+       }
+       
+       public boolean doActionForRPCRequest(NetconfMessage netconfMessage, Map<String, Boolean> connectionResetMap, boolean sessionClosedStatus){
+               // if the client is sending an rpc request for any protocol operation
+               RpcData rpcData = (RpcData) netconfMessage;
+               if (null != rpcData.getTargetName()) {
+                       // the connectionResetMap is a shared between multiple client connections coming in for a single netconf server instance
+                       // true value for a target indicates that sending events to that target needs to be stopped
+                       // edit-config operation with a target determines the termination of sending events to that target.
+                       if (rpcData.getOperation().equals("edit-config")) {
+                               connectionResetMap.put(rpcData.getTargetName(), true);
+                       } else {
+                               connectionResetMap.put(rpcData.getTargetName(), false);
+                       }
+               }
+               if (rpcData.getOperation().equals("\"close-session\"")) {
+                       sessionClosedStatus = true;
+               }
+               String operation = rpcData.getOperation();
+               log.info("Received query");
+
+               // on getting a get-schema request from client, the server sends back the yang
+               // model of the particular functionality/capability asked for.
+               if (operation.equals("get-schema")) {
+                       doActionForGetSchemaOperation(rpcData);
+               } else {
+                       doActionForOperations(rpcData, operation, connectionResetMap);
+               }
+               return sessionClosedStatus;
+       }
+       
+       public void doActionForOperations(RpcData rpcData, String operation, Map<String, Boolean> connectionResetMap) {
+               groovyCallerThread = new Thread("Groovy caller") {
+                       @Override
+                       public void run() {
+                               rpcData.setTimeDelayForSendingEvents(Server.getTimeDelayForSendingEvents());
+                               String result ="";
+                               // pick up and execute the correct groovy file based on the operation and configuration datastore identified from the rpc request
+                               result = HelperUtils.executeGroovy(Server.getNetconfTemplatesDirectory()
+                                               + "/netconftemplates/"+operation+"/"+rpcData.getConfigurationDatastore()+"/response.groovy", rpcData, connectionResetMap);
+                               if (!result.equals("ignore")) {
+                                       result = result.replaceAll("<MID>", rpcData.getMessageId());
+                                       HelperUtils.sendAsBytesToOutput(result.getBytes(), out);
+                                       log.info("Finished writing " + result);
+                               }
+                       }
+               };
+               groovyCallerThread.start();
+               log.info("groovyCallerThread started");
+       }
+       
+       public void doActionForGetSchemaOperation(RpcData rpcData){
+               log.info("get-schema received.");
+               if (null != rpcData.getSchemaDetails()
+                               && null != rpcData.getSchemaDetails().getIdentifier()) {
+                       log.info("Sending schema for capability...");
+                       String schemaString = HelperUtils.readFile(Server.getNetconfTemplatesDirectory()
+                                       + "/netconftemplates/"+rpcData.getSchemaDetails().getIdentifier()+"-schema.yang"); // the yang model has to be in the netconftemplates directory with the proper naming format : '<operation>-schema.yang'
+                       String schemaStringValue = schemaString.replaceAll("<MID>", rpcData.getMessageId()); // Put the correct message id in the response as it is in the request.
+                       HelperUtils.sendAsBytesToOutput(schemaStringValue.getBytes(), out);
+                       log.info("Finished writing the schema information");
+               }
+       }
+       
+       // the method sends a hello message to the client, hello.xml in the netconftemplates directory is used to send the hello message
+       public void sendHelloMessage(){
+               log.info("Send hello message.");
+               String helloMessage = HelperUtils.readFile(Server.getNetconfTemplatesDirectory()+"/netconftemplates/hello.xml");
+       HelperUtils.sendAsBytesToOutput(helloMessage.getBytes(), out);
+       log.info("Hello message sent.");
+       }
+
+       public void interruptGroovyCallerThread() {
+               // kill thread if it don't finish naturally
+               if (groovyCallerThread!=null && groovyCallerThread.isAlive()) {
+                       log.info("Killing groovy caller thread");
+                       groovyCallerThread.interrupt();
+               }
+               
+       }
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/CustomParser.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/CustomParser.java
new file mode 100644 (file)
index 0000000..c615d10
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.helper;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.ext.DefaultHandler2;
+
+import com.ericsson.testvnf.server.models.Hello;
+import com.ericsson.testvnf.server.models.RpcData;
+import com.ericsson.testvnf.server.models.SchemaDetails;
+import com.ericsson.testvnf.server.requestqueue.RequestQueueHandler;
+
+/*
+ * Parses the xml requests and populates netconf related data to do operations
+ */
+public class CustomParser extends DefaultHandler2 {
+       
+       private Log log = LogFactory.getLog(CustomParser.class);
+       private RequestQueueHandler requestQueueHandler;
+
+       private Hello hello;
+       private RpcData rpcData;
+       private boolean nextIsOperationTag = false;
+       private boolean insideOperationTag = false;
+       private String operationTagValue = "";
+       private StringBuilder operationTagContent = new StringBuilder();
+       private boolean insideConfigurationDatastore = false;
+       private boolean insideSchemaDetailsTag = false;
+       private StringBuilder individualSchemaDetailsTagContent = new StringBuilder();
+       private SchemaDetails schemaDetails;
+       private boolean insideTargetNameTag = false;
+       private StringBuilder targetNameContent = new StringBuilder();
+
+       @Override
+       public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
+               super.startElement(uri, localName, qName, attributes);
+               String messageId;
+               if (nextIsOperationTag) {
+                       insideOperationTag = true;
+                       rpcData.setOperation(localName);
+                       operationTagValue = localName;
+                       nextIsOperationTag = false;
+                       if (localName.equalsIgnoreCase("get-schema")) {
+                               insideSchemaDetailsTag = true;
+                               schemaDetails = new SchemaDetails();
+                       }
+               }
+               
+               if (insideOperationTag) {
+                       populateStartElementData(localName, attributes);
+               }
+               
+               if (localName.equalsIgnoreCase("hello")) {
+                       hello = new Hello();
+               } else if (localName.equalsIgnoreCase("rpc")) {
+                       rpcData = new RpcData();
+
+                       messageId = attributes.getValue("message-id");
+                       if (messageId == null)
+                               throw new SAXException("Received <rpc> message without a message ID");
+
+                       rpcData.setMessageId(messageId);
+                       nextIsOperationTag = true;
+               }
+
+       }
+       
+       @Override
+       public void characters(char[] ch, int start, int length) throws SAXException {
+               super.characters(ch, start, length);
+               
+               if (insideOperationTag) {
+                       operationTagContent.append(ch, start, length);
+                       if (insideSchemaDetailsTag) {
+                               individualSchemaDetailsTagContent.append(ch, start, length);
+                       }else if (insideTargetNameTag) {
+                               targetNameContent.append(ch, start, length);
+                       }
+               }
+       }
+       @Override
+       public void endElement(String uri, String localName, String qName) throws SAXException {
+               super.endElement(uri, localName, qName);
+               
+               if (insideOperationTag) {
+                       populateEndElementData(localName);
+               }
+               if (localName.equalsIgnoreCase("hello")) {
+                       requestQueueHandler.addToQueue(hello);
+                       hello = null;
+                       /* Query tags and operations */
+               } else if (localName.equalsIgnoreCase("rpc")) {
+                       requestQueueHandler.addToQueue(rpcData);
+                       rpcData = null;
+               }else if(operationTagValue.equals(localName)) {
+                       rpcData.setOperationTagContent(operationTagContent.toString());
+                       insideOperationTag = false;
+                       operationTagContent = new StringBuilder();
+                       if (localName.equalsIgnoreCase("get-schema")) {
+                               insideSchemaDetailsTag = false;
+                               rpcData.setSchemaDetails(schemaDetails);
+                               schemaDetails = new SchemaDetails();
+                       }
+               }
+       }
+
+       private void populateStartElementData(String localName, Attributes attributes) {
+               if (insideConfigurationDatastore) {
+                       rpcData.setConfigurationDatastore(localName);
+               }
+               if (localName.equalsIgnoreCase("target") || localName.equalsIgnoreCase("source")) {
+                       insideConfigurationDatastore = true;
+               } else if(localName.equalsIgnoreCase("target-name")) {
+                       insideTargetNameTag = true;
+               }
+               operationTagContent.append("<" + localName);
+               for (int i = 0; i < attributes.getLength(); i++) {
+                       operationTagContent.append(" " + attributes.getQName(i) + "=\"" + attributes.getValue(i) + "\"");
+               }
+               operationTagContent.append(">");
+       }
+       
+       private void populateEndElementData(String localName) {
+               if (localName.equalsIgnoreCase("target") || localName.equalsIgnoreCase("source")) {
+                       insideConfigurationDatastore = false;
+               } else if(localName.equalsIgnoreCase("target-name")) {
+                       insideTargetNameTag = false;
+                       rpcData.setTargetName(targetNameContent.toString());
+                       targetNameContent = new StringBuilder();
+               } else if (insideSchemaDetailsTag) {
+                       if(localName.equalsIgnoreCase("identifier")) {
+                               schemaDetails.setIdentifier(individualSchemaDetailsTagContent.toString().trim());
+                               individualSchemaDetailsTagContent = new StringBuilder();
+                       } else if(localName.equalsIgnoreCase("version")) {
+                               schemaDetails.setVersion(individualSchemaDetailsTagContent.toString().trim());
+                               individualSchemaDetailsTagContent = new StringBuilder();
+                       }               
+               }
+               operationTagContent.append("</" + localName + ">");
+       }
+       
+       public void setRequestQueueHandler(RequestQueueHandler queue) {
+               this.requestQueueHandler = queue;
+       }
+       
+       @Override
+       public void error(SAXParseException e) throws SAXException {
+               log.warn(e.getMessage());
+       }
+
+       @Override
+       public void fatalError(SAXParseException e) throws SAXException {
+               log.warn(e.getMessage());
+       }
+}
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/HelperUtils.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/helper/HelperUtils.java
new file mode 100644 (file)
index 0000000..cec6135
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.helper;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.ericsson.testvnf.server.models.NetconfMessage;
+
+import groovy.lang.Binding;
+import groovy.util.GroovyScriptEngine;
+
+/*
+ * The utils class
+ */
+public class HelperUtils{
+       
+       private static final Log log = LogFactory.getLog(HelperUtils.class);
+       
+       private HelperUtils() {
+               super();
+       }
+
+       // executes the groovy file specified in the path
+       public static String executeGroovy(String groovyFilePath, NetconfMessage data, Map<String, Boolean> connectionResetMap) {
+
+               Object result = "";
+               try {
+                       log.info("groovy path------" + groovyFilePath);
+                       File file = new File(groovyFilePath);
+                       GroovyScriptEngine engine = new GroovyScriptEngine(file.getParent());
+                       Binding binding = new Binding();
+                       binding.setVariable("RpcData", data);
+                       binding.setVariable("connectionResetMap", connectionResetMap);
+                       log.info("binding " + binding + "  " + file.getParent() + " " + file.getName());
+                       result = engine.run(file.getName(), binding);
+               } catch (Exception e) {
+                       log.error("Exception while trying to execute groovy file", e);
+               }
+               return result.toString();
+       }
+       
+       // send bytes to output stream
+       public static void sendAsBytesToOutput(byte[] buffer, OutputStream out){
+               try {
+                       log.info("Sending message as bytes..\n");
+                       int len = buffer.length;
+                       out.write(buffer, 0, len);
+                       String tail = "]]>]]>";
+                       out.write(tail.getBytes(), 0, tail.getBytes().length);
+                       out.flush();
+               }catch(Exception e) {
+                       log.info("Error while sending response message as bytes: "+e);
+               }
+       }
+       
+       // the method is used to read the contents of the file specified
+       public static String readFile(String filename) {
+               String fileAsString= "";
+               try {
+                       fileAsString = new String(Files.readAllBytes(Paths.get(filename)));
+               } catch (IOException e) {
+                       log.error("Error reading file: "+ filename);
+               }
+               return fileAsString;
+       }
+}
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/Hello.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/Hello.java
new file mode 100644 (file)
index 0000000..b37fb2a
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.models;
+
+/*
+ * Hello message class
+ */
+public class Hello extends NetconfMessage {
+
+       private static final long serialVersionUID = -3711327850654046146L;
+
+       public Hello() {
+               // constructor of Hello class
+       }
+
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/NetconfMessage.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/NetconfMessage.java
new file mode 100644 (file)
index 0000000..9e1f331
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.models;
+
+/*
+ * NetconfMessage - base class for all the netconf messages
+ */
+public class NetconfMessage implements java.io.Serializable {
+
+       private static final long serialVersionUID = -4596032857456097952L;
+
+       private String messageId;
+
+       public String getMessageId() {
+               return messageId;
+       }
+
+       public void setMessageId(String messageId) {
+               this.messageId = messageId;
+       }
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/RpcData.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/RpcData.java
new file mode 100644 (file)
index 0000000..7e3eb8e
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.models;
+/*
+ * RPC operation message class
+ */
+public class RpcData extends NetconfMessage implements java.io.Serializable {
+
+       private static final long serialVersionUID = -8318907964396287877L;
+
+       private String operation;
+       private String targetName;
+       private String operationTagContent;
+       private String configurationDatastore = "NA";
+       private SchemaDetails schemaDetails; // Parameters for get-schema
+       private String timeDelayForSendingEvents;// time delay in milliseconds
+       
+       public String getConfigurationDatastore() {
+               return configurationDatastore;
+       }
+
+       public void setConfigurationDatastore(String configurationDatastore) {
+               this.configurationDatastore = configurationDatastore;
+       }
+
+       public String getOperationTagContent() {
+               return operationTagContent;
+       }
+
+       public void setOperationTagContent(String operationTagContent) {
+               this.operationTagContent = operationTagContent;
+       }
+
+       public String getTimeDelayForSendingEvents() {
+               return timeDelayForSendingEvents;
+       }
+
+       public void setTimeDelayForSendingEvents(String timeDelayForSendingEvents) {
+               this.timeDelayForSendingEvents = timeDelayForSendingEvents;
+       }
+
+       public String getTargetName() {
+               return targetName;
+       }
+
+       public void setTargetName(String targetName) {
+               this.targetName = targetName;
+       }
+
+       public SchemaDetails getSchemaDetails() {
+               return schemaDetails;
+       }
+
+       public void setSchemaDetails(SchemaDetails schemaDetails) {
+               this.schemaDetails = schemaDetails;
+       }
+
+       public String getOperation() {
+               return operation;
+       }
+
+       public void setOperation(String operation) {
+               this.operation = operation;
+       }
+
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/SchemaDetails.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/models/SchemaDetails.java
new file mode 100644 (file)
index 0000000..190a53c
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.models;
+
+/*
+ *  Schema details class which deals with client requests asking for schema of an rpc operation
+ */
+public class SchemaDetails  implements java.io.Serializable {
+       
+       private static final long serialVersionUID = -1869159770045750695L;
+       
+       private String identifier;
+       private String version;
+       private String format;
+       
+       public String getIdentifier() {
+               return identifier;
+       }
+       public void setIdentifier(String identifier) {
+               this.identifier = identifier;
+       }
+       public String getVersion() {
+               return version;
+       }
+       public void setVersion(String version) {
+               this.version = version;
+       }
+       public String getFormat() {
+               return format;
+       }
+       public void setFormat(String format) {
+               this.format = format;
+       }
+
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/netconf/NetconfHandler.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/netconf/NetconfHandler.java
new file mode 100644 (file)
index 0000000..6d2d496
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.netconf;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.StringReader;
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+import com.ericsson.testvnf.server.helper.ActionHelper;
+import com.ericsson.testvnf.server.helper.CustomParser;
+import com.ericsson.testvnf.server.models.Hello;
+import com.ericsson.testvnf.server.models.NetconfMessage;
+import com.ericsson.testvnf.server.models.RpcData;
+import com.ericsson.testvnf.server.requestqueue.RequestQueueHandler;
+
+/*
+ * NetconfHandler class which handles the netconf communication with a client
+ */
+public class NetconfHandler implements Runnable {
+
+       private InputStream in;
+       private Map<String, Boolean> connectionResetMap;
+       private XMLReader xmlReader;
+       private boolean sessionClosed;
+       private RequestQueueHandler requestQueueHandler;
+       private ActionHelper actionHelper;
+       private Thread requestHandlerThread;
+       private static final Log log = LogFactory.getLog(NetconfHandler.class);
+
+       public NetconfHandler(InputStream in, OutputStream out, Map<String, Boolean> connectionResetMap) {
+               this.connectionResetMap = connectionResetMap;
+               this.in = in;
+               actionHelper = new ActionHelper(out);
+               this.sessionClosed = false;
+       }
+
+       public void run() {
+               // initialize rpc request handler and request queue
+               try {
+                       requestQueueHandler = new RequestQueueHandler();
+                       CustomParser customParser = new CustomParser();
+                       customParser.setRequestQueueHandler(requestQueueHandler); // input requests once processed are added to the request queue.
+                       xmlReader = XMLReaderFactory.createXMLReader();
+                       xmlReader.setContentHandler(customParser);
+                       xmlReader.setErrorHandler(customParser);
+               } catch (SAXException e) {
+                       log.error("Error creating custom rpc request parser.", e);
+                       return;
+               }
+               actionHelper.sendHelloMessage(); // server sends hello to the client as soon as the client initiates a connection with the server
+               startRequestHandler();
+               // start and wait for request handler
+               try {
+                       Thread.sleep(1000);
+               } catch (InterruptedException e) {
+                       Thread.currentThread().interrupt();
+                       log.warn("Error waiting for thread.", e);
+               }
+               readInputRequest();
+               
+       }
+       
+       // read input requests from the client
+       private void readInputRequest(){
+               
+                       StringBuilder netconfMessage = new StringBuilder();
+                       try (BufferedReader br = new BufferedReader(new InputStreamReader(in));
+                                       Stream<String> lineStream = br.lines();){
+                               log.info("Parsing message.");
+                               // rpc requests from clients are parsed and processed
+                               lineStream.forEach(ele -> {
+                                       ele = ele.trim();
+                                       log.info("current element::" + ele);
+                                       if (ele.contains("]]>]]>")) {
+                                               ele = ele.replace("]]>]]>", "");
+                                       }
+                                       if (ele.contains("</hello>") || ele.contains("</rpc>")) {
+                                               netconfMessage.append(ele + '\n');
+                                               String messageAsString = netconfMessage.toString();
+                                               try {
+                                                       log.info("Parsing message---:\n" + messageAsString);
+                                                       xmlReader.parse(new InputSource(new StringReader(messageAsString.trim()))); //xmlParser parses the rpc requests
+                                                       log.info("Parsing done..");
+                                               } catch (Exception e) {
+                                                       log.error("Error parsing. Message---: \n" + messageAsString, e);
+                                                       sessionClosed = true;
+                                               }
+                                               netconfMessage.setLength(0);// reset the message as one whole request is complete
+                                       }else {
+                                               netconfMessage.append(ele + '\n');
+                                       }
+                               });
+                       } catch (Exception e) {
+                               log.error("Exception caught in NetconfHandler readInputRequest: "+ e.getMessage());
+                       } finally {
+                               interruptThreads();
+                       }
+       }
+
+    // method that performs actions based on the message coming in from the client
+       private void startRequestHandler() {
+               log.info("start RequestHandler.");
+               requestHandlerThread = new Thread("Request handler") {
+                       @Override
+                       public void run() {
+                               while (!sessionClosed) {
+                                       
+                                       NetconfMessage netconfMessage = null;
+                                       try {
+                                               netconfMessage = requestQueueHandler.waitAndGetMessageFromQueue(); // get the message received
+                                       } catch (InterruptedException e) {
+                                               log.warn("Interrupted exception");
+                                               Thread.currentThread().interrupt();
+                                               break;
+                                       }
+
+                                       if (netconfMessage instanceof Hello) { // if client sends a hello, send a hello message back
+                                               actionHelper.sendHelloMessage();
+                                       } else if (netconfMessage instanceof RpcData) { 
+                                               sessionClosed = actionHelper.doActionForRPCRequest(netconfMessage, connectionResetMap, sessionClosed);
+                                       }else {
+                                               log.warn("Unknown message received.");
+                                       }
+                               }
+                               log.info("Request handler ended");
+                       }
+
+               };
+               requestHandlerThread.start();
+               log.info("Request handler thread started.");
+       }
+
+       public void interruptThreads() {
+               actionHelper.interruptGroovyCallerThread();
+               if (requestHandlerThread!=null && requestHandlerThread.isAlive()) {
+                       log.info("Killing request handler thread");
+                       requestHandlerThread.interrupt();
+               }
+
+       }
+
+}
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/netconf/NetconfSubsystem.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/netconf/NetconfSubsystem.java
new file mode 100644 (file)
index 0000000..a6022be
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.netconf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.server.Environment;
+import org.apache.sshd.server.ExitCallback;
+import org.apache.sshd.server.command.Command;
+
+/*
+ * NetconfSubsystem class 
+ */
+public class NetconfSubsystem implements Command {
+
+       private static final Log log = LogFactory.getLog(Factory.class);
+       private InputStream in;
+       private OutputStream out;
+       private OutputStream error;
+       private Thread netconfHandlerThread;
+       private Map<String, Boolean> connectionResetMap;
+       private NetconfHandler netconfHandler;
+       
+       public NetconfSubsystem(Map<String, Boolean> connectionResetMap) {
+               this.connectionResetMap = connectionResetMap;
+       }
+
+       public void start(Environment env) throws IOException {
+               // initialize netconf handler
+               netconfHandler = new NetconfHandler(in, out, connectionResetMap);
+               netconfHandlerThread = new Thread(netconfHandler, "netconfHandler thread");
+               netconfHandlerThread.start();
+       }
+
+       public void destroy() {
+               netconfHandler.interruptThreads();
+               try {
+                       netconfHandlerThread.join(2000);
+               } catch (InterruptedException e) {
+                       log.info("netconfHandler thread joining failed." + e.getMessage());
+                       Thread.currentThread().interrupt();
+               }
+               netconfHandlerThread.interrupt();
+               log.info("Netconf Subsystem destroyed");
+       }
+
+       public static class Factory implements NamedFactory<Command> {
+
+               // a connectionResetMap is maintained for each running instance of a netconf system.
+               // this is a simple data structure to determine when sending events to a target needs to be terminated.
+               private static Map<String, Boolean> connectionResetMap = new HashMap<>();
+
+               public static Factory createFactory() {
+                       return new Factory();
+               }
+
+               public String getName() {
+                       return "netconf";
+               }
+               
+               public Command create() {
+                       log.info("Creating subsystem for netconf");
+                       return new NetconfSubsystem(connectionResetMap);
+               }
+               
+       }
+       
+       public InputStream getInputStream() {
+               return in;
+       }
+
+       public void setInputStream(InputStream in) {
+               this.in = in;
+       }
+
+       public OutputStream getOutputStream() {
+               return out;
+       }
+
+       public void setOutputStream(OutputStream out) {
+               this.out = out;
+       }
+
+       public OutputStream getErrorStream() {
+               return error;
+       }
+
+       public void setErrorStream(OutputStream error) {
+               this.error = error;
+       }
+
+       public void setExitCallback(ExitCallback callback) {
+               //Set the callback that the shell has to call when it is closed.
+       }
+}
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/requestqueue/RequestQueueHandler.java b/vnfs/TestVNF/netconfserver/src/main/java/com/ericsson/testvnf/server/requestqueue/RequestQueueHandler.java
new file mode 100644 (file)
index 0000000..29702bd
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package com.ericsson.testvnf.server.requestqueue;
+
+import java.util.Queue;
+import java.util.concurrent.LinkedBlockingQueue;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.ericsson.testvnf.server.models.NetconfMessage;
+
+/**
+ * RequestQueueHandler manages incoming netconf requests from clients
+ * 
+ * @author Ajith Sreekumar
+ *
+ */
+public class RequestQueueHandler {
+
+       private static final Log log = LogFactory.getLog(RequestQueueHandler.class);
+
+       private volatile Queue<NetconfMessage> requestQueue;
+       
+       public RequestQueueHandler() {
+               requestQueue = new LinkedBlockingQueue<>();
+       }
+
+       // wait until an element is added to queue, once added return it
+       public NetconfMessage waitAndGetMessageFromQueue() throws InterruptedException {
+               NetconfMessage netconfMessage = null;
+               synchronized (requestQueue) {
+                       while (true) {
+                               log.info("Waiting for message to be added to queue..");
+                               if (!requestQueue.isEmpty()) {
+                                       netconfMessage = requestQueue.element();
+                                       requestQueue.remove(requestQueue.element());
+                               }
+                               if (netconfMessage != null) {
+                                       log.info("Message received in queue is taken for processing.");
+                                       break;
+                               }
+                               requestQueue.wait();
+                       }
+               }
+               return netconfMessage;
+       }
+       
+       //add message into the queue
+       public void addToQueue(NetconfMessage netconfMessage) {
+               synchronized (requestQueue) {
+                       log.info("Received a new message in queue.");
+                       requestQueue.add(netconfMessage);
+                       requestQueue.notifyAll();
+               }
+       }
+
+}
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/RCAPoCModel@2017-04-27.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/RCAPoCModel@2017-04-27.yang
new file mode 100644 (file)
index 0000000..380f42d
--- /dev/null
@@ -0,0 +1,69 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module RCAPoCModel {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:oripWnc";
+    prefix "RCAPoCModel";
+
+
+
+    description "simulation of cellConfig iFLB PoC and sleeping eNodeB PoC. This
+        model represents a reduced view of /// EnodeB MOC's needed for
+        boths sleeping eNodeB PoC and iFLB PoC. Note. This model is not
+        a direct mapping from /// ECIM for ///-eNodeB. The mapping is
+        done by the smart adapter (SA).";
+
+    revision "2017-04-27" {
+        description "Initial revision of oripWnc model";
+    }
+
+
+       container MME {
+               description "MME managed element..";
+               leaf managedElementId {
+                       description "The MME Managed Element ID";
+                       type string;
+                       config true;
+               }
+
+               list SnmpTargetsV2C {
+                       key "snmpTargetV2CId";
+                       leaf snmpTargetV2CId {
+                               type string;
+                       }
+                       uses SnmpTargetV2C;
+               }
+
+       }
+       
+               
+       grouping SnmpTargetV2C {
+               description "SnmpTargetV2C";
+               leaf community {
+                   config true;
+                       description "SNMP community string.";
+                       type string;
+               }
+               leaf address {
+                   config true;
+                       description "Host address (or DNS name) for the SNMP Trap target.";
+                       type string;
+               }
+               leaf port {
+                   config true;
+                       description "UDP port number for this SNMP trap target.";
+                       type string;
+               }
+               leaf operationalState {
+                   config false;
+                       description "The operational status of this SNMP target.";
+                       type string;
+               }
+               leaf administrativeState {
+                   config true;
+                       description "Administrative state for the SNMP target. When LOCKED, for this MO instance traps will not be sent and access is not allowed.";
+                       type string;
+               }
+       }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/RCAPoCModel@2017-04-27.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/RCAPoCModel@2017-04-27.yin
new file mode 100644 (file)
index 0000000..853565e
--- /dev/null
@@ -0,0 +1,82 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"><?xml version="1.0" encoding="UTF-8"?>
+<module name="RCAPoCModel"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:RCAPoCModel="urn:opendaylight:params:xml:ns:yang:oripWnc">
+  <yang-version value="1"/>
+  <namespace uri="urn:opendaylight:params:xml:ns:yang:oripWnc"/>
+  <prefix value="RCAPoCModel"/>
+  <description>
+    <text>simulation of cellConfig iFLB PoC and sleeping eNodeB PoC. This
+model represents a reduced view of /// EnodeB MOC's needed for
+boths sleeping eNodeB PoC and iFLB PoC. Note. This model is not
+a direct mapping from /// ECIM for ///-eNodeB. The mapping is
+done by the smart adapter (SA).</text>
+  </description>
+  <revision date="2017-04-27">
+    <description>
+      <text>Initial revision of oripWnc model</text>
+    </description>
+  </revision>
+  <container name="MME">
+    <description>
+      <text>MME managed element..</text>
+    </description>
+    <leaf name="managedElementId">
+      <description>
+        <text>The MME Managed Element ID</text>
+      </description>
+      <type name="string"/>
+      <config value="true"/>
+    </leaf>
+    <list name="SnmpTargetsV2C">
+      <key value="snmpTargetV2CId"/>
+      <leaf name="snmpTargetV2CId">
+        <type name="string"/>
+      </leaf>
+      <uses name="SnmpTargetV2C"/>
+    </list>
+  </container>
+  <grouping name="SnmpTargetV2C">
+    <description>
+      <text>SnmpTargetV2C</text>
+    </description>
+    <leaf name="community">
+      <config value="true"/>
+      <description>
+        <text>SNMP community string.</text>
+      </description>
+      <type name="string"/>
+    </leaf>
+    <leaf name="address">
+      <config value="true"/>
+      <description>
+        <text>Host address (or DNS name) for the SNMP Trap target.</text>
+      </description>
+      <type name="string"/>
+    </leaf>
+    <leaf name="port">
+      <config value="true"/>
+      <description>
+        <text>UDP port number for this SNMP trap target.</text>
+      </description>
+      <type name="string"/>
+    </leaf>
+    <leaf name="operationalState">
+      <config value="false"/>
+      <description>
+        <text>The operational status of this SNMP target.</text>
+      </description>
+      <type name="string"/>
+    </leaf>
+    <leaf name="administrativeState">
+      <config value="true"/>
+      <description>
+        <text>Administrative state for the SNMP target. When LOCKED, for this MO instance traps will not be sent and access is not allowed.</text>
+      </description>
+      <type name="string"/>
+    </leaf>
+  </grouping>
+</module>
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/acme-system@2007-06-09.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/acme-system@2007-06-09.yang
new file mode 100644 (file)
index 0000000..fb3f17f
--- /dev/null
@@ -0,0 +1,53 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+module acme-system {
+    namespace "http://acme.example.com/system";
+    prefix "acme";
+    
+    organization "ACME Inc.";
+    contact "joe@acme.example.com";
+    
+    description
+        "The module for entities implementing the ACME system.";
+
+    revision 2007-06-09 {
+        description "Initial revision.";
+    }
+    
+    container system {
+        leaf host-name {
+            type string;
+            description "Hostname for this system";
+        }
+    
+        leaf-list domain-search {
+            type string;
+            description "List of domain names to search";
+        }
+    
+        container login {
+            leaf message {
+                type string;
+                description
+                    "Message given at start of login session";
+            }
+    
+            list user {
+                key "name";
+                leaf name {
+                    type string;
+                }
+    
+                leaf full-name {
+                    type string;
+                }
+                
+                leaf class {
+                    type string;
+                }
+            }
+        }
+    }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/acme-system@2007-06-09.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/acme-system@2007-06-09.yin
new file mode 100644 (file)
index 0000000..a3235b8
--- /dev/null
@@ -0,0 +1,57 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"><module name="acme-system"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:acme="http://acme.example.com/system">
+  <namespace uri="http://acme.example.com/system"/>
+  <prefix value="acme"/>
+  <organization>
+    <text>ACME Inc.</text>
+  </organization>
+  <contact>
+    <text>joe@acme.example.com</text>
+  </contact>
+  <description>
+    <text>The module for entities implementing the ACME system.</text>
+  </description>
+  <revision date="2007-06-09">
+    <description>
+      <text>Initial revision.</text>
+    </description>
+  </revision>
+  <container name="system">
+    <leaf name="host-name">
+      <type name="string"/>
+      <description>
+        <text>Hostname for this system</text>
+      </description>
+    </leaf>
+    <leaf-list name="domain-search">
+      <type name="string"/>
+      <description>
+        <text>List of domain names to search</text>
+      </description>
+    </leaf-list>
+    <container name="login">
+      <leaf name="message">
+        <type name="string"/>
+        <description>
+          <text>Message given at start of login session</text>
+        </description>
+      </leaf>
+      <list name="user">
+        <key value="name"/>
+        <leaf name="name">
+          <type name="string"/>
+        </leaf>
+        <leaf name="full-name">
+          <type name="string"/>
+        </leaf>
+        <leaf name="class">
+          <type name="string"/>
+        </leaf>
+      </list>
+    </container>
+  </container>
+</module>
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/afr-machine@2013-12-27.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/afr-machine@2013-12-27.yang
new file mode 100644 (file)
index 0000000..2a5a94f
--- /dev/null
@@ -0,0 +1,267 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module turing-machine {
+  namespace "http://example.net/turing-machine";
+  prefix tm;
+
+  description
+    "Data model for the Turing Machine.";
+
+  revision 2013-12-27 {
+    description
+      "Initial revision.";
+  }
+
+  typedef tape-symbol {
+    type string {
+      length "0..1";
+    }
+    description
+      "Type of symbols appearing in tape cells.
+
+       A blank is represented as an empty string where necessary.";
+  }
+
+  typedef cell-index {
+    type int64;
+    description
+      "Type for indexing tape cells.";
+  }
+
+  typedef state-index {
+    type uint16;
+    description
+      "Type for indexing states of the control unit.";
+  }
+
+  typedef head-dir {
+    type enumeration {
+      enum "left";
+      enum "right";
+    }
+    default "right";
+    description
+      "Possible directions for moving the read/write head, one cell
+       to the left or right (default).";
+  }
+
+  grouping tape-cells {
+    description
+      "The tape of the Turing Machine is represented as a sparse
+       array.";
+    list cell {
+      key "coord";
+      description
+        "List of non-blank cells.";
+      leaf coord {
+        type cell-index;
+        description
+          "Coordinate (index) of the tape cell.";
+      }
+
+      leaf symbol {
+        type tape-symbol {
+          length "1";
+        }
+        description
+          "Symbol appearing in the tape cell.
+
+           Blank (empty string) is not allowed here because the
+           'cell' list only contains non-blank cells.";
+      }
+    }
+  }
+
+  container turing-machine {
+    description
+      "State data and configuration of a Turing Machine.";
+    leaf state {
+      type state-index;
+      config false;
+      mandatory true;
+      description
+        "Current state of the control unit.
+
+         The initial state is 0.";
+    }
+
+    leaf head-position {
+      type cell-index;
+      config false;
+      mandatory true;
+      description
+        "Position of tape read/write head.";
+    }
+
+    container tape {
+      config false;
+      description
+        "The contents of the tape.";
+      uses tape-cells;
+    }
+
+    container transition-function {
+      description
+        "The Turing Machine is configured by specifying the
+         transition function.";
+      list delta {
+        key "label";
+        unique "input/state input/symbol";
+        description
+          "The list of transition rules.";
+        leaf label {
+          type string;
+          description
+            "An arbitrary label of the transition rule.";
+        }
+
+        container input {
+          description
+            "Input parameters (arguments) of the transition rule.";
+          leaf state {
+            type state-index;
+            mandatory true;
+            description
+              "Current state of the control unit.";
+          }
+
+          leaf symbol {
+            type tape-symbol;
+            mandatory true;
+            description
+              "Symbol read from the tape cell.";
+          }
+        }
+
+        container output {
+          description
+            "Output values of the transition rule.";
+          leaf state {
+            type state-index;
+            description
+              "New state of the control unit. If this leaf is not
+               present, the state doesn't change.";
+          }
+
+          leaf symbol {
+            type tape-symbol;
+            description
+              "Symbol to be written to the tape cell. If this leaf is
+               not present, the symbol doesn't change.";
+          }
+
+          leaf head-move {
+            type head-dir;
+            description
+              "Move the head one cell to the left or right";
+          }
+        }
+      }
+    }
+  }
+
+  rpc initialize {
+    description
+      "Initialize the Turing Machine as follows:
+
+       1. Put the control unit into the initial state (0).
+
+       2. Move the read/write head to the tape cell with coordinate
+          zero.
+
+       3. Write the string from the 'tape-content' input parameter to
+          the tape, character by character, starting at cell 0. The
+          tape is othewise empty.";
+    input {
+      leaf tape-content {
+        type string;
+        default "";
+        description
+          "The string with which the tape shall be initialized. The
+           leftmost symbol will be at tape coordinate 0.";
+      }
+    }
+  }
+
+  rpc run {
+    description
+      "Start the Turing Machine operation.";
+  }
+
+  rpc run-until {
+    description
+      "Start the Turing Machine operation and let it run until it is halted
+       or ALL the defined breakpoint conditions are satisfied.";
+    input {
+      leaf state {
+        type state-index;
+        description
+          "What state the control unit has to be at for the execution to be paused.";
+      }
+
+      leaf head-position {
+        type cell-index;
+        description
+          "Position of tape read/write head for which the breakpoint applies.";
+      }
+
+      container tape {
+        description
+          "What content the tape has to have for the breakpoint to apply.";
+        uses tape-cells;
+      }
+    }
+
+    output {
+      leaf step-count {
+        type uint64;
+        description
+          "The number of steps executed since the last 'run-until' call.";
+      }
+
+      leaf halted {
+        type boolean;
+        description
+          "'True' if the Turing machine is halted, 'false' if it is only paused.";
+      }
+    }
+  }
+
+  notification halted {
+    description
+      "The Turing Machine has halted. This means that there is no
+       transition rule for the current state and tape symbol.";
+    leaf state {
+      type state-index;
+      mandatory true;
+      description
+        "The state of the control unit in which the machine has
+         halted.";
+    }
+  }
+
+  notification paused {
+    description
+      "The Turing machine has reached a breakpoint and was paused.";
+    leaf state {
+      type state-index;
+      mandatory true;
+      description
+        "State of the control unit in which the machine was paused.";
+    }
+
+    leaf head-position {
+      type cell-index;
+      mandatory true;
+      description
+        "Position of tape read/write head when the machine was paused.";
+    }
+
+    container tape {
+      description
+        "Content of the tape when the machine was paused.";
+      uses tape-cells;
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/afr-machine@2013-12-27.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/afr-machine@2013-12-27.yin
new file mode 100644 (file)
index 0000000..7654999
--- /dev/null
@@ -0,0 +1,281 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="turing-machine"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:tm="http://example.net/turing-machine"&gt;
+  &lt;namespace uri="http://example.net/turing-machine"/&gt;
+  &lt;prefix value="tm"/&gt;
+  &lt;description&gt;
+    &lt;text&gt;Data model for the Turing Machine.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2013-12-27"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="tape-symbol"&gt;
+    &lt;type name="string"&gt;
+      &lt;length value="0..1"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Type of symbols appearing in tape cells.
+
+A blank is represented as an empty string where necessary.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="cell-index"&gt;
+    &lt;type name="int64"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Type for indexing tape cells.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="state-index"&gt;
+    &lt;type name="uint16"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Type for indexing states of the control unit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="head-dir"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="left"/&gt;
+      &lt;enum name="right"/&gt;
+    &lt;/type&gt;
+    &lt;default value="right"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Possible directions for moving the read/write head, one cell
+to the left or right (default).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;grouping name="tape-cells"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The tape of the Turing Machine is represented as a sparse
+array.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;list name="cell"&gt;
+      &lt;key value="coord"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of non-blank cells.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="coord"&gt;
+        &lt;type name="cell-index"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Coordinate (index) of the tape cell.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="symbol"&gt;
+        &lt;type name="tape-symbol"&gt;
+          &lt;length value="1"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;Symbol appearing in the tape cell.
+
+Blank (empty string) is not allowed here because the
+'cell' list only contains non-blank cells.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/list&gt;
+  &lt;/grouping&gt;
+  &lt;container name="turing-machine"&gt;
+    &lt;description&gt;
+      &lt;text&gt;State data and configuration of a Turing Machine.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="state"&gt;
+      &lt;type name="state-index"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Current state of the control unit.
+
+The initial state is 0.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="head-position"&gt;
+      &lt;type name="cell-index"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Position of tape read/write head.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;container name="tape"&gt;
+      &lt;config value="false"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The contents of the tape.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;uses name="tape-cells"/&gt;
+    &lt;/container&gt;
+    &lt;container name="transition-function"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The Turing Machine is configured by specifying the
+transition function.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="delta"&gt;
+        &lt;key value="label"/&gt;
+        &lt;unique tag="input/state input/symbol"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of transition rules.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="label"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary label of the transition rule.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;container name="input"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Input parameters (arguments) of the transition rule.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="state"&gt;
+            &lt;type name="state-index"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Current state of the control unit.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="symbol"&gt;
+            &lt;type name="tape-symbol"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Symbol read from the tape cell.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/container&gt;
+        &lt;container name="output"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Output values of the transition rule.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="state"&gt;
+            &lt;type name="state-index"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;New state of the control unit. If this leaf is not
+present, the state doesn't change.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="symbol"&gt;
+            &lt;type name="tape-symbol"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Symbol to be written to the tape cell. If this leaf is
+not present, the symbol doesn't change.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="head-move"&gt;
+            &lt;type name="head-dir"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Move the head one cell to the left or right&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/container&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;rpc name="initialize"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initialize the Turing Machine as follows:
+
+1. Put the control unit into the initial state (0).
+
+2. Move the read/write head to the tape cell with coordinate
+   zero.
+
+3. Write the string from the 'tape-content' input parameter to
+   the tape, character by character, starting at cell 0. The
+   tape is othewise empty.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="tape-content"&gt;
+        &lt;type name="string"/&gt;
+        &lt;default value=""/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The string with which the tape shall be initialized. The
+leftmost symbol will be at tape coordinate 0.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="run"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Start the Turing Machine operation.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="run-until"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Start the Turing Machine operation and let it run until it is halted
+or ALL the defined breakpoint conditions are satisfied.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="state"&gt;
+        &lt;type name="state-index"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;What state the control unit has to be at for the execution to be paused.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="head-position"&gt;
+        &lt;type name="cell-index"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Position of tape read/write head for which the breakpoint applies.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;container name="tape"&gt;
+        &lt;description&gt;
+          &lt;text&gt;What content the tape has to have for the breakpoint to apply.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;uses name="tape-cells"/&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+    &lt;output&gt;
+      &lt;leaf name="step-count"&gt;
+        &lt;type name="uint64"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The number of steps executed since the last 'run-until' call.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="halted"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;'True' if the Turing machine is halted, 'false' if it is only paused.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/output&gt;
+  &lt;/rpc&gt;
+  &lt;notification name="halted"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The Turing Machine has halted. This means that there is no
+transition rule for the current state and tape symbol.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="state"&gt;
+      &lt;type name="state-index"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The state of the control unit in which the machine has
+halted.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/notification&gt;
+  &lt;notification name="paused"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The Turing machine has reached a breakpoint and was paused.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="state"&gt;
+      &lt;type name="state-index"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;State of the control unit in which the machine was paused.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="head-position"&gt;
+      &lt;type name="cell-index"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Position of tape read/write head when the machine was paused.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;container name="tape"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Content of the tape when the machine was paused.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;uses name="tape-cells"/&gt;
+    &lt;/container&gt;
+  &lt;/notification&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/response.groovy
new file mode 100644 (file)
index 0000000..5f0348c
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "close session!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/close-session/NA/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/response.groovy
new file mode 100644 (file)
index 0000000..1dfa965
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+println "commit!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/commit/NA/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/response.groovy
new file mode 100644 (file)
index 0000000..58135dd
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "discard changes!"
+return "ignore";
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/discard-changes/NA/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config-schema.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config-schema.yang
new file mode 100644 (file)
index 0000000..fbcc373
--- /dev/null
@@ -0,0 +1,40 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="<MID>">
+  <data xmlns="http://example.net/edit-config-method/1.0">
+       rpc edit-config {
+         description
+           "The &lt;edit-config&gt; operation can be used to update the target name and target address.
+               container target {
+        description
+          "Particular configuration to edit.";
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+
+          leaf running {
+            if-feature "writable-running";
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+        }
+      }
+               container config {
+             leaf target-name {
+                 type string;
+                 description "name of the target";
+             }
+                         leaf target-address {
+                 type string;
+                 description "address of the target";
+             }
+         }
+       }
+       </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/response.groovy
new file mode 100644 (file)
index 0000000..7441021
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+import com.ericsson.testvnf.server.models.RpcData;
+import java.util.concurrent.TimeUnit;
+import groovy.sql.Sql
+import groovy.util.XmlParser
+import java.util.logging.Logger;
+Logger logger = Logger.getLogger("")
+println "edit config - candidate!"
+def RpcData data = binding.getVariable("RpcData")
+result = "ignore"
+try{
+       def operationsData = new XmlParser().parseText(data.getOperationTagContent())
+       println "operations data::::" + operationsData
+       
+       def targetName
+       def targetAddress
+       
+       if (!operationsData.config.'target-name'.isEmpty()){
+               targetName = operationsData.config.'target-name'.text()
+               println "target-name ::::" + operationsData.config.'target-name'.text()
+       } else{
+               logger.info("targetName not found");
+               println("targetName not found")
+       }
+       if (!operationsData.config.'target-address'.isEmpty()){
+               targetAddress = operationsData.config.'target-address'.text()
+               println "target-address ::::" + operationsData.config.'target-address'.text()
+       } else{
+               logger.info("targetAddress not found");
+               println ("targetAddress not found");
+       }
+
+       def db = [url: "jdbc:mariadb://localhost:3306/netconf_db?useSSL=false",
+                 user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+//     def db = [url: "jdbc:mariadb://mariadb:3306/netconf_db?useSSL=false",
+//               user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+       def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
+       println "DB connection ready"
+       logger.info("DB connection ready")
+       if (targetName != null && targetAddress != null){
+               def metadata = sql.connection.getMetaData()
+               def tables = metadata.getTables(null, null, "AddressTable", null)
+               if (!tables.next()) {
+                       logger.info("table not found");
+                       println "table not found"
+                       sql.execute("CREATE TABLE AddressTable (Name varchar(255), HTTPAddress varchar(255), PRIMARY KEY (Name))")
+               }
+               def query = "INSERT INTO AddressTable (NAME, HTTPAddress) VALUES(\""+targetName+"\",\""+targetAddress+"\") ON DUPLICATE KEY UPDATE Name=\""+targetName+"\", HTTPAddress=\""+targetAddress+"\""
+               println "query" + query
+               logger.info(query)
+               sql.execute(query)
+               result = "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>"
+       }else{
+        result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">edit-conf failed. Target name or address not found in request.</error-message></rpc-error></rpc-reply>"
+       }
+}
+catch (Exception e)
+{
+ e.printStackTrace();
+ result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">edit-conf failed</error-message></rpc-error></rpc-reply>"
+}
+
+
+return result;
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/candidate/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/response.groovy
new file mode 100644 (file)
index 0000000..ae8d3db
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+import com.ericsson.testvnf.server.models.RpcData;
+import java.util.concurrent.TimeUnit;
+import groovy.sql.Sql
+import groovy.util.XmlParser
+import java.util.logging.Logger;
+Logger logger = Logger.getLogger("")
+println "edit config - running!"
+def RpcData data = binding.getVariable("RpcData")
+result = "ignore"
+try{
+       def operationsData = new XmlParser().parseText(data.getOperationTagContent())
+       println "operations data::::" + operationsData
+       
+       def targetName
+       def targetAddress
+       
+       if (!operationsData.config.'target-name'.isEmpty()){
+               targetName = operationsData.config.'target-name'.text()
+               println "target-name ::::" + operationsData.config.'target-name'.text()
+       } else{
+               logger.info("targetName not found");
+               println("targetName not found")
+       }
+       if (!operationsData.config.'target-address'.isEmpty()){
+               targetAddress = operationsData.config.'target-address'.text()
+               println "target-address ::::" + operationsData.config.'target-address'.text()
+       } else{
+               logger.info("targetAddress not found");
+               println ("targetAddress not found");
+       }
+
+       def db = [url: "jdbc:mariadb://localhost:3306/netconf_db?useSSL=false",
+                 user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+//     def db = [url: "jdbc:mariadb://mariadb:3306/netconf_db?useSSL=false",
+//               user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+       def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
+       println "DB connection ready"
+       logger.info("DB connection ready")
+       if (targetName != null && targetAddress != null){
+               def metadata = sql.connection.getMetaData()
+               def tables = metadata.getTables(null, null, "AddressTable", null)
+               if (!tables.next()) {
+                       logger.info("table not found");
+                       println "table not found"
+                       sql.execute("CREATE TABLE AddressTable (Name varchar(255), HTTPAddress varchar(255), PRIMARY KEY (Name))")
+               }
+               def query = "INSERT INTO AddressTable (NAME, HTTPAddress) VALUES(\""+targetName+"\",\""+targetAddress+"\") ON DUPLICATE KEY UPDATE Name=\""+targetName+"\", HTTPAddress=\""+targetAddress+"\""
+               println "query" + query
+               logger.info(query)
+               sql.execute(query)
+               result = "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>"
+       }else{
+        result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">edit-conf failed. Target name or address not found in request.</error-message></rpc-error></rpc-reply>"
+       }
+
+} 
+catch (Exception e)
+{
+ e.printStackTrace();
+ result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">edit-conf failed</error-message></rpc-error></rpc-reply>"
+}
+
+
+return result;
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/edit-config/running/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response-bak.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response-bak.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response.groovy
new file mode 100644 (file)
index 0000000..cecf177
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "Get-config!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <data><turing-machine xmlns=\"http://example.net/turing-machine\"><transition-function><delta><label>separator</label><output><state>3</state><symbol>0</symbol></output><input><state>0</state><symbol>0</symbol></input></delta></transition-function></turing-machine></data> </rpc-reply>";
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response.xml.bak2 b/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/response.xml.bak2
new file mode 100644 (file)
index 0000000..ea0ba28
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>3</state>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/get-config/running/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..1c6e4d1
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/hello.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/hello.xml
new file mode 100644 (file)
index 0000000..619bc92
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <capabilities>
+    <capability>urn:ietf:params:netconf:base:1.0</capability>
+    <capability>urn:ietf:params:netconf:base:1.1</capability>
+    <capability>urn:ietf:params:netconf:capability:writable-running:1.0</capability>
+    <capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
+    <capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>
+    <capability>urn:ietf:params:netconf:capability:validate:1.1</capability>
+    <capability>urn:ietf:params:netconf:capability:startup:1.0</capability>
+    <capability>urn:ietf:params:netconf:capability:xpath:1.0</capability>
+    <capability>urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&amp;also-supported=report-all,report-all-tagged,trim,explicit</capability>
+    <capability>urn:ietf:params:netconf:capability:notification:1.0</capability>
+    <capability>urn:ietf:params:netconf:capability:interleave:1.0</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&amp;revision=2016-08-05</capability>
+    <capability>urn:ietf:params:xml:ns:yang:1?module=yang&amp;revision=2017-02-20</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;revision=2013-07-15</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;revision=2013-07-15</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-datastores?module=ietf-datastores&amp;revision=2017-08-17</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&amp;revision=2017-08-17&amp;module-set-id=25</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&amp;revision=2012-02-22</capability>
+    <capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;revision=2011-06-01&amp;features=writable-running,candidate,rollback-on-error,validate,startup,xpath</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&amp;revision=2012-02-06</capability>
+    <capability>urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&amp;revision=2008-07-14</capability>
+    <capability>urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&amp;revision=2008-07-14</capability>
+    <capability>http://example.net/turing-machine?module=turing-machine&amp;revision=2013-12-27</capability>
+    <capability>urn:opendaylight:params:xml:ns:yang:oripWnc?module=RCAPoCModel&amp;revision=2017-04-27</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-interfaces?module=ietf-interfaces&amp;revision=2014-05-08</capability>
+    <capability>urn:ietf:params:xml:ns:yang:iana-if-type?module=iana-if-type&amp;revision=2014-05-08</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-ip?module=ietf-ip&amp;revision=2014-06-16</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&amp;revision=2014-12-10</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-keystore?module=ietf-keystore&amp;revision=2016-10-31</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-ssh-server?module=ietf-ssh-server&amp;revision=2016-11-02</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-tls-server?module=ietf-tls-server&amp;revision=2016-11-02</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-server?module=ietf-netconf-server&amp;revision=2016-11-02&amp;features=listen,ssh-listen,tls-listen,call-home,ssh-call-home,tls-call-home</capability>
+    <capability>urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&amp;revision=2014-08-06</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-system?module=ietf-system&amp;revision=2014-08-06&amp;features=authentication,local-users</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04</capability>
+    <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&amp;revision=2011-06-01</capability>
+    <capability>urn:ietf:params:xml:ns:netconf:capability:send-event:1.0</capability>
+       <capability>urn:ietf:params:xml:ns:netconf:capability:send-models:1.0</capability>
+  </capabilities>
+  <session-id>1</session-id>
+</hello>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/iana-crypt-hash@2014-08-06.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/iana-crypt-hash@2014-08-06.yang
new file mode 100644 (file)
index 0000000..9974bc5
--- /dev/null
@@ -0,0 +1,122 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module iana-crypt-hash {
+  namespace "urn:ietf:params:xml:ns:yang:iana-crypt-hash";
+  prefix ianach;
+
+  organization
+    "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+             12025 Waterfront Drive, Suite 300
+             Los Angeles, CA  90094-2536
+             United States
+
+     Tel:    +1 310 301 5800
+     E-Mail: iana@iana.org&gt;";
+  description
+    "This YANG module defines a type for storing passwords
+     using a hash function and features to indicate which hash
+     functions are supported by an implementation.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana@iana.org).
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     The initial version of this YANG module is part of RFC 7317;
+     see the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+  feature crypt-hash-md5 {
+    description
+      "Indicates that the device supports the MD5
+       hash function in 'crypt-hash' values.";
+    reference
+      "RFC 1321: The MD5 Message-Digest Algorithm";
+  }
+
+  feature crypt-hash-sha-256 {
+    description
+      "Indicates that the device supports the SHA-256
+       hash function in 'crypt-hash' values.";
+    reference
+      "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  feature crypt-hash-sha-512 {
+    description
+      "Indicates that the device supports the SHA-512
+       hash function in 'crypt-hash' values.";
+    reference
+      "FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+
+  typedef crypt-hash {
+    type string {
+      pattern "$0$.*|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}|$5$(rounds=\\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}|$6$(rounds=\\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}";
+    }
+    description
+      "The crypt-hash type is used to store passwords using
+       a hash function.  The algorithms for applying the hash
+       function and encoding the result are implemented in
+       various UNIX systems as the function crypt(3).
+
+       A value of this type matches one of the forms:
+
+         $0$&lt;clear text password&gt;
+         $&lt;id&gt;$&lt;salt&gt;$&lt;password hash&gt;
+         $&lt;id&gt;$&lt;parameter&gt;$&lt;salt&gt;$&lt;password hash&gt;
+
+       The '$0$' prefix signals that the value is clear text.  When
+       such a value is received by the server, a hash value is
+       calculated, and the string '$&lt;id&gt;$&lt;salt&gt;$' or
+       $&lt;id&gt;$&lt;parameter&gt;$&lt;salt&gt;$ is prepended to the result.  This
+       value is stored in the configuration data store.
+       If a value starting with '$&lt;id&gt;$', where &lt;id&gt; is not '0', is
+       received, the server knows that the value already represents a
+       hashed value and stores it 'as is' in the data store.
+
+       When a server needs to verify a password given by a user, it
+       finds the stored password hash string for that user, extracts
+       the salt, and calculates the hash with the salt and given
+       password as input.  If the calculated hash value is the same
+       as the stored value, the password given by the client is
+       accepted.
+
+       This type defines the following hash functions:
+
+         id | hash function | feature
+         ---+---------------+-------------------
+          1 | MD5           | crypt-hash-md5
+          5 | SHA-256       | crypt-hash-sha-256
+          6 | SHA-512       | crypt-hash-sha-512
+
+       The server indicates support for the different hash functions
+       by advertising the corresponding feature.";
+    reference
+      "IEEE Std 1003.1-2008 - crypt() function
+       RFC 1321: The MD5 Message-Digest Algorithm
+       FIPS.180-4.2012: Secure Hash Standard (SHS)";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/iana-crypt-hash@2014-08-06.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/iana-crypt-hash@2014-08-06.yin
new file mode 100644 (file)
index 0000000..d37aac1
--- /dev/null
@@ -0,0 +1,132 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="iana-crypt-hash"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ianach="urn:ietf:params:xml:ns:yang:iana-crypt-hash"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:iana-crypt-hash"/&gt;
+  &lt;prefix value="ianach"/&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IANA&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;        Internet Assigned Numbers Authority
+
+Postal: ICANN
+        12025 Waterfront Drive, Suite 300
+        Los Angeles, CA  90094-2536
+        United States
+
+Tel:    +1 310 301 5800
+E-Mail: iana@iana.org&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This YANG module defines a type for storing passwords
+using a hash function and features to indicate which hash
+functions are supported by an implementation.
+
+The latest revision of this YANG module can be obtained from
+the IANA web site.
+
+Requests for new values should be made to IANA via
+email (iana@iana.org).
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+The initial version of this YANG module is part of RFC 7317;
+see the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2014-08-06"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7317: A YANG Data Model for System Management&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;feature name="crypt-hash-md5"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports the MD5
+hash function in 'crypt-hash' values.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1321: The MD5 Message-Digest Algorithm&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="crypt-hash-sha-256"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports the SHA-256
+hash function in 'crypt-hash' values.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;FIPS.180-4.2012: Secure Hash Standard (SHS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="crypt-hash-sha-512"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports the SHA-512
+hash function in 'crypt-hash' values.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;FIPS.180-4.2012: Secure Hash Standard (SHS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;typedef name="crypt-hash"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="$0$.*|$1$[a-zA-Z0-9./]{1,8}$[a-zA-Z0-9./]{22}|$5$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{43}|$6$(rounds=\d+$)?[a-zA-Z0-9./]{1,16}$[a-zA-Z0-9./]{86}"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The crypt-hash type is used to store passwords using
+a hash function.  The algorithms for applying the hash
+function and encoding the result are implemented in
+various UNIX systems as the function crypt(3).
+
+A value of this type matches one of the forms:
+
+  $0$&amp;lt;clear text password&amp;gt;
+  $&amp;lt;id&amp;gt;$&amp;lt;salt&amp;gt;$&amp;lt;password hash&amp;gt;
+  $&amp;lt;id&amp;gt;$&amp;lt;parameter&amp;gt;$&amp;lt;salt&amp;gt;$&amp;lt;password hash&amp;gt;
+
+The '$0$' prefix signals that the value is clear text.  When
+such a value is received by the server, a hash value is
+calculated, and the string '$&amp;lt;id&amp;gt;$&amp;lt;salt&amp;gt;$' or
+$&amp;lt;id&amp;gt;$&amp;lt;parameter&amp;gt;$&amp;lt;salt&amp;gt;$ is prepended to the result.  This
+value is stored in the configuration data store.
+If a value starting with '$&amp;lt;id&amp;gt;$', where &amp;lt;id&amp;gt; is not '0', is
+received, the server knows that the value already represents a
+hashed value and stores it 'as is' in the data store.
+
+When a server needs to verify a password given by a user, it
+finds the stored password hash string for that user, extracts
+the salt, and calculates the hash with the salt and given
+password as input.  If the calculated hash value is the same
+as the stored value, the password given by the client is
+accepted.
+
+This type defines the following hash functions:
+
+  id | hash function | feature
+  ---+---------------+-------------------
+   1 | MD5           | crypt-hash-md5
+   5 | SHA-256       | crypt-hash-sha-256
+   6 | SHA-512       | crypt-hash-sha-512
+
+The server indicates support for the different hash functions
+by advertising the corresponding feature.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;IEEE Std 1003.1-2008 - crypt() function
+RFC 1321: The MD5 Message-Digest Algorithm
+FIPS.180-4.2012: Secure Hash Standard (SHS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/iana-if-type@2014-05-08.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/iana-if-type@2014-05-08.yang
new file mode 100644 (file)
index 0000000..9165ae9
--- /dev/null
@@ -0,0 +1,1783 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module iana-if-type {
+  yang-version 1;
+  namespace "urn:ietf:params:xml:ns:yang:iana-if-type";
+  prefix ianaift;
+
+  import ietf-interfaces {
+    prefix if;
+  }
+
+  organization
+    "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+           4676 Admiralty Way, Suite 330
+           Marina del Rey, CA 90292
+
+     Tel:    +1 310 823 9358
+     &lt;mailto:iana@iana.org&gt;";
+  description
+    "This YANG module defines YANG identities for IANA-registered
+     interface types.
+
+     This YANG module is maintained by IANA and reflects the
+     'ifType definitions' registry.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana@iana.org).
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     The initial version of this YANG module is part of RFC 7224;
+     see the RFC itself for full legal notices.";
+  reference
+    "IANA 'ifType definitions' registry.
+     &lt;http://www.iana.org/assignments/smi-numbers&gt;";
+
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7224: IANA Interface Type YANG Module";
+  }
+
+  identity iana-interface-type {
+    base if:interface-type;
+    description
+      "This identity is used as a base for all interface types
+       defined in the 'ifType definitions' registry.";
+  }
+
+  identity other {
+    base iana-interface-type;
+  }
+
+  identity regular1822 {
+    base iana-interface-type;
+  }
+
+  identity hdh1822 {
+    base iana-interface-type;
+  }
+
+  identity ddnX25 {
+    base iana-interface-type;
+  }
+
+  identity rfc877x25 {
+    base iana-interface-type;
+    reference
+      "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer";
+  }
+
+  identity ethernetCsmacd {
+    base iana-interface-type;
+    description
+      "For all Ethernet-like interfaces, regardless of speed,
+       as per RFC 3635.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+             Ethernet-like Interface Types";
+  }
+
+  identity iso88023Csmacd {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Deprecated via RFC 3635.
+       Use ethernetCsmacd(6) instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+             Ethernet-like Interface Types";
+  }
+
+  identity iso88024TokenBus {
+    base iana-interface-type;
+  }
+
+  identity iso88025TokenRing {
+    base iana-interface-type;
+  }
+
+  identity iso88026Man {
+    base iana-interface-type;
+  }
+
+  identity starLan {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Deprecated via RFC 3635.
+       Use ethernetCsmacd(6) instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+             Ethernet-like Interface Types";
+  }
+
+  identity proteon10Mbit {
+    base iana-interface-type;
+  }
+
+  identity proteon80Mbit {
+    base iana-interface-type;
+  }
+
+  identity hyperchannel {
+    base iana-interface-type;
+  }
+
+  identity fddi {
+    base iana-interface-type;
+    reference
+      "RFC 1512 - FDDI Management Information Base";
+  }
+
+  identity lapb {
+    base iana-interface-type;
+    reference
+      "RFC 1381 - SNMP MIB Extension for X.25 LAPB";
+  }
+
+  identity sdlc {
+    base iana-interface-type;
+  }
+
+  identity ds1 {
+    base iana-interface-type;
+    description
+      "DS1-MIB.";
+    reference
+      "RFC 4805 - Definitions of Managed Objects for the
+             DS1, J1, E1, DS2, and E2 Interface Types";
+  }
+
+  identity e1 {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; see DS1-MIB.";
+    reference
+      "RFC 4805 - Definitions of Managed Objects for the
+             DS1, J1, E1, DS2, and E2 Interface Types";
+  }
+
+  identity basicISDN {
+    base iana-interface-type;
+    description
+      "No longer used.  See also RFC 2127.";
+  }
+
+  identity primaryISDN {
+    base iana-interface-type;
+    description
+      "No longer used.  See also RFC 2127.";
+  }
+
+  identity propPointToPointSerial {
+    base iana-interface-type;
+    description
+      "Proprietary serial.";
+  }
+
+  identity ppp {
+    base iana-interface-type;
+  }
+
+  identity softwareLoopback {
+    base iana-interface-type;
+  }
+
+  identity eon {
+    base iana-interface-type;
+    description
+      "CLNP over IP.";
+  }
+
+  identity ethernet3Mbit {
+    base iana-interface-type;
+  }
+
+  identity nsip {
+    base iana-interface-type;
+    description
+      "XNS over IP.";
+  }
+
+  identity slip {
+    base iana-interface-type;
+    description
+      "Generic SLIP.";
+  }
+
+  identity ultra {
+    base iana-interface-type;
+    description
+      "Ultra Technologies.";
+  }
+
+  identity ds3 {
+    base iana-interface-type;
+    description
+      "DS3-MIB.";
+    reference
+      "RFC 3896 - Definitions of Managed Objects for the
+             DS3/E3 Interface Type";
+  }
+
+  identity sip {
+    base iana-interface-type;
+    description
+      "SMDS, coffee.";
+    reference
+      "RFC 1694 - Definitions of Managed Objects for SMDS
+             Interfaces using SMIv2";
+  }
+
+  identity frameRelay {
+    base iana-interface-type;
+    description
+      "DTE only.";
+    reference
+      "RFC 2115 - Management Information Base for Frame Relay
+             DTEs Using SMIv2";
+  }
+
+  identity rs232 {
+    base iana-interface-type;
+    reference
+      "RFC 1659 - Definitions of Managed Objects for RS-232-like
+             Hardware Devices using SMIv2";
+  }
+
+  identity para {
+    base iana-interface-type;
+    description
+      "Parallel-port.";
+    reference
+      "RFC 1660 - Definitions of Managed Objects for
+             Parallel-printer-like Hardware Devices using
+             SMIv2";
+  }
+
+  identity arcnet {
+    base iana-interface-type;
+    description
+      "ARCnet.";
+  }
+
+  identity arcnetPlus {
+    base iana-interface-type;
+    description
+      "ARCnet Plus.";
+  }
+
+  identity atm {
+    base iana-interface-type;
+    description
+      "ATM cells.";
+  }
+
+  identity miox25 {
+    base iana-interface-type;
+    reference
+      "RFC 1461 - SNMP MIB extension for Multiprotocol
+             Interconnect over X.25";
+  }
+
+  identity sonet {
+    base iana-interface-type;
+    description
+      "SONET or SDH.";
+  }
+
+  identity x25ple {
+    base iana-interface-type;
+    reference
+      "RFC 2127 - ISDN Management Information Base using SMIv2";
+  }
+
+  identity iso88022llc {
+    base iana-interface-type;
+  }
+
+  identity localTalk {
+    base iana-interface-type;
+  }
+
+  identity smdsDxi {
+    base iana-interface-type;
+  }
+
+  identity frameRelayService {
+    base iana-interface-type;
+    description
+      "FRNETSERV-MIB.";
+    reference
+      "RFC 2954 - Definitions of Managed Objects for Frame
+             Relay Service";
+  }
+
+  identity v35 {
+    base iana-interface-type;
+  }
+
+  identity hssi {
+    base iana-interface-type;
+  }
+
+  identity hippi {
+    base iana-interface-type;
+  }
+
+  identity modem {
+    base iana-interface-type;
+    description
+      "Generic modem.";
+  }
+
+  identity aal5 {
+    base iana-interface-type;
+    description
+      "AAL5 over ATM.";
+  }
+
+  identity sonetPath {
+    base iana-interface-type;
+  }
+
+  identity sonetVT {
+    base iana-interface-type;
+  }
+
+  identity smdsIcip {
+    base iana-interface-type;
+    description
+      "SMDS InterCarrier Interface.";
+  }
+
+  identity propVirtual {
+    base iana-interface-type;
+    description
+      "Proprietary virtual/internal.";
+    reference
+      "RFC 2863 - The Interfaces Group MIB";
+  }
+
+  identity propMultiplexor {
+    base iana-interface-type;
+    description
+      "Proprietary multiplexing.";
+    reference
+      "RFC 2863 - The Interfaces Group MIB";
+  }
+
+  identity ieee80212 {
+    base iana-interface-type;
+    description
+      "100BaseVG.";
+  }
+
+  identity fibreChannel {
+    base iana-interface-type;
+    description
+      "Fibre Channel.";
+  }
+
+  identity hippiInterface {
+    base iana-interface-type;
+    description
+      "HIPPI interfaces.";
+  }
+
+  identity frameRelayInterconnect {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; use either
+       frameRelay(32) or frameRelayService(44).";
+  }
+
+  identity aflane8023 {
+    base iana-interface-type;
+    description
+      "ATM Emulated LAN for 802.3.";
+  }
+
+  identity aflane8025 {
+    base iana-interface-type;
+    description
+      "ATM Emulated LAN for 802.5.";
+  }
+
+  identity cctEmul {
+    base iana-interface-type;
+    description
+      "ATM Emulated circuit.";
+  }
+
+  identity fastEther {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+             Ethernet-like Interface Types";
+  }
+
+  identity isdn {
+    base iana-interface-type;
+    description
+      "ISDN and X.25.";
+    reference
+      "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
+             in the Packet Mode";
+  }
+
+  identity v11 {
+    base iana-interface-type;
+    description
+      "CCITT V.11/X.21.";
+  }
+
+  identity v36 {
+    base iana-interface-type;
+    description
+      "CCITT V.36.";
+  }
+
+  identity g703at64k {
+    base iana-interface-type;
+    description
+      "CCITT G703 at 64Kbps.";
+  }
+
+  identity g703at2mb {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; see DS1-MIB.";
+  }
+
+  identity qllc {
+    base iana-interface-type;
+    description
+      "SNA QLLC.";
+  }
+
+  identity fastEtherFX {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+             Ethernet-like Interface Types";
+  }
+
+  identity channel {
+    base iana-interface-type;
+    description
+      "Channel.";
+  }
+
+  identity ieee80211 {
+    base iana-interface-type;
+    description
+      "Radio spread spectrum.";
+  }
+
+  identity ibm370parChan {
+    base iana-interface-type;
+    description
+      "IBM System 360/370 OEMI Channel.";
+  }
+
+  identity escon {
+    base iana-interface-type;
+    description
+      "IBM Enterprise Systems Connection.";
+  }
+
+  identity dlsw {
+    base iana-interface-type;
+    description
+      "Data Link Switching.";
+  }
+
+  identity isdns {
+    base iana-interface-type;
+    description
+      "ISDN S/T interface.";
+  }
+
+  identity isdnu {
+    base iana-interface-type;
+    description
+      "ISDN U interface.";
+  }
+
+  identity lapd {
+    base iana-interface-type;
+    description
+      "Link Access Protocol D.";
+  }
+
+  identity ipSwitch {
+    base iana-interface-type;
+    description
+      "IP Switching Objects.";
+  }
+
+  identity rsrb {
+    base iana-interface-type;
+    description
+      "Remote Source Route Bridging.";
+  }
+
+  identity atmLogical {
+    base iana-interface-type;
+    description
+      "ATM Logical Port.";
+    reference
+      "RFC 3606 - Definitions of Supplemental Managed Objects
+             for ATM Interface";
+  }
+
+  identity ds0 {
+    base iana-interface-type;
+    description
+      "Digital Signal Level 0.";
+    reference
+      "RFC 2494 - Definitions of Managed Objects for the DS0
+             and DS0 Bundle Interface Type";
+  }
+
+  identity ds0Bundle {
+    base iana-interface-type;
+    description
+      "Group of ds0s on the same ds1.";
+    reference
+      "RFC 2494 - Definitions of Managed Objects for the DS0
+             and DS0 Bundle Interface Type";
+  }
+
+  identity bsc {
+    base iana-interface-type;
+    description
+      "Bisynchronous Protocol.";
+  }
+
+  identity async {
+    base iana-interface-type;
+    description
+      "Asynchronous Protocol.";
+  }
+
+  identity cnr {
+    base iana-interface-type;
+    description
+      "Combat Net Radio.";
+  }
+
+  identity iso88025Dtr {
+    base iana-interface-type;
+    description
+      "ISO 802.5r DTR.";
+  }
+
+  identity eplrs {
+    base iana-interface-type;
+    description
+      "Ext Pos Loc Report Sys.";
+  }
+
+  identity arap {
+    base iana-interface-type;
+    description
+      "Appletalk Remote Access Protocol.";
+  }
+
+  identity propCnls {
+    base iana-interface-type;
+    description
+      "Proprietary Connectionless Protocol.";
+  }
+
+  identity hostPad {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X.29 PAD Protocol.";
+  }
+
+  identity termPad {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X.3 PAD Facility.";
+  }
+
+  identity frameRelayMPI {
+    base iana-interface-type;
+    description
+      "Multiproto Interconnect over FR.";
+  }
+
+  identity x213 {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X213.";
+  }
+
+  identity adsl {
+    base iana-interface-type;
+    description
+      "Asymmetric Digital Subscriber Loop.";
+  }
+
+  identity radsl {
+    base iana-interface-type;
+    description
+      "Rate-Adapt. Digital Subscriber Loop.";
+  }
+
+  identity sdsl {
+    base iana-interface-type;
+    description
+      "Symmetric Digital Subscriber Loop.";
+  }
+
+  identity vdsl {
+    base iana-interface-type;
+    description
+      "Very H-Speed Digital Subscrib. Loop.";
+  }
+
+  identity iso88025CRFPInt {
+    base iana-interface-type;
+    description
+      "ISO 802.5 CRFP.";
+  }
+
+  identity myrinet {
+    base iana-interface-type;
+    description
+      "Myricom Myrinet.";
+  }
+
+  identity voiceEM {
+    base iana-interface-type;
+    description
+      "Voice recEive and transMit.";
+  }
+
+  identity voiceFXO {
+    base iana-interface-type;
+    description
+      "Voice Foreign Exchange Office.";
+  }
+
+  identity voiceFXS {
+    base iana-interface-type;
+    description
+      "Voice Foreign Exchange Station.";
+  }
+
+  identity voiceEncap {
+    base iana-interface-type;
+    description
+      "Voice encapsulation.";
+  }
+
+  identity voiceOverIp {
+    base iana-interface-type;
+    description
+      "Voice over IP encapsulation.";
+  }
+
+  identity atmDxi {
+    base iana-interface-type;
+    description
+      "ATM DXI.";
+  }
+
+  identity atmFuni {
+    base iana-interface-type;
+    description
+      "ATM FUNI.";
+  }
+
+  identity atmIma {
+    base iana-interface-type;
+    description
+      "ATM IMA.";
+  }
+
+  identity pppMultilinkBundle {
+    base iana-interface-type;
+    description
+      "PPP Multilink Bundle.";
+  }
+
+  identity ipOverCdlc {
+    base iana-interface-type;
+    description
+      "IBM ipOverCdlc.";
+  }
+
+  identity ipOverClaw {
+    base iana-interface-type;
+    description
+      "IBM Common Link Access to Workstn.";
+  }
+
+  identity stackToStack {
+    base iana-interface-type;
+    description
+      "IBM stackToStack.";
+  }
+
+  identity virtualIpAddress {
+    base iana-interface-type;
+    description
+      "IBM VIPA.";
+  }
+
+  identity mpc {
+    base iana-interface-type;
+    description
+      "IBM multi-protocol channel support.";
+  }
+
+  identity ipOverAtm {
+    base iana-interface-type;
+    description
+      "IBM ipOverAtm.";
+    reference
+      "RFC 2320 - Definitions of Managed Objects for Classical IP
+             and ARP Over ATM Using SMIv2 (IPOA-MIB)";
+  }
+
+  identity iso88025Fiber {
+    base iana-interface-type;
+    description
+      "ISO 802.5j Fiber Token Ring.";
+  }
+
+  identity tdlc {
+    base iana-interface-type;
+    description
+      "IBM twinaxial data link control.";
+  }
+
+  identity gigabitEthernet {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+             Ethernet-like Interface Types";
+  }
+
+  identity hdlc {
+    base iana-interface-type;
+    description
+      "HDLC.";
+  }
+
+  identity lapf {
+    base iana-interface-type;
+    description
+      "LAP F.";
+  }
+
+  identity v37 {
+    base iana-interface-type;
+    description
+      "V.37.";
+  }
+
+  identity x25mlp {
+    base iana-interface-type;
+    description
+      "Multi-Link Protocol.";
+  }
+
+  identity x25huntGroup {
+    base iana-interface-type;
+    description
+      "X25 Hunt Group.";
+  }
+
+  identity transpHdlc {
+    base iana-interface-type;
+    description
+      "Transp HDLC.";
+  }
+
+  identity interleave {
+    base iana-interface-type;
+    description
+      "Interleave channel.";
+  }
+
+  identity fast {
+    base iana-interface-type;
+    description
+      "Fast channel.";
+  }
+
+  identity ip {
+    base iana-interface-type;
+    description
+      "IP (for APPN HPR in IP networks).";
+  }
+
+  identity docsCableMaclayer {
+    base iana-interface-type;
+    description
+      "CATV Mac Layer.";
+  }
+
+  identity docsCableDownstream {
+    base iana-interface-type;
+    description
+      "CATV Downstream interface.";
+  }
+
+  identity docsCableUpstream {
+    base iana-interface-type;
+    description
+      "CATV Upstream interface.";
+  }
+
+  identity a12MppSwitch {
+    base iana-interface-type;
+    description
+      "Avalon Parallel Processor.";
+  }
+
+  identity tunnel {
+    base iana-interface-type;
+    description
+      "Encapsulation interface.";
+  }
+
+  identity coffee {
+    base iana-interface-type;
+    description
+      "Coffee pot.";
+    reference
+      "RFC 2325 - Coffee MIB";
+  }
+
+  identity ces {
+    base iana-interface-type;
+    description
+      "Circuit Emulation Service.";
+  }
+
+  identity atmSubInterface {
+    base iana-interface-type;
+    description
+      "ATM Sub Interface.";
+  }
+
+  identity l2vlan {
+    base iana-interface-type;
+    description
+      "Layer 2 Virtual LAN using 802.1Q.";
+  }
+
+  identity l3ipvlan {
+    base iana-interface-type;
+    description
+      "Layer 3 Virtual LAN using IP.";
+  }
+
+  identity l3ipxvlan {
+    base iana-interface-type;
+    description
+      "Layer 3 Virtual LAN using IPX.";
+  }
+
+  identity digitalPowerline {
+    base iana-interface-type;
+    description
+      "IP over Power Lines.";
+  }
+
+  identity mediaMailOverIp {
+    base iana-interface-type;
+    description
+      "Multimedia Mail over IP.";
+  }
+
+  identity dtm {
+    base iana-interface-type;
+    description
+      "Dynamic synchronous Transfer Mode.";
+  }
+
+  identity dcn {
+    base iana-interface-type;
+    description
+      "Data Communications Network.";
+  }
+
+  identity ipForward {
+    base iana-interface-type;
+    description
+      "IP Forwarding Interface.";
+  }
+
+  identity msdsl {
+    base iana-interface-type;
+    description
+      "Multi-rate Symmetric DSL.";
+  }
+
+  identity ieee1394 {
+    base iana-interface-type;
+    description
+      "IEEE1394 High Performance Serial Bus.";
+  }
+
+  identity if-gsn {
+    base iana-interface-type;
+    description
+      "HIPPI-6400.";
+  }
+
+  identity dvbRccMacLayer {
+    base iana-interface-type;
+    description
+      "DVB-RCC MAC Layer.";
+  }
+
+  identity dvbRccDownstream {
+    base iana-interface-type;
+    description
+      "DVB-RCC Downstream Channel.";
+  }
+
+  identity dvbRccUpstream {
+    base iana-interface-type;
+    description
+      "DVB-RCC Upstream Channel.";
+  }
+
+  identity atmVirtual {
+    base iana-interface-type;
+    description
+      "ATM Virtual Interface.";
+  }
+
+  identity mplsTunnel {
+    base iana-interface-type;
+    description
+      "MPLS Tunnel Virtual Interface.";
+  }
+
+  identity srp {
+    base iana-interface-type;
+    description
+      "Spatial Reuse Protocol.";
+  }
+
+  identity voiceOverAtm {
+    base iana-interface-type;
+    description
+      "Voice over ATM.";
+  }
+
+  identity voiceOverFrameRelay {
+    base iana-interface-type;
+    description
+      "Voice Over Frame Relay.";
+  }
+
+  identity idsl {
+    base iana-interface-type;
+    description
+      "Digital Subscriber Loop over ISDN.";
+  }
+
+  identity compositeLink {
+    base iana-interface-type;
+    description
+      "Avici Composite Link Interface.";
+  }
+
+  identity ss7SigLink {
+    base iana-interface-type;
+    description
+      "SS7 Signaling Link.";
+  }
+
+  identity propWirelessP2P {
+    base iana-interface-type;
+    description
+      "Prop. P2P wireless interface.";
+  }
+
+  identity frForward {
+    base iana-interface-type;
+    description
+      "Frame Forward Interface.";
+  }
+
+  identity rfc1483 {
+    base iana-interface-type;
+    description
+      "Multiprotocol over ATM AAL5.";
+    reference
+      "RFC 1483 - Multiprotocol Encapsulation over ATM
+             Adaptation Layer 5";
+  }
+
+  identity usb {
+    base iana-interface-type;
+    description
+      "USB Interface.";
+  }
+
+  identity ieee8023adLag {
+    base iana-interface-type;
+    description
+      "IEEE 802.3ad Link Aggregate.";
+  }
+
+  identity bgppolicyaccounting {
+    base iana-interface-type;
+    description
+      "BGP Policy Accounting.";
+  }
+
+  identity frf16MfrBundle {
+    base iana-interface-type;
+    description
+      "FRF.16 Multilink Frame Relay.";
+  }
+
+  identity h323Gatekeeper {
+    base iana-interface-type;
+    description
+      "H323 Gatekeeper.";
+  }
+
+  identity h323Proxy {
+    base iana-interface-type;
+    description
+      "H323 Voice and Video Proxy.";
+  }
+
+  identity mpls {
+    base iana-interface-type;
+    description
+      "MPLS.";
+  }
+
+  identity mfSigLink {
+    base iana-interface-type;
+    description
+      "Multi-frequency signaling link.";
+  }
+
+  identity hdsl2 {
+    base iana-interface-type;
+    description
+      "High Bit-Rate DSL - 2nd generation.";
+  }
+
+  identity shdsl {
+    base iana-interface-type;
+    description
+      "Multirate HDSL2.";
+  }
+
+  identity ds1FDL {
+    base iana-interface-type;
+    description
+      "Facility Data Link (4Kbps) on a DS1.";
+  }
+
+  identity pos {
+    base iana-interface-type;
+    description
+      "Packet over SONET/SDH Interface.";
+  }
+
+  identity dvbAsiIn {
+    base iana-interface-type;
+    description
+      "DVB-ASI Input.";
+  }
+
+  identity dvbAsiOut {
+    base iana-interface-type;
+    description
+      "DVB-ASI Output.";
+  }
+
+  identity plc {
+    base iana-interface-type;
+    description
+      "Power Line Communications.";
+  }
+
+  identity nfas {
+    base iana-interface-type;
+    description
+      "Non-Facility Associated Signaling.";
+  }
+
+  identity tr008 {
+    base iana-interface-type;
+    description
+      "TR008.";
+  }
+
+  identity gr303RDT {
+    base iana-interface-type;
+    description
+      "Remote Digital Terminal.";
+  }
+
+  identity gr303IDT {
+    base iana-interface-type;
+    description
+      "Integrated Digital Terminal.";
+  }
+
+  identity isup {
+    base iana-interface-type;
+    description
+      "ISUP.";
+  }
+
+  identity propDocsWirelessMaclayer {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Maclayer.";
+  }
+
+  identity propDocsWirelessDownstream {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Downstream.";
+  }
+
+  identity propDocsWirelessUpstream {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Upstream.";
+  }
+
+  identity hiperlan2 {
+    base iana-interface-type;
+    description
+      "HIPERLAN Type 2 Radio Interface.";
+  }
+
+  identity propBWAp2Mp {
+    base iana-interface-type;
+    description
+      "PropBroadbandWirelessAccesspt2Multipt (use of this value
+       for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
+       is deprecated, and ieee80216WMAN(237) should be used
+       instead).";
+  }
+
+  identity sonetOverheadChannel {
+    base iana-interface-type;
+    description
+      "SONET Overhead Channel.";
+  }
+
+  identity digitalWrapperOverheadChannel {
+    base iana-interface-type;
+    description
+      "Digital Wrapper.";
+  }
+
+  identity aal2 {
+    base iana-interface-type;
+    description
+      "ATM adaptation layer 2.";
+  }
+
+  identity radioMAC {
+    base iana-interface-type;
+    description
+      "MAC layer over radio links.";
+  }
+
+  identity atmRadio {
+    base iana-interface-type;
+    description
+      "ATM over radio links.";
+  }
+
+  identity imt {
+    base iana-interface-type;
+    description
+      "Inter-Machine Trunks.";
+  }
+
+  identity mvl {
+    base iana-interface-type;
+    description
+      "Multiple Virtual Lines DSL.";
+  }
+
+  identity reachDSL {
+    base iana-interface-type;
+    description
+      "Long Reach DSL.";
+  }
+
+  identity frDlciEndPt {
+    base iana-interface-type;
+    description
+      "Frame Relay DLCI End Point.";
+  }
+
+  identity atmVciEndPt {
+    base iana-interface-type;
+    description
+      "ATM VCI End Point.";
+  }
+
+  identity opticalChannel {
+    base iana-interface-type;
+    description
+      "Optical Channel.";
+  }
+
+  identity opticalTransport {
+    base iana-interface-type;
+    description
+      "Optical Transport.";
+  }
+
+  identity propAtm {
+    base iana-interface-type;
+    description
+      "Proprietary ATM.";
+  }
+
+  identity voiceOverCable {
+    base iana-interface-type;
+    description
+      "Voice Over Cable Interface.";
+  }
+
+  identity infiniband {
+    base iana-interface-type;
+    description
+      "Infiniband.";
+  }
+
+  identity teLink {
+    base iana-interface-type;
+    description
+      "TE Link.";
+  }
+
+  identity q2931 {
+    base iana-interface-type;
+    description
+      "Q.2931.";
+  }
+
+  identity virtualTg {
+    base iana-interface-type;
+    description
+      "Virtual Trunk Group.";
+  }
+
+  identity sipTg {
+    base iana-interface-type;
+    description
+      "SIP Trunk Group.";
+  }
+
+  identity sipSig {
+    base iana-interface-type;
+    description
+      "SIP Signaling.";
+  }
+
+  identity docsCableUpstreamChannel {
+    base iana-interface-type;
+    description
+      "CATV Upstream Channel.";
+  }
+
+  identity econet {
+    base iana-interface-type;
+    description
+      "Acorn Econet.";
+  }
+
+  identity pon155 {
+    base iana-interface-type;
+    description
+      "FSAN 155Mb Symetrical PON interface.";
+  }
+
+  identity pon622 {
+    base iana-interface-type;
+    description
+      "FSAN 622Mb Symetrical PON interface.";
+  }
+
+  identity bridge {
+    base iana-interface-type;
+    description
+      "Transparent bridge interface.";
+  }
+
+  identity linegroup {
+    base iana-interface-type;
+    description
+      "Interface common to multiple lines.";
+  }
+
+  identity voiceEMFGD {
+    base iana-interface-type;
+    description
+      "Voice E&amp;M Feature Group D.";
+  }
+
+  identity voiceFGDEANA {
+    base iana-interface-type;
+    description
+      "Voice FGD Exchange Access North American.";
+  }
+
+  identity voiceDID {
+    base iana-interface-type;
+    description
+      "Voice Direct Inward Dialing.";
+  }
+
+  identity mpegTransport {
+    base iana-interface-type;
+    description
+      "MPEG transport interface.";
+  }
+
+  identity sixToFour {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "6to4 interface (DEPRECATED).";
+    reference
+      "RFC 4087 - IP Tunnel MIB";
+  }
+
+  identity gtp {
+    base iana-interface-type;
+    description
+      "GTP (GPRS Tunneling Protocol).";
+  }
+
+  identity pdnEtherLoop1 {
+    base iana-interface-type;
+    description
+      "Paradyne EtherLoop 1.";
+  }
+
+  identity pdnEtherLoop2 {
+    base iana-interface-type;
+    description
+      "Paradyne EtherLoop 2.";
+  }
+
+  identity opticalChannelGroup {
+    base iana-interface-type;
+    description
+      "Optical Channel Group.";
+  }
+
+  identity homepna {
+    base iana-interface-type;
+    description
+      "HomePNA ITU-T G.989.";
+  }
+
+  identity gfp {
+    base iana-interface-type;
+    description
+      "Generic Framing Procedure (GFP).";
+  }
+
+  identity ciscoISLvlan {
+    base iana-interface-type;
+    description
+      "Layer 2 Virtual LAN using Cisco ISL.";
+  }
+
+  identity actelisMetaLOOP {
+    base iana-interface-type;
+    description
+      "Acteleis proprietary MetaLOOP High Speed Link.";
+  }
+
+  identity fcipLink {
+    base iana-interface-type;
+    description
+      "FCIP Link.";
+  }
+
+  identity rpr {
+    base iana-interface-type;
+    description
+      "Resilient Packet Ring Interface Type.";
+  }
+
+  identity qam {
+    base iana-interface-type;
+    description
+      "RF Qam Interface.";
+  }
+
+  identity lmp {
+    base iana-interface-type;
+    description
+      "Link Management Protocol.";
+    reference
+      "RFC 4327 - Link Management Protocol (LMP) Management
+             Information Base (MIB)";
+  }
+
+  identity cblVectaStar {
+    base iana-interface-type;
+    description
+      "Cambridge Broadband Networks Limited VectaStar.";
+  }
+
+  identity docsCableMCmtsDownstream {
+    base iana-interface-type;
+    description
+      "CATV Modular CMTS Downstream Interface.";
+  }
+
+  identity adsl2 {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Asymmetric Digital Subscriber Loop Version 2
+       (DEPRECATED/OBSOLETED - please use adsl2plus(238)
+       instead).";
+    reference
+      "RFC 4706 - Definitions of Managed Objects for Asymmetric
+             Digital Subscriber Line 2 (ADSL2)";
+  }
+
+  identity macSecControlledIF {
+    base iana-interface-type;
+    description
+      "MACSecControlled.";
+  }
+
+  identity macSecUncontrolledIF {
+    base iana-interface-type;
+    description
+      "MACSecUncontrolled.";
+  }
+
+  identity aviciOpticalEther {
+    base iana-interface-type;
+    description
+      "Avici Optical Ethernet Aggregate.";
+  }
+
+  identity atmbond {
+    base iana-interface-type;
+    description
+      "atmbond.";
+  }
+
+  identity voiceFGDOS {
+    base iana-interface-type;
+    description
+      "Voice FGD Operator Services.";
+  }
+
+  identity mocaVersion1 {
+    base iana-interface-type;
+    description
+      "MultiMedia over Coax Alliance (MoCA) Interface
+       as documented in information provided privately to IANA.";
+  }
+
+  identity ieee80216WMAN {
+    base iana-interface-type;
+    description
+      "IEEE 802.16 WMAN interface.";
+  }
+
+  identity adsl2plus {
+    base iana-interface-type;
+    description
+      "Asymmetric Digital Subscriber Loop Version 2 -
+       Version 2 Plus and all variants.";
+  }
+
+  identity dvbRcsMacLayer {
+    base iana-interface-type;
+    description
+      "DVB-RCS MAC Layer.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+
+  identity dvbTdm {
+    base iana-interface-type;
+    description
+      "DVB Satellite TDM.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+
+  identity dvbRcsTdma {
+    base iana-interface-type;
+    description
+      "DVB-RCS TDMA.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+
+  identity x86Laps {
+    base iana-interface-type;
+    description
+      "LAPS based on ITU-T X.86/Y.1323.";
+  }
+
+  identity wwanPP {
+    base iana-interface-type;
+    description
+      "3GPP WWAN.";
+  }
+
+  identity wwanPP2 {
+    base iana-interface-type;
+    description
+      "3GPP2 WWAN.";
+  }
+
+  identity voiceEBS {
+    base iana-interface-type;
+    description
+      "Voice P-phone EBS physical interface.";
+  }
+
+  identity ifPwType {
+    base iana-interface-type;
+    description
+      "Pseudowire interface type.";
+    reference
+      "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)";
+  }
+
+  identity ilan {
+    base iana-interface-type;
+    description
+      "Internal LAN on a bridge per IEEE 802.1ap.";
+  }
+
+  identity pip {
+    base iana-interface-type;
+    description
+      "Provider Instance Port on a bridge per IEEE 802.1ah PBB.";
+  }
+
+  identity aluELP {
+    base iana-interface-type;
+    description
+      "Alcatel-Lucent Ethernet Link Protection.";
+  }
+
+  identity gpon {
+    base iana-interface-type;
+    description
+      "Gigabit-capable passive optical networks (G-PON) as per
+       ITU-T G.948.";
+  }
+
+  identity vdsl2 {
+    base iana-interface-type;
+    description
+      "Very high speed digital subscriber line Version 2
+       (as per ITU-T Recommendation G.993.2).";
+    reference
+      "RFC 5650 - Definitions of Managed Objects for Very High
+             Speed Digital Subscriber Line 2 (VDSL2)";
+  }
+
+  identity capwapDot11Profile {
+    base iana-interface-type;
+    description
+      "WLAN Profile Interface.";
+    reference
+      "RFC 5834 - Control and Provisioning of Wireless Access
+             Points (CAPWAP) Protocol Binding MIB for
+             IEEE 802.11";
+  }
+
+  identity capwapDot11Bss {
+    base iana-interface-type;
+    description
+      "WLAN BSS Interface.";
+    reference
+      "RFC 5834 - Control and Provisioning of Wireless Access
+             Points (CAPWAP) Protocol Binding MIB for
+             IEEE 802.11";
+  }
+
+  identity capwapWtpVirtualRadio {
+    base iana-interface-type;
+    description
+      "WTP Virtual Radio Interface.";
+    reference
+      "RFC 5833 - Control and Provisioning of Wireless Access
+             Points (CAPWAP) Protocol Base MIB";
+  }
+
+  identity bits {
+    base iana-interface-type;
+    description
+      "bitsport.";
+  }
+
+  identity docsCableUpstreamRfPort {
+    base iana-interface-type;
+    description
+      "DOCSIS CATV Upstream RF Port.";
+  }
+
+  identity cableDownstreamRfPort {
+    base iana-interface-type;
+    description
+      "CATV downstream RF Port.";
+  }
+
+  identity vmwareVirtualNic {
+    base iana-interface-type;
+    description
+      "VMware Virtual Network Interface.";
+  }
+
+  identity ieee802154 {
+    base iana-interface-type;
+    description
+      "IEEE 802.15.4 WPAN interface.";
+    reference
+      "IEEE 802.15.4-2006";
+  }
+
+  identity otnOdu {
+    base iana-interface-type;
+    description
+      "OTN Optical Data Unit.";
+  }
+
+  identity otnOtu {
+    base iana-interface-type;
+    description
+      "OTN Optical channel Transport Unit.";
+  }
+
+  identity ifVfiType {
+    base iana-interface-type;
+    description
+      "VPLS Forwarding Instance Interface Type.";
+  }
+
+  identity g9981 {
+    base iana-interface-type;
+    description
+      "G.998.1 bonded interface.";
+  }
+
+  identity g9982 {
+    base iana-interface-type;
+    description
+      "G.998.2 bonded interface.";
+  }
+
+  identity g9983 {
+    base iana-interface-type;
+    description
+      "G.998.3 bonded interface.";
+  }
+
+  identity aluEpon {
+    base iana-interface-type;
+    description
+      "Ethernet Passive Optical Networks (E-PON).";
+  }
+
+  identity aluEponOnu {
+    base iana-interface-type;
+    description
+      "EPON Optical Network Unit.";
+  }
+
+  identity aluEponPhysicalUni {
+    base iana-interface-type;
+    description
+      "EPON physical User to Network interface.";
+  }
+
+  identity aluEponLogicalLink {
+    base iana-interface-type;
+    description
+      "The emulation of a point-to-point link over the EPON
+       layer.";
+  }
+
+  identity aluGponOnu {
+    base iana-interface-type;
+    description
+      "GPON Optical Network Unit.";
+    reference
+      "ITU-T G.984.2";
+  }
+
+  identity aluGponPhysicalUni {
+    base iana-interface-type;
+    description
+      "GPON physical User to Network interface.";
+    reference
+      "ITU-T G.984.2";
+  }
+
+  identity vmwareNicTeam {
+    base iana-interface-type;
+    description
+      "VMware NIC Team.";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/iana-if-type@2014-05-08.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/iana-if-type@2014-05-08.yin
new file mode 100644 (file)
index 0000000..34f7e53
--- /dev/null
@@ -0,0 +1,1804 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="iana-if-type"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"
+        xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"&gt;
+  &lt;yang-version value="1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:iana-if-type"/&gt;
+  &lt;prefix value="ianaift"/&gt;
+  &lt;import module="ietf-interfaces"&gt;
+    &lt;prefix value="if"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IANA&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;        Internet Assigned Numbers Authority
+
+Postal: ICANN
+      4676 Admiralty Way, Suite 330
+      Marina del Rey, CA 90292
+
+Tel:    +1 310 823 9358
+&amp;lt;mailto:iana@iana.org&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This YANG module defines YANG identities for IANA-registered
+interface types.
+
+This YANG module is maintained by IANA and reflects the
+'ifType definitions' registry.
+
+The latest revision of this YANG module can be obtained from
+the IANA web site.
+
+Requests for new values should be made to IANA via
+email (iana@iana.org).
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+The initial version of this YANG module is part of RFC 7224;
+see the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;reference&gt;
+    &lt;text&gt;IANA 'ifType definitions' registry.
+&amp;lt;http://www.iana.org/assignments/smi-numbers&amp;gt;&lt;/text&gt;
+  &lt;/reference&gt;
+  &lt;revision date="2014-05-08"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7224: IANA Interface Type YANG Module&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;identity name="iana-interface-type"&gt;
+    &lt;base name="if:interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;This identity is used as a base for all interface types
+defined in the 'ifType definitions' registry.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="other"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="regular1822"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hdh1822"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ddnX25"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rfc877x25"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ethernetCsmacd"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;For all Ethernet-like interfaces, regardless of speed,
+as per RFC 3635.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3635 - Definitions of Managed Objects for the
+      Ethernet-like Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88023Csmacd"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Deprecated via RFC 3635.
+Use ethernetCsmacd(6) instead.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3635 - Definitions of Managed Objects for the
+      Ethernet-like Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88024TokenBus"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88025TokenRing"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88026Man"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="starLan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Deprecated via RFC 3635.
+Use ethernetCsmacd(6) instead.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3635 - Definitions of Managed Objects for the
+      Ethernet-like Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="proteon10Mbit"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="proteon80Mbit"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hyperchannel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="fddi"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1512 - FDDI Management Information Base&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="lapb"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1381 - SNMP MIB Extension for X.25 LAPB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sdlc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ds1"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DS1-MIB.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4805 - Definitions of Managed Objects for the
+      DS1, J1, E1, DS2, and E2 Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="e1"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="obsolete"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Obsolete; see DS1-MIB.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4805 - Definitions of Managed Objects for the
+      DS1, J1, E1, DS2, and E2 Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="basicISDN"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;No longer used.  See also RFC 2127.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="primaryISDN"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;No longer used.  See also RFC 2127.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propPointToPointSerial"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Proprietary serial.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ppp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="softwareLoopback"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="eon"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CLNP over IP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ethernet3Mbit"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="nsip"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;XNS over IP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="slip"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generic SLIP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ultra"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Ultra Technologies.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ds3"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DS3-MIB.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3896 - Definitions of Managed Objects for the
+      DS3/E3 Interface Type&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sip"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SMDS, coffee.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1694 - Definitions of Managed Objects for SMDS
+      Interfaces using SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frameRelay"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DTE only.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2115 - Management Information Base for Frame Relay
+      DTEs Using SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rs232"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1659 - Definitions of Managed Objects for RS-232-like
+      Hardware Devices using SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="para"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Parallel-port.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1660 - Definitions of Managed Objects for
+      Parallel-printer-like Hardware Devices using
+      SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="arcnet"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ARCnet.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="arcnetPlus"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ARCnet Plus.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atm"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM cells.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="miox25"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1461 - SNMP MIB extension for Multiprotocol
+      Interconnect over X.25&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sonet"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SONET or SDH.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="x25ple"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2127 - ISDN Management Information Base using SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88022llc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="localTalk"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="smdsDxi"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frameRelayService"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;FRNETSERV-MIB.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2954 - Definitions of Managed Objects for Frame
+      Relay Service&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="v35"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hssi"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hippi"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="modem"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generic modem.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aal5"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;AAL5 over ATM.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sonetPath"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sonetVT"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+  &lt;/identity&gt;
+  &lt;identity name="smdsIcip"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SMDS InterCarrier Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propVirtual"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Proprietary virtual/internal.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2863 - The Interfaces Group MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propMultiplexor"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Proprietary multiplexing.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2863 - The Interfaces Group MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ieee80212"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;100BaseVG.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="fibreChannel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Fibre Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hippiInterface"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;HIPPI interfaces.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frameRelayInterconnect"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="obsolete"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Obsolete; use either
+frameRelay(32) or frameRelayService(44).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aflane8023"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM Emulated LAN for 802.3.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aflane8025"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM Emulated LAN for 802.5.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="cctEmul"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM Emulated circuit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="fastEther"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Obsoleted via RFC 3635.
+ethernetCsmacd(6) should be used instead.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3635 - Definitions of Managed Objects for the
+      Ethernet-like Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="isdn"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISDN and X.25.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
+      in the Packet Mode&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="v11"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CCITT V.11/X.21.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="v36"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CCITT V.36.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="g703at64k"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CCITT G703 at 64Kbps.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="g703at2mb"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="obsolete"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Obsolete; see DS1-MIB.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="qllc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SNA QLLC.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="fastEtherFX"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Obsoleted via RFC 3635.
+ethernetCsmacd(6) should be used instead.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3635 - Definitions of Managed Objects for the
+      Ethernet-like Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="channel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ieee80211"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Radio spread spectrum.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ibm370parChan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM System 360/370 OEMI Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="escon"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM Enterprise Systems Connection.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dlsw"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Data Link Switching.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="isdns"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISDN S/T interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="isdnu"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISDN U interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="lapd"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Link Access Protocol D.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ipSwitch"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IP Switching Objects.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rsrb"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Remote Source Route Bridging.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmLogical"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM Logical Port.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3606 - Definitions of Supplemental Managed Objects
+      for ATM Interface&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ds0"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Digital Signal Level 0.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2494 - Definitions of Managed Objects for the DS0
+      and DS0 Bundle Interface Type&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ds0Bundle"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Group of ds0s on the same ds1.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2494 - Definitions of Managed Objects for the DS0
+      and DS0 Bundle Interface Type&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="bsc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Bisynchronous Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="async"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Asynchronous Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="cnr"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Combat Net Radio.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88025Dtr"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISO 802.5r DTR.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="eplrs"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Ext Pos Loc Report Sys.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="arap"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Appletalk Remote Access Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propCnls"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Proprietary Connectionless Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hostPad"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CCITT-ITU X.29 PAD Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="termPad"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CCITT-ITU X.3 PAD Facility.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frameRelayMPI"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multiproto Interconnect over FR.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="x213"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CCITT-ITU X213.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="adsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Asymmetric Digital Subscriber Loop.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="radsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Rate-Adapt. Digital Subscriber Loop.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sdsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Symmetric Digital Subscriber Loop.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="vdsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Very H-Speed Digital Subscrib. Loop.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88025CRFPInt"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISO 802.5 CRFP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="myrinet"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Myricom Myrinet.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceEM"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice recEive and transMit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceFXO"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice Foreign Exchange Office.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceFXS"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice Foreign Exchange Station.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceEncap"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice encapsulation.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceOverIp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice over IP encapsulation.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmDxi"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM DXI.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmFuni"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM FUNI.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmIma"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM IMA.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pppMultilinkBundle"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;PPP Multilink Bundle.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ipOverCdlc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM ipOverCdlc.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ipOverClaw"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM Common Link Access to Workstn.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="stackToStack"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM stackToStack.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="virtualIpAddress"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM VIPA.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mpc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM multi-protocol channel support.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ipOverAtm"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM ipOverAtm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2320 - Definitions of Managed Objects for Classical IP
+      and ARP Over ATM Using SMIv2 (IPOA-MIB)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="iso88025Fiber"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISO 802.5j Fiber Token Ring.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="tdlc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IBM twinaxial data link control.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="gigabitEthernet"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Obsoleted via RFC 3635.
+ethernetCsmacd(6) should be used instead.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3635 - Definitions of Managed Objects for the
+      Ethernet-like Interface Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hdlc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;HDLC.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="lapf"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;LAP F.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="v37"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;V.37.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="x25mlp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multi-Link Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="x25huntGroup"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;X25 Hunt Group.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="transpHdlc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Transp HDLC.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="interleave"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Interleave channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="fast"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Fast channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ip"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IP (for APPN HPR in IP networks).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="docsCableMaclayer"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CATV Mac Layer.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="docsCableDownstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CATV Downstream interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="docsCableUpstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CATV Upstream interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="a12MppSwitch"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Avalon Parallel Processor.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="tunnel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Encapsulation interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="coffee"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Coffee pot.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2325 - Coffee MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ces"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Circuit Emulation Service.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmSubInterface"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM Sub Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="l2vlan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Layer 2 Virtual LAN using 802.1Q.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="l3ipvlan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Layer 3 Virtual LAN using IP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="l3ipxvlan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Layer 3 Virtual LAN using IPX.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="digitalPowerline"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IP over Power Lines.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mediaMailOverIp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multimedia Mail over IP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dtm"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Dynamic synchronous Transfer Mode.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dcn"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Data Communications Network.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ipForward"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IP Forwarding Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="msdsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multi-rate Symmetric DSL.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ieee1394"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IEEE1394 High Performance Serial Bus.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="if-gsn"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;HIPPI-6400.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbRccMacLayer"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-RCC MAC Layer.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbRccDownstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-RCC Downstream Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbRccUpstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-RCC Upstream Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmVirtual"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM Virtual Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mplsTunnel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MPLS Tunnel Virtual Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="srp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Spatial Reuse Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceOverAtm"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice over ATM.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceOverFrameRelay"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice Over Frame Relay.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="idsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Digital Subscriber Loop over ISDN.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="compositeLink"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Avici Composite Link Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ss7SigLink"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SS7 Signaling Link.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propWirelessP2P"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Prop. P2P wireless interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frForward"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Frame Forward Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rfc1483"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multiprotocol over ATM AAL5.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1483 - Multiprotocol Encapsulation over ATM
+      Adaptation Layer 5&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="usb"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;USB Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ieee8023adLag"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IEEE 802.3ad Link Aggregate.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="bgppolicyaccounting"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;BGP Policy Accounting.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frf16MfrBundle"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;FRF.16 Multilink Frame Relay.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="h323Gatekeeper"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;H323 Gatekeeper.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="h323Proxy"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;H323 Voice and Video Proxy.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mpls"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MPLS.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mfSigLink"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multi-frequency signaling link.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hdsl2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;High Bit-Rate DSL - 2nd generation.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="shdsl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multirate HDSL2.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ds1FDL"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Facility Data Link (4Kbps) on a DS1.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pos"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Packet over SONET/SDH Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbAsiIn"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-ASI Input.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbAsiOut"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-ASI Output.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="plc"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Power Line Communications.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="nfas"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Non-Facility Associated Signaling.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="tr008"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;TR008.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="gr303RDT"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Remote Digital Terminal.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="gr303IDT"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Integrated Digital Terminal.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="isup"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ISUP.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propDocsWirelessMaclayer"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Cisco proprietary Maclayer.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propDocsWirelessDownstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Cisco proprietary Downstream.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propDocsWirelessUpstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Cisco proprietary Upstream.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="hiperlan2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;HIPERLAN Type 2 Radio Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propBWAp2Mp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;PropBroadbandWirelessAccesspt2Multipt (use of this value
+for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
+is deprecated, and ieee80216WMAN(237) should be used
+instead).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sonetOverheadChannel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SONET Overhead Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="digitalWrapperOverheadChannel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Digital Wrapper.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aal2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM adaptation layer 2.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="radioMAC"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MAC layer over radio links.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmRadio"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM over radio links.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="imt"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Inter-Machine Trunks.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mvl"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Multiple Virtual Lines DSL.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="reachDSL"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Long Reach DSL.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="frDlciEndPt"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Frame Relay DLCI End Point.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmVciEndPt"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;ATM VCI End Point.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="opticalChannel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Optical Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="opticalTransport"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Optical Transport.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="propAtm"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Proprietary ATM.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceOverCable"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice Over Cable Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="infiniband"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Infiniband.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="teLink"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;TE Link.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="q2931"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Q.2931.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="virtualTg"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Virtual Trunk Group.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sipTg"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SIP Trunk Group.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sipSig"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;SIP Signaling.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="docsCableUpstreamChannel"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CATV Upstream Channel.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="econet"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Acorn Econet.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pon155"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;FSAN 155Mb Symetrical PON interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pon622"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;FSAN 622Mb Symetrical PON interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="bridge"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Transparent bridge interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="linegroup"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Interface common to multiple lines.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceEMFGD"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice E&amp;amp;M Feature Group D.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceFGDEANA"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice FGD Exchange Access North American.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceDID"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice Direct Inward Dialing.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mpegTransport"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MPEG transport interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="sixToFour"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;6to4 interface (DEPRECATED).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4087 - IP Tunnel MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="gtp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;GTP (GPRS Tunneling Protocol).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pdnEtherLoop1"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Paradyne EtherLoop 1.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pdnEtherLoop2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Paradyne EtherLoop 2.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="opticalChannelGroup"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Optical Channel Group.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="homepna"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;HomePNA ITU-T G.989.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="gfp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generic Framing Procedure (GFP).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ciscoISLvlan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Layer 2 Virtual LAN using Cisco ISL.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="actelisMetaLOOP"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Acteleis proprietary MetaLOOP High Speed Link.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="fcipLink"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;FCIP Link.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rpr"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Resilient Packet Ring Interface Type.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="qam"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;RF Qam Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="lmp"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Link Management Protocol.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4327 - Link Management Protocol (LMP) Management
+      Information Base (MIB)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="cblVectaStar"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Cambridge Broadband Networks Limited VectaStar.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="docsCableMCmtsDownstream"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CATV Modular CMTS Downstream Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="adsl2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Asymmetric Digital Subscriber Loop Version 2
+(DEPRECATED/OBSOLETED - please use adsl2plus(238)
+instead).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4706 - Definitions of Managed Objects for Asymmetric
+      Digital Subscriber Line 2 (ADSL2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="macSecControlledIF"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MACSecControlled.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="macSecUncontrolledIF"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MACSecUncontrolled.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aviciOpticalEther"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Avici Optical Ethernet Aggregate.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="atmbond"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;atmbond.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceFGDOS"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice FGD Operator Services.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="mocaVersion1"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;MultiMedia over Coax Alliance (MoCA) Interface
+as documented in information provided privately to IANA.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ieee80216WMAN"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IEEE 802.16 WMAN interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="adsl2plus"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Asymmetric Digital Subscriber Loop Version 2 -
+Version 2 Plus and all variants.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbRcsMacLayer"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-RCS MAC Layer.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5728 - The SatLabs Group DVB-RCS MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbTdm"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB Satellite TDM.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5728 - The SatLabs Group DVB-RCS MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dvbRcsTdma"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DVB-RCS TDMA.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5728 - The SatLabs Group DVB-RCS MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="x86Laps"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;LAPS based on ITU-T X.86/Y.1323.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="wwanPP"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;3GPP WWAN.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="wwanPP2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;3GPP2 WWAN.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="voiceEBS"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Voice P-phone EBS physical interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ifPwType"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Pseudowire interface type.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5601 - Pseudowire (PW) Management Information Base (MIB)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ilan"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Internal LAN on a bridge per IEEE 802.1ap.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="pip"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Provider Instance Port on a bridge per IEEE 802.1ah PBB.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluELP"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Alcatel-Lucent Ethernet Link Protection.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="gpon"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Gigabit-capable passive optical networks (G-PON) as per
+ITU-T G.948.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="vdsl2"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Very high speed digital subscriber line Version 2
+(as per ITU-T Recommendation G.993.2).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5650 - Definitions of Managed Objects for Very High
+      Speed Digital Subscriber Line 2 (VDSL2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="capwapDot11Profile"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;WLAN Profile Interface.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5834 - Control and Provisioning of Wireless Access
+      Points (CAPWAP) Protocol Binding MIB for
+      IEEE 802.11&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="capwapDot11Bss"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;WLAN BSS Interface.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5834 - Control and Provisioning of Wireless Access
+      Points (CAPWAP) Protocol Binding MIB for
+      IEEE 802.11&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="capwapWtpVirtualRadio"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;WTP Virtual Radio Interface.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5833 - Control and Provisioning of Wireless Access
+      Points (CAPWAP) Protocol Base MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="bits"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;bitsport.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="docsCableUpstreamRfPort"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;DOCSIS CATV Upstream RF Port.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="cableDownstreamRfPort"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;CATV downstream RF Port.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="vmwareVirtualNic"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;VMware Virtual Network Interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ieee802154"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;IEEE 802.15.4 WPAN interface.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;IEEE 802.15.4-2006&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="otnOdu"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;OTN Optical Data Unit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="otnOtu"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;OTN Optical channel Transport Unit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="ifVfiType"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;VPLS Forwarding Instance Interface Type.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="g9981"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;G.998.1 bonded interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="g9982"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;G.998.2 bonded interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="g9983"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;G.998.3 bonded interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluEpon"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Ethernet Passive Optical Networks (E-PON).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluEponOnu"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;EPON Optical Network Unit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluEponPhysicalUni"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;EPON physical User to Network interface.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluEponLogicalLink"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The emulation of a point-to-point link over the EPON
+layer.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluGponOnu"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;GPON Optical Network Unit.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;ITU-T G.984.2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="aluGponPhysicalUni"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;GPON physical User to Network interface.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;ITU-T G.984.2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="vmwareNicTeam"&gt;
+    &lt;base name="iana-interface-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;VMware NIC Team.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-datastores@2017-08-17.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-datastores@2017-08-17.yang
new file mode 100644 (file)
index 0000000..a40d04e
--- /dev/null
@@ -0,0 +1,111 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-datastores {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-datastores";
+  prefix ds;
+
+  organization
+    "IETF Network Modeling (NETMOD) Working Group";
+  contact
+    "WG Web:   &lt;https://datatracker.ietf.org/wg/netmod/&gt;
+
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     Author:   Martin Bjorklund
+               &lt;mailto:mbj@tail-f.com&gt;
+
+     Author:   Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Author:   Phil Shafer
+               &lt;mailto:phil@juniper.net&gt;
+
+     Author:   Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;
+
+     Author:   Rob Wilton
+               &lt;rwilton@cisco.com&gt;";
+  description
+    "This YANG module defines two sets of identities for datastores.
+     The first identifies the datastores themselves, the second
+     identifies datastore properties.
+
+     Copyright (c) 2017 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Simplified BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX
+     (http://www.rfc-editor.org/info/rfcxxxx); see the RFC itself
+     for full legal notices.";
+
+  revision 2017-08-17 {
+    description
+      "Initial revision.";
+    reference
+      "RFC XXXX: Network Management Datastore Architecture";
+  }
+
+  identity datastore {
+    description
+      "Abstract base identity for datastore identities.";
+  }
+
+  identity conventional {
+    base datastore;
+    description
+      "Abstract base identity for conventional configuration
+       datastores.";
+  }
+
+  identity running {
+    base conventional;
+    description
+      "The running configuration datastore.";
+  }
+
+  identity candidate {
+    base conventional;
+    description
+      "The candidate configuration datastore.";
+  }
+
+  identity startup {
+    base conventional;
+    description
+      "The startup configuration datastore.";
+  }
+
+  identity intended {
+    base conventional;
+    description
+      "The intended configuration datastore.";
+  }
+
+  identity dynamic {
+    base datastore;
+    description
+      "Abstract base identity for dynamic configuration datastores.";
+  }
+
+  identity operational {
+    base datastore;
+    description
+      "The operational state datastore.";
+  }
+
+  typedef datastore-ref {
+    type identityref {
+      base datastore;
+    }
+    description
+      "A datastore identity reference.";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-datastores@2017-08-17.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-datastores@2017-08-17.yin
new file mode 100644 (file)
index 0000000..13f93b4
--- /dev/null
@@ -0,0 +1,117 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-datastores"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"&gt;
+  &lt;yang-version value="1.1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-datastores"/&gt;
+  &lt;prefix value="ds"/&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF Network Modeling (NETMOD) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;https://datatracker.ietf.org/wg/netmod/&amp;gt;
+
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+Author:   Martin Bjorklund
+          &amp;lt;mailto:mbj@tail-f.com&amp;gt;
+
+Author:   Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Author:   Phil Shafer
+          &amp;lt;mailto:phil@juniper.net&amp;gt;
+
+Author:   Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;
+
+Author:   Rob Wilton
+          &amp;lt;rwilton@cisco.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This YANG module defines two sets of identities for datastores.
+The first identifies the datastores themselves, the second
+identifies datastore properties.
+
+Copyright (c) 2017 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject to
+the license terms contained in, the Simplified BSD License set
+forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC XXXX
+(http://www.rfc-editor.org/info/rfcxxxx); see the RFC itself
+for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2017-08-17"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC XXXX: Network Management Datastore Architecture&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;identity name="datastore"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Abstract base identity for datastore identities.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="conventional"&gt;
+    &lt;base name="datastore"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Abstract base identity for conventional configuration
+datastores.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="running"&gt;
+    &lt;base name="conventional"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The running configuration datastore.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="candidate"&gt;
+    &lt;base name="conventional"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The candidate configuration datastore.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="startup"&gt;
+    &lt;base name="conventional"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The startup configuration datastore.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="intended"&gt;
+    &lt;base name="conventional"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The intended configuration datastore.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="dynamic"&gt;
+    &lt;base name="datastore"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Abstract base identity for dynamic configuration datastores.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="operational"&gt;
+    &lt;base name="datastore"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The operational state datastore.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;typedef name="datastore-ref"&gt;
+    &lt;type name="identityref"&gt;
+      &lt;base name="datastore"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;A datastore identity reference.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-inet-types@2013-07-15.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-inet-types@2013-07-15.yang
new file mode 100644 (file)
index 0000000..981cd5b
--- /dev/null
@@ -0,0 +1,426 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-inet-types {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+  prefix inet;
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netmod/&gt;
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: David Kessens
+               &lt;mailto:david.kessens@nsn.com&gt;
+
+     WG Chair: Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;";
+  description
+    "This module contains a collection of generally useful derived
+     YANG data types for Internet addresses and related things.
+
+     Copyright (c) 2013 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6991; see
+     the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+      "This revision adds the following new data types:
+       - ip-address-no-zone
+       - ipv4-address-no-zone
+       - ipv6-address-no-zone";
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+  revision 2010-09-24 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 6021: Common YANG Data Types";
+  }
+
+  typedef ip-version {
+    type enumeration {
+      enum "unknown" {
+        value 0;
+        description
+          "An unknown or unspecified version of the Internet
+           protocol.";
+      }
+      enum "ipv4" {
+        value 1;
+        description
+          "The IPv4 protocol as defined in RFC 791.";
+      }
+      enum "ipv6" {
+        value 2;
+        description
+          "The IPv6 protocol as defined in RFC 2460.";
+      }
+    }
+    description
+      "This value represents the version of the IP protocol.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetVersion textual convention of the SMIv2.";
+    reference
+      "RFC  791: Internet Protocol
+       RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  typedef dscp {
+    type uint8 {
+      range "0..63";
+    }
+    description
+      "The dscp type represents a Differentiated Services Code Point
+       that may be used for marking packets in a traffic stream.
+       In the value set and its semantics, this type is equivalent
+       to the Dscp textual convention of the SMIv2.";
+    reference
+      "RFC 3289: Management Information Base for the Differentiated
+                 Services Architecture
+       RFC 2474: Definition of the Differentiated Services Field
+                 (DS Field) in the IPv4 and IPv6 Headers
+       RFC 2780: IANA Allocation Guidelines For Values In
+                 the Internet Protocol and Related Headers";
+  }
+
+  typedef ipv6-flow-label {
+    type uint32 {
+      range "0..1048575";
+    }
+    description
+      "The ipv6-flow-label type represents the flow identifier or Flow
+       Label in an IPv6 packet header that may be used to
+       discriminate traffic flows.
+
+       In the value set and its semantics, this type is equivalent
+       to the IPv6FlowLabel textual convention of the SMIv2.";
+    reference
+      "RFC 3595: Textual Conventions for IPv6 Flow Label
+       RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+  }
+
+  typedef port-number {
+    type uint16 {
+      range "0..65535";
+    }
+    description
+      "The port-number type represents a 16-bit port number of an
+       Internet transport-layer protocol such as UDP, TCP, DCCP, or
+       SCTP.  Port numbers are assigned by IANA.  A current list of
+       all assignments is available from &lt;http://www.iana.org/&gt;.
+
+       Note that the port number value zero is reserved by IANA.  In
+       situations where the value zero does not make sense, it can
+       be excluded by subtyping the port-number type.
+       In the value set and its semantics, this type is equivalent
+       to the InetPortNumber textual convention of the SMIv2.";
+    reference
+      "RFC  768: User Datagram Protocol
+       RFC  793: Transmission Control Protocol
+       RFC 4960: Stream Control Transmission Protocol
+       RFC 4340: Datagram Congestion Control Protocol (DCCP)
+       RFC 4001: Textual Conventions for Internet Network Addresses";
+  }
+
+  typedef as-number {
+    type uint32;
+    description
+      "The as-number type represents autonomous system numbers
+       which identify an Autonomous System (AS).  An AS is a set
+       of routers under a single technical administration, using
+       an interior gateway protocol and common metrics to route
+       packets within the AS, and using an exterior gateway
+       protocol to route packets to other ASes.  IANA maintains
+       the AS number space and has delegated large parts to the
+       regional registries.
+
+       Autonomous system numbers were originally limited to 16
+       bits.  BGP extensions have enlarged the autonomous system
+       number space to 32 bits.  This type therefore uses an uint32
+       base type without a range restriction in order to support
+       a larger autonomous system number space.
+
+       In the value set and its semantics, this type is equivalent
+       to the InetAutonomousSystemNumber textual convention of
+       the SMIv2.";
+    reference
+      "RFC 1930: Guidelines for creation, selection, and registration
+                 of an Autonomous System (AS)
+       RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+       RFC 4001: Textual Conventions for Internet Network Addresses
+       RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+                 Number Space";
+  }
+
+  typedef ip-address {
+    type union {
+      type inet:ipv4-address;
+      type inet:ipv6-address;
+    }
+    description
+      "The ip-address type represents an IP address and is IP
+       version neutral.  The format of the textual representation
+       implies the IP version.  This type supports scoped addresses
+       by allowing zone identifiers in the address format.";
+    reference
+      "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address {
+    type string {
+      pattern "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\\p{N}\\p{L}]+)?";
+    }
+    description
+      "The ipv4-address type represents an IPv4 address in
+       dotted-quad notation.  The IPv4 address may include a zone
+       index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format for the zone index is the numerical
+       format";
+  }
+
+  typedef ipv6-address {
+    type string {
+      pattern "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\\p{N}\\p{L}]+)?";
+      pattern "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(%.+)?";
+    }
+    description
+      "The ipv6-address type represents an IPv6 address in full,
+       mixed, shortened, and shortened-mixed notation.  The IPv6
+       address may include a zone index, separated by a % sign.
+
+       The zone index is used to disambiguate identical address
+       values.  For link-local addresses, the zone index will
+       typically be the interface index number or the name of an
+       interface.  If the zone index is not present, the default
+       zone of the device will be used.
+
+       The canonical format of IPv6 addresses uses the textual
+       representation defined in Section 4 of RFC 5952.  The
+       canonical format for the zone index is the numerical
+       format as described in Section 11.2 of RFC 4007.";
+    reference
+      "RFC 4291: IP Version 6 Addressing Architecture
+       RFC 4007: IPv6 Scoped Address Architecture
+       RFC 5952: A Recommendation for IPv6 Address Text
+                 Representation";
+  }
+
+  typedef ip-address-no-zone {
+    type union {
+      type inet:ipv4-address-no-zone;
+      type inet:ipv6-address-no-zone;
+    }
+    description
+      "The ip-address-no-zone type represents an IP address and is
+       IP version neutral.  The format of the textual representation
+       implies the IP version.  This type does not support scoped
+       addresses since it does not allow zone identifiers in the
+       address format.";
+    reference
+      "RFC 4007: IPv6 Scoped Address Architecture";
+  }
+
+  typedef ipv4-address-no-zone {
+    type inet:ipv4-address {
+      pattern "[0-9\\.]*";
+    }
+    description
+      "An IPv4 address without a zone index.  This type, derived from
+       ipv4-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+  }
+
+  typedef ipv6-address-no-zone {
+    type inet:ipv6-address {
+      pattern "[0-9a-fA-F:\\.]*";
+    }
+    description
+      "An IPv6 address without a zone index.  This type, derived from
+       ipv6-address, may be used in situations where the zone is
+       known from the context and hence no zone index is needed.";
+    reference
+      "RFC 4291: IP Version 6 Addressing Architecture
+       RFC 4007: IPv6 Scoped Address Architecture
+       RFC 5952: A Recommendation for IPv6 Address Text
+                 Representation";
+  }
+
+  typedef ip-prefix {
+    type union {
+      type inet:ipv4-prefix;
+      type inet:ipv6-prefix;
+    }
+    description
+      "The ip-prefix type represents an IP prefix and is IP
+       version neutral.  The format of the textual representations
+       implies the IP version.";
+  }
+
+  typedef ipv4-prefix {
+    type string {
+      pattern "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))";
+    }
+    description
+      "The ipv4-prefix type represents an IPv4 address prefix.
+       The prefix length is given by the number following the
+       slash character and must be less than or equal to 32.
+
+       A prefix length value of n corresponds to an IP address
+       mask that has n contiguous 1-bits from the most
+       significant bit (MSB) and all other bits set to 0.
+
+       The canonical format of an IPv4 prefix has all bits of
+       the IPv4 address set to zero that are not part of the
+       IPv4 prefix.";
+  }
+
+  typedef ipv6-prefix {
+    type string {
+      pattern "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))";
+      pattern "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(/.+)";
+    }
+    description
+      "The ipv6-prefix type represents an IPv6 address prefix.
+       The prefix length is given by the number following the
+       slash character and must be less than or equal to 128.
+
+       A prefix length value of n corresponds to an IP address
+       mask that has n contiguous 1-bits from the most
+       significant bit (MSB) and all other bits set to 0.
+
+       The IPv6 address should have all bits that do not belong
+       to the prefix set to zero.
+
+       The canonical format of an IPv6 prefix has all bits of
+       the IPv6 address set to zero that are not part of the
+       IPv6 prefix.  Furthermore, the IPv6 address is represented
+       as defined in Section 4 of RFC 5952.";
+    reference
+      "RFC 5952: A Recommendation for IPv6 Address Text
+                 Representation";
+  }
+
+  typedef domain-name {
+    type string {
+      length "1..253";
+      pattern "((([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.)*([a-zA-Z0-9_]([a-zA-Z0-9\\-_]){0,61})?[a-zA-Z0-9]\\.?)|\\.";
+    }
+    description
+      "The domain-name type represents a DNS domain name.  The
+       name SHOULD be fully qualified whenever possible.
+
+       Internet domain names are only loosely specified.  Section
+       3.5 of RFC 1034 recommends a syntax (modified in Section
+       2.1 of RFC 1123).  The pattern above is intended to allow
+       for current practice in domain name use, and some possible
+       future expansion.  It is designed to hold various types of
+       domain names, including names used for A or AAAA records
+       (host names) and other records, such as SRV records.  Note
+       that Internet host names have a stricter syntax (described
+       in RFC 952) than the DNS recommendations in RFCs 1034 and
+       1123, and that systems that want to store host names in
+       schema nodes using the domain-name type are recommended to
+       adhere to this stricter standard to ensure interoperability.
+
+       The encoding of DNS names in the DNS protocol is limited
+       to 255 characters.  Since the encoding consists of labels
+       prefixed by a length bytes and there is a trailing NULL
+       byte, only 253 characters can appear in the textual dotted
+       notation.
+
+       The description clause of schema nodes using the domain-name
+       type MUST describe when and how these names are resolved to
+       IP addresses.  Note that the resolution of a domain-name value
+       may require to query multiple DNS records (e.g., A for IPv4
+       and AAAA for IPv6).  The order of the resolution process and
+       which DNS record takes precedence can either be defined
+       explicitly or may depend on the configuration of the
+       resolver.
+
+       Domain-name values use the US-ASCII encoding.  Their canonical
+       format uses lowercase US-ASCII characters.  Internationalized
+       domain names MUST be A-labels as per RFC 5890.";
+    reference
+      "RFC  952: DoD Internet Host Table Specification
+       RFC 1034: Domain Names - Concepts and Facilities
+       RFC 1123: Requirements for Internet Hosts -- Application
+                 and Support
+       RFC 2782: A DNS RR for specifying the location of services
+                 (DNS SRV)
+       RFC 5890: Internationalized Domain Names in Applications
+                 (IDNA): Definitions and Document Framework";
+  }
+
+  typedef host {
+    type union {
+      type inet:ip-address;
+      type inet:domain-name;
+    }
+    description
+      "The host type represents either an IP address or a DNS
+       domain name.";
+  }
+
+  typedef uri {
+    type string;
+    description
+      "The uri type represents a Uniform Resource Identifier
+       (URI) as defined by STD 66.
+
+       Objects using the uri type MUST be in US-ASCII encoding,
+       and MUST be normalized as described by RFC 3986 Sections
+       6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+       percent-encoding is removed, and all case-insensitive
+       characters are set to lowercase except for hexadecimal
+       digits, which are normalized to uppercase as described in
+       Section 6.2.2.1.
+
+       The purpose of this normalization is to help provide
+       unique URIs.  Note that this normalization is not
+       sufficient to provide uniqueness.  Two URIs that are
+       textually distinct after this normalization may still be
+       equivalent.
+
+       Objects using the uri type may restrict the schemes that
+       they permit.  For example, 'data:' and 'urn:' schemes
+       might not be appropriate.
+
+       A zero-length URI is not a valid URI.  This can be used to
+       express 'URI absent' where required.
+
+       In the value set and its semantics, this type is equivalent
+       to the Uri SMIv2 textual convention defined in RFC 5017.";
+    reference
+      "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+       RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+                 Group: Uniform Resource Identifiers (URIs), URLs,
+                 and Uniform Resource Names (URNs): Clarifications
+                 and Recommendations
+       RFC 5017: MIB Textual Conventions for Uniform Resource
+                 Identifiers (URIs)";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-inet-types@2013-07-15.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-inet-types@2013-07-15.yin
new file mode 100644 (file)
index 0000000..b4dfee6
--- /dev/null
@@ -0,0 +1,449 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-inet-types"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-inet-types"/&gt;
+  &lt;prefix value="inet"/&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netmod/&amp;gt;
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: David Kessens
+          &amp;lt;mailto:david.kessens@nsn.com&amp;gt;
+
+WG Chair: Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of generally useful derived
+YANG data types for Internet addresses and related things.
+
+Copyright (c) 2013 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 6991; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2013-07-15"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This revision adds the following new data types:
+- ip-address-no-zone
+- ipv4-address-no-zone
+- ipv6-address-no-zone&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;revision date="2010-09-24"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6021: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="ip-version"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="unknown"&gt;
+        &lt;value value="0"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An unknown or unspecified version of the Internet
+protocol.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="ipv4"&gt;
+        &lt;value value="1"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The IPv4 protocol as defined in RFC 791.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="ipv6"&gt;
+        &lt;value value="2"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The IPv6 protocol as defined in RFC 2460.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;This value represents the version of the IP protocol.
+
+In the value set and its semantics, this type is equivalent
+to the InetVersion textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC  791: Internet Protocol
+RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+RFC 4001: Textual Conventions for Internet Network Addresses&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="dscp"&gt;
+    &lt;type name="uint8"&gt;
+      &lt;range value="0..63"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The dscp type represents a Differentiated Services Code Point
+that may be used for marking packets in a traffic stream.
+In the value set and its semantics, this type is equivalent
+to the Dscp textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3289: Management Information Base for the Differentiated
+          Services Architecture
+RFC 2474: Definition of the Differentiated Services Field
+          (DS Field) in the IPv4 and IPv6 Headers
+RFC 2780: IANA Allocation Guidelines For Values In
+          the Internet Protocol and Related Headers&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv6-flow-label"&gt;
+    &lt;type name="uint32"&gt;
+      &lt;range value="0..1048575"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ipv6-flow-label type represents the flow identifier or Flow
+Label in an IPv6 packet header that may be used to
+discriminate traffic flows.
+
+In the value set and its semantics, this type is equivalent
+to the IPv6FlowLabel textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3595: Textual Conventions for IPv6 Flow Label
+RFC 2460: Internet Protocol, Version 6 (IPv6) Specification&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="port-number"&gt;
+    &lt;type name="uint16"&gt;
+      &lt;range value="0..65535"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The port-number type represents a 16-bit port number of an
+Internet transport-layer protocol such as UDP, TCP, DCCP, or
+SCTP.  Port numbers are assigned by IANA.  A current list of
+all assignments is available from &amp;lt;http://www.iana.org/&amp;gt;.
+
+Note that the port number value zero is reserved by IANA.  In
+situations where the value zero does not make sense, it can
+be excluded by subtyping the port-number type.
+In the value set and its semantics, this type is equivalent
+to the InetPortNumber textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC  768: User Datagram Protocol
+RFC  793: Transmission Control Protocol
+RFC 4960: Stream Control Transmission Protocol
+RFC 4340: Datagram Congestion Control Protocol (DCCP)
+RFC 4001: Textual Conventions for Internet Network Addresses&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="as-number"&gt;
+    &lt;type name="uint32"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The as-number type represents autonomous system numbers
+which identify an Autonomous System (AS).  An AS is a set
+of routers under a single technical administration, using
+an interior gateway protocol and common metrics to route
+packets within the AS, and using an exterior gateway
+protocol to route packets to other ASes.  IANA maintains
+the AS number space and has delegated large parts to the
+regional registries.
+
+Autonomous system numbers were originally limited to 16
+bits.  BGP extensions have enlarged the autonomous system
+number space to 32 bits.  This type therefore uses an uint32
+base type without a range restriction in order to support
+a larger autonomous system number space.
+
+In the value set and its semantics, this type is equivalent
+to the InetAutonomousSystemNumber textual convention of
+the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 1930: Guidelines for creation, selection, and registration
+          of an Autonomous System (AS)
+RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+RFC 4001: Textual Conventions for Internet Network Addresses
+RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+          Number Space&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ip-address"&gt;
+    &lt;type name="union"&gt;
+      &lt;type name="inet:ipv4-address"/&gt;
+      &lt;type name="inet:ipv6-address"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ip-address type represents an IP address and is IP
+version neutral.  The format of the textual representation
+implies the IP version.  This type supports scoped addresses
+by allowing zone identifiers in the address format.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4007: IPv6 Scoped Address Architecture&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv4-address"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ipv4-address type represents an IPv4 address in
+dotted-quad notation.  The IPv4 address may include a zone
+index, separated by a % sign.
+
+The zone index is used to disambiguate identical address
+values.  For link-local addresses, the zone index will
+typically be the interface index number or the name of an
+interface.  If the zone index is not present, the default
+zone of the device will be used.
+
+The canonical format for the zone index is the numerical
+format&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv6-address"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(%[\p{N}\p{L}]+)?"/&gt;
+      &lt;pattern value="(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(%.+)?"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ipv6-address type represents an IPv6 address in full,
+mixed, shortened, and shortened-mixed notation.  The IPv6
+address may include a zone index, separated by a % sign.
+
+The zone index is used to disambiguate identical address
+values.  For link-local addresses, the zone index will
+typically be the interface index number or the name of an
+interface.  If the zone index is not present, the default
+zone of the device will be used.
+
+The canonical format of IPv6 addresses uses the textual
+representation defined in Section 4 of RFC 5952.  The
+canonical format for the zone index is the numerical
+format as described in Section 11.2 of RFC 4007.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4291: IP Version 6 Addressing Architecture
+RFC 4007: IPv6 Scoped Address Architecture
+RFC 5952: A Recommendation for IPv6 Address Text
+          Representation&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ip-address-no-zone"&gt;
+    &lt;type name="union"&gt;
+      &lt;type name="inet:ipv4-address-no-zone"/&gt;
+      &lt;type name="inet:ipv6-address-no-zone"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ip-address-no-zone type represents an IP address and is
+IP version neutral.  The format of the textual representation
+implies the IP version.  This type does not support scoped
+addresses since it does not allow zone identifiers in the
+address format.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4007: IPv6 Scoped Address Architecture&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv4-address-no-zone"&gt;
+    &lt;type name="inet:ipv4-address"&gt;
+      &lt;pattern value="[0-9\.]*"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;An IPv4 address without a zone index.  This type, derived from
+ipv4-address, may be used in situations where the zone is
+known from the context and hence no zone index is needed.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv6-address-no-zone"&gt;
+    &lt;type name="inet:ipv6-address"&gt;
+      &lt;pattern value="[0-9a-fA-F:\.]*"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;An IPv6 address without a zone index.  This type, derived from
+ipv6-address, may be used in situations where the zone is
+known from the context and hence no zone index is needed.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4291: IP Version 6 Addressing Architecture
+RFC 4007: IPv6 Scoped Address Architecture
+RFC 5952: A Recommendation for IPv6 Address Text
+          Representation&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ip-prefix"&gt;
+    &lt;type name="union"&gt;
+      &lt;type name="inet:ipv4-prefix"/&gt;
+      &lt;type name="inet:ipv6-prefix"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ip-prefix type represents an IP prefix and is IP
+version neutral.  The format of the textual representations
+implies the IP version.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv4-prefix"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ipv4-prefix type represents an IPv4 address prefix.
+The prefix length is given by the number following the
+slash character and must be less than or equal to 32.
+
+A prefix length value of n corresponds to an IP address
+mask that has n contiguous 1-bits from the most
+significant bit (MSB) and all other bits set to 0.
+
+The canonical format of an IPv4 prefix has all bits of
+the IPv4 address set to zero that are not part of the
+IPv4 prefix.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="ipv6-prefix"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))"/&gt;
+      &lt;pattern value="(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)(/.+)"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ipv6-prefix type represents an IPv6 address prefix.
+The prefix length is given by the number following the
+slash character and must be less than or equal to 128.
+
+A prefix length value of n corresponds to an IP address
+mask that has n contiguous 1-bits from the most
+significant bit (MSB) and all other bits set to 0.
+
+The IPv6 address should have all bits that do not belong
+to the prefix set to zero.
+
+The canonical format of an IPv6 prefix has all bits of
+the IPv6 address set to zero that are not part of the
+IPv6 prefix.  Furthermore, the IPv6 address is represented
+as defined in Section 4 of RFC 5952.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5952: A Recommendation for IPv6 Address Text
+          Representation&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="domain-name"&gt;
+    &lt;type name="string"&gt;
+      &lt;length value="1..253"/&gt;
+      &lt;pattern value="((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)|\."/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The domain-name type represents a DNS domain name.  The
+name SHOULD be fully qualified whenever possible.
+
+Internet domain names are only loosely specified.  Section
+3.5 of RFC 1034 recommends a syntax (modified in Section
+2.1 of RFC 1123).  The pattern above is intended to allow
+for current practice in domain name use, and some possible
+future expansion.  It is designed to hold various types of
+domain names, including names used for A or AAAA records
+(host names) and other records, such as SRV records.  Note
+that Internet host names have a stricter syntax (described
+in RFC 952) than the DNS recommendations in RFCs 1034 and
+1123, and that systems that want to store host names in
+schema nodes using the domain-name type are recommended to
+adhere to this stricter standard to ensure interoperability.
+
+The encoding of DNS names in the DNS protocol is limited
+to 255 characters.  Since the encoding consists of labels
+prefixed by a length bytes and there is a trailing NULL
+byte, only 253 characters can appear in the textual dotted
+notation.
+
+The description clause of schema nodes using the domain-name
+type MUST describe when and how these names are resolved to
+IP addresses.  Note that the resolution of a domain-name value
+may require to query multiple DNS records (e.g., A for IPv4
+and AAAA for IPv6).  The order of the resolution process and
+which DNS record takes precedence can either be defined
+explicitly or may depend on the configuration of the
+resolver.
+
+Domain-name values use the US-ASCII encoding.  Their canonical
+format uses lowercase US-ASCII characters.  Internationalized
+domain names MUST be A-labels as per RFC 5890.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC  952: DoD Internet Host Table Specification
+RFC 1034: Domain Names - Concepts and Facilities
+RFC 1123: Requirements for Internet Hosts -- Application
+          and Support
+RFC 2782: A DNS RR for specifying the location of services
+          (DNS SRV)
+RFC 5890: Internationalized Domain Names in Applications
+          (IDNA): Definitions and Document Framework&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="host"&gt;
+    &lt;type name="union"&gt;
+      &lt;type name="inet:ip-address"/&gt;
+      &lt;type name="inet:domain-name"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The host type represents either an IP address or a DNS
+domain name.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="uri"&gt;
+    &lt;type name="string"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The uri type represents a Uniform Resource Identifier
+(URI) as defined by STD 66.
+
+Objects using the uri type MUST be in US-ASCII encoding,
+and MUST be normalized as described by RFC 3986 Sections
+6.2.1, 6.2.2.1, and 6.2.2.2.  All unnecessary
+percent-encoding is removed, and all case-insensitive
+characters are set to lowercase except for hexadecimal
+digits, which are normalized to uppercase as described in
+Section 6.2.2.1.
+
+The purpose of this normalization is to help provide
+unique URIs.  Note that this normalization is not
+sufficient to provide uniqueness.  Two URIs that are
+textually distinct after this normalization may still be
+equivalent.
+
+Objects using the uri type may restrict the schemes that
+they permit.  For example, 'data:' and 'urn:' schemes
+might not be appropriate.
+
+A zero-length URI is not a valid URI.  This can be used to
+express 'URI absent' where required.
+
+In the value set and its semantics, this type is equivalent
+to the Uri SMIv2 textual convention defined in RFC 5017.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+          Group: Uniform Resource Identifiers (URIs), URLs,
+          and Uniform Resource Names (URNs): Clarifications
+          and Recommendations
+RFC 5017: MIB Textual Conventions for Uniform Resource
+          Identifiers (URIs)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-interfaces@2014-05-08.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-interfaces@2014-05-08.yang
new file mode 100644 (file)
index 0000000..3ea17f9
--- /dev/null
@@ -0,0 +1,675 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-interfaces {
+  yang-version 1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
+  prefix if;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netmod/&gt;
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: Thomas Nadeau
+             &lt;mailto:tnadeau@lucidvision.com&gt;
+
+     WG Chair: Juergen Schoenwaelder
+             &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Martin Bjorklund
+             &lt;mailto:mbj@tail-f.com&gt;";
+  description
+    "This module contains a collection of YANG definitions for
+     managing network interfaces.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7223; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7223: A YANG Data Model for Interface Management";
+  }
+
+  feature arbitrary-names {
+    description
+      "This feature indicates that the device allows user-controlled
+       interfaces to be named arbitrarily.";
+  }
+
+  feature pre-provisioning {
+    description
+      "This feature indicates that the device supports
+       pre-provisioning of interface configuration, i.e., it is
+       possible to configure an interface whose physical interface
+       hardware is not present on the device.";
+  }
+
+  feature if-mib {
+    description
+      "This feature indicates that the device implements
+       the IF-MIB.";
+    reference
+      "RFC 2863: The Interfaces Group MIB";
+  }
+
+  identity interface-type {
+    description
+      "Base identity from which specific interface types are
+       derived.";
+  }
+
+  typedef interface-ref {
+    type leafref {
+      path "/if:interfaces/if:interface/if:name";
+    }
+    description
+      "This type is used by data models that need to reference
+       configured interfaces.";
+  }
+
+  typedef interface-state-ref {
+    type leafref {
+      path "/if:interfaces-state/if:interface/if:name";
+    }
+    description
+      "This type is used by data models that need to reference
+       the operationally present interfaces.";
+  }
+
+  container interfaces {
+    description
+      "Interface configuration parameters.";
+    list interface {
+      key "name";
+      description
+        "The list of configured interfaces on the device.
+
+         The operational state of an interface is available in the
+         /interfaces-state/interface list.  If the configuration of a
+         system-controlled interface cannot be used by the system
+         (e.g., the interface hardware present does not match the
+         interface type), then the configuration is not applied to
+         the system-controlled interface shown in the
+         /interfaces-state/interface list.  If the configuration
+         of a user-controlled interface cannot be used by the system,
+         the configured interface is not instantiated in the
+         /interfaces-state/interface list.";
+      leaf name {
+        type string;
+        description
+          "The name of the interface.
+
+           A device MAY restrict the allowed values for this leaf,
+           possibly depending on the type of the interface.
+           For system-controlled interfaces, this leaf is the
+           device-specific name of the interface.  The 'config false'
+           list /interfaces-state/interface contains the currently
+           existing interfaces on the device.
+
+           If a client tries to create configuration for a
+           system-controlled interface that is not present in the
+           /interfaces-state/interface list, the server MAY reject
+           the request if the implementation does not support
+           pre-provisioning of interfaces or if the name refers to
+           an interface that can never exist in the system.  A
+           NETCONF server MUST reply with an rpc-error with the
+           error-tag 'invalid-value' in this case.
+
+           If the device supports pre-provisioning of interface
+           configuration, the 'pre-provisioning' feature is
+           advertised.
+
+           If the device allows arbitrarily named user-controlled
+           interfaces, the 'arbitrary-names' feature is advertised.
+
+           When a configured user-controlled interface is created by
+           the system, it is instantiated with the same name in the
+           /interface-state/interface list.";
+      }
+
+      leaf description {
+        type string;
+        description
+          "A textual description of the interface.
+
+           A server implementation MAY map this leaf to the ifAlias
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifAlias.  The definition of
+           such a mechanism is outside the scope of this document.
+
+           Since ifAlias is defined to be stored in non-volatile
+           storage, the MIB implementation MUST map ifAlias to the
+           value of 'description' in the persistently stored
+           datastore.
+
+           Specifically, if the device supports ':startup', when
+           ifAlias is read the device MUST return the value of
+           'description' in the 'startup' datastore, and when it is
+           written, it MUST be written to the 'running' and 'startup'
+           datastores.  Note that it is up to the implementation to
+
+           decide whether to modify this single leaf in 'startup' or
+           perform an implicit copy-config from 'running' to
+           'startup'.
+
+           If the device does not support ':startup', ifAlias MUST
+           be mapped to the 'description' leaf in the 'running'
+           datastore.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAlias";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        description
+          "The type of the interface.
+
+           When an interface entry is created, a server MAY
+           initialize the type leaf with a valid value, e.g., if it
+           is possible to derive the type from the name of the
+           interface.
+
+           If a client tries to set the type of an interface to a
+           value that can never be used by the system, e.g., if the
+           type is not supported or if the type does not match the
+           name of the interface, the server MUST reject the request.
+           A NETCONF server MUST reply with an rpc-error with the
+           error-tag 'invalid-value' in this case.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "This leaf contains the configured, desired state of the
+           interface.
+
+           Systems that implement the IF-MIB use the value of this
+           leaf in the 'running' datastore to set
+           IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+           has been initialized, as described in RFC 2863.
+
+
+
+           Changes in this leaf in the 'running' datastore are
+           reflected in ifAdminStatus, but if ifAdminStatus is
+           changed over SNMP, this leaf is not affected.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf link-up-down-trap-enable {
+        if-feature "if-mib";
+        type enumeration {
+          enum "enabled" {
+            value 1;
+          }
+          enum "disabled" {
+            value 2;
+          }
+        }
+        description
+          "Controls whether linkUp/linkDown SNMP notifications
+           should be generated for this interface.
+
+           If this node is not configured, the value 'enabled' is
+           operationally used by the server for interfaces that do
+           not operate on top of any other interface (i.e., there are
+           no 'lower-layer-if' entries), and 'disabled' otherwise.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                ifLinkUpDownTrapEnable";
+      }
+    }
+  }
+
+  container interfaces-state {
+    config false;
+    description
+      "Data nodes for the operational state of interfaces.";
+    list interface {
+      key "name";
+      description
+        "The list of interfaces on the device.
+
+         System-controlled interfaces created by the system are
+         always present in this list, whether they are configured or
+         not.";
+      leaf name {
+        type string;
+        description
+          "The name of the interface.
+
+           A server implementation MAY map this leaf to the ifName
+           MIB object.  Such an implementation needs to use some
+           mechanism to handle the differences in size and characters
+           allowed between this leaf and ifName.  The definition of
+           such a mechanism is outside the scope of this document.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifName";
+      }
+
+      leaf type {
+        type identityref {
+          base interface-type;
+        }
+        mandatory true;
+        description
+          "The type of the interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifType";
+      }
+
+      leaf admin-status {
+        if-feature "if-mib";
+        type enumeration {
+          enum "up" {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum "down" {
+            value 2;
+            description
+              "Not ready to pass packets and not in some test mode.";
+          }
+          enum "testing" {
+            value 3;
+            description
+              "In some test mode.";
+          }
+        }
+        mandatory true;
+        description
+          "The desired state of the interface.
+
+           This leaf has the same read semantics as ifAdminStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+      }
+
+      leaf oper-status {
+        type enumeration {
+          enum "up" {
+            value 1;
+            description
+              "Ready to pass packets.";
+          }
+          enum "down" {
+            value 2;
+            description
+              "The interface does not pass any packets.";
+          }
+          enum "testing" {
+            value 3;
+            description
+              "In some test mode.  No operational packets can
+               be passed.";
+          }
+          enum "unknown" {
+            value 4;
+            description
+              "Status cannot be determined for some reason.";
+          }
+          enum "dormant" {
+            value 5;
+            description
+              "Waiting for some external event.";
+          }
+          enum "not-present" {
+            value 6;
+            description
+              "Some component (typically hardware) is missing.";
+          }
+          enum "lower-layer-down" {
+            value 7;
+            description
+              "Down due to state of lower-layer interface(s).";
+          }
+        }
+        mandatory true;
+        description
+          "The current operational state of the interface.
+
+           This leaf has the same semantics as ifOperStatus.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+      }
+
+      leaf last-change {
+        type yang:date-and-time;
+        description
+          "The time the interface entered its current operational
+           state.  If the current state was entered prior to the
+           last re-initialization of the local network management
+           subsystem, then this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifLastChange";
+      }
+
+      leaf if-index {
+        if-feature "if-mib";
+        type int32 {
+          range "1..2147483647";
+        }
+        mandatory true;
+        description
+          "The ifIndex value for the ifEntry represented by this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifIndex";
+      }
+
+      leaf phys-address {
+        type yang:phys-address;
+        description
+          "The interface's address at its protocol sub-layer.  For
+           example, for an 802.x interface, this object normally
+           contains a Media Access Control (MAC) address.  The
+           interface's media-specific modules must define the bit
+
+
+           and byte ordering and the format of the value of this
+           object.  For interfaces that do not have such an address
+           (e.g., a serial line), this node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+      }
+
+      leaf-list higher-layer-if {
+        type interface-state-ref;
+        description
+          "A list of references to interfaces layered on top of this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf-list lower-layer-if {
+        type interface-state-ref;
+        description
+          "A list of references to interfaces layered underneath this
+           interface.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifStackTable";
+      }
+
+      leaf speed {
+        type yang:gauge64;
+        units "bits/second";
+        description
+          "An estimate of the interface's current bandwidth in bits
+           per second.  For interfaces that do not vary in
+           bandwidth or for those where no accurate estimation can
+           be made, this node should contain the nominal bandwidth.
+           For interfaces that have no concept of bandwidth, this
+           node is not present.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                ifSpeed, ifHighSpeed";
+      }
+
+      container statistics {
+        description
+          "A collection of interface-related statistics objects.";
+        leaf discontinuity-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "The time on the most recent occasion at which any one or
+             more of this interface's counters suffered a
+             discontinuity.  If no such discontinuities have occurred
+             since the last re-initialization of the local management
+             subsystem, then this node contains the time the local
+             management subsystem re-initialized itself.";
+        }
+
+        leaf in-octets {
+          type yang:counter64;
+          description
+            "The total number of octets received on the interface,
+             including framing characters.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+        }
+
+        leaf in-unicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were not addressed to a
+             multicast or broadcast address at this sub-layer.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+        }
+
+        leaf in-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a broadcast
+             address at this sub-layer.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                ifHCInBroadcastPkts";
+        }
+
+        leaf in-multicast-pkts {
+          type yang:counter64;
+          description
+            "The number of packets, delivered by this sub-layer to a
+             higher (sub-)layer, that were addressed to a multicast
+             address at this sub-layer.  For a MAC-layer protocol,
+             this includes both Group and Functional addresses.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                ifHCInMulticastPkts";
+        }
+
+        leaf in-discards {
+          type yang:counter32;
+          description
+            "The number of inbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being deliverable to a higher-layer
+             protocol.  One possible reason for discarding such a
+             packet could be to free up buffer space.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+        }
+
+        leaf in-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of inbound
+             packets that contained errors preventing them from being
+             deliverable to a higher-layer protocol.  For character-
+             oriented or fixed-length interfaces, the number of
+             inbound transmission units that contained errors
+             preventing them from being deliverable to a higher-layer
+             protocol.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInErrors";
+        }
+
+        leaf in-unknown-protos {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of packets
+             received via the interface that were discarded because
+             of an unknown or unsupported protocol.  For
+             character-oriented or fixed-length interfaces that
+             support protocol multiplexing, the number of
+             transmission units received via the interface that were
+             discarded because of an unknown or unsupported protocol.
+             For any interface that does not support protocol
+             multiplexing, this counter is not present.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+        }
+
+        leaf out-octets {
+          type yang:counter64;
+          description
+            "The total number of octets transmitted out of the
+             interface, including framing characters.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+        }
+
+        leaf out-unicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted, and that were not addressed
+             to a multicast or broadcast address at this sub-layer,
+             including those that were discarded or not sent.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+        }
+
+        leaf out-broadcast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted, and that were addressed to a
+             broadcast address at this sub-layer, including those
+             that were discarded or not sent.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                ifHCOutBroadcastPkts";
+        }
+
+        leaf out-multicast-pkts {
+          type yang:counter64;
+          description
+            "The total number of packets that higher-level protocols
+             requested be transmitted, and that were addressed to a
+             multicast address at this sub-layer, including those
+             that were discarded or not sent.  For a MAC-layer
+             protocol, this includes both Group and Functional
+             addresses.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB -
+                ifHCOutMulticastPkts";
+        }
+
+        leaf out-discards {
+          type yang:counter32;
+          description
+            "The number of outbound packets that were chosen to be
+             discarded even though no errors had been detected to
+             prevent their being transmitted.  One possible reason
+             for discarding such a packet could be to free up buffer
+             space.
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+        }
+
+        leaf out-errors {
+          type yang:counter32;
+          description
+            "For packet-oriented interfaces, the number of outbound
+             packets that could not be transmitted because of errors.
+             For character-oriented or fixed-length interfaces, the
+             number of outbound transmission units that could not be
+             transmitted because of errors.
+
+
+
+
+             Discontinuities in the value of this counter can occur
+             at re-initialization of the management system, and at
+             other times as indicated by the value of
+             'discontinuity-time'.";
+          reference
+            "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+        }
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-interfaces@2014-05-08.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-interfaces@2014-05-08.yin
new file mode 100644 (file)
index 0000000..20cc15c
--- /dev/null
@@ -0,0 +1,724 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-interfaces"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;yang-version value="1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-interfaces"/&gt;
+  &lt;prefix value="if"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netmod/&amp;gt;
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: Thomas Nadeau
+        &amp;lt;mailto:tnadeau@lucidvision.com&amp;gt;
+
+WG Chair: Juergen Schoenwaelder
+        &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Martin Bjorklund
+        &amp;lt;mailto:mbj@tail-f.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of YANG definitions for
+managing network interfaces.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 7223; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2014-05-08"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7223: A YANG Data Model for Interface Management&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;feature name="arbitrary-names"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This feature indicates that the device allows user-controlled
+interfaces to be named arbitrarily.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="pre-provisioning"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This feature indicates that the device supports
+pre-provisioning of interface configuration, i.e., it is
+possible to configure an interface whose physical interface
+hardware is not present on the device.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="if-mib"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This feature indicates that the device implements
+the IF-MIB.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2863: The Interfaces Group MIB&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;identity name="interface-type"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity from which specific interface types are
+derived.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;typedef name="interface-ref"&gt;
+    &lt;type name="leafref"&gt;
+      &lt;path value="/if:interfaces/if:interface/if:name"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;This type is used by data models that need to reference
+configured interfaces.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="interface-state-ref"&gt;
+    &lt;type name="leafref"&gt;
+      &lt;path value="/if:interfaces-state/if:interface/if:name"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;This type is used by data models that need to reference
+the operationally present interfaces.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;container name="interfaces"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Interface configuration parameters.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;list name="interface"&gt;
+      &lt;key value="name"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The list of configured interfaces on the device.
+
+The operational state of an interface is available in the
+/interfaces-state/interface list.  If the configuration of a
+system-controlled interface cannot be used by the system
+(e.g., the interface hardware present does not match the
+interface type), then the configuration is not applied to
+the system-controlled interface shown in the
+/interfaces-state/interface list.  If the configuration
+of a user-controlled interface cannot be used by the system,
+the configured interface is not instantiated in the
+/interfaces-state/interface list.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="name"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The name of the interface.
+
+A device MAY restrict the allowed values for this leaf,
+possibly depending on the type of the interface.
+For system-controlled interfaces, this leaf is the
+device-specific name of the interface.  The 'config false'
+list /interfaces-state/interface contains the currently
+existing interfaces on the device.
+
+If a client tries to create configuration for a
+system-controlled interface that is not present in the
+/interfaces-state/interface list, the server MAY reject
+the request if the implementation does not support
+pre-provisioning of interfaces or if the name refers to
+an interface that can never exist in the system.  A
+NETCONF server MUST reply with an rpc-error with the
+error-tag 'invalid-value' in this case.
+
+If the device supports pre-provisioning of interface
+configuration, the 'pre-provisioning' feature is
+advertised.
+
+If the device allows arbitrarily named user-controlled
+interfaces, the 'arbitrary-names' feature is advertised.
+
+When a configured user-controlled interface is created by
+the system, it is instantiated with the same name in the
+/interface-state/interface list.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="description"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A textual description of the interface.
+
+A server implementation MAY map this leaf to the ifAlias
+MIB object.  Such an implementation needs to use some
+mechanism to handle the differences in size and characters
+allowed between this leaf and ifAlias.  The definition of
+such a mechanism is outside the scope of this document.
+
+Since ifAlias is defined to be stored in non-volatile
+storage, the MIB implementation MUST map ifAlias to the
+value of 'description' in the persistently stored
+datastore.
+
+Specifically, if the device supports ':startup', when
+ifAlias is read the device MUST return the value of
+'description' in the 'startup' datastore, and when it is
+written, it MUST be written to the 'running' and 'startup'
+datastores.  Note that it is up to the implementation to
+
+decide whether to modify this single leaf in 'startup' or
+perform an implicit copy-config from 'running' to
+'startup'.
+
+If the device does not support ':startup', ifAlias MUST
+be mapped to the 'description' leaf in the 'running'
+datastore.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifAlias&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="type"&gt;
+        &lt;type name="identityref"&gt;
+          &lt;base name="interface-type"/&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The type of the interface.
+
+When an interface entry is created, a server MAY
+initialize the type leaf with a valid value, e.g., if it
+is possible to derive the type from the name of the
+interface.
+
+If a client tries to set the type of an interface to a
+value that can never be used by the system, e.g., if the
+type is not supported or if the type does not match the
+name of the interface, the server MUST reject the request.
+A NETCONF server MUST reply with an rpc-error with the
+error-tag 'invalid-value' in this case.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifType&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="enabled"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;This leaf contains the configured, desired state of the
+interface.
+
+Systems that implement the IF-MIB use the value of this
+leaf in the 'running' datastore to set
+IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+has been initialized, as described in RFC 2863.
+
+
+
+Changes in this leaf in the 'running' datastore are
+reflected in ifAdminStatus, but if ifAdminStatus is
+changed over SNMP, this leaf is not affected.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifAdminStatus&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="link-up-down-trap-enable"&gt;
+        &lt;if-feature name="if-mib"/&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="enabled"&gt;
+            &lt;value value="1"/&gt;
+          &lt;/enum&gt;
+          &lt;enum name="disabled"&gt;
+            &lt;value value="2"/&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;Controls whether linkUp/linkDown SNMP notifications
+should be generated for this interface.
+
+If this node is not configured, the value 'enabled' is
+operationally used by the server for interfaces that do
+not operate on top of any other interface (i.e., there are
+no 'lower-layer-if' entries), and 'disabled' otherwise.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB -
+     ifLinkUpDownTrapEnable&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+    &lt;/list&gt;
+  &lt;/container&gt;
+  &lt;container name="interfaces-state"&gt;
+    &lt;config value="false"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Data nodes for the operational state of interfaces.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;list name="interface"&gt;
+      &lt;key value="name"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The list of interfaces on the device.
+
+System-controlled interfaces created by the system are
+always present in this list, whether they are configured or
+not.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="name"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The name of the interface.
+
+A server implementation MAY map this leaf to the ifName
+MIB object.  Such an implementation needs to use some
+mechanism to handle the differences in size and characters
+allowed between this leaf and ifName.  The definition of
+such a mechanism is outside the scope of this document.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifName&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="type"&gt;
+        &lt;type name="identityref"&gt;
+          &lt;base name="interface-type"/&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The type of the interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifType&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="admin-status"&gt;
+        &lt;if-feature name="if-mib"/&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="up"&gt;
+            &lt;value value="1"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Ready to pass packets.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="down"&gt;
+            &lt;value value="2"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Not ready to pass packets and not in some test mode.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="testing"&gt;
+            &lt;value value="3"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;In some test mode.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The desired state of the interface.
+
+This leaf has the same read semantics as ifAdminStatus.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifAdminStatus&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="oper-status"&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="up"&gt;
+            &lt;value value="1"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Ready to pass packets.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="down"&gt;
+            &lt;value value="2"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The interface does not pass any packets.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="testing"&gt;
+            &lt;value value="3"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;In some test mode.  No operational packets can
+be passed.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="unknown"&gt;
+            &lt;value value="4"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Status cannot be determined for some reason.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="dormant"&gt;
+            &lt;value value="5"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Waiting for some external event.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="not-present"&gt;
+            &lt;value value="6"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Some component (typically hardware) is missing.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="lower-layer-down"&gt;
+            &lt;value value="7"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Down due to state of lower-layer interface(s).&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The current operational state of the interface.
+
+This leaf has the same semantics as ifOperStatus.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifOperStatus&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="last-change"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The time the interface entered its current operational
+state.  If the current state was entered prior to the
+last re-initialization of the local network management
+subsystem, then this node is not present.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifLastChange&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="if-index"&gt;
+        &lt;if-feature name="if-mib"/&gt;
+        &lt;type name="int32"&gt;
+          &lt;range value="1..2147483647"/&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The ifIndex value for the ifEntry represented by this
+interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifIndex&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="phys-address"&gt;
+        &lt;type name="yang:phys-address"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The interface's address at its protocol sub-layer.  For
+example, for an 802.x interface, this object normally
+contains a Media Access Control (MAC) address.  The
+interface's media-specific modules must define the bit
+
+
+and byte ordering and the format of the value of this
+object.  For interfaces that do not have such an address
+(e.g., a serial line), this node is not present.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifPhysAddress&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf-list name="higher-layer-if"&gt;
+        &lt;type name="interface-state-ref"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A list of references to interfaces layered on top of this
+interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifStackTable&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf-list&gt;
+      &lt;leaf-list name="lower-layer-if"&gt;
+        &lt;type name="interface-state-ref"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A list of references to interfaces layered underneath this
+interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifStackTable&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf-list&gt;
+      &lt;leaf name="speed"&gt;
+        &lt;type name="yang:gauge64"/&gt;
+        &lt;units name="bits/second"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An estimate of the interface's current bandwidth in bits
+per second.  For interfaces that do not vary in
+bandwidth or for those where no accurate estimation can
+be made, this node should contain the nominal bandwidth.
+For interfaces that have no concept of bandwidth, this
+node is not present.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2863: The Interfaces Group MIB -
+     ifSpeed, ifHighSpeed&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;container name="statistics"&gt;
+        &lt;description&gt;
+          &lt;text&gt;A collection of interface-related statistics objects.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="discontinuity-time"&gt;
+          &lt;type name="yang:date-and-time"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The time on the most recent occasion at which any one or
+more of this interface's counters suffered a
+discontinuity.  If no such discontinuities have occurred
+since the last re-initialization of the local management
+subsystem, then this node contains the time the local
+management subsystem re-initialized itself.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-octets"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The total number of octets received on the interface,
+including framing characters.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifHCInOctets&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-unicast-pkts"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of packets, delivered by this sub-layer to a
+higher (sub-)layer, that were not addressed to a
+multicast or broadcast address at this sub-layer.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-broadcast-pkts"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of packets, delivered by this sub-layer to a
+higher (sub-)layer, that were addressed to a broadcast
+address at this sub-layer.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB -
+   ifHCInBroadcastPkts&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-multicast-pkts"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of packets, delivered by this sub-layer to a
+higher (sub-)layer, that were addressed to a multicast
+address at this sub-layer.  For a MAC-layer protocol,
+this includes both Group and Functional addresses.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB -
+   ifHCInMulticastPkts&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-discards"&gt;
+          &lt;type name="yang:counter32"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of inbound packets that were chosen to be
+discarded even though no errors had been detected to
+prevent their being deliverable to a higher-layer
+protocol.  One possible reason for discarding such a
+packet could be to free up buffer space.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifInDiscards&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-errors"&gt;
+          &lt;type name="yang:counter32"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;For packet-oriented interfaces, the number of inbound
+packets that contained errors preventing them from being
+deliverable to a higher-layer protocol.  For character-
+oriented or fixed-length interfaces, the number of
+inbound transmission units that contained errors
+preventing them from being deliverable to a higher-layer
+protocol.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifInErrors&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="in-unknown-protos"&gt;
+          &lt;type name="yang:counter32"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;For packet-oriented interfaces, the number of packets
+received via the interface that were discarded because
+of an unknown or unsupported protocol.  For
+character-oriented or fixed-length interfaces that
+support protocol multiplexing, the number of
+transmission units received via the interface that were
+discarded because of an unknown or unsupported protocol.
+For any interface that does not support protocol
+multiplexing, this counter is not present.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifInUnknownProtos&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="out-octets"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The total number of octets transmitted out of the
+interface, including framing characters.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifHCOutOctets&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="out-unicast-pkts"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The total number of packets that higher-level protocols
+requested be transmitted, and that were not addressed
+to a multicast or broadcast address at this sub-layer,
+including those that were discarded or not sent.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="out-broadcast-pkts"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The total number of packets that higher-level protocols
+requested be transmitted, and that were addressed to a
+broadcast address at this sub-layer, including those
+that were discarded or not sent.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB -
+   ifHCOutBroadcastPkts&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="out-multicast-pkts"&gt;
+          &lt;type name="yang:counter64"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The total number of packets that higher-level protocols
+requested be transmitted, and that were addressed to a
+multicast address at this sub-layer, including those
+that were discarded or not sent.  For a MAC-layer
+protocol, this includes both Group and Functional
+addresses.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB -
+   ifHCOutMulticastPkts&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="out-discards"&gt;
+          &lt;type name="yang:counter32"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of outbound packets that were chosen to be
+discarded even though no errors had been detected to
+prevent their being transmitted.  One possible reason
+for discarding such a packet could be to free up buffer
+space.
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifOutDiscards&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="out-errors"&gt;
+          &lt;type name="yang:counter32"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;For packet-oriented interfaces, the number of outbound
+packets that could not be transmitted because of errors.
+For character-oriented or fixed-length interfaces, the
+number of outbound transmission units that could not be
+transmitted because of errors.
+
+
+
+
+Discontinuities in the value of this counter can occur
+at re-initialization of the management system, and at
+other times as indicated by the value of
+'discontinuity-time'.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 2863: The Interfaces Group MIB - ifOutErrors&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+      &lt;/container&gt;
+    &lt;/list&gt;
+  &lt;/container&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ip@2014-06-16.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ip@2014-06-16.yang
new file mode 100644 (file)
index 0000000..5573f1e
--- /dev/null
@@ -0,0 +1,718 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-ip {
+  yang-version 1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-ip";
+  prefix ip;
+
+  import ietf-interfaces {
+    prefix if;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netmod/&gt;
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: Thomas Nadeau
+            &lt;mailto:tnadeau@lucidvision.com&gt;
+
+     WG Chair: Juergen Schoenwaelder
+            &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Martin Bjorklund
+            &lt;mailto:mbj@tail-f.com&gt;";
+  description
+    "This module contains a collection of YANG definitions for
+     configuring IP implementations.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7277; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-06-16 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7277: A YANG Data Model for IP Management";
+  }
+
+  feature ipv4-non-contiguous-netmasks {
+    description
+      "Indicates support for configuring non-contiguous
+       subnet masks.";
+  }
+
+  feature ipv6-privacy-autoconf {
+    description
+      "Indicates support for Privacy Extensions for Stateless Address
+       Autoconfiguration in IPv6.";
+    reference
+      "RFC 4941: Privacy Extensions for Stateless Address
+            Autoconfiguration in IPv6";
+  }
+
+  typedef ip-address-origin {
+    type enumeration {
+      enum "other" {
+        value 0;
+        description
+          "None of the following.";
+      }
+      enum "static" {
+        value 1;
+        description
+          "Indicates that the address has been statically
+           configured - for example, using NETCONF or a Command Line
+           Interface.";
+      }
+      enum "dhcp" {
+        value 2;
+        description
+          "Indicates an address that has been assigned to this
+           system by a DHCP server.";
+      }
+      enum "link-layer" {
+        value 3;
+        description
+          "Indicates an address created by IPv6 stateless
+           autoconfiguration that embeds a link-layer address in its
+           interface identifier.";
+      }
+      enum "random" {
+        value 4;
+        description
+          "Indicates an address chosen by the system at
+
+           random, e.g., an IPv4 address within 169.254/16, an
+           RFC 4941 temporary address, or an RFC 7217 semantically
+           opaque address.";
+        reference
+          "RFC 4941: Privacy Extensions for Stateless Address
+                Autoconfiguration in IPv6
+           RFC 7217: A Method for Generating Semantically Opaque
+                Interface Identifiers with IPv6 Stateless
+                Address Autoconfiguration (SLAAC)";
+      }
+    }
+    description
+      "The origin of an address.";
+  }
+
+  typedef neighbor-origin {
+    type enumeration {
+      enum "other" {
+        value 0;
+        description
+          "None of the following.";
+      }
+      enum "static" {
+        value 1;
+        description
+          "Indicates that the mapping has been statically
+           configured - for example, using NETCONF or a Command Line
+           Interface.";
+      }
+      enum "dynamic" {
+        value 2;
+        description
+          "Indicates that the mapping has been dynamically resolved
+           using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
+           protocol.";
+      }
+    }
+    description
+      "The origin of a neighbor entry.";
+  }
+
+  augment "/if:interfaces/if:interface" {
+    description
+      "Parameters for configuring IP on interfaces.
+
+       If an interface is not capable of running IP, the server
+       must not allow the client to configure these parameters.";
+    container ipv4 {
+      presence "Enables IPv4 unless the 'enabled' leaf
+       (which defaults to 'true') is set to 'false'";
+      description
+        "Parameters for the IPv4 address family.";
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "Controls whether IPv4 is enabled or disabled on this
+           interface.  When IPv4 is enabled, this interface is
+           connected to an IPv4 stack, and the interface can send
+           and receive IPv4 packets.";
+      }
+
+      leaf forwarding {
+        type boolean;
+        default "false";
+        description
+          "Controls IPv4 packet forwarding of datagrams received by,
+           but not addressed to, this interface.  IPv4 routers
+           forward datagrams.  IPv4 hosts do not (except those
+           source-routed via the host).";
+      }
+
+      leaf mtu {
+        type uint16 {
+          range "68..max";
+        }
+        units "octets";
+        description
+          "The size, in octets, of the largest IPv4 packet that the
+           interface will send and receive.
+
+           The server may restrict the allowed values for this leaf,
+           depending on the interface's type.
+
+           If this leaf is not configured, the operationally used MTU
+           depends on the interface's type.";
+        reference
+          "RFC 791: Internet Protocol";
+      }
+
+      list address {
+        key "ip";
+        description
+          "The list of configured IPv4 addresses on the interface.";
+        leaf ip {
+          type inet:ipv4-address-no-zone;
+          description
+            "The IPv4 address on the interface.";
+        }
+
+        choice subnet {
+          mandatory true;
+          description
+            "The subnet can be specified as a prefix-length, or,
+             if the server supports non-contiguous netmasks, as
+             a netmask.";
+          leaf prefix-length {
+            type uint8 {
+              range "0..32";
+            }
+            description
+              "The length of the subnet prefix.";
+          }
+
+          leaf netmask {
+            if-feature "ipv4-non-contiguous-netmasks";
+            type yang:dotted-quad;
+            description
+              "The subnet specified as a netmask.";
+          }
+        }
+      }
+
+      list neighbor {
+        key "ip";
+        description
+          "A list of mappings from IPv4 addresses to
+           link-layer addresses.
+
+           Entries in this list are used as static entries in the
+           ARP Cache.";
+        reference
+          "RFC 826: An Ethernet Address Resolution Protocol";
+        leaf ip {
+          type inet:ipv4-address-no-zone;
+          description
+            "The IPv4 address of the neighbor node.";
+        }
+
+        leaf link-layer-address {
+          type yang:phys-address;
+          mandatory true;
+          description
+            "The link-layer address of the neighbor node.";
+        }
+      }
+    }
+
+    container ipv6 {
+      presence "Enables IPv6 unless the 'enabled' leaf
+       (which defaults to 'true') is set to 'false'";
+      description
+        "Parameters for the IPv6 address family.";
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "Controls whether IPv6 is enabled or disabled on this
+           interface.  When IPv6 is enabled, this interface is
+           connected to an IPv6 stack, and the interface can send
+           and receive IPv6 packets.";
+      }
+
+      leaf forwarding {
+        type boolean;
+        default "false";
+        description
+          "Controls IPv6 packet forwarding of datagrams received by,
+           but not addressed to, this interface.  IPv6 routers
+           forward datagrams.  IPv6 hosts do not (except those
+           source-routed via the host).";
+        reference
+          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+                Section 6.2.1, IsRouter";
+      }
+
+      leaf mtu {
+        type uint32 {
+          range "1280..max";
+        }
+        units "octets";
+        description
+          "The size, in octets, of the largest IPv6 packet that the
+           interface will send and receive.
+
+           The server may restrict the allowed values for this leaf,
+           depending on the interface's type.
+
+           If this leaf is not configured, the operationally used MTU
+           depends on the interface's type.";
+        reference
+          "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+                Section 5";
+      }
+
+      list address {
+        key "ip";
+        description
+          "The list of configured IPv6 addresses on the interface.";
+        leaf ip {
+          type inet:ipv6-address-no-zone;
+          description
+            "The IPv6 address on the interface.";
+        }
+
+        leaf prefix-length {
+          type uint8 {
+            range "0..128";
+          }
+          mandatory true;
+          description
+            "The length of the subnet prefix.";
+        }
+      }
+
+      list neighbor {
+        key "ip";
+        description
+          "A list of mappings from IPv6 addresses to
+           link-layer addresses.
+
+           Entries in this list are used as static entries in the
+           Neighbor Cache.";
+        reference
+          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+        leaf ip {
+          type inet:ipv6-address-no-zone;
+          description
+            "The IPv6 address of the neighbor node.";
+        }
+
+        leaf link-layer-address {
+          type yang:phys-address;
+          mandatory true;
+          description
+            "The link-layer address of the neighbor node.";
+        }
+      }
+
+      leaf dup-addr-detect-transmits {
+        type uint32;
+        default "1";
+        description
+          "The number of consecutive Neighbor Solicitation messages
+           sent while performing Duplicate Address Detection on a
+           tentative address.  A value of zero indicates that
+           Duplicate Address Detection is not performed on
+           tentative addresses.  A value of one indicates a single
+           transmission with no follow-up retransmissions.";
+        reference
+          "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+      }
+
+      container autoconf {
+        description
+          "Parameters to control the autoconfiguration of IPv6
+           addresses, as described in RFC 4862.";
+        reference
+          "RFC 4862: IPv6 Stateless Address Autoconfiguration";
+        leaf create-global-addresses {
+          type boolean;
+          default "true";
+          description
+            "If enabled, the host creates global addresses as
+             described in RFC 4862.";
+          reference
+            "RFC 4862: IPv6 Stateless Address Autoconfiguration
+                Section 5.5";
+        }
+
+        leaf create-temporary-addresses {
+          if-feature "ipv6-privacy-autoconf";
+          type boolean;
+          default "false";
+          description
+            "If enabled, the host creates temporary addresses as
+             described in RFC 4941.";
+          reference
+            "RFC 4941: Privacy Extensions for Stateless Address
+                Autoconfiguration in IPv6";
+        }
+
+        leaf temporary-valid-lifetime {
+          if-feature "ipv6-privacy-autoconf";
+          type uint32;
+          units "seconds";
+          default "604800";
+          description
+            "The time period during which the temporary address
+             is valid.";
+          reference
+            "RFC 4941: Privacy Extensions for Stateless Address
+                Autoconfiguration in IPv6
+                - TEMP_VALID_LIFETIME";
+        }
+
+        leaf temporary-preferred-lifetime {
+          if-feature "ipv6-privacy-autoconf";
+          type uint32;
+          units "seconds";
+          default "86400";
+          description
+            "The time period during which the temporary address is
+             preferred.";
+          reference
+            "RFC 4941: Privacy Extensions for Stateless Address
+                Autoconfiguration in IPv6
+                - TEMP_PREFERRED_LIFETIME";
+        }
+      }
+    }
+  }
+
+  augment "/if:interfaces-state/if:interface" {
+    description
+      "Data nodes for the operational state of IP on interfaces.";
+    container ipv4 {
+      presence "Present if IPv4 is enabled on this interface";
+      config false;
+      description
+        "Interface-specific parameters for the IPv4 address family.";
+      leaf forwarding {
+        type boolean;
+        description
+          "Indicates whether IPv4 packet forwarding is enabled or
+           disabled on this interface.";
+      }
+
+      leaf mtu {
+        type uint16 {
+          range "68..max";
+        }
+        units "octets";
+        description
+          "The size, in octets, of the largest IPv4 packet that the
+           interface will send and receive.";
+        reference
+          "RFC 791: Internet Protocol";
+      }
+
+      list address {
+        key "ip";
+        description
+          "The list of IPv4 addresses on the interface.";
+        leaf ip {
+          type inet:ipv4-address-no-zone;
+          description
+            "The IPv4 address on the interface.";
+        }
+
+        choice subnet {
+          description
+            "The subnet can be specified as a prefix-length, or,
+             if the server supports non-contiguous netmasks, as
+             a netmask.";
+          leaf prefix-length {
+            type uint8 {
+              range "0..32";
+            }
+            description
+              "The length of the subnet prefix.";
+          }
+
+          leaf netmask {
+            if-feature "ipv4-non-contiguous-netmasks";
+            type yang:dotted-quad;
+            description
+              "The subnet specified as a netmask.";
+          }
+        }
+
+        leaf origin {
+          type ip-address-origin;
+          description
+            "The origin of this address.";
+        }
+      }
+
+      list neighbor {
+        key "ip";
+        description
+          "A list of mappings from IPv4 addresses to
+           link-layer addresses.
+
+           This list represents the ARP Cache.";
+        reference
+          "RFC 826: An Ethernet Address Resolution Protocol";
+        leaf ip {
+          type inet:ipv4-address-no-zone;
+          description
+            "The IPv4 address of the neighbor node.";
+        }
+
+        leaf link-layer-address {
+          type yang:phys-address;
+          description
+            "The link-layer address of the neighbor node.";
+        }
+
+        leaf origin {
+          type neighbor-origin;
+          description
+            "The origin of this neighbor entry.";
+        }
+      }
+    }
+
+    container ipv6 {
+      presence "Present if IPv6 is enabled on this interface";
+      config false;
+      description
+        "Parameters for the IPv6 address family.";
+      leaf forwarding {
+        type boolean;
+        default "false";
+        description
+          "Indicates whether IPv6 packet forwarding is enabled or
+           disabled on this interface.";
+        reference
+          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+                Section 6.2.1, IsRouter";
+      }
+
+      leaf mtu {
+        type uint32 {
+          range "1280..max";
+        }
+        units "octets";
+        description
+          "The size, in octets, of the largest IPv6 packet that the
+           interface will send and receive.";
+        reference
+          "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+                Section 5";
+      }
+
+      list address {
+        key "ip";
+        description
+          "The list of IPv6 addresses on the interface.";
+        leaf ip {
+          type inet:ipv6-address-no-zone;
+          description
+            "The IPv6 address on the interface.";
+        }
+
+        leaf prefix-length {
+          type uint8 {
+            range "0..128";
+          }
+          mandatory true;
+          description
+            "The length of the subnet prefix.";
+        }
+
+        leaf origin {
+          type ip-address-origin;
+          description
+            "The origin of this address.";
+        }
+
+        leaf status {
+          type enumeration {
+            enum "preferred" {
+              value 0;
+              description
+                "This is a valid address that can appear as the
+                 destination or source address of a packet.";
+            }
+            enum "deprecated" {
+              value 1;
+              description
+                "This is a valid but deprecated address that should
+                 no longer be used as a source address in new
+                 communications, but packets addressed to such an
+                 address are processed as expected.";
+            }
+            enum "invalid" {
+              value 2;
+              description
+                "This isn't a valid address, and it shouldn't appear
+                 as the destination or source address of a packet.";
+            }
+            enum "inaccessible" {
+              value 3;
+              description
+                "The address is not accessible because the interface
+                 to which this address is assigned is not
+                 operational.";
+            }
+            enum "unknown" {
+              value 4;
+              description
+                "The status cannot be determined for some reason.";
+            }
+            enum "tentative" {
+              value 5;
+              description
+                "The uniqueness of the address on the link is being
+                 verified.  Addresses in this state should not be
+                 used for general communication and should only be
+                 used to determine the uniqueness of the address.";
+            }
+            enum "duplicate" {
+              value 6;
+              description
+                "The address has been determined to be non-unique on
+                 the link and so must not be used.";
+            }
+            enum "optimistic" {
+              value 7;
+              description
+                "The address is available for use, subject to
+                 restrictions, while its uniqueness on a link is
+                 being verified.";
+            }
+          }
+          description
+            "The status of an address.  Most of the states correspond
+             to states from the IPv6 Stateless Address
+             Autoconfiguration protocol.";
+          reference
+            "RFC 4293: Management Information Base for the
+                Internet Protocol (IP)
+                - IpAddressStatusTC
+             RFC 4862: IPv6 Stateless Address Autoconfiguration";
+        }
+      }
+
+      list neighbor {
+        key "ip";
+        description
+          "A list of mappings from IPv6 addresses to
+           link-layer addresses.
+
+           This list represents the Neighbor Cache.";
+        reference
+          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";
+        leaf ip {
+          type inet:ipv6-address-no-zone;
+          description
+            "The IPv6 address of the neighbor node.";
+        }
+
+        leaf link-layer-address {
+          type yang:phys-address;
+          description
+            "The link-layer address of the neighbor node.";
+        }
+
+        leaf origin {
+          type neighbor-origin;
+          description
+            "The origin of this neighbor entry.";
+        }
+
+        leaf is-router {
+          type empty;
+          description
+            "Indicates that the neighbor node acts as a router.";
+        }
+
+        leaf state {
+          type enumeration {
+            enum "incomplete" {
+              value 0;
+              description
+                "Address resolution is in progress, and the link-layer
+                 address of the neighbor has not yet been
+                 determined.";
+            }
+            enum "reachable" {
+              value 1;
+              description
+                "Roughly speaking, the neighbor is known to have been
+                 reachable recently (within tens of seconds ago).";
+            }
+            enum "stale" {
+              value 2;
+              description
+                "The neighbor is no longer known to be reachable, but
+                 until traffic is sent to the neighbor no attempt
+                 should be made to verify its reachability.";
+            }
+            enum "delay" {
+              value 3;
+              description
+                "The neighbor is no longer known to be reachable, and
+                 traffic has recently been sent to the neighbor.
+                 Rather than probe the neighbor immediately, however,
+                 delay sending probes for a short while in order to
+                 give upper-layer protocols a chance to provide
+                 reachability confirmation.";
+            }
+            enum "probe" {
+              value 4;
+              description
+                "The neighbor is no longer known to be reachable, and
+                 unicast Neighbor Solicitation probes are being sent
+                 to verify reachability.";
+            }
+          }
+          description
+            "The Neighbor Unreachability Detection state of this
+             entry.";
+          reference
+            "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+                Section 7.3.2";
+        }
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ip@2014-06-16.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ip@2014-06-16.yin
new file mode 100644 (file)
index 0000000..503e2b9
--- /dev/null
@@ -0,0 +1,782 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-ip"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ip="urn:ietf:params:xml:ns:yang:ietf-ip"
+        xmlns:if="urn:ietf:params:xml:ns:yang:ietf-interfaces"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;yang-version value="1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-ip"/&gt;
+  &lt;prefix value="ip"/&gt;
+  &lt;import module="ietf-interfaces"&gt;
+    &lt;prefix value="if"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netmod/&amp;gt;
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: Thomas Nadeau
+       &amp;lt;mailto:tnadeau@lucidvision.com&amp;gt;
+
+WG Chair: Juergen Schoenwaelder
+       &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Martin Bjorklund
+       &amp;lt;mailto:mbj@tail-f.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of YANG definitions for
+configuring IP implementations.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 7277; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2014-06-16"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7277: A YANG Data Model for IP Management&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;feature name="ipv4-non-contiguous-netmasks"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates support for configuring non-contiguous
+subnet masks.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="ipv6-privacy-autoconf"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates support for Privacy Extensions for Stateless Address
+Autoconfiguration in IPv6.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4941: Privacy Extensions for Stateless Address
+     Autoconfiguration in IPv6&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;typedef name="ip-address-origin"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="other"&gt;
+        &lt;value value="0"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;None of the following.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="static"&gt;
+        &lt;value value="1"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates that the address has been statically
+configured - for example, using NETCONF or a Command Line
+Interface.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="dhcp"&gt;
+        &lt;value value="2"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates an address that has been assigned to this
+system by a DHCP server.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="link-layer"&gt;
+        &lt;value value="3"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates an address created by IPv6 stateless
+autoconfiguration that embeds a link-layer address in its
+interface identifier.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="random"&gt;
+        &lt;value value="4"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates an address chosen by the system at
+
+random, e.g., an IPv4 address within 169.254/16, an
+RFC 4941 temporary address, or an RFC 7217 semantically
+opaque address.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4941: Privacy Extensions for Stateless Address
+     Autoconfiguration in IPv6
+RFC 7217: A Method for Generating Semantically Opaque
+     Interface Identifiers with IPv6 Stateless
+     Address Autoconfiguration (SLAAC)&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The origin of an address.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="neighbor-origin"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="other"&gt;
+        &lt;value value="0"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;None of the following.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="static"&gt;
+        &lt;value value="1"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates that the mapping has been statically
+configured - for example, using NETCONF or a Command Line
+Interface.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="dynamic"&gt;
+        &lt;value value="2"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates that the mapping has been dynamically resolved
+using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
+protocol.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The origin of a neighbor entry.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;augment target-node="/if:interfaces/if:interface"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Parameters for configuring IP on interfaces.
+
+If an interface is not capable of running IP, the server
+must not allow the client to configure these parameters.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="ipv4"&gt;
+      &lt;presence value="Enables IPv4 unless the 'enabled' leaf
+(which defaults to 'true') is set to 'false'"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Parameters for the IPv4 address family.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="enabled"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Controls whether IPv4 is enabled or disabled on this
+interface.  When IPv4 is enabled, this interface is
+connected to an IPv4 stack, and the interface can send
+and receive IPv4 packets.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="forwarding"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="false"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Controls IPv4 packet forwarding of datagrams received by,
+but not addressed to, this interface.  IPv4 routers
+forward datagrams.  IPv4 hosts do not (except those
+source-routed via the host).&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="mtu"&gt;
+        &lt;type name="uint16"&gt;
+          &lt;range value="68..max"/&gt;
+        &lt;/type&gt;
+        &lt;units name="octets"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The size, in octets, of the largest IPv4 packet that the
+interface will send and receive.
+
+The server may restrict the allowed values for this leaf,
+depending on the interface's type.
+
+If this leaf is not configured, the operationally used MTU
+depends on the interface's type.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 791: Internet Protocol&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;list name="address"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of configured IPv4 addresses on the interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv4-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv4 address on the interface.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="subnet"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The subnet can be specified as a prefix-length, or,
+if the server supports non-contiguous netmasks, as
+a netmask.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="prefix-length"&gt;
+            &lt;type name="uint8"&gt;
+              &lt;range value="0..32"/&gt;
+            &lt;/type&gt;
+            &lt;description&gt;
+              &lt;text&gt;The length of the subnet prefix.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="netmask"&gt;
+            &lt;if-feature name="ipv4-non-contiguous-netmasks"/&gt;
+            &lt;type name="yang:dotted-quad"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The subnet specified as a netmask.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/list&gt;
+      &lt;list name="neighbor"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A list of mappings from IPv4 addresses to
+link-layer addresses.
+
+Entries in this list are used as static entries in the
+ARP Cache.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 826: An Ethernet Address Resolution Protocol&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv4-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv4 address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="link-layer-address"&gt;
+          &lt;type name="yang:phys-address"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The link-layer address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="ipv6"&gt;
+      &lt;presence value="Enables IPv6 unless the 'enabled' leaf
+(which defaults to 'true') is set to 'false'"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Parameters for the IPv6 address family.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="enabled"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Controls whether IPv6 is enabled or disabled on this
+interface.  When IPv6 is enabled, this interface is
+connected to an IPv6 stack, and the interface can send
+and receive IPv6 packets.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="forwarding"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="false"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Controls IPv6 packet forwarding of datagrams received by,
+but not addressed to, this interface.  IPv6 routers
+forward datagrams.  IPv6 hosts do not (except those
+source-routed via the host).&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+     Section 6.2.1, IsRouter&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="mtu"&gt;
+        &lt;type name="uint32"&gt;
+          &lt;range value="1280..max"/&gt;
+        &lt;/type&gt;
+        &lt;units name="octets"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The size, in octets, of the largest IPv6 packet that the
+interface will send and receive.
+
+The server may restrict the allowed values for this leaf,
+depending on the interface's type.
+
+If this leaf is not configured, the operationally used MTU
+depends on the interface's type.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+     Section 5&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;list name="address"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of configured IPv6 addresses on the interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv6-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv6 address on the interface.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="prefix-length"&gt;
+          &lt;type name="uint8"&gt;
+            &lt;range value="0..128"/&gt;
+          &lt;/type&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The length of the subnet prefix.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+      &lt;list name="neighbor"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A list of mappings from IPv6 addresses to
+link-layer addresses.
+
+Entries in this list are used as static entries in the
+Neighbor Cache.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4861: Neighbor Discovery for IP version 6 (IPv6)&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv6-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv6 address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="link-layer-address"&gt;
+          &lt;type name="yang:phys-address"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The link-layer address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+      &lt;leaf name="dup-addr-detect-transmits"&gt;
+        &lt;type name="uint32"/&gt;
+        &lt;default value="1"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The number of consecutive Neighbor Solicitation messages
+sent while performing Duplicate Address Detection on a
+tentative address.  A value of zero indicates that
+Duplicate Address Detection is not performed on
+tentative addresses.  A value of one indicates a single
+transmission with no follow-up retransmissions.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4862: IPv6 Stateless Address Autoconfiguration&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;container name="autoconf"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Parameters to control the autoconfiguration of IPv6
+addresses, as described in RFC 4862.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4862: IPv6 Stateless Address Autoconfiguration&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="create-global-addresses"&gt;
+          &lt;type name="boolean"/&gt;
+          &lt;default value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;If enabled, the host creates global addresses as
+described in RFC 4862.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4862: IPv6 Stateless Address Autoconfiguration
+   Section 5.5&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="create-temporary-addresses"&gt;
+          &lt;if-feature name="ipv6-privacy-autoconf"/&gt;
+          &lt;type name="boolean"/&gt;
+          &lt;default value="false"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;If enabled, the host creates temporary addresses as
+described in RFC 4941.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4941: Privacy Extensions for Stateless Address
+   Autoconfiguration in IPv6&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="temporary-valid-lifetime"&gt;
+          &lt;if-feature name="ipv6-privacy-autoconf"/&gt;
+          &lt;type name="uint32"/&gt;
+          &lt;units name="seconds"/&gt;
+          &lt;default value="604800"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The time period during which the temporary address
+is valid.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4941: Privacy Extensions for Stateless Address
+   Autoconfiguration in IPv6
+   - TEMP_VALID_LIFETIME&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="temporary-preferred-lifetime"&gt;
+          &lt;if-feature name="ipv6-privacy-autoconf"/&gt;
+          &lt;type name="uint32"/&gt;
+          &lt;units name="seconds"/&gt;
+          &lt;default value="86400"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The time period during which the temporary address is
+preferred.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4941: Privacy Extensions for Stateless Address
+   Autoconfiguration in IPv6
+   - TEMP_PREFERRED_LIFETIME&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+      &lt;/container&gt;
+    &lt;/container&gt;
+  &lt;/augment&gt;
+  &lt;augment target-node="/if:interfaces-state/if:interface"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Data nodes for the operational state of IP on interfaces.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="ipv4"&gt;
+      &lt;presence value="Present if IPv4 is enabled on this interface"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Interface-specific parameters for the IPv4 address family.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="forwarding"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates whether IPv4 packet forwarding is enabled or
+disabled on this interface.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="mtu"&gt;
+        &lt;type name="uint16"&gt;
+          &lt;range value="68..max"/&gt;
+        &lt;/type&gt;
+        &lt;units name="octets"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The size, in octets, of the largest IPv4 packet that the
+interface will send and receive.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 791: Internet Protocol&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;list name="address"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of IPv4 addresses on the interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv4-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv4 address on the interface.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="subnet"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The subnet can be specified as a prefix-length, or,
+if the server supports non-contiguous netmasks, as
+a netmask.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="prefix-length"&gt;
+            &lt;type name="uint8"&gt;
+              &lt;range value="0..32"/&gt;
+            &lt;/type&gt;
+            &lt;description&gt;
+              &lt;text&gt;The length of the subnet prefix.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="netmask"&gt;
+            &lt;if-feature name="ipv4-non-contiguous-netmasks"/&gt;
+            &lt;type name="yang:dotted-quad"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The subnet specified as a netmask.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+        &lt;leaf name="origin"&gt;
+          &lt;type name="ip-address-origin"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The origin of this address.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+      &lt;list name="neighbor"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A list of mappings from IPv4 addresses to
+link-layer addresses.
+
+This list represents the ARP Cache.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 826: An Ethernet Address Resolution Protocol&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv4-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv4 address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="link-layer-address"&gt;
+          &lt;type name="yang:phys-address"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The link-layer address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="origin"&gt;
+          &lt;type name="neighbor-origin"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The origin of this neighbor entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="ipv6"&gt;
+      &lt;presence value="Present if IPv6 is enabled on this interface"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Parameters for the IPv6 address family.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="forwarding"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="false"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates whether IPv6 packet forwarding is enabled or
+disabled on this interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+     Section 6.2.1, IsRouter&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="mtu"&gt;
+        &lt;type name="uint32"&gt;
+          &lt;range value="1280..max"/&gt;
+        &lt;/type&gt;
+        &lt;units name="octets"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The size, in octets, of the largest IPv6 packet that the
+interface will send and receive.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+     Section 5&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;list name="address"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of IPv6 addresses on the interface.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv6-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv6 address on the interface.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="prefix-length"&gt;
+          &lt;type name="uint8"&gt;
+            &lt;range value="0..128"/&gt;
+          &lt;/type&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The length of the subnet prefix.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="origin"&gt;
+          &lt;type name="ip-address-origin"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The origin of this address.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="status"&gt;
+          &lt;type name="enumeration"&gt;
+            &lt;enum name="preferred"&gt;
+              &lt;value value="0"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;This is a valid address that can appear as the
+destination or source address of a packet.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="deprecated"&gt;
+              &lt;value value="1"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;This is a valid but deprecated address that should
+no longer be used as a source address in new
+communications, but packets addressed to such an
+address are processed as expected.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="invalid"&gt;
+              &lt;value value="2"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;This isn't a valid address, and it shouldn't appear
+as the destination or source address of a packet.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="inaccessible"&gt;
+              &lt;value value="3"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The address is not accessible because the interface
+to which this address is assigned is not
+operational.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="unknown"&gt;
+              &lt;value value="4"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The status cannot be determined for some reason.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="tentative"&gt;
+              &lt;value value="5"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The uniqueness of the address on the link is being
+verified.  Addresses in this state should not be
+used for general communication and should only be
+used to determine the uniqueness of the address.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="duplicate"&gt;
+              &lt;value value="6"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The address has been determined to be non-unique on
+the link and so must not be used.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="optimistic"&gt;
+              &lt;value value="7"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The address is available for use, subject to
+restrictions, while its uniqueness on a link is
+being verified.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;The status of an address.  Most of the states correspond
+to states from the IPv6 Stateless Address
+Autoconfiguration protocol.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4293: Management Information Base for the
+   Internet Protocol (IP)
+   - IpAddressStatusTC
+RFC 4862: IPv6 Stateless Address Autoconfiguration&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+      &lt;list name="neighbor"&gt;
+        &lt;key value="ip"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A list of mappings from IPv6 addresses to
+link-layer addresses.
+
+This list represents the Neighbor Cache.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4861: Neighbor Discovery for IP version 6 (IPv6)&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="ip"&gt;
+          &lt;type name="inet:ipv6-address-no-zone"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IPv6 address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="link-layer-address"&gt;
+          &lt;type name="yang:phys-address"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The link-layer address of the neighbor node.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="origin"&gt;
+          &lt;type name="neighbor-origin"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The origin of this neighbor entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="is-router"&gt;
+          &lt;type name="empty"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Indicates that the neighbor node acts as a router.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="state"&gt;
+          &lt;type name="enumeration"&gt;
+            &lt;enum name="incomplete"&gt;
+              &lt;value value="0"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;Address resolution is in progress, and the link-layer
+address of the neighbor has not yet been
+determined.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="reachable"&gt;
+              &lt;value value="1"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;Roughly speaking, the neighbor is known to have been
+reachable recently (within tens of seconds ago).&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="stale"&gt;
+              &lt;value value="2"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The neighbor is no longer known to be reachable, but
+until traffic is sent to the neighbor no attempt
+should be made to verify its reachability.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="delay"&gt;
+              &lt;value value="3"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The neighbor is no longer known to be reachable, and
+traffic has recently been sent to the neighbor.
+Rather than probe the neighbor immediately, however,
+delay sending probes for a short while in order to
+give upper-layer protocols a chance to provide
+reachability confirmation.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="probe"&gt;
+              &lt;value value="4"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The neighbor is no longer known to be reachable, and
+unicast Neighbor Solicitation probes are being sent
+to verify reachability.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;The Neighbor Unreachability Detection state of this
+entry.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
+   Section 7.3.2&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/augment&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-keystore@2016-10-31.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-keystore@2016-10-31.yang
new file mode 100644 (file)
index 0000000..0c20bd6
--- /dev/null
@@ -0,0 +1,559 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-keystore {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-keystore";
+  prefix ks;
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+
+     WG Chair: Mahesh Jethanandani
+               &lt;mailto:mjethanandani@gmail.com&gt;
+
+     Editor:   Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;";
+  description
+    "This module defines a keystore to centralize management of
+     security credentials.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC VVVV; see
+     the RFC itself for full legal notices.";
+
+  revision 2016-10-31 {
+    description
+      "Initial version";
+    reference
+      "RFC VVVV: NETCONF Server and RESTCONF Server Configuration
+                 Models";
+  }
+
+  identity key-algorithm {
+    description
+      "Base identity from which all key-algorithms are derived.";
+  }
+
+  identity rsa {
+    base key-algorithm;
+    description
+      "The RSA algorithm.";
+    reference
+      "RFC3447: Public-Key Cryptography Standards (PKCS) #1:
+                RSA Cryptography Specifications Version 2.1.";
+  }
+
+  identity secp192r1 {
+    base key-algorithm;
+    description
+      "The secp192r1 algorithm.";
+    reference
+      "RFC5480:
+         Elliptic Curve Cryptography Subject Public Key Information.";
+  }
+
+  identity secp256r1 {
+    base key-algorithm;
+    description
+      "The secp256r1 algorithm.";
+    reference
+      "RFC5480:
+         Elliptic Curve Cryptography Subject Public Key Information.";
+  }
+
+  identity secp384r1 {
+    base key-algorithm;
+    description
+      "The secp384r1 algorithm.";
+    reference
+      "RFC5480:
+         Elliptic Curve Cryptography Subject Public Key Information.";
+  }
+
+  identity secp521r1 {
+    base key-algorithm;
+    description
+      "The secp521r1 algorithm.";
+    reference
+      "RFC5480:
+         Elliptic Curve Cryptography Subject Public Key Information.";
+  }
+
+  container keystore {
+    description
+      "A list of private-keys and their associated certificates, as
+       well as lists of trusted certificates for client certificate
+       authentication.  RPCs are provided to generate a new private
+       key and to generate a certificate signing requests.";
+    container private-keys {
+      description
+        "A list of private key maintained by the keystore.";
+      list private-key {
+        key "name";
+        description
+          "A private key.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the private key.";
+        }
+
+        leaf algorithm {
+          type identityref {
+            base key-algorithm;
+          }
+          config false;
+          description
+            "The algorithm used by the private key.";
+        }
+
+        leaf key-length {
+          type uint32;
+          config false;
+          description
+            "The key-length used by the private key.";
+        }
+
+        leaf public-key {
+          type binary;
+          config false;
+          mandatory true;
+          description
+            "An OneAsymmetricKey 'publicKey' structure as specified
+             by RFC 5958, Section 2 encoded using the ASN.1
+             distinguished encoding rules (DER), as specified
+             in ITU-T X.690.";
+          reference
+            "RFC 5958:
+                Asymmetric Key Packages
+             ITU-T X.690:
+                Information technology - ASN.1 encoding rules:
+                Specification of Basic Encoding Rules (BER),
+                Canonical Encoding Rules (CER) and Distinguished
+                Encoding Rules (DER).";
+        }
+
+        container certificate-chains {
+          description
+            "Certificate chains associated with this private key.
+             More than one chain per key is enabled to support,
+             for instance, a TPM-protected key that has associated
+             both IDevID and LDevID certificates.";
+          list certificate-chain {
+            key "name";
+            description
+              "A certificate chain for this public key.";
+            leaf name {
+              type string;
+              description
+                "An arbitrary name for the certificate chain.  The
+                 name must be a unique across all private keys, not
+                 just within this private key.";
+            }
+
+            leaf-list certificate {
+              type binary;
+              ordered-by user;
+              description
+                "An X.509 v3 certificate structure as specified by RFC
+                 5280, Section 4 encoded using the ASN.1 distinguished
+                 encoding rules (DER), as specified in ITU-T X.690.
+                 The list of certificates that run from the server
+                 certificate towards the trust anchor.  The chain MAY
+                 include the trust anchor certificate itself.";
+              reference
+                "RFC 5280:
+                   Internet X.509 Public Key Infrastructure Certificate
+                   and Certificate Revocation List (CRL) Profile.
+                 ITU-T X.690:
+                    Information technology - ASN.1 encoding rules:
+                    Specification of Basic Encoding Rules (BER),
+                    Canonical Encoding Rules (CER) and Distinguished
+                    Encoding Rules (DER).";
+            }
+          }
+        }
+
+        action generate-certificate-signing-request {
+          description
+            "Generates a certificate signing request structure for
+             the associated private key using the passed subject and
+             attribute values.  Please review both the Security
+             Considerations and Design Considerations sections in
+             RFC VVVV for more information regarding this action
+             statement.";
+          input {
+            leaf subject {
+              type binary;
+              mandatory true;
+              description
+                "The 'subject' field from the CertificationRequestInfo
+                 structure as specified by RFC 2986, Section 4.1 encoded
+                 using the ASN.1 distinguished encoding rules (DER), as
+                 specified in ITU-T X.690.";
+              reference
+                "RFC 2986:
+                   PKCS #10: Certification Request Syntax Specification
+                   Version 1.7.
+                 ITU-T X.690:
+                    Information technology - ASN.1 encoding rules:
+                    Specification of Basic Encoding Rules (BER),
+                    Canonical Encoding Rules (CER) and Distinguished
+                    Encoding Rules (DER).";
+            }
+
+            leaf attributes {
+              type binary;
+              description
+                "The 'attributes' field from the CertificationRequestInfo
+                 structure as specified by RFC 2986, Section 4.1 encoded
+                 using the ASN.1 distinguished encoding rules (DER), as
+                 specified in ITU-T X.690.";
+              reference
+                "RFC 2986:
+                   PKCS #10: Certification Request Syntax Specification
+                   Version 1.7.
+                 ITU-T X.690:
+                    Information technology - ASN.1 encoding rules:
+                    Specification of Basic Encoding Rules (BER),
+                    Canonical Encoding Rules (CER) and Distinguished
+                    Encoding Rules (DER).";
+            }
+          }
+
+          output {
+            leaf certificate-signing-request {
+              type binary;
+              mandatory true;
+              description
+                "A CertificationRequest structure as specified by RFC
+                 2986, Section 4.1 encoded using the ASN.1 distinguished
+                 encoding rules (DER), as specified in ITU-T X.690.";
+              reference
+                "RFC 2986:
+                   PKCS #10: Certification Request Syntax Specification
+                   Version 1.7.
+                 ITU-T X.690:
+                    Information technology - ASN.1 encoding rules:
+                    Specification of Basic Encoding Rules (BER),
+                    Canonical Encoding Rules (CER) and Distinguished
+                    Encoding Rules (DER).";
+            }
+          }
+        }
+      }
+
+      action generate-private-key {
+        description
+          "Requests the device to generate a private key using the
+           specified algorithm and key length.";
+        input {
+          leaf name {
+            type string;
+            mandatory true;
+            description
+              "The name this private-key should have when listed
+               in /keystore/private-keys.  As such, the passed
+               value must not match any existing 'name' value.";
+          }
+
+          leaf algorithm {
+            type identityref {
+              base key-algorithm;
+            }
+            mandatory true;
+            description
+              "The algorithm to be used when generating the key.";
+          }
+
+          leaf key-length {
+            type uint32;
+            description
+              "For algorithms that need a key length specified
+               when generating the key.";
+          }
+        }
+      }
+
+      action load-private-key {
+        description
+          "Requests the device to load a private key";
+        input {
+          leaf name {
+            type string;
+            mandatory true;
+            description
+              "The name this private-key should have when listed
+               in /keystore/private-keys.  As such, the passed
+               value must not match any existing 'name' value.";
+          }
+
+          leaf private-key {
+            type binary;
+            mandatory true;
+            description
+              "An OneAsymmetricKey structure as specified by RFC
+               5958, Section 2 encoded using the ASN.1 distinguished
+               encoding rules (DER), as specified in ITU-T X.690.
+               Note that this is the raw private with no shrouding
+               to protect it.  The strength of this private key
+               MUST NOT be greater than the strength of the secure
+               connection over which it is communicated.  Devices
+               SHOULD fail this request if ever that happens.";
+            reference
+              "RFC 5958:
+                  Asymmetric Key Packages
+               ITU-T X.690:
+                  Information technology - ASN.1 encoding rules:
+                  Specification of Basic Encoding Rules (BER),
+                  Canonical Encoding Rules (CER) and Distinguished
+                  Encoding Rules (DER).";
+          }
+        }
+      }
+    }
+
+    list trusted-certificates {
+      key "name";
+      description
+        "A list of trusted certificates.  These certificates
+         can be used by a server to authenticate clients, or by clients
+         to authenticate servers.  The certificates may be endpoint
+         specific or for certificate authorities (to authenticate many
+         clients at once.  Each list of certificates SHOULD be specific
+         to a purpose, as the list as a whole may be referenced by other
+         modules.  For instance, a NETCONF server model might point to
+         a list of certificates to use when authenticating client
+         certificates.";
+      leaf name {
+        type string;
+        description
+          "An arbitrary name for this list of trusted certificates.";
+      }
+
+      leaf description {
+        type string;
+        description
+          "An arbitrary description for this list of trusted
+           certificates.";
+      }
+
+      list trusted-certificate {
+        key "name";
+        description
+          "A trusted certificate for a specific use.  Note, this
+           'certificate' is a list in order to encode any
+           associated intermediate certificates.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for this trusted certificate. Must
+             be unique across all lists of trusted certificates
+             (not just this list) so that a leafref to it from
+             another module can resolve to unique values.";
+        }
+
+        leaf certificate {
+          type binary;
+          description
+            "An X.509 v3 certificate structure as specified by RFC
+             5280, Section 4 encoded using the ASN.1 distinguished
+             encoding rules (DER), as specified in ITU-T X.690.";
+          reference
+            "RFC 5280:
+               Internet X.509 Public Key Infrastructure Certificate
+               and Certificate Revocation List (CRL) Profile.
+             ITU-T X.690:
+                Information technology - ASN.1 encoding rules:
+                Specification of Basic Encoding Rules (BER),
+                Canonical Encoding Rules (CER) and Distinguished
+                Encoding Rules (DER).";
+        }
+      }
+    }
+
+    list trusted-ssh-host-keys {
+      key "name";
+      description
+        "A list of trusted host-keys.  These host-keys can be used
+         by clients to authenticate SSH servers.  The host-keys are
+         endpoint specific.  Each list of host-keys SHOULD be
+         specific to a purpose, as the list as a whole may be
+         referenced by other modules.  For instance, a NETCONF
+         client model might point to a list of host-keys to use
+         when authenticating servers host-keys.";
+      leaf name {
+        type string;
+        description
+          "An arbitrary name for this list of trusted SSH host keys.";
+      }
+
+      leaf description {
+        type string;
+        description
+          "An arbitrary description for this list of trusted SSH host
+           keys.";
+      }
+
+      list trusted-host-key {
+        key "name";
+        description
+          "A trusted host key.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for this trusted host-key. Must be
+             unique across all lists of trusted host-keys (not just
+             this list) so that a leafref to it from another module
+             can resolve to unique values.
+
+             Note that, for when the SSH client is able to listen
+             for call-home connections as well, there is no reference
+             identifier (e.g., hostname, IP address, etc.) that it
+             can use to uniquely identify the server with.  The
+             call-home draft recommends SSH servers use X.509v3
+             certificates (RFC6187) when calling home.";
+        }
+
+        leaf host-key {
+          type binary;
+          mandatory true;
+          description
+            "An OneAsymmetricKey 'publicKey' structure as specified
+             by RFC 5958, Section 2 encoded using the ASN.1
+             distinguished encoding rules (DER), as specified
+             in ITU-T X.690.";
+          reference
+            "RFC 5958:
+                Asymmetric Key Packages
+             ITU-T X.690:
+                Information technology - ASN.1 encoding rules:
+                Specification of Basic Encoding Rules (BER),
+                Canonical Encoding Rules (CER) and Distinguished
+                Encoding Rules (DER).";
+        }
+      }
+    }
+
+    container user-auth-credentials {
+      description
+        "A list of user authentication credentials that can be used
+         by an SSH client to log into an SSH server, using any of
+         the supported authentication methods (e.g., password,
+         public key, client certificate, etc.).";
+      list user-auth-credential {
+        key "username";
+        description
+          "The authentication credentials for a specific user.";
+        leaf username {
+          type string;
+          description
+            "The username of this user.  This will be the username
+             used, for instance, to log into an SSH server.";
+        }
+
+        list auth-method {
+          key "priority";
+          description
+            "A method of authenticating as this user.";
+          leaf priority {
+            type uint8;
+            description
+              "When multiple authentication methods in this list are
+               supported by the server, the one with the lowest priority
+               value will be the one that is used.";
+          }
+
+          choice auth-type {
+            description
+              "The authentication type.";
+            leaf-list certificate {
+              type leafref {
+                path "/keystore/private-keys/private-key/certificate-chains/certificate-chain/name";
+              }
+              ordered-by user;
+              description
+                "A list of references to certificates that can be used
+                 for user authentication.  When multiple certificates
+                 in this list supported by the server, the one that
+                 comes before the others in the leaf-list will be
+                 used.";
+            }
+
+            leaf-list public-key {
+              type leafref {
+                path "/keystore/private-keys/private-key/name";
+              }
+              ordered-by user;
+              description
+                "A list of references to public keys that can be used
+                 for user authentication.  When multiple public keys
+                 in this list supported by the server, the one that
+                 comes before the others in the leaf-list will be
+                 used.";
+            }
+
+            leaf ciphertext-password {
+              type string;
+              description
+                "An ciphertext password.  The method of encipherment
+                 and how that method can be determined from this
+                 string is implementation-specific.";
+            }
+
+            leaf cleartext-password {
+              type string;
+              description
+                "An cleartext password.";
+            }
+          }
+        }
+      }
+    }
+  }
+
+  notification certificate-expiration {
+    description
+      "A notification indicating that a configured certificate is
+       either about to expire or has already expired.  When to send
+       notifications is an implementation specific decision, but
+       it is RECOMMENDED that a notification be sent once a month
+       for 3 months, then once a week for four weeks, and then once
+       a day thereafter.";
+    leaf certificate {
+      type instance-identifier;
+      mandatory true;
+      description
+        "Identifies which certificate is expiring or is expired.";
+    }
+
+    leaf expiration-date {
+      type yang:date-and-time;
+      mandatory true;
+      description
+        "Identifies the expiration date on the certificate.";
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-keystore@2016-10-31.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-keystore@2016-10-31.yin
new file mode 100644 (file)
index 0000000..d1208bd
--- /dev/null
@@ -0,0 +1,596 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-keystore"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ks="urn:ietf:params:xml:ns:yang:ietf-keystore"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;yang-version value="1.1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-keystore"/&gt;
+  &lt;prefix value="ks"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+
+WG Chair: Mahesh Jethanandani
+          &amp;lt;mailto:mjethanandani@gmail.com&amp;gt;
+
+Editor:   Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module defines a keystore to centralize management of
+security credentials.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD
+License set forth in Section 4.c of the IETF Trust's
+Legal Provisions Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC VVVV; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2016-10-31"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC VVVV: NETCONF Server and RESTCONF Server Configuration
+          Models&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;identity name="key-algorithm"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity from which all key-algorithms are derived.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rsa"&gt;
+    &lt;base name="key-algorithm"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The RSA algorithm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC3447: Public-Key Cryptography Standards (PKCS) #1:
+         RSA Cryptography Specifications Version 2.1.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="secp192r1"&gt;
+    &lt;base name="key-algorithm"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The secp192r1 algorithm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC5480:
+  Elliptic Curve Cryptography Subject Public Key Information.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="secp256r1"&gt;
+    &lt;base name="key-algorithm"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The secp256r1 algorithm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC5480:
+  Elliptic Curve Cryptography Subject Public Key Information.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="secp384r1"&gt;
+    &lt;base name="key-algorithm"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The secp384r1 algorithm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC5480:
+  Elliptic Curve Cryptography Subject Public Key Information.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="secp521r1"&gt;
+    &lt;base name="key-algorithm"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The secp521r1 algorithm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC5480:
+  Elliptic Curve Cryptography Subject Public Key Information.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;container name="keystore"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A list of private-keys and their associated certificates, as
+well as lists of trusted certificates for client certificate
+authentication.  RPCs are provided to generate a new private
+key and to generate a certificate signing requests.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="private-keys"&gt;
+      &lt;description&gt;
+        &lt;text&gt;A list of private key maintained by the keystore.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="private-key"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A private key.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for the private key.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="algorithm"&gt;
+          &lt;type name="identityref"&gt;
+            &lt;base name="key-algorithm"/&gt;
+          &lt;/type&gt;
+          &lt;config value="false"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The algorithm used by the private key.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="key-length"&gt;
+          &lt;type name="uint32"/&gt;
+          &lt;config value="false"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The key-length used by the private key.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="public-key"&gt;
+          &lt;type name="binary"/&gt;
+          &lt;config value="false"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An OneAsymmetricKey 'publicKey' structure as specified
+by RFC 5958, Section 2 encoded using the ASN.1
+distinguished encoding rules (DER), as specified
+in ITU-T X.690.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 5958:
+   Asymmetric Key Packages
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;container name="certificate-chains"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Certificate chains associated with this private key.
+More than one chain per key is enabled to support,
+for instance, a TPM-protected key that has associated
+both IDevID and LDevID certificates.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;list name="certificate-chain"&gt;
+            &lt;key value="name"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;A certificate chain for this public key.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;leaf name="name"&gt;
+              &lt;type name="string"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;An arbitrary name for the certificate chain.  The
+name must be a unique across all private keys, not
+just within this private key.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+            &lt;leaf-list name="certificate"&gt;
+              &lt;type name="binary"/&gt;
+              &lt;ordered-by value="user"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;An X.509 v3 certificate structure as specified by RFC
+5280, Section 4 encoded using the ASN.1 distinguished
+encoding rules (DER), as specified in ITU-T X.690.
+The list of certificates that run from the server
+certificate towards the trust anchor.  The chain MAY
+include the trust anchor certificate itself.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 5280:
+  Internet X.509 Public Key Infrastructure Certificate
+  and Certificate Revocation List (CRL) Profile.
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+              &lt;/reference&gt;
+            &lt;/leaf-list&gt;
+          &lt;/list&gt;
+        &lt;/container&gt;
+        &lt;action name="generate-certificate-signing-request"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Generates a certificate signing request structure for
+the associated private key using the passed subject and
+attribute values.  Please review both the Security
+Considerations and Design Considerations sections in
+RFC VVVV for more information regarding this action
+statement.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;input&gt;
+            &lt;leaf name="subject"&gt;
+              &lt;type name="binary"/&gt;
+              &lt;mandatory value="true"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The 'subject' field from the CertificationRequestInfo
+structure as specified by RFC 2986, Section 4.1 encoded
+using the ASN.1 distinguished encoding rules (DER), as
+specified in ITU-T X.690.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 2986:
+  PKCS #10: Certification Request Syntax Specification
+  Version 1.7.
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+              &lt;/reference&gt;
+            &lt;/leaf&gt;
+            &lt;leaf name="attributes"&gt;
+              &lt;type name="binary"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The 'attributes' field from the CertificationRequestInfo
+structure as specified by RFC 2986, Section 4.1 encoded
+using the ASN.1 distinguished encoding rules (DER), as
+specified in ITU-T X.690.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 2986:
+  PKCS #10: Certification Request Syntax Specification
+  Version 1.7.
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+              &lt;/reference&gt;
+            &lt;/leaf&gt;
+          &lt;/input&gt;
+          &lt;output&gt;
+            &lt;leaf name="certificate-signing-request"&gt;
+              &lt;type name="binary"/&gt;
+              &lt;mandatory value="true"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;A CertificationRequest structure as specified by RFC
+2986, Section 4.1 encoded using the ASN.1 distinguished
+encoding rules (DER), as specified in ITU-T X.690.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 2986:
+  PKCS #10: Certification Request Syntax Specification
+  Version 1.7.
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+              &lt;/reference&gt;
+            &lt;/leaf&gt;
+          &lt;/output&gt;
+        &lt;/action&gt;
+      &lt;/list&gt;
+      &lt;action name="generate-private-key"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Requests the device to generate a private key using the
+specified algorithm and key length.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;input&gt;
+          &lt;leaf name="name"&gt;
+            &lt;type name="string"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The name this private-key should have when listed
+in /keystore/private-keys.  As such, the passed
+value must not match any existing 'name' value.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="algorithm"&gt;
+            &lt;type name="identityref"&gt;
+              &lt;base name="key-algorithm"/&gt;
+            &lt;/type&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The algorithm to be used when generating the key.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="key-length"&gt;
+            &lt;type name="uint32"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;For algorithms that need a key length specified
+when generating the key.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/input&gt;
+      &lt;/action&gt;
+      &lt;action name="load-private-key"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Requests the device to load a private key&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;input&gt;
+          &lt;leaf name="name"&gt;
+            &lt;type name="string"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The name this private-key should have when listed
+in /keystore/private-keys.  As such, the passed
+value must not match any existing 'name' value.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="private-key"&gt;
+            &lt;type name="binary"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;An OneAsymmetricKey structure as specified by RFC
+5958, Section 2 encoded using the ASN.1 distinguished
+encoding rules (DER), as specified in ITU-T X.690.
+Note that this is the raw private with no shrouding
+to protect it.  The strength of this private key
+MUST NOT be greater than the strength of the secure
+connection over which it is communicated.  Devices
+SHOULD fail this request if ever that happens.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;reference&gt;
+              &lt;text&gt;RFC 5958:
+   Asymmetric Key Packages
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+            &lt;/reference&gt;
+          &lt;/leaf&gt;
+        &lt;/input&gt;
+      &lt;/action&gt;
+    &lt;/container&gt;
+    &lt;list name="trusted-certificates"&gt;
+      &lt;key value="name"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;A list of trusted certificates.  These certificates
+can be used by a server to authenticate clients, or by clients
+to authenticate servers.  The certificates may be endpoint
+specific or for certificate authorities (to authenticate many
+clients at once.  Each list of certificates SHOULD be specific
+to a purpose, as the list as a whole may be referenced by other
+modules.  For instance, a NETCONF server model might point to
+a list of certificates to use when authenticating client
+certificates.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="name"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An arbitrary name for this list of trusted certificates.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="description"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An arbitrary description for this list of trusted
+certificates.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;list name="trusted-certificate"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A trusted certificate for a specific use.  Note, this
+'certificate' is a list in order to encode any
+associated intermediate certificates.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for this trusted certificate. Must
+be unique across all lists of trusted certificates
+(not just this list) so that a leafref to it from
+another module can resolve to unique values.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="certificate"&gt;
+          &lt;type name="binary"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An X.509 v3 certificate structure as specified by RFC
+5280, Section 4 encoded using the ASN.1 distinguished
+encoding rules (DER), as specified in ITU-T X.690.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 5280:
+  Internet X.509 Public Key Infrastructure Certificate
+  and Certificate Revocation List (CRL) Profile.
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/list&gt;
+    &lt;list name="trusted-ssh-host-keys"&gt;
+      &lt;key value="name"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;A list of trusted host-keys.  These host-keys can be used
+by clients to authenticate SSH servers.  The host-keys are
+endpoint specific.  Each list of host-keys SHOULD be
+specific to a purpose, as the list as a whole may be
+referenced by other modules.  For instance, a NETCONF
+client model might point to a list of host-keys to use
+when authenticating servers host-keys.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="name"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An arbitrary name for this list of trusted SSH host keys.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="description"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An arbitrary description for this list of trusted SSH host
+keys.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;list name="trusted-host-key"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A trusted host key.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for this trusted host-key. Must be
+unique across all lists of trusted host-keys (not just
+this list) so that a leafref to it from another module
+can resolve to unique values.
+
+Note that, for when the SSH client is able to listen
+for call-home connections as well, there is no reference
+identifier (e.g., hostname, IP address, etc.) that it
+can use to uniquely identify the server with.  The
+call-home draft recommends SSH servers use X.509v3
+certificates (RFC6187) when calling home.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="host-key"&gt;
+          &lt;type name="binary"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An OneAsymmetricKey 'publicKey' structure as specified
+by RFC 5958, Section 2 encoded using the ASN.1
+distinguished encoding rules (DER), as specified
+in ITU-T X.690.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 5958:
+   Asymmetric Key Packages
+ITU-T X.690:
+   Information technology - ASN.1 encoding rules:
+   Specification of Basic Encoding Rules (BER),
+   Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules (DER).&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/list&gt;
+    &lt;container name="user-auth-credentials"&gt;
+      &lt;description&gt;
+        &lt;text&gt;A list of user authentication credentials that can be used
+by an SSH client to log into an SSH server, using any of
+the supported authentication methods (e.g., password,
+public key, client certificate, etc.).&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="user-auth-credential"&gt;
+        &lt;key value="username"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The authentication credentials for a specific user.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="username"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The username of this user.  This will be the username
+used, for instance, to log into an SSH server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;list name="auth-method"&gt;
+          &lt;key value="priority"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A method of authenticating as this user.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="priority"&gt;
+            &lt;type name="uint8"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;When multiple authentication methods in this list are
+supported by the server, the one with the lowest priority
+value will be the one that is used.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;choice name="auth-type"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The authentication type.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;leaf-list name="certificate"&gt;
+              &lt;type name="leafref"&gt;
+                &lt;path value="/keystore/private-keys/private-key/certificate-chains/certificate-chain/name"/&gt;
+              &lt;/type&gt;
+              &lt;ordered-by value="user"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;A list of references to certificates that can be used
+for user authentication.  When multiple certificates
+in this list supported by the server, the one that
+comes before the others in the leaf-list will be
+used.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf-list&gt;
+            &lt;leaf-list name="public-key"&gt;
+              &lt;type name="leafref"&gt;
+                &lt;path value="/keystore/private-keys/private-key/name"/&gt;
+              &lt;/type&gt;
+              &lt;ordered-by value="user"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;A list of references to public keys that can be used
+for user authentication.  When multiple public keys
+in this list supported by the server, the one that
+comes before the others in the leaf-list will be
+used.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf-list&gt;
+            &lt;leaf name="ciphertext-password"&gt;
+              &lt;type name="string"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;An ciphertext password.  The method of encipherment
+and how that method can be determined from this
+string is implementation-specific.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+            &lt;leaf name="cleartext-password"&gt;
+              &lt;type name="string"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;An cleartext password.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+          &lt;/choice&gt;
+        &lt;/list&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;notification name="certificate-expiration"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A notification indicating that a configured certificate is
+either about to expire or has already expired.  When to send
+notifications is an implementation specific decision, but
+it is RECOMMENDED that a notification be sent once a month
+for 3 months, then once a week for four weeks, and then once
+a day thereafter.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="certificate"&gt;
+      &lt;type name="instance-identifier"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Identifies which certificate is expiring or is expired.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="expiration-date"&gt;
+      &lt;type name="yang:date-and-time"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Identifies the expiration date on the certificate.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/notification&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-acm@2012-02-22.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-acm@2012-02-22.yang
new file mode 100644 (file)
index 0000000..f466c42
--- /dev/null
@@ -0,0 +1,433 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-netconf-acm {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+  prefix nacm;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+
+     WG Chair: Bert Wijnen
+               &lt;mailto:bertietf@bwijnen.net&gt;
+
+     Editor:   Andy Bierman
+               &lt;mailto:andy@yumaworks.com&gt;
+
+     Editor:   Martin Bjorklund
+               &lt;mailto:mbj@tail-f.com&gt;";
+  description
+    "NETCONF Access Control Model.
+
+     Copyright (c) 2012 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6536; see
+     the RFC itself for full legal notices.";
+
+  revision 2012-02-22 {
+    description
+      "Initial version";
+    reference
+      "RFC 6536: Network Configuration Protocol (NETCONF)
+                 Access Control Model";
+  }
+
+  extension default-deny-write {
+    description
+      "Used to indicate that the data model node
+       represents a sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       write access to the node.  An explicit access control rule is
+       required for all other users.
+
+       The 'default-deny-write' extension MAY appear within a data
+       definition statement.  It is ignored otherwise.";
+  }
+
+  extension default-deny-all {
+    description
+      "Used to indicate that the data model node
+       controls a very sensitive security system parameter.
+
+       If present, and the NACM module is enabled (i.e.,
+       /nacm/enable-nacm object equals 'true'), the NETCONF server
+       will only allow the designated 'recovery session' to have
+       read, write, or execute access to the node.  An explicit
+       access control rule is required for all other users.
+
+       The 'default-deny-all' extension MAY appear within a data
+       definition statement, 'rpc' statement, or 'notification'
+       statement.  It is ignored otherwise.";
+  }
+
+  typedef user-name-type {
+    type string {
+      length "1..max";
+    }
+    description
+      "General Purpose Username string.";
+  }
+
+  typedef matchall-string-type {
+    type string {
+      pattern "\\*";
+    }
+    description
+      "The string containing a single asterisk '*' is used
+       to conceptually represent all possible values
+       for the particular leaf using this data type.";
+  }
+
+  typedef access-operations-type {
+    type bits {
+      bit create {
+        description
+          "Any protocol operation that creates a
+           new data node.";
+      }
+      bit read {
+        description
+          "Any protocol operation or notification that
+           returns the value of a data node.";
+      }
+      bit update {
+        description
+          "Any protocol operation that alters an existing
+           data node.";
+      }
+      bit delete {
+        description
+          "Any protocol operation that removes a data node.";
+      }
+      bit exec {
+        description
+          "Execution access to the specified protocol operation.";
+      }
+    }
+    description
+      "NETCONF Access Operation.";
+  }
+
+  typedef group-name-type {
+    type string {
+      length "1..max";
+      pattern "[^\\*].*";
+    }
+    description
+      "Name of administrative group to which
+       users can be assigned.";
+  }
+
+  typedef action-type {
+    type enumeration {
+      enum "permit" {
+        description
+          "Requested action is permitted.";
+      }
+      enum "deny" {
+        description
+          "Requested action is denied.";
+      }
+    }
+    description
+      "Action taken by the server when a particular
+       rule matches.";
+  }
+
+  typedef node-instance-identifier {
+    type yang:xpath1.0;
+    description
+      "Path expression used to represent a special
+       data node instance identifier string.
+
+       A node-instance-identifier value is an
+       unrestricted YANG instance-identifier expression.
+       All the same rules as an instance-identifier apply
+       except predicates for keys are optional.  If a key
+       predicate is missing, then the node-instance-identifier
+       represents all possible server instances for that key.
+
+       This XPath expression is evaluated in the following context:
+
+        o  The set of namespace declarations are those in scope on
+           the leaf element where this type is used.
+
+        o  The set of variable bindings contains one variable,
+           'USER', which contains the name of the user of the current
+            session.
+
+        o  The function library is the core function library, but
+           note that due to the syntax restrictions of an
+           instance-identifier, no functions are allowed.
+
+        o  The context node is the root node in the data tree.";
+  }
+
+  container nacm {
+    nacm:default-deny-all;
+    description
+      "Parameters for NETCONF Access Control Model.";
+    leaf enable-nacm {
+      type boolean;
+      default "true";
+      description
+        "Enables or disables all NETCONF access control
+         enforcement.  If 'true', then enforcement
+         is enabled.  If 'false', then enforcement
+         is disabled.";
+    }
+
+    leaf read-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether read access is granted if
+         no appropriate rule is found for a
+         particular read request.";
+    }
+
+    leaf write-default {
+      type action-type;
+      default "deny";
+      description
+        "Controls whether create, update, or delete access
+         is granted if no appropriate rule is found for a
+         particular write request.";
+    }
+
+    leaf exec-default {
+      type action-type;
+      default "permit";
+      description
+        "Controls whether exec access is granted if no appropriate
+         rule is found for a particular protocol operation request.";
+    }
+
+    leaf enable-external-groups {
+      type boolean;
+      default "true";
+      description
+        "Controls whether the server uses the groups reported by the
+         NETCONF transport layer when it assigns the user to a set of
+         NACM groups.  If this leaf has the value 'false', any group
+         names reported by the transport layer are ignored by the
+         server.";
+    }
+
+    leaf denied-operations {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request was denied.";
+    }
+
+    leaf denied-data-writes {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that a
+         protocol operation request to alter
+         a configuration datastore was denied.";
+    }
+
+    leaf denied-notifications {
+      type yang:zero-based-counter32;
+      config false;
+      mandatory true;
+      description
+        "Number of times since the server last restarted that
+         a notification was dropped for a subscription because
+         access to the event type was denied.";
+    }
+
+    container groups {
+      description
+        "NETCONF Access Control Groups.";
+      list group {
+        key "name";
+        description
+          "One NACM Group Entry.  This list will only contain
+           configured entries, not any entries learned from
+           any transport protocols.";
+        leaf name {
+          type group-name-type;
+          description
+            "Group name associated with this entry.";
+        }
+
+        leaf-list user-name {
+          type user-name-type;
+          description
+            "Each entry identifies the username of
+             a member of the group associated with
+             this entry.";
+        }
+      }
+    }
+
+    list rule-list {
+      key "name";
+      ordered-by user;
+      description
+        "An ordered collection of access control rules.";
+      leaf name {
+        type string {
+          length "1..max";
+        }
+        description
+          "Arbitrary name assigned to the rule-list.";
+      }
+
+      leaf-list group {
+        type union {
+          type matchall-string-type;
+          type group-name-type;
+        }
+        description
+          "List of administrative groups that will be
+           assigned the associated access rights
+           defined by the 'rule' list.
+
+           The string '*' indicates that all groups apply to the
+           entry.";
+      }
+
+      list rule {
+        key "name";
+        ordered-by user;
+        description
+          "One access control rule.
+
+           Rules are processed in user-defined order until a match is
+           found.  A rule matches if 'module-name', 'rule-type', and
+           'access-operations' match the request.  If a rule
+           matches, the 'action' leaf determines if access is granted
+           or not.";
+        leaf name {
+          type string {
+            length "1..max";
+          }
+          description
+            "Arbitrary name assigned to the rule.";
+        }
+
+        leaf module-name {
+          type union {
+            type matchall-string-type;
+            type string;
+          }
+          default "*";
+          description
+            "Name of the module associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             object being accessed is defined in the module with the
+             specified module name.";
+        }
+
+        choice rule-type {
+          description
+            "This choice matches if all leafs present in the rule
+             match the request.  If no leafs are present, the
+             choice matches all requests.";
+          case protocol-operation {
+            leaf rpc-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if
+                 its value equals the requested protocol operation
+                 name.";
+            }
+          }
+
+          case notification {
+            leaf notification-name {
+              type union {
+                type matchall-string-type;
+                type string;
+              }
+              description
+                "This leaf matches if it has the value '*' or if its
+                 value equals the requested notification name.";
+            }
+          }
+
+          case data-node {
+            leaf path {
+              type node-instance-identifier;
+              mandatory true;
+              description
+                "Data Node Instance Identifier associated with the
+                 data node controlled by this rule.
+
+                 Configuration data or state data instance
+                 identifiers start with a top-level data node.  A
+                 complete instance identifier is required for this
+                 type of path value.
+
+                 The special value '/' refers to all possible
+                 datastore contents.";
+            }
+          }
+        }
+
+        leaf access-operations {
+          type union {
+            type matchall-string-type;
+            type access-operations-type;
+          }
+          default "*";
+          description
+            "Access operations associated with this rule.
+
+             This leaf matches if it has the value '*' or if the
+             bit corresponding to the requested operation is set.";
+        }
+
+        leaf action {
+          type action-type;
+          mandatory true;
+          description
+            "The access control action associated with the
+             rule.  If a rule is determined to match a
+             particular request, then this object is used
+             to determine whether to permit or deny the
+             request.";
+        }
+
+        leaf comment {
+          type string;
+          description
+            "A textual description of the access rule.";
+        }
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-acm@2012-02-22.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-acm@2012-02-22.yin
new file mode 100644 (file)
index 0000000..b73ab4e
--- /dev/null
@@ -0,0 +1,452 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-netconf-acm"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:nacm="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"/&gt;
+  &lt;prefix value="nacm"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+
+WG Chair: Bert Wijnen
+          &amp;lt;mailto:bertietf@bwijnen.net&amp;gt;
+
+Editor:   Andy Bierman
+          &amp;lt;mailto:andy@yumaworks.com&amp;gt;
+
+Editor:   Martin Bjorklund
+          &amp;lt;mailto:mbj@tail-f.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;NETCONF Access Control Model.
+
+Copyright (c) 2012 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD
+License set forth in Section 4.c of the IETF Trust's
+Legal Provisions Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 6536; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2012-02-22"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6536: Network Configuration Protocol (NETCONF)
+          Access Control Model&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;extension name="default-deny-write"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Used to indicate that the data model node
+represents a sensitive security system parameter.
+
+If present, and the NACM module is enabled (i.e.,
+/nacm/enable-nacm object equals 'true'), the NETCONF server
+will only allow the designated 'recovery session' to have
+write access to the node.  An explicit access control rule is
+required for all other users.
+
+The 'default-deny-write' extension MAY appear within a data
+definition statement.  It is ignored otherwise.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/extension&gt;
+  &lt;extension name="default-deny-all"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Used to indicate that the data model node
+controls a very sensitive security system parameter.
+
+If present, and the NACM module is enabled (i.e.,
+/nacm/enable-nacm object equals 'true'), the NETCONF server
+will only allow the designated 'recovery session' to have
+read, write, or execute access to the node.  An explicit
+access control rule is required for all other users.
+
+The 'default-deny-all' extension MAY appear within a data
+definition statement, 'rpc' statement, or 'notification'
+statement.  It is ignored otherwise.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/extension&gt;
+  &lt;typedef name="user-name-type"&gt;
+    &lt;type name="string"&gt;
+      &lt;length value="1..max"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;General Purpose Username string.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="matchall-string-type"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="\*"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The string containing a single asterisk '*' is used
+to conceptually represent all possible values
+for the particular leaf using this data type.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="access-operations-type"&gt;
+    &lt;type name="bits"&gt;
+      &lt;bit name="create"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Any protocol operation that creates a
+new data node.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/bit&gt;
+      &lt;bit name="read"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Any protocol operation or notification that
+returns the value of a data node.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/bit&gt;
+      &lt;bit name="update"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Any protocol operation that alters an existing
+data node.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/bit&gt;
+      &lt;bit name="delete"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Any protocol operation that removes a data node.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/bit&gt;
+      &lt;bit name="exec"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Execution access to the specified protocol operation.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/bit&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF Access Operation.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="group-name-type"&gt;
+    &lt;type name="string"&gt;
+      &lt;length value="1..max"/&gt;
+      &lt;pattern value="[^\*].*"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Name of administrative group to which
+users can be assigned.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="action-type"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="permit"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Requested action is permitted.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="deny"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Requested action is denied.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Action taken by the server when a particular
+rule matches.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="node-instance-identifier"&gt;
+    &lt;type name="yang:xpath1.0"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Path expression used to represent a special
+data node instance identifier string.
+
+A node-instance-identifier value is an
+unrestricted YANG instance-identifier expression.
+All the same rules as an instance-identifier apply
+except predicates for keys are optional.  If a key
+predicate is missing, then the node-instance-identifier
+represents all possible server instances for that key.
+
+This XPath expression is evaluated in the following context:
+
+ o  The set of namespace declarations are those in scope on
+    the leaf element where this type is used.
+
+ o  The set of variable bindings contains one variable,
+    'USER', which contains the name of the user of the current
+     session.
+
+ o  The function library is the core function library, but
+    note that due to the syntax restrictions of an
+    instance-identifier, no functions are allowed.
+
+ o  The context node is the root node in the data tree.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;container name="nacm"&gt;
+    &lt;nacm:default-deny-all/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Parameters for NETCONF Access Control Model.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="enable-nacm"&gt;
+      &lt;type name="boolean"/&gt;
+      &lt;default value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Enables or disables all NETCONF access control
+enforcement.  If 'true', then enforcement
+is enabled.  If 'false', then enforcement
+is disabled.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="read-default"&gt;
+      &lt;type name="action-type"/&gt;
+      &lt;default value="permit"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Controls whether read access is granted if
+no appropriate rule is found for a
+particular read request.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="write-default"&gt;
+      &lt;type name="action-type"/&gt;
+      &lt;default value="deny"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Controls whether create, update, or delete access
+is granted if no appropriate rule is found for a
+particular write request.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="exec-default"&gt;
+      &lt;type name="action-type"/&gt;
+      &lt;default value="permit"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Controls whether exec access is granted if no appropriate
+rule is found for a particular protocol operation request.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="enable-external-groups"&gt;
+      &lt;type name="boolean"/&gt;
+      &lt;default value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Controls whether the server uses the groups reported by the
+NETCONF transport layer when it assigns the user to a set of
+NACM groups.  If this leaf has the value 'false', any group
+names reported by the transport layer are ignored by the
+server.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="denied-operations"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of times since the server last restarted that a
+protocol operation request was denied.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="denied-data-writes"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of times since the server last restarted that a
+protocol operation request to alter
+a configuration datastore was denied.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="denied-notifications"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of times since the server last restarted that
+a notification was dropped for a subscription because
+access to the event type was denied.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;container name="groups"&gt;
+      &lt;description&gt;
+        &lt;text&gt;NETCONF Access Control Groups.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="group"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;One NACM Group Entry.  This list will only contain
+configured entries, not any entries learned from
+any transport protocols.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="group-name-type"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Group name associated with this entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf-list name="user-name"&gt;
+          &lt;type name="user-name-type"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Each entry identifies the username of
+a member of the group associated with
+this entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf-list&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;list name="rule-list"&gt;
+      &lt;key value="name"/&gt;
+      &lt;ordered-by value="user"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;An ordered collection of access control rules.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="name"&gt;
+        &lt;type name="string"&gt;
+          &lt;length value="1..max"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;Arbitrary name assigned to the rule-list.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf-list name="group"&gt;
+        &lt;type name="union"&gt;
+          &lt;type name="matchall-string-type"/&gt;
+          &lt;type name="group-name-type"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of administrative groups that will be
+assigned the associated access rights
+defined by the 'rule' list.
+
+The string '*' indicates that all groups apply to the
+entry.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf-list&gt;
+      &lt;list name="rule"&gt;
+        &lt;key value="name"/&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;One access control rule.
+
+Rules are processed in user-defined order until a match is
+found.  A rule matches if 'module-name', 'rule-type', and
+'access-operations' match the request.  If a rule
+matches, the 'action' leaf determines if access is granted
+or not.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"&gt;
+            &lt;length value="1..max"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;Arbitrary name assigned to the rule.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="module-name"&gt;
+          &lt;type name="union"&gt;
+            &lt;type name="matchall-string-type"/&gt;
+            &lt;type name="string"/&gt;
+          &lt;/type&gt;
+          &lt;default value="*"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Name of the module associated with this rule.
+
+This leaf matches if it has the value '*' or if the
+object being accessed is defined in the module with the
+specified module name.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="rule-type"&gt;
+          &lt;description&gt;
+            &lt;text&gt;This choice matches if all leafs present in the rule
+match the request.  If no leafs are present, the
+choice matches all requests.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;case name="protocol-operation"&gt;
+            &lt;leaf name="rpc-name"&gt;
+              &lt;type name="union"&gt;
+                &lt;type name="matchall-string-type"/&gt;
+                &lt;type name="string"/&gt;
+              &lt;/type&gt;
+              &lt;description&gt;
+                &lt;text&gt;This leaf matches if it has the value '*' or if
+its value equals the requested protocol operation
+name.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+          &lt;/case&gt;
+          &lt;case name="notification"&gt;
+            &lt;leaf name="notification-name"&gt;
+              &lt;type name="union"&gt;
+                &lt;type name="matchall-string-type"/&gt;
+                &lt;type name="string"/&gt;
+              &lt;/type&gt;
+              &lt;description&gt;
+                &lt;text&gt;This leaf matches if it has the value '*' or if its
+value equals the requested notification name.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+          &lt;/case&gt;
+          &lt;case name="data-node"&gt;
+            &lt;leaf name="path"&gt;
+              &lt;type name="node-instance-identifier"/&gt;
+              &lt;mandatory value="true"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;Data Node Instance Identifier associated with the
+data node controlled by this rule.
+
+Configuration data or state data instance
+identifiers start with a top-level data node.  A
+complete instance identifier is required for this
+type of path value.
+
+The special value '/' refers to all possible
+datastore contents.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+          &lt;/case&gt;
+        &lt;/choice&gt;
+        &lt;leaf name="access-operations"&gt;
+          &lt;type name="union"&gt;
+            &lt;type name="matchall-string-type"/&gt;
+            &lt;type name="access-operations-type"/&gt;
+          &lt;/type&gt;
+          &lt;default value="*"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Access operations associated with this rule.
+
+This leaf matches if it has the value '*' or if the
+bit corresponding to the requested operation is set.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="action"&gt;
+          &lt;type name="action-type"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The access control action associated with the
+rule.  If a rule is determined to match a
+particular request, then this object is used
+to determine whether to permit or deny the
+request.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="comment"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A textual description of the access rule.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/list&gt;
+  &lt;/container&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-monitoring@2010-10-04.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-monitoring@2010-10-04.yang
new file mode 100644 (file)
index 0000000..bd4f63b
--- /dev/null
@@ -0,0 +1,570 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-netconf-monitoring {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring";
+  prefix ncm;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+
+     WG Chair: Bert Wijnen
+               &lt;mailto:bertietf@bwijnen.net&gt;
+
+     Editor:   Mark Scott
+               &lt;mailto:mark.scott@ericsson.com&gt;
+
+     Editor:   Martin Bjorklund
+               &lt;mailto:mbj@tail-f.com&gt;";
+  description
+    "NETCONF Monitoring Module.
+     All elements in this module are read-only.
+
+     Copyright (c) 2010 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6022; see
+     the RFC itself for full legal notices.";
+
+  revision 2010-10-04 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 6022: YANG Module for NETCONF Monitoring";
+  }
+
+  identity transport {
+    description
+      "Base identity for NETCONF transport types.";
+  }
+
+  identity netconf-ssh {
+    base transport;
+    description
+      "NETCONF over Secure Shell (SSH).";
+    reference
+      "RFC 4742: Using the NETCONF Configuration Protocol
+                 over Secure SHell (SSH)";
+  }
+
+  identity netconf-soap-over-beep {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP) over
+       Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-soap-over-https {
+    base transport;
+    description
+      "NETCONF over Simple Object Access Protocol (SOAP)
+       over Hypertext Transfer Protocol Secure (HTTPS).";
+    reference
+      "RFC 4743: Using NETCONF over the Simple Object
+                 Access Protocol (SOAP)";
+  }
+
+  identity netconf-beep {
+    base transport;
+    description
+      "NETCONF over Blocks Extensible Exchange Protocol (BEEP).";
+    reference
+      "RFC 4744: Using the NETCONF Protocol over the
+                 Blocks Extensible Exchange Protocol (BEEP)";
+  }
+
+  identity netconf-tls {
+    base transport;
+    description
+      "NETCONF over Transport Layer Security (TLS).";
+    reference
+      "RFC 5539: NETCONF over Transport Layer Security (TLS)";
+  }
+
+  identity schema-format {
+    description
+      "Base identity for data model schema languages.";
+  }
+
+  identity xsd {
+    base schema-format;
+    description
+      "W3C XML Schema Definition.";
+    reference
+      "W3C REC REC-xmlschema-1-20041028:
+         XML Schema Part 1: Structures";
+  }
+
+  identity yang {
+    base schema-format;
+    description
+      "The YANG data modeling language for NETCONF.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity yin {
+    base schema-format;
+    description
+      "The YIN syntax for YANG.";
+    reference
+      "RFC 6020:  YANG - A Data Modeling Language for the
+                  Network Configuration Protocol (NETCONF)";
+  }
+
+  identity rng {
+    base schema-format;
+    description
+      "Regular Language for XML Next Generation (RELAX NG).";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  identity rnc {
+    base schema-format;
+    description
+      "Relax NG Compact Syntax";
+    reference
+      "ISO/IEC 19757-2:2008: RELAX NG";
+  }
+
+  typedef netconf-datastore-type {
+    type enumeration {
+      enum "running";
+      enum "candidate";
+      enum "startup";
+    }
+    description
+      "Enumeration of possible NETCONF datastore types.";
+    reference
+      "RFC 4741: NETCONF Configuration Protocol";
+  }
+
+  grouping common-counters {
+    description
+      "Counters that exist both per session, and also globally,
+       accumulated from all sessions.";
+    leaf in-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of correct &lt;rpc&gt; messages received.";
+    }
+
+    leaf in-bad-rpcs {
+      type yang:zero-based-counter32;
+      description
+        "Number of messages received when an &lt;rpc&gt; message was expected,
+         that were not correct &lt;rpc&gt; messages.  This includes XML parse
+         errors and errors on the rpc layer.";
+    }
+
+    leaf out-rpc-errors {
+      type yang:zero-based-counter32;
+      description
+        "Number of &lt;rpc-reply&gt; messages sent that contained an
+         &lt;rpc-error&gt; element.";
+    }
+
+    leaf out-notifications {
+      type yang:zero-based-counter32;
+      description
+        "Number of &lt;notification&gt; messages sent.";
+    }
+  }
+
+  container netconf-state {
+    config false;
+    description
+      "The netconf-state container is the root of the monitoring
+       data model.";
+    container capabilities {
+      description
+        "Contains the list of NETCONF capabilities supported by the
+         server.";
+      leaf-list capability {
+        type inet:uri;
+        description
+          "List of NETCONF capabilities supported by the server.";
+      }
+    }
+
+    container datastores {
+      description
+        "Contains the list of NETCONF configuration datastores.";
+      list datastore {
+        key "name";
+        description
+          "List of NETCONF configuration datastores supported by
+           the NETCONF server and related information.";
+        leaf name {
+          type netconf-datastore-type;
+          description
+            "Name of the datastore associated with this list entry.";
+        }
+
+        container locks {
+          presence "This container is present only if the datastore
+           is locked.";
+          description
+            "The NETCONF &lt;lock&gt; and &lt;partial-lock&gt; operations allow
+             a client to lock specific resources in a datastore.  The
+             NETCONF server will prevent changes to the locked
+             resources by all sessions except the one that acquired
+             the lock(s).
+
+             Monitoring information is provided for each datastore
+             entry including details such as the session that acquired
+             the lock, the type of lock (global or partial) and the
+             list of locked resources.  Multiple locks per datastore
+             are supported.";
+          grouping lock-info {
+            description
+              "Lock related parameters, common to both global and
+               partial locks.";
+            leaf locked-by-session {
+              type uint32;
+              mandatory true;
+              description
+                "The session ID of the session that has locked
+                 this resource.  Both a global lock and a partial
+                 lock MUST contain the NETCONF session-id.
+
+                 If the lock is held by a session that is not managed
+                 by the NETCONF server (e.g., a CLI session), a session
+                 id of 0 (zero) is reported.";
+              reference
+                "RFC 4741: NETCONF Configuration Protocol";
+            }
+
+            leaf locked-time {
+              type yang:date-and-time;
+              mandatory true;
+              description
+                "The date and time of when the resource was
+                 locked.";
+            }
+          }
+
+          choice lock-type {
+            description
+              "Indicates if a global lock or a set of partial locks
+               are set.";
+            container global-lock {
+              description
+                "Present if the global lock is set.";
+              uses lock-info;
+            }
+
+            list partial-lock {
+              key "lock-id";
+              description
+                "List of partial locks.";
+              reference
+                "RFC 5717: Partial Lock Remote Procedure Call (RPC) for
+                           NETCONF";
+              leaf lock-id {
+                type uint32;
+                description
+                  "This is the lock id returned in the &lt;partial-lock&gt;
+                   response.";
+              }
+
+              uses lock-info;
+
+              leaf-list select {
+                type yang:xpath1.0;
+                min-elements 1;
+                description
+                  "The xpath expression that was used to request
+                   the lock.  The select expression indicates the
+                   original intended scope of the lock.";
+              }
+
+              leaf-list locked-node {
+                type instance-identifier;
+                description
+                  "The list of instance-identifiers (i.e., the
+                   locked nodes).
+
+                   The scope of the partial lock is defined by the list
+                   of locked nodes.";
+              }
+            }
+          }
+        }
+      }
+    }
+
+    container schemas {
+      description
+        "Contains the list of data model schemas supported by the
+         server.";
+      list schema {
+        key "identifier version format";
+        description
+          "List of data model schemas supported by the server.";
+        leaf identifier {
+          type string;
+          description
+            "Identifier to uniquely reference the schema.  The
+             identifier is used in the &lt;get-schema&gt; operation and may
+             be used for other purposes such as file retrieval.
+
+             For modeling languages that support or require a data
+             model name (e.g., YANG module name) the identifier MUST
+             match that name.  For YANG data models, the identifier is
+             the name of the module or submodule.  In other cases, an
+             identifier such as a filename MAY be used instead.";
+        }
+
+        leaf version {
+          type string;
+          description
+            "Version of the schema supported.  Multiple versions MAY be
+             supported simultaneously by a NETCONF server.  Each
+             version MUST be reported individually in the schema list,
+             i.e., with same identifier, possibly different location,
+             but different version.
+
+             For YANG data models, version is the value of the most
+             recent YANG 'revision' statement in the module or
+             submodule, or the empty string if no 'revision' statement
+             is present.";
+        }
+
+        leaf format {
+          type identityref {
+            base schema-format;
+          }
+          description
+            "The data modeling language the schema is written
+             in (currently xsd, yang, yin, rng, or rnc).
+             For YANG data models, 'yang' format MUST be supported and
+             'yin' format MAY also be provided.";
+        }
+
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace defined by the data model.
+
+             For YANG data models, this is the module's namespace.
+             If the list entry describes a submodule, this field
+             contains the namespace of the module to which the
+             submodule belongs.";
+        }
+
+        leaf-list location {
+          type union {
+            type enumeration {
+              enum "NETCONF";
+            }
+            type inet:uri;
+          }
+          description
+            "One or more locations from which the schema can be
+             retrieved.  This list SHOULD contain at least one
+             entry per schema.
+
+             A schema entry may be located on a remote file system
+             (e.g., reference to file system for ftp retrieval) or
+             retrieved directly from a server supporting the
+             &lt;get-schema&gt; operation (denoted by the value 'NETCONF').";
+        }
+      }
+    }
+
+    container sessions {
+      description
+        "The sessions container includes session-specific data for
+         NETCONF management sessions.  The session list MUST include
+         all currently active NETCONF sessions.";
+      list session {
+        key "session-id";
+        description
+          "All NETCONF sessions managed by the NETCONF server
+           MUST be reported in this list.";
+        leaf session-id {
+          type uint32 {
+            range "1..max";
+          }
+          description
+            "Unique identifier for the session.  This value is the
+             NETCONF session identifier, as defined in RFC 4741.";
+          reference
+            "RFC 4741: NETCONF Configuration Protocol";
+        }
+
+        leaf transport {
+          type identityref {
+            base transport;
+          }
+          mandatory true;
+          description
+            "Identifies the transport for each session, e.g.,
+             'netconf-ssh', 'netconf-soap', etc.";
+        }
+
+        leaf username {
+          type string;
+          mandatory true;
+          description
+            "The username is the client identity that was authenticated
+             by the NETCONF transport protocol.  The algorithm used to
+             derive the username is NETCONF transport protocol specific
+             and in addition specific to the authentication mechanism
+             used by the NETCONF transport protocol.";
+        }
+
+        leaf source-host {
+          type inet:host;
+          description
+            "Host identifier of the NETCONF client.  The value
+             returned is implementation specific (e.g., hostname,
+             IPv4 address, IPv6 address)";
+        }
+
+        leaf login-time {
+          type yang:date-and-time;
+          mandatory true;
+          description
+            "Time at the server at which the session was established.";
+        }
+
+        uses common-counters {
+          description
+            "Per-session counters.  Zero based with following reset
+             behaviour:
+               - at start of a session
+               - when max value is reached";
+        }
+      }
+    }
+
+    container statistics {
+      description
+        "Statistical data pertaining to the NETCONF server.";
+      leaf netconf-start-time {
+        type yang:date-and-time;
+        description
+          "Date and time at which the management subsystem was
+           started.";
+      }
+
+      leaf in-bad-hellos {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions silently dropped because an
+           invalid &lt;hello&gt; message was received.  This includes &lt;hello&gt;
+           messages with a 'session-id' attribute, bad namespace, and
+           bad capability declarations.";
+      }
+
+      leaf in-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions started.  This counter is incremented
+           when a &lt;hello&gt; message with a &lt;session-id&gt; is sent.
+
+           'in-sessions' - 'in-bad-hellos' =
+              'number of correctly started netconf sessions'";
+      }
+
+      leaf dropped-sessions {
+        type yang:zero-based-counter32;
+        description
+          "Number of sessions that were abnormally terminated, e.g.,
+           due to idle timeout or transport close.  This counter is not
+           incremented when a session is properly closed by a
+           &lt;close-session&gt; operation, or killed by a &lt;kill-session&gt;
+           operation.";
+      }
+
+      uses common-counters {
+        description
+          "Global counters, accumulated from all sessions.
+           Zero based with following reset behaviour:
+             - re-initialization of NETCONF server
+             - when max value is reached";
+      }
+    }
+  }
+
+  rpc get-schema {
+    description
+      "This operation is used to retrieve a schema from the
+       NETCONF server.
+
+       Positive Response:
+         The NETCONF server returns the requested schema.
+
+       Negative Response:
+         If requested schema does not exist, the &lt;error-tag&gt; is
+         'invalid-value'.
+
+         If more than one schema matches the requested parameters, the
+         &lt;error-tag&gt; is 'operation-failed', and &lt;error-app-tag&gt; is
+         'data-not-unique'.";
+    input {
+      leaf identifier {
+        type string;
+        mandatory true;
+        description
+          "Identifier for the schema list entry.";
+      }
+
+      leaf version {
+        type string;
+        description
+          "Version of the schema requested.  If this parameter is not
+           present, and more than one version of the schema exists on
+           the server, a 'data-not-unique' error is returned, as
+           described above.";
+      }
+
+      leaf format {
+        type identityref {
+          base schema-format;
+        }
+        description
+          "The data modeling language of the schema.  If this
+           parameter is not present, and more than one formats of
+           the schema exists on the server, a 'data-not-unique' error
+           is returned, as described above.";
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Contains the schema content.";
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-monitoring@2010-10-04.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-monitoring@2010-10-04.yin
new file mode 100644 (file)
index 0000000..2d2c129
--- /dev/null
@@ -0,0 +1,604 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-netconf-monitoring"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ncm="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"/&gt;
+  &lt;prefix value="ncm"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+
+WG Chair: Bert Wijnen
+          &amp;lt;mailto:bertietf@bwijnen.net&amp;gt;
+
+Editor:   Mark Scott
+          &amp;lt;mailto:mark.scott@ericsson.com&amp;gt;
+
+Editor:   Martin Bjorklund
+          &amp;lt;mailto:mbj@tail-f.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;NETCONF Monitoring Module.
+All elements in this module are read-only.
+
+Copyright (c) 2010 IETF Trust and the persons identified as
+authors of the code. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD
+License set forth in Section 4.c of the IETF Trust's
+Legal Provisions Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 6022; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2010-10-04"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6022: YANG Module for NETCONF Monitoring&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;identity name="transport"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity for NETCONF transport types.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="netconf-ssh"&gt;
+    &lt;base name="transport"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF over Secure Shell (SSH).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4742: Using the NETCONF Configuration Protocol
+          over Secure SHell (SSH)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="netconf-soap-over-beep"&gt;
+    &lt;base name="transport"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF over Simple Object Access Protocol (SOAP) over
+Blocks Extensible Exchange Protocol (BEEP).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4743: Using NETCONF over the Simple Object
+          Access Protocol (SOAP)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="netconf-soap-over-https"&gt;
+    &lt;base name="transport"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF over Simple Object Access Protocol (SOAP)
+over Hypertext Transfer Protocol Secure (HTTPS).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4743: Using NETCONF over the Simple Object
+          Access Protocol (SOAP)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="netconf-beep"&gt;
+    &lt;base name="transport"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF over Blocks Extensible Exchange Protocol (BEEP).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4744: Using the NETCONF Protocol over the
+          Blocks Extensible Exchange Protocol (BEEP)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="netconf-tls"&gt;
+    &lt;base name="transport"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF over Transport Layer Security (TLS).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 5539: NETCONF over Transport Layer Security (TLS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="schema-format"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity for data model schema languages.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="xsd"&gt;
+    &lt;base name="schema-format"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;W3C XML Schema Definition.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;W3C REC REC-xmlschema-1-20041028:
+  XML Schema Part 1: Structures&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="yang"&gt;
+    &lt;base name="schema-format"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The YANG data modeling language for NETCONF.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6020:  YANG - A Data Modeling Language for the
+           Network Configuration Protocol (NETCONF)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="yin"&gt;
+    &lt;base name="schema-format"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The YIN syntax for YANG.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6020:  YANG - A Data Modeling Language for the
+           Network Configuration Protocol (NETCONF)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rng"&gt;
+    &lt;base name="schema-format"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Regular Language for XML Next Generation (RELAX NG).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;ISO/IEC 19757-2:2008: RELAX NG&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="rnc"&gt;
+    &lt;base name="schema-format"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Relax NG Compact Syntax&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;ISO/IEC 19757-2:2008: RELAX NG&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;typedef name="netconf-datastore-type"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="running"/&gt;
+      &lt;enum name="candidate"/&gt;
+      &lt;enum name="startup"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Enumeration of possible NETCONF datastore types.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4741: NETCONF Configuration Protocol&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;grouping name="common-counters"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Counters that exist both per session, and also globally,
+accumulated from all sessions.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="in-rpcs"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of correct &amp;lt;rpc&amp;gt; messages received.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="in-bad-rpcs"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of messages received when an &amp;lt;rpc&amp;gt; message was expected,
+that were not correct &amp;lt;rpc&amp;gt; messages.  This includes XML parse
+errors and errors on the rpc layer.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="out-rpc-errors"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of &amp;lt;rpc-reply&amp;gt; messages sent that contained an
+&amp;lt;rpc-error&amp;gt; element.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="out-notifications"&gt;
+      &lt;type name="yang:zero-based-counter32"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Number of &amp;lt;notification&amp;gt; messages sent.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/grouping&gt;
+  &lt;container name="netconf-state"&gt;
+    &lt;config value="false"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The netconf-state container is the root of the monitoring
+data model.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="capabilities"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains the list of NETCONF capabilities supported by the
+server.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf-list name="capability"&gt;
+        &lt;type name="inet:uri"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of NETCONF capabilities supported by the server.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf-list&gt;
+    &lt;/container&gt;
+    &lt;container name="datastores"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains the list of NETCONF configuration datastores.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="datastore"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of NETCONF configuration datastores supported by
+the NETCONF server and related information.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="netconf-datastore-type"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Name of the datastore associated with this list entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;container name="locks"&gt;
+          &lt;presence value="This container is present only if the datastore
+is locked."/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The NETCONF &amp;lt;lock&amp;gt; and &amp;lt;partial-lock&amp;gt; operations allow
+a client to lock specific resources in a datastore.  The
+NETCONF server will prevent changes to the locked
+resources by all sessions except the one that acquired
+the lock(s).
+
+Monitoring information is provided for each datastore
+entry including details such as the session that acquired
+the lock, the type of lock (global or partial) and the
+list of locked resources.  Multiple locks per datastore
+are supported.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;grouping name="lock-info"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Lock related parameters, common to both global and
+partial locks.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;leaf name="locked-by-session"&gt;
+              &lt;type name="uint32"/&gt;
+              &lt;mandatory value="true"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The session ID of the session that has locked
+this resource.  Both a global lock and a partial
+lock MUST contain the NETCONF session-id.
+
+If the lock is held by a session that is not managed
+by the NETCONF server (e.g., a CLI session), a session
+id of 0 (zero) is reported.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 4741: NETCONF Configuration Protocol&lt;/text&gt;
+              &lt;/reference&gt;
+            &lt;/leaf&gt;
+            &lt;leaf name="locked-time"&gt;
+              &lt;type name="yang:date-and-time"/&gt;
+              &lt;mandatory value="true"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;The date and time of when the resource was
+locked.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/leaf&gt;
+          &lt;/grouping&gt;
+          &lt;choice name="lock-type"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Indicates if a global lock or a set of partial locks
+are set.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;container name="global-lock"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Present if the global lock is set.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;uses name="lock-info"/&gt;
+            &lt;/container&gt;
+            &lt;list name="partial-lock"&gt;
+              &lt;key value="lock-id"/&gt;
+              &lt;description&gt;
+                &lt;text&gt;List of partial locks.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 5717: Partial Lock Remote Procedure Call (RPC) for
+          NETCONF&lt;/text&gt;
+              &lt;/reference&gt;
+              &lt;leaf name="lock-id"&gt;
+                &lt;type name="uint32"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;This is the lock id returned in the &amp;lt;partial-lock&amp;gt;
+response.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+              &lt;uses name="lock-info"/&gt;
+              &lt;leaf-list name="select"&gt;
+                &lt;type name="yang:xpath1.0"/&gt;
+                &lt;min-elements value="1"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The xpath expression that was used to request
+the lock.  The select expression indicates the
+original intended scope of the lock.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf-list&gt;
+              &lt;leaf-list name="locked-node"&gt;
+                &lt;type name="instance-identifier"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The list of instance-identifiers (i.e., the
+locked nodes).
+
+The scope of the partial lock is defined by the list
+of locked nodes.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf-list&gt;
+            &lt;/list&gt;
+          &lt;/choice&gt;
+        &lt;/container&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="schemas"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains the list of data model schemas supported by the
+server.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="schema"&gt;
+        &lt;key value="identifier version format"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of data model schemas supported by the server.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="identifier"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Identifier to uniquely reference the schema.  The
+identifier is used in the &amp;lt;get-schema&amp;gt; operation and may
+be used for other purposes such as file retrieval.
+
+For modeling languages that support or require a data
+model name (e.g., YANG module name) the identifier MUST
+match that name.  For YANG data models, the identifier is
+the name of the module or submodule.  In other cases, an
+identifier such as a filename MAY be used instead.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="version"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Version of the schema supported.  Multiple versions MAY be
+supported simultaneously by a NETCONF server.  Each
+version MUST be reported individually in the schema list,
+i.e., with same identifier, possibly different location,
+but different version.
+
+For YANG data models, version is the value of the most
+recent YANG 'revision' statement in the module or
+submodule, or the empty string if no 'revision' statement
+is present.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="format"&gt;
+          &lt;type name="identityref"&gt;
+            &lt;base name="schema-format"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;The data modeling language the schema is written
+in (currently xsd, yang, yin, rng, or rnc).
+For YANG data models, 'yang' format MUST be supported and
+'yin' format MAY also be provided.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="namespace"&gt;
+          &lt;type name="inet:uri"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The XML namespace defined by the data model.
+
+For YANG data models, this is the module's namespace.
+If the list entry describes a submodule, this field
+contains the namespace of the module to which the
+submodule belongs.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf-list name="location"&gt;
+          &lt;type name="union"&gt;
+            &lt;type name="enumeration"&gt;
+              &lt;enum name="NETCONF"/&gt;
+            &lt;/type&gt;
+            &lt;type name="inet:uri"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;One or more locations from which the schema can be
+retrieved.  This list SHOULD contain at least one
+entry per schema.
+
+A schema entry may be located on a remote file system
+(e.g., reference to file system for ftp retrieval) or
+retrieved directly from a server supporting the
+&amp;lt;get-schema&amp;gt; operation (denoted by the value 'NETCONF').&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf-list&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="sessions"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The sessions container includes session-specific data for
+NETCONF management sessions.  The session list MUST include
+all currently active NETCONF sessions.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="session"&gt;
+        &lt;key value="session-id"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;All NETCONF sessions managed by the NETCONF server
+MUST be reported in this list.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="session-id"&gt;
+          &lt;type name="uint32"&gt;
+            &lt;range value="1..max"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;Unique identifier for the session.  This value is the
+NETCONF session identifier, as defined in RFC 4741.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4741: NETCONF Configuration Protocol&lt;/text&gt;
+          &lt;/reference&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="transport"&gt;
+          &lt;type name="identityref"&gt;
+            &lt;base name="transport"/&gt;
+          &lt;/type&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Identifies the transport for each session, e.g.,
+'netconf-ssh', 'netconf-soap', etc.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="username"&gt;
+          &lt;type name="string"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The username is the client identity that was authenticated
+by the NETCONF transport protocol.  The algorithm used to
+derive the username is NETCONF transport protocol specific
+and in addition specific to the authentication mechanism
+used by the NETCONF transport protocol.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="source-host"&gt;
+          &lt;type name="inet:host"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Host identifier of the NETCONF client.  The value
+returned is implementation specific (e.g., hostname,
+IPv4 address, IPv6 address)&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="login-time"&gt;
+          &lt;type name="yang:date-and-time"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Time at the server at which the session was established.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;uses name="common-counters"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Per-session counters.  Zero based with following reset
+behaviour:
+  - at start of a session
+  - when max value is reached&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/uses&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="statistics"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Statistical data pertaining to the NETCONF server.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="netconf-start-time"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Date and time at which the management subsystem was
+started.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="in-bad-hellos"&gt;
+        &lt;type name="yang:zero-based-counter32"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Number of sessions silently dropped because an
+invalid &amp;lt;hello&amp;gt; message was received.  This includes &amp;lt;hello&amp;gt;
+messages with a 'session-id' attribute, bad namespace, and
+bad capability declarations.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="in-sessions"&gt;
+        &lt;type name="yang:zero-based-counter32"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Number of sessions started.  This counter is incremented
+when a &amp;lt;hello&amp;gt; message with a &amp;lt;session-id&amp;gt; is sent.
+
+'in-sessions' - 'in-bad-hellos' =
+   'number of correctly started netconf sessions'&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="dropped-sessions"&gt;
+        &lt;type name="yang:zero-based-counter32"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Number of sessions that were abnormally terminated, e.g.,
+due to idle timeout or transport close.  This counter is not
+incremented when a session is properly closed by a
+&amp;lt;close-session&amp;gt; operation, or killed by a &amp;lt;kill-session&amp;gt;
+operation.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;uses name="common-counters"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Global counters, accumulated from all sessions.
+Zero based with following reset behaviour:
+  - re-initialization of NETCONF server
+  - when max value is reached&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/uses&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;rpc name="get-schema"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This operation is used to retrieve a schema from the
+NETCONF server.
+
+Positive Response:
+  The NETCONF server returns the requested schema.
+
+Negative Response:
+  If requested schema does not exist, the &amp;lt;error-tag&amp;gt; is
+  'invalid-value'.
+
+  If more than one schema matches the requested parameters, the
+  &amp;lt;error-tag&amp;gt; is 'operation-failed', and &amp;lt;error-app-tag&amp;gt; is
+  'data-not-unique'.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="identifier"&gt;
+        &lt;type name="string"/&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Identifier for the schema list entry.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="version"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Version of the schema requested.  If this parameter is not
+present, and more than one version of the schema exists on
+the server, a 'data-not-unique' error is returned, as
+described above.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="format"&gt;
+        &lt;type name="identityref"&gt;
+          &lt;base name="schema-format"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;The data modeling language of the schema.  If this
+parameter is not present, and more than one formats of
+the schema exists on the server, a 'data-not-unique' error
+is returned, as described above.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+    &lt;output&gt;
+      &lt;anyxml name="data"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Contains the schema content.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/anyxml&gt;
+    &lt;/output&gt;
+  &lt;/rpc&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-notifications@2012-02-06.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-notifications@2012-02-06.yang
new file mode 100644 (file)
index 0000000..a871173
--- /dev/null
@@ -0,0 +1,323 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-netconf-notifications {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications";
+  prefix ncn;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf {
+    prefix nc;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration Protocol) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+     WG Chair: Bert Wijnen
+               &lt;mailto:bertietf@bwijnen.net&gt;
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+     Editor:   Andy Bierman
+               &lt;mailto:andy@netconfcentral.org&gt;";
+  description
+    "This module defines a YANG data model for use with the
+     NETCONF protocol that allows the NETCONF client to
+     receive common NETCONF base event notifications.
+     Copyright (c) 2012 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+     This version of this YANG module is part of RFC 6470; see
+     the RFC itself for full legal notices.";
+
+  revision 2012-02-06 {
+    description
+      "Initial version.";
+    reference
+      "RFC 6470: NETCONF Base Notifications";
+  }
+
+  grouping common-session-parms {
+    description
+      "Common session parameters to identify a
+       management session.";
+    leaf username {
+      type string;
+      mandatory true;
+      description
+        "Name of the user for the session.";
+    }
+
+    leaf session-id {
+      type nc:session-id-or-zero-type;
+      mandatory true;
+      description
+        "Identifier of the session.
+         A NETCONF session MUST be identified by a non-zero value.
+         A non-NETCONF session MAY be identified by the value zero.";
+    }
+
+    leaf source-host {
+      type inet:ip-address;
+      description
+        "Address of the remote host for the session.";
+    }
+  }
+
+  grouping changed-by-parms {
+    description
+      "Common parameters to identify the source
+       of a change event, such as a configuration
+       or capability change.";
+    container changed-by {
+      description
+        "Indicates the source of the change.
+         If caused by internal action, then the
+         empty leaf 'server' will be present.
+         If caused by a management session, then
+         the name, remote host address, and session ID
+         of the session that made the change will be reported.";
+      choice server-or-user {
+        mandatory true;
+        leaf server {
+          type empty;
+          description
+            "If present, the change was caused
+             by the server.";
+        }
+
+        case by-user {
+          uses common-session-parms;
+        }
+      }
+    }
+  }
+
+  notification netconf-config-change {
+    description
+      "Generated when the NETCONF server detects that the
+       &lt;running&gt; or &lt;startup&gt; configuration datastore
+       has been changed by a management session.
+       The notification summarizes the edits that
+       have been detected.
+       The server MAY choose to also generate this
+       notification while loading a datastore during the
+       boot process for the device.";
+    uses changed-by-parms;
+
+    leaf datastore {
+      type enumeration {
+        enum "running" {
+          description
+            "The &lt;running&gt; datastore has changed.";
+        }
+        enum "startup" {
+          description
+            "The &lt;startup&gt; datastore has changed";
+        }
+      }
+      default "running";
+      description
+        "Indicates which configuration datastore has changed.";
+    }
+
+    list edit {
+      description
+        "An edit record SHOULD be present for each distinct
+         edit operation that the server has detected on
+         the target datastore.  This list MAY be omitted
+         if the detailed edit operations are not known.
+         The server MAY report entries in this list for
+         changes not made by a NETCONF session (e.g., CLI).";
+      leaf target {
+        type instance-identifier;
+        description
+          "Topmost node associated with the configuration change.
+           A server SHOULD set this object to the node within
+           the datastore that is being altered.  A server MAY
+           set this object to one of the ancestors of the actual
+           node that was changed, or omit this object, if the
+           exact node is not known.";
+      }
+
+      leaf operation {
+        type nc:edit-operation-type;
+        description
+          "Type of edit operation performed.
+           A server MUST set this object to the NETCONF edit
+           operation performed on the target datastore.";
+      }
+    }
+  }
+
+  notification netconf-capability-change {
+    description
+      "Generated when the NETCONF server detects that
+       the server capabilities have changed.
+       Indicates which capabilities have been added, deleted,
+       and/or modified.  The manner in which a server
+       capability is changed is outside the scope of this
+       document.";
+    uses changed-by-parms;
+
+    leaf-list added-capability {
+      type inet:uri;
+      description
+        "List of capabilities that have just been added.";
+    }
+
+    leaf-list deleted-capability {
+      type inet:uri;
+      description
+        "List of capabilities that have just been deleted.";
+    }
+
+    leaf-list modified-capability {
+      type inet:uri;
+      description
+        "List of capabilities that have just been modified.
+         A capability is considered to be modified if the
+         base URI for the capability has not changed, but
+         one or more of the parameters encoded at the end of
+         the capability URI have changed.
+         The new modified value of the complete URI is returned.";
+    }
+  }
+
+  notification netconf-session-start {
+    description
+      "Generated when a NETCONF server detects that a
+       NETCONF session has started.  A server MAY generate
+       this event for non-NETCONF management sessions.
+       Indicates the identity of the user that started
+       the session.";
+    uses common-session-parms;
+  }
+
+  notification netconf-session-end {
+    description
+      "Generated when a NETCONF server detects that a
+       NETCONF session has terminated.
+       A server MAY optionally generate this event for
+       non-NETCONF management sessions.  Indicates the
+       identity of the user that owned the session,
+       and why the session was terminated.";
+    uses common-session-parms;
+
+    leaf killed-by {
+      when "../termination-reason = 'killed'";
+      type nc:session-id-type;
+      description
+        "The ID of the session that directly caused this session
+         to be abnormally terminated.  If this session was abnormally
+         terminated by a non-NETCONF session unknown to the server,
+         then this leaf will not be present.";
+    }
+
+    leaf termination-reason {
+      type enumeration {
+        enum "closed" {
+          description
+            "The session was terminated by the client in normal
+             fashion, e.g., by the NETCONF &lt;close-session&gt;
+             protocol operation.";
+        }
+        enum "killed" {
+          description
+            "The session was terminated in abnormal
+             fashion, e.g., by the NETCONF &lt;kill-session&gt;
+             protocol operation.";
+        }
+        enum "dropped" {
+          description
+            "The session was terminated because the transport layer
+             connection was unexpectedly closed.";
+        }
+        enum "timeout" {
+          description
+            "The session was terminated because of inactivity,
+             e.g., waiting for the &lt;hello&gt; message or &lt;rpc&gt;
+             messages.";
+        }
+        enum "bad-hello" {
+          description
+            "The client's &lt;hello&gt; message was invalid.";
+        }
+        enum "other" {
+          description
+            "The session was terminated for some other reason.";
+        }
+      }
+      mandatory true;
+      description
+        "Reason the session was terminated.";
+    }
+  }
+
+  notification netconf-confirmed-commit {
+    description
+      "Generated when a NETCONF server detects that a
+       confirmed-commit event has occurred.  Indicates the event
+       and the current state of the confirmed-commit procedure
+       in progress.";
+    reference
+      "RFC 6241, Section 8.4";
+    uses common-session-parms {
+      when "confirm-event != 'timeout'";
+    }
+
+    leaf confirm-event {
+      type enumeration {
+        enum "start" {
+          description
+            "The confirmed-commit procedure has started.";
+        }
+        enum "cancel" {
+          description
+            "The confirmed-commit procedure has been canceled,
+             e.g., due to the session being terminated, or an
+             explicit &lt;cancel-commit&gt; operation.";
+        }
+        enum "timeout" {
+          description
+            "The confirmed-commit procedure has been canceled
+             due to the confirm-timeout interval expiring.
+             The common session parameters will not be present
+             in this sub-mode.";
+        }
+        enum "extend" {
+          description
+            "The confirmed-commit timeout has been extended,
+             e.g., by a new &lt;confirmed-commit&gt; operation.";
+        }
+        enum "complete" {
+          description
+            "The confirmed-commit procedure has been completed.";
+        }
+      }
+      mandatory true;
+      description
+        "Indicates the event that caused the notification.";
+    }
+
+    leaf timeout {
+      when "../confirm-event = 'start' or ../confirm-event = 'extend'";
+      type uint32;
+      units "seconds";
+      description
+        "The configured timeout value if the event type
+         is 'start' or 'extend'.  This value represents
+         the approximate number of seconds from the event
+         time when the 'timeout' event might occur.";
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-notifications@2012-02-06.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-notifications@2012-02-06.yin
new file mode 100644 (file)
index 0000000..c703b30
--- /dev/null
@@ -0,0 +1,346 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-netconf-notifications"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ncn="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"/&gt;
+  &lt;prefix value="ncn"/&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-netconf"&gt;
+    &lt;prefix value="nc"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration Protocol) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+WG Chair: Bert Wijnen
+          &amp;lt;mailto:bertietf@bwijnen.net&amp;gt;
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+Editor:   Andy Bierman
+          &amp;lt;mailto:andy@netconfcentral.org&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module defines a YANG data model for use with the
+NETCONF protocol that allows the NETCONF client to
+receive common NETCONF base event notifications.
+Copyright (c) 2012 IETF Trust and the persons identified as
+the document authors.  All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+This version of this YANG module is part of RFC 6470; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2012-02-06"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6470: NETCONF Base Notifications&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;grouping name="common-session-parms"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Common session parameters to identify a
+management session.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="username"&gt;
+      &lt;type name="string"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Name of the user for the session.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="session-id"&gt;
+      &lt;type name="nc:session-id-or-zero-type"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Identifier of the session.
+A NETCONF session MUST be identified by a non-zero value.
+A non-NETCONF session MAY be identified by the value zero.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="source-host"&gt;
+      &lt;type name="inet:ip-address"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Address of the remote host for the session.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="changed-by-parms"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Common parameters to identify the source
+of a change event, such as a configuration
+or capability change.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="changed-by"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Indicates the source of the change.
+If caused by internal action, then the
+empty leaf 'server' will be present.
+If caused by a management session, then
+the name, remote host address, and session ID
+of the session that made the change will be reported.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;choice name="server-or-user"&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;leaf name="server"&gt;
+          &lt;type name="empty"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;If present, the change was caused
+by the server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;case name="by-user"&gt;
+          &lt;uses name="common-session-parms"/&gt;
+        &lt;/case&gt;
+      &lt;/choice&gt;
+    &lt;/container&gt;
+  &lt;/grouping&gt;
+  &lt;notification name="netconf-config-change"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when the NETCONF server detects that the
+&amp;lt;running&amp;gt; or &amp;lt;startup&amp;gt; configuration datastore
+has been changed by a management session.
+The notification summarizes the edits that
+have been detected.
+The server MAY choose to also generate this
+notification while loading a datastore during the
+boot process for the device.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;uses name="changed-by-parms"/&gt;
+    &lt;leaf name="datastore"&gt;
+      &lt;type name="enumeration"&gt;
+        &lt;enum name="running"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The &amp;lt;running&amp;gt; datastore has changed.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="startup"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The &amp;lt;startup&amp;gt; datastore has changed&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+      &lt;/type&gt;
+      &lt;default value="running"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Indicates which configuration datastore has changed.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;list name="edit"&gt;
+      &lt;description&gt;
+        &lt;text&gt;An edit record SHOULD be present for each distinct
+edit operation that the server has detected on
+the target datastore.  This list MAY be omitted
+if the detailed edit operations are not known.
+The server MAY report entries in this list for
+changes not made by a NETCONF session (e.g., CLI).&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="target"&gt;
+        &lt;type name="instance-identifier"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Topmost node associated with the configuration change.
+A server SHOULD set this object to the node within
+the datastore that is being altered.  A server MAY
+set this object to one of the ancestors of the actual
+node that was changed, or omit this object, if the
+exact node is not known.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="operation"&gt;
+        &lt;type name="nc:edit-operation-type"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Type of edit operation performed.
+A server MUST set this object to the NETCONF edit
+operation performed on the target datastore.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/list&gt;
+  &lt;/notification&gt;
+  &lt;notification name="netconf-capability-change"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when the NETCONF server detects that
+the server capabilities have changed.
+Indicates which capabilities have been added, deleted,
+and/or modified.  The manner in which a server
+capability is changed is outside the scope of this
+document.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;uses name="changed-by-parms"/&gt;
+    &lt;leaf-list name="added-capability"&gt;
+      &lt;type name="inet:uri"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of capabilities that have just been added.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf-list&gt;
+    &lt;leaf-list name="deleted-capability"&gt;
+      &lt;type name="inet:uri"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of capabilities that have just been deleted.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf-list&gt;
+    &lt;leaf-list name="modified-capability"&gt;
+      &lt;type name="inet:uri"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of capabilities that have just been modified.
+A capability is considered to be modified if the
+base URI for the capability has not changed, but
+one or more of the parameters encoded at the end of
+the capability URI have changed.
+The new modified value of the complete URI is returned.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf-list&gt;
+  &lt;/notification&gt;
+  &lt;notification name="netconf-session-start"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when a NETCONF server detects that a
+NETCONF session has started.  A server MAY generate
+this event for non-NETCONF management sessions.
+Indicates the identity of the user that started
+the session.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;uses name="common-session-parms"/&gt;
+  &lt;/notification&gt;
+  &lt;notification name="netconf-session-end"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when a NETCONF server detects that a
+NETCONF session has terminated.
+A server MAY optionally generate this event for
+non-NETCONF management sessions.  Indicates the
+identity of the user that owned the session,
+and why the session was terminated.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;uses name="common-session-parms"/&gt;
+    &lt;leaf name="killed-by"&gt;
+      &lt;when condition="../termination-reason = 'killed'"/&gt;
+      &lt;type name="nc:session-id-type"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The ID of the session that directly caused this session
+to be abnormally terminated.  If this session was abnormally
+terminated by a non-NETCONF session unknown to the server,
+then this leaf will not be present.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="termination-reason"&gt;
+      &lt;type name="enumeration"&gt;
+        &lt;enum name="closed"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The session was terminated by the client in normal
+fashion, e.g., by the NETCONF &amp;lt;close-session&amp;gt;
+protocol operation.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="killed"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The session was terminated in abnormal
+fashion, e.g., by the NETCONF &amp;lt;kill-session&amp;gt;
+protocol operation.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="dropped"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The session was terminated because the transport layer
+connection was unexpectedly closed.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="timeout"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The session was terminated because of inactivity,
+e.g., waiting for the &amp;lt;hello&amp;gt; message or &amp;lt;rpc&amp;gt;
+messages.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="bad-hello"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The client's &amp;lt;hello&amp;gt; message was invalid.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="other"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The session was terminated for some other reason.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+      &lt;/type&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Reason the session was terminated.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/notification&gt;
+  &lt;notification name="netconf-confirmed-commit"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when a NETCONF server detects that a
+confirmed-commit event has occurred.  Indicates the event
+and the current state of the confirmed-commit procedure
+in progress.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.4&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;uses name="common-session-parms"&gt;
+      &lt;when condition="confirm-event != 'timeout'"/&gt;
+    &lt;/uses&gt;
+    &lt;leaf name="confirm-event"&gt;
+      &lt;type name="enumeration"&gt;
+        &lt;enum name="start"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The confirmed-commit procedure has started.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="cancel"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The confirmed-commit procedure has been canceled,
+e.g., due to the session being terminated, or an
+explicit &amp;lt;cancel-commit&amp;gt; operation.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="timeout"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The confirmed-commit procedure has been canceled
+due to the confirm-timeout interval expiring.
+The common session parameters will not be present
+in this sub-mode.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="extend"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The confirmed-commit timeout has been extended,
+e.g., by a new &amp;lt;confirmed-commit&amp;gt; operation.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="complete"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The confirmed-commit procedure has been completed.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+      &lt;/type&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Indicates the event that caused the notification.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="timeout"&gt;
+      &lt;when condition="../confirm-event = 'start' or ../confirm-event = 'extend'"/&gt;
+      &lt;type name="uint32"/&gt;
+      &lt;units name="seconds"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The configured timeout value if the event type
+is 'start' or 'extend'.  This value represents
+the approximate number of seconds from the event
+time when the 'timeout' event might occur.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/notification&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-server@2016-11-02.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-server@2016-11-02.yang
new file mode 100644 (file)
index 0000000..fa433a1
--- /dev/null
@@ -0,0 +1,501 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-netconf-server {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-server";
+  prefix ncs;
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+
+  import ietf-x509-cert-to-name {
+    prefix x509c2n;
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  import ietf-ssh-server {
+    prefix ss;
+    revision-date 2016-11-02;
+    reference
+      "RFC YYYY: SSH Client and Server Models";
+  }
+
+  import ietf-tls-server {
+    prefix ts;
+    revision-date 2016-11-02;
+    reference
+      "RFC ZZZZ: TLS Client and Server Models";
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+
+     WG Chair: Mahesh Jethanandani
+               &lt;mailto:mjethanandani@gmail.com&gt;
+
+     Editor:   Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;";
+  description
+    "This module contains a collection of YANG definitions for
+     configuring NETCONF servers.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+  revision 2016-11-02 {
+    description
+      "Initial version";
+    reference
+      "RFC XXXX: NETCONF Client and Server Models";
+  }
+
+  feature listen {
+    description
+      "The 'listen' feature indicates that the NETCONF server
+       supports opening a port to accept NETCONF client connections
+       using at least one transport (e.g., SSH, TLS, etc.).";
+  }
+
+  feature ssh-listen {
+    description
+      "The 'ssh-listen' feature indicates that the NETCONF server
+       supports opening a port to accept NETCONF over SSH
+       client connections.";
+    reference
+      "RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH)";
+  }
+
+  feature tls-listen {
+    description
+      "The 'tls-listen' feature indicates that the NETCONF server
+       supports opening a port to accept NETCONF over TLS
+       client connections.";
+    reference
+      "RFC 7589: Using the NETCONF Protocol over Transport
+                 Layer Security (TLS) with Mutual X.509
+                 Authentication";
+  }
+
+  feature call-home {
+    description
+      "The 'call-home' feature indicates that the NETCONF server
+       supports initiating NETCONF call home connections to NETCONF
+       clients using at least one transport (e.g., SSH, TLS, etc.).";
+    reference
+      "RFC YYYY: NETCONF Call Home and RESTCONF Call Home";
+  }
+
+  feature ssh-call-home {
+    description
+      "The 'ssh-call-home' feature indicates that the NETCONF
+       server supports initiating a NETCONF over SSH call
+       home connection to NETCONF clients.";
+    reference
+      "RFC YYYY: NETCONF Call Home and RESTCONF Call Home";
+  }
+
+  feature tls-call-home {
+    description
+      "The 'tls-call-home' feature indicates that the NETCONF
+       server supports initiating a NETCONF over TLS call
+       home connection to NETCONF clients.";
+    reference
+      "RFC YYYY: NETCONF Call Home and RESTCONF Call Home";
+  }
+
+  grouping cert-maps-grouping {
+    description
+      "A grouping that defines a container around the
+       cert-to-name structure defined in RFC 7407.";
+    container cert-maps {
+      description
+        "The cert-maps container is used by a TLS-based NETCONF
+         server to map the NETCONF client's presented X.509
+         certificate to a NETCONF username.  If no matching and
+         valid cert-to-name list entry can be found, then the
+         NETCONF server MUST close the connection, and MUST NOT
+         accept NETCONF messages over it.";
+      reference
+        "RFC WWWW: NETCONF over TLS, Section 7";
+      uses x509c2n:cert-to-name;
+    }
+  }
+
+  grouping endpoints-container {
+    description
+      "This grouping is used by both the ssh and tls containers
+       for call-home configurations.";
+    container endpoints {
+      description
+        "Container for the list of endpoints.";
+      list endpoint {
+        key "name";
+        min-elements 1;
+        ordered-by user;
+        description
+          "User-ordered list of endpoints for this NETCONF client.
+           Defining more than one enables high-availability.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for this endpoint.";
+        }
+
+        leaf address {
+          type inet:host;
+          mandatory true;
+          description
+            "The IP address or hostname of the endpoint.  If a
+             hostname is configured and the DNS resolution results
+             in more than one IP address, the NETCONF server
+             will process the IP addresses as if they had been
+             explicitly configured in place of the hostname.";
+        }
+
+        leaf port {
+          type inet:port-number;
+          description
+            "The IP port for this endpoint. The NETCONF server will
+             use the IANA-assigned well-known port if no value is
+             specified.";
+        }
+      }
+    }
+  }
+
+  container netconf-server {
+    description
+      "Top-level container for NETCONF server configuration.";
+    container session-options {
+      description
+        "NETCONF session options, independent of transport
+         or connection strategy.";
+      leaf hello-timeout {
+        type uint16;
+        units "seconds";
+        default "600";
+        description
+          "Specifies the maximum number of seconds that a SSH/TLS
+           connection may wait for a hello message to be received.
+           A connection will be dropped if no hello message is
+           received before this number of seconds elapses.  If set
+           to zero, then the server will wait forever for a hello
+           message.";
+      }
+    }
+
+    container listen {
+      if-feature "listen";
+      description
+        "Configures listen behavior";
+      leaf max-sessions {
+        type uint16;
+        default "0";
+        description
+          "Specifies the maximum number of concurrent sessions
+           that can be active at one time.  The value 0 indicates
+           that no artificial session limit should be used.";
+      }
+
+      leaf idle-timeout {
+        type uint16;
+        units "seconds";
+        default "3600";
+        description
+          "Specifies the maximum number of seconds that a NETCONF
+           session may remain idle. A NETCONF session will be dropped
+           if it is idle for an interval longer than this number of
+           seconds.  If set to zero, then the server will never drop
+           a session because it is idle.  Sessions that have a
+           notification subscription active are never dropped.";
+      }
+
+      list endpoint {
+        key "name";
+        description
+          "List of endpoints to listen for NETCONF connections on.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the NETCONF listen endpoint.";
+        }
+
+        choice transport {
+          mandatory true;
+          description
+            "Selects between available transports.";
+          case ssh {
+            if-feature "ssh-listen";
+            container ssh {
+              description
+                "SSH-specific listening configuration for inbound
+                 connections.";
+              uses ss:listening-ssh-server-grouping {
+                refine "port" {
+                  default "830";
+                }
+              }
+            }
+          }
+
+          case tls {
+            if-feature "tls-listen";
+            container tls {
+              description
+                "TLS-specific listening configuration for inbound
+                 connections.";
+              uses ts:listening-tls-server-grouping {
+                refine "port" {
+                  default "6513";
+                }
+                augment "client-auth" {
+                  description
+                    "Augments in the cert-to-name structure.";
+                  uses cert-maps-grouping;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    container call-home {
+      if-feature "call-home";
+      description
+        "Configures call-home behavior";
+      list netconf-client {
+        key "name";
+        description
+          "List of NETCONF clients the NETCONF server is to initiate
+           call-home connections to.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the remote NETCONF client.";
+        }
+
+        choice transport {
+          mandatory true;
+          description
+            "Selects between available transports.";
+          case ssh {
+            if-feature "ssh-call-home";
+            container ssh {
+              description
+                "Specifies SSH-specific call-home transport
+                 configuration.";
+              uses endpoints-container {
+                refine "endpoints/endpoint/port" {
+                  default "4334";
+                }
+              }
+
+              uses ss:non-listening-ssh-server-grouping;
+            }
+          }
+
+          case tls {
+            if-feature "tls-call-home";
+            container tls {
+              description
+                "Specifies TLS-specific call-home transport
+                 configuration.";
+              uses endpoints-container {
+                refine "endpoints/endpoint/port" {
+                  default "4335";
+                }
+              }
+
+              uses ts:non-listening-tls-server-grouping {
+                augment "client-auth" {
+                  description
+                    "Augments in the cert-to-name structure.";
+                  uses cert-maps-grouping;
+                }
+              }
+            }
+          }
+        }
+
+        container connection-type {
+          description
+            "Indicates the kind of connection to use.";
+          choice connection-type {
+            description
+              "Selects between available connection types.";
+            case persistent-connection {
+              container persistent {
+                presence "true";
+                description
+                  "Maintain a persistent connection to the NETCONF
+                   client. If the connection goes down, immediately
+                   start trying to reconnect to it, using the
+                   reconnection strategy.
+
+                   This connection type minimizes any NETCONF client
+                   to NETCONF server data-transfer delay, albeit at
+                   the expense of holding resources longer.";
+                leaf idle-timeout {
+                  type uint32;
+                  units "seconds";
+                  default "86400";
+                  description
+                    "Specifies the maximum number of seconds that a
+                     a NETCONF session may remain idle. A NETCONF
+                     session will be dropped if it is idle for an
+                     interval longer than this number of seconds.
+                     If set to zero, then the server will never drop
+                     a session because it is idle.  Sessions that
+                     have a notification subscription active are
+                     never dropped.";
+                }
+
+                container keep-alives {
+                  description
+                    "Configures the keep-alive policy, to proactively
+                     test the aliveness of the SSH/TLS client.  An
+                     unresponsive SSH/TLS client will be dropped after
+                     approximately max-attempts * max-wait seconds.";
+                  reference
+                    "RFC YYYY: NETCONF Call Home and RESTCONF Call
+                     Home, Section 3.1, item S6";
+                  leaf max-wait {
+                    type uint16 {
+                      range "1..max";
+                    }
+                    units "seconds";
+                    default "30";
+                    description
+                      "Sets the amount of time in seconds after which
+                       if no data has been received from the SSH/TLS
+                       client, a SSH/TLS-level message will be sent
+                       to test the aliveness of the SSH/TLS client.";
+                  }
+
+                  leaf max-attempts {
+                    type uint8;
+                    default "3";
+                    description
+                      "Sets the maximum number of sequential keep-alive
+                       messages that can fail to obtain a response from
+                       the SSH/TLS client before assuming the SSH/TLS
+                       client is no longer alive.";
+                  }
+                }
+              }
+            }
+
+            case periodic-connection {
+              container periodic {
+                presence "true";
+                description
+                  "Periodically connect to the NETCONF client, so that
+                   the NETCONF client may deliver messages pending for
+                   the NETCONF server.  The NETCONF client must close
+                   the connection when it is ready to release it. Once
+                   the connection has been closed, the NETCONF server
+                   will restart its timer until the next connection.";
+                leaf idle-timeout {
+                  type uint16;
+                  units "seconds";
+                  default "300";
+                  description
+                    "Specifies the maximum number of seconds that a
+                     a NETCONF session may remain idle. A NETCONF
+                     session will be dropped if it is idle for an
+                     interval longer than this number of seconds.
+                     If set to zero, then the server will never drop
+                     a session because it is idle.  Sessions that
+                     have a notification subscription active are
+                     never dropped.";
+                }
+
+                leaf reconnect_timeout {
+                  type uint16 {
+                    range "1..max";
+                  }
+                  units "minutes";
+                  default "60";
+                  description
+                    "Sets the maximum amount of unconnected time the
+                     NETCONF server will wait before re-establishing
+                     a connection to the NETCONF client.  The NETCONF
+                     server may initiate a connection before this
+                     time if desired (e.g., to deliver an event
+                     notification message).";
+                }
+              }
+            }
+          }
+        }
+
+        container reconnect-strategy {
+          description
+            "The reconnection strategy directs how a NETCONF server
+             reconnects to a NETCONF client, after discovering its
+             connection to the client has dropped, even if due to a
+             reboot.  The NETCONF server starts with the specified
+             endpoint and tries to connect to it max-attempts times
+             before trying the next endpoint in the list (round
+             robin).";
+          leaf start-with {
+            type enumeration {
+              enum "first-listed" {
+                description
+                  "Indicates that reconnections should start with
+                   the first endpoint listed.";
+              }
+              enum "last-connected" {
+                description
+                  "Indicates that reconnections should start with
+                   the endpoint last connected to.  If no previous
+                   connection has ever been established, then the
+                   first endpoint configured is used.   NETCONF
+                   servers SHOULD be able to remember the last
+                   endpoint connected to across reboots.";
+              }
+            }
+            default "first-listed";
+            description
+              "Specifies which of the NETCONF client's endpoints the
+               NETCONF server should start with when trying to connect
+               to the NETCONF client.";
+          }
+
+          leaf max-attempts {
+            type uint8 {
+              range "1..max";
+            }
+            default "3";
+            description
+              "Specifies the number times the NETCONF server tries to
+               connect to a specific endpoint before moving on to the
+               next endpoint in the list (round robin).";
+          }
+        }
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-server@2016-11-02.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-server@2016-11-02.yin
new file mode 100644 (file)
index 0000000..4d84c66
--- /dev/null
@@ -0,0 +1,538 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-netconf-server"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ncs="urn:ietf:params:xml:ns:yang:ietf-netconf-server"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:x509c2n="urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name"
+        xmlns:ss="urn:ietf:params:xml:ns:yang:ietf-ssh-server"
+        xmlns:ts="urn:ietf:params:xml:ns:yang:ietf-tls-server"&gt;
+  &lt;yang-version value="1.1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-netconf-server"/&gt;
+  &lt;prefix value="ncs"/&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-x509-cert-to-name"&gt;
+    &lt;prefix value="x509c2n"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7407: A YANG Data Model for SNMP Configuration&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-ssh-server"&gt;
+    &lt;prefix value="ss"/&gt;
+    &lt;revision-date date="2016-11-02"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC YYYY: SSH Client and Server Models&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-tls-server"&gt;
+    &lt;prefix value="ts"/&gt;
+    &lt;revision-date date="2016-11-02"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC ZZZZ: TLS Client and Server Models&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+
+WG Chair: Mahesh Jethanandani
+          &amp;lt;mailto:mjethanandani@gmail.com&amp;gt;
+
+Editor:   Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of YANG definitions for
+configuring NETCONF servers.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD
+License set forth in Section 4.c of the IETF Trust's
+Legal Provisions Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC XXXX; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2016-11-02"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC XXXX: NETCONF Client and Server Models&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;feature name="listen"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The 'listen' feature indicates that the NETCONF server
+supports opening a port to accept NETCONF client connections
+using at least one transport (e.g., SSH, TLS, etc.).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="ssh-listen"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The 'ssh-listen' feature indicates that the NETCONF server
+supports opening a port to accept NETCONF over SSH
+client connections.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6242: Using the NETCONF Protocol over Secure Shell (SSH)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="tls-listen"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The 'tls-listen' feature indicates that the NETCONF server
+supports opening a port to accept NETCONF over TLS
+client connections.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7589: Using the NETCONF Protocol over Transport
+          Layer Security (TLS) with Mutual X.509
+          Authentication&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="call-home"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The 'call-home' feature indicates that the NETCONF server
+supports initiating NETCONF call home connections to NETCONF
+clients using at least one transport (e.g., SSH, TLS, etc.).&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC YYYY: NETCONF Call Home and RESTCONF Call Home&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="ssh-call-home"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The 'ssh-call-home' feature indicates that the NETCONF
+server supports initiating a NETCONF over SSH call
+home connection to NETCONF clients.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC YYYY: NETCONF Call Home and RESTCONF Call Home&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="tls-call-home"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The 'tls-call-home' feature indicates that the NETCONF
+server supports initiating a NETCONF over TLS call
+home connection to NETCONF clients.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC YYYY: NETCONF Call Home and RESTCONF Call Home&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;grouping name="cert-maps-grouping"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A grouping that defines a container around the
+cert-to-name structure defined in RFC 7407.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="cert-maps"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The cert-maps container is used by a TLS-based NETCONF
+server to map the NETCONF client's presented X.509
+certificate to a NETCONF username.  If no matching and
+valid cert-to-name list entry can be found, then the
+NETCONF server MUST close the connection, and MUST NOT
+accept NETCONF messages over it.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;RFC WWWW: NETCONF over TLS, Section 7&lt;/text&gt;
+      &lt;/reference&gt;
+      &lt;uses name="x509c2n:cert-to-name"/&gt;
+    &lt;/container&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="endpoints-container"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This grouping is used by both the ssh and tls containers
+for call-home configurations.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="endpoints"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Container for the list of endpoints.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="endpoint"&gt;
+        &lt;key value="name"/&gt;
+        &lt;min-elements value="1"/&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;User-ordered list of endpoints for this NETCONF client.
+Defining more than one enables high-availability.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for this endpoint.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="address"&gt;
+          &lt;type name="inet:host"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IP address or hostname of the endpoint.  If a
+hostname is configured and the DNS resolution results
+in more than one IP address, the NETCONF server
+will process the IP addresses as if they had been
+explicitly configured in place of the hostname.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="port"&gt;
+          &lt;type name="inet:port-number"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The IP port for this endpoint. The NETCONF server will
+use the IANA-assigned well-known port if no value is
+specified.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/grouping&gt;
+  &lt;container name="netconf-server"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Top-level container for NETCONF server configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="session-options"&gt;
+      &lt;description&gt;
+        &lt;text&gt;NETCONF session options, independent of transport
+or connection strategy.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="hello-timeout"&gt;
+        &lt;type name="uint16"/&gt;
+        &lt;units name="seconds"/&gt;
+        &lt;default value="600"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Specifies the maximum number of seconds that a SSH/TLS
+connection may wait for a hello message to be received.
+A connection will be dropped if no hello message is
+received before this number of seconds elapses.  If set
+to zero, then the server will wait forever for a hello
+message.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/container&gt;
+    &lt;container name="listen"&gt;
+      &lt;if-feature name="listen"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Configures listen behavior&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="max-sessions"&gt;
+        &lt;type name="uint16"/&gt;
+        &lt;default value="0"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Specifies the maximum number of concurrent sessions
+that can be active at one time.  The value 0 indicates
+that no artificial session limit should be used.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="idle-timeout"&gt;
+        &lt;type name="uint16"/&gt;
+        &lt;units name="seconds"/&gt;
+        &lt;default value="3600"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Specifies the maximum number of seconds that a NETCONF
+session may remain idle. A NETCONF session will be dropped
+if it is idle for an interval longer than this number of
+seconds.  If set to zero, then the server will never drop
+a session because it is idle.  Sessions that have a
+notification subscription active are never dropped.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;list name="endpoint"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of endpoints to listen for NETCONF connections on.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for the NETCONF listen endpoint.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="transport"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Selects between available transports.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;case name="ssh"&gt;
+            &lt;if-feature name="ssh-listen"/&gt;
+            &lt;container name="ssh"&gt;
+              &lt;description&gt;
+                &lt;text&gt;SSH-specific listening configuration for inbound
+connections.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;uses name="ss:listening-ssh-server-grouping"&gt;
+                &lt;refine target-node="port"&gt;
+                  &lt;default value="830"/&gt;
+                &lt;/refine&gt;
+              &lt;/uses&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+          &lt;case name="tls"&gt;
+            &lt;if-feature name="tls-listen"/&gt;
+            &lt;container name="tls"&gt;
+              &lt;description&gt;
+                &lt;text&gt;TLS-specific listening configuration for inbound
+connections.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;uses name="ts:listening-tls-server-grouping"&gt;
+                &lt;refine target-node="port"&gt;
+                  &lt;default value="6513"/&gt;
+                &lt;/refine&gt;
+                &lt;augment target-node="client-auth"&gt;
+                  &lt;description&gt;
+                    &lt;text&gt;Augments in the cert-to-name structure.&lt;/text&gt;
+                  &lt;/description&gt;
+                  &lt;uses name="cert-maps-grouping"/&gt;
+                &lt;/augment&gt;
+              &lt;/uses&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+        &lt;/choice&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="call-home"&gt;
+      &lt;if-feature name="call-home"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Configures call-home behavior&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="netconf-client"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of NETCONF clients the NETCONF server is to initiate
+call-home connections to.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for the remote NETCONF client.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="transport"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Selects between available transports.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;case name="ssh"&gt;
+            &lt;if-feature name="ssh-call-home"/&gt;
+            &lt;container name="ssh"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Specifies SSH-specific call-home transport
+configuration.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;uses name="endpoints-container"&gt;
+                &lt;refine target-node="endpoints/endpoint/port"&gt;
+                  &lt;default value="4334"/&gt;
+                &lt;/refine&gt;
+              &lt;/uses&gt;
+              &lt;uses name="ss:non-listening-ssh-server-grouping"/&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+          &lt;case name="tls"&gt;
+            &lt;if-feature name="tls-call-home"/&gt;
+            &lt;container name="tls"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Specifies TLS-specific call-home transport
+configuration.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;uses name="endpoints-container"&gt;
+                &lt;refine target-node="endpoints/endpoint/port"&gt;
+                  &lt;default value="4335"/&gt;
+                &lt;/refine&gt;
+              &lt;/uses&gt;
+              &lt;uses name="ts:non-listening-tls-server-grouping"&gt;
+                &lt;augment target-node="client-auth"&gt;
+                  &lt;description&gt;
+                    &lt;text&gt;Augments in the cert-to-name structure.&lt;/text&gt;
+                  &lt;/description&gt;
+                  &lt;uses name="cert-maps-grouping"/&gt;
+                &lt;/augment&gt;
+              &lt;/uses&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+        &lt;/choice&gt;
+        &lt;container name="connection-type"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Indicates the kind of connection to use.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;choice name="connection-type"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Selects between available connection types.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;case name="persistent-connection"&gt;
+              &lt;container name="persistent"&gt;
+                &lt;presence value="true"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;Maintain a persistent connection to the NETCONF
+client. If the connection goes down, immediately
+start trying to reconnect to it, using the
+reconnection strategy.
+
+This connection type minimizes any NETCONF client
+to NETCONF server data-transfer delay, albeit at
+the expense of holding resources longer.&lt;/text&gt;
+                &lt;/description&gt;
+                &lt;leaf name="idle-timeout"&gt;
+                  &lt;type name="uint32"/&gt;
+                  &lt;units name="seconds"/&gt;
+                  &lt;default value="86400"/&gt;
+                  &lt;description&gt;
+                    &lt;text&gt;Specifies the maximum number of seconds that a
+a NETCONF session may remain idle. A NETCONF
+session will be dropped if it is idle for an
+interval longer than this number of seconds.
+If set to zero, then the server will never drop
+a session because it is idle.  Sessions that
+have a notification subscription active are
+never dropped.&lt;/text&gt;
+                  &lt;/description&gt;
+                &lt;/leaf&gt;
+                &lt;container name="keep-alives"&gt;
+                  &lt;description&gt;
+                    &lt;text&gt;Configures the keep-alive policy, to proactively
+test the aliveness of the SSH/TLS client.  An
+unresponsive SSH/TLS client will be dropped after
+approximately max-attempts * max-wait seconds.&lt;/text&gt;
+                  &lt;/description&gt;
+                  &lt;reference&gt;
+                    &lt;text&gt;RFC YYYY: NETCONF Call Home and RESTCONF Call
+Home, Section 3.1, item S6&lt;/text&gt;
+                  &lt;/reference&gt;
+                  &lt;leaf name="max-wait"&gt;
+                    &lt;type name="uint16"&gt;
+                      &lt;range value="1..max"/&gt;
+                    &lt;/type&gt;
+                    &lt;units name="seconds"/&gt;
+                    &lt;default value="30"/&gt;
+                    &lt;description&gt;
+                      &lt;text&gt;Sets the amount of time in seconds after which
+if no data has been received from the SSH/TLS
+client, a SSH/TLS-level message will be sent
+to test the aliveness of the SSH/TLS client.&lt;/text&gt;
+                    &lt;/description&gt;
+                  &lt;/leaf&gt;
+                  &lt;leaf name="max-attempts"&gt;
+                    &lt;type name="uint8"/&gt;
+                    &lt;default value="3"/&gt;
+                    &lt;description&gt;
+                      &lt;text&gt;Sets the maximum number of sequential keep-alive
+messages that can fail to obtain a response from
+the SSH/TLS client before assuming the SSH/TLS
+client is no longer alive.&lt;/text&gt;
+                    &lt;/description&gt;
+                  &lt;/leaf&gt;
+                &lt;/container&gt;
+              &lt;/container&gt;
+            &lt;/case&gt;
+            &lt;case name="periodic-connection"&gt;
+              &lt;container name="periodic"&gt;
+                &lt;presence value="true"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;Periodically connect to the NETCONF client, so that
+the NETCONF client may deliver messages pending for
+the NETCONF server.  The NETCONF client must close
+the connection when it is ready to release it. Once
+the connection has been closed, the NETCONF server
+will restart its timer until the next connection.&lt;/text&gt;
+                &lt;/description&gt;
+                &lt;leaf name="idle-timeout"&gt;
+                  &lt;type name="uint16"/&gt;
+                  &lt;units name="seconds"/&gt;
+                  &lt;default value="300"/&gt;
+                  &lt;description&gt;
+                    &lt;text&gt;Specifies the maximum number of seconds that a
+a NETCONF session may remain idle. A NETCONF
+session will be dropped if it is idle for an
+interval longer than this number of seconds.
+If set to zero, then the server will never drop
+a session because it is idle.  Sessions that
+have a notification subscription active are
+never dropped.&lt;/text&gt;
+                  &lt;/description&gt;
+                &lt;/leaf&gt;
+                &lt;leaf name="reconnect_timeout"&gt;
+                  &lt;type name="uint16"&gt;
+                    &lt;range value="1..max"/&gt;
+                  &lt;/type&gt;
+                  &lt;units name="minutes"/&gt;
+                  &lt;default value="60"/&gt;
+                  &lt;description&gt;
+                    &lt;text&gt;Sets the maximum amount of unconnected time the
+NETCONF server will wait before re-establishing
+a connection to the NETCONF client.  The NETCONF
+server may initiate a connection before this
+time if desired (e.g., to deliver an event
+notification message).&lt;/text&gt;
+                  &lt;/description&gt;
+                &lt;/leaf&gt;
+              &lt;/container&gt;
+            &lt;/case&gt;
+          &lt;/choice&gt;
+        &lt;/container&gt;
+        &lt;container name="reconnect-strategy"&gt;
+          &lt;description&gt;
+            &lt;text&gt;The reconnection strategy directs how a NETCONF server
+reconnects to a NETCONF client, after discovering its
+connection to the client has dropped, even if due to a
+reboot.  The NETCONF server starts with the specified
+endpoint and tries to connect to it max-attempts times
+before trying the next endpoint in the list (round
+robin).&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="start-with"&gt;
+            &lt;type name="enumeration"&gt;
+              &lt;enum name="first-listed"&gt;
+                &lt;description&gt;
+                  &lt;text&gt;Indicates that reconnections should start with
+the first endpoint listed.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/enum&gt;
+              &lt;enum name="last-connected"&gt;
+                &lt;description&gt;
+                  &lt;text&gt;Indicates that reconnections should start with
+the endpoint last connected to.  If no previous
+connection has ever been established, then the
+first endpoint configured is used.   NETCONF
+servers SHOULD be able to remember the last
+endpoint connected to across reboots.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/enum&gt;
+            &lt;/type&gt;
+            &lt;default value="first-listed"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Specifies which of the NETCONF client's endpoints the
+NETCONF server should start with when trying to connect
+to the NETCONF client.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="max-attempts"&gt;
+            &lt;type name="uint8"&gt;
+              &lt;range value="1..max"/&gt;
+            &lt;/type&gt;
+            &lt;default value="3"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Specifies the number times the NETCONF server tries to
+connect to a specific endpoint before moving on to the
+next endpoint in the list (round robin).&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/container&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-with-defaults@2011-06-01.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-with-defaults@2011-06-01.yang
new file mode 100644 (file)
index 0000000..896b654
--- /dev/null
@@ -0,0 +1,132 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-netconf-with-defaults {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults";
+  prefix ncwd;
+
+  import ietf-netconf {
+    prefix nc;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration Protocol) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+
+     WG List:  &lt;netconf@ietf.org&gt;
+
+     WG Chair: Bert Wijnen
+               &lt;bertietf@bwijnen.net&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mehmet.ersue@nsn.com&gt;
+
+     Editor: Andy Bierman
+             &lt;andy.bierman@brocade.com&gt;
+
+     Editor: Balazs Lengyel
+             &lt;balazs.lengyel@ericsson.com&gt;";
+  description
+    "This module defines an extension to the NETCONF protocol
+     that allows the NETCONF client to control how default
+     values are handled by the server in particular NETCONF
+     operations.
+
+     Copyright (c) 2011 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6243; see
+     the RFC itself for full legal notices.";
+
+  revision 2011-06-01 {
+    description
+      "Initial version.";
+    reference
+      "RFC 6243: With-defaults Capability for NETCONF";
+  }
+
+  typedef with-defaults-mode {
+    type enumeration {
+      enum "report-all" {
+        description
+          "All default data is reported.";
+        reference
+          "RFC 6243; Section 3.1";
+      }
+      enum "report-all-tagged" {
+        description
+          "All default data is reported.
+           Any nodes considered to be default data
+           will contain a 'default' XML attribute,
+           set to 'true' or '1'.";
+        reference
+          "RFC 6243; Section 3.4";
+      }
+      enum "trim" {
+        description
+          "Values are not reported if they contain the default.";
+        reference
+          "RFC 6243; Section 3.2";
+      }
+      enum "explicit" {
+        description
+          "Report values that contain the definition of
+           explicitly set data.";
+        reference
+          "RFC 6243; Section 3.3";
+      }
+    }
+    description
+      "Possible modes to report default data.";
+    reference
+      "RFC 6243; Section 3.";
+  }
+
+  grouping with-defaults-parameters {
+    description
+      "Contains the &lt;with-defaults&gt; parameter for control
+       of defaults in NETCONF retrieval operations.";
+    leaf with-defaults {
+      type with-defaults-mode;
+      description
+        "The explicit defaults processing mode requested.";
+      reference
+        "RFC 6243; Section 4.5.1";
+    }
+  }
+
+  augment "/nc:get-config/nc:input" {
+    description
+      "Adds the &lt;with-defaults&gt; parameter to the
+       input of the NETCONF &lt;get-config&gt; operation.";
+    reference
+      "RFC 6243; Section 4.5.1";
+    uses with-defaults-parameters;
+  }
+
+  augment "/nc:get/nc:input" {
+    description
+      "Adds the &lt;with-defaults&gt; parameter to
+       the input of the NETCONF &lt;get&gt; operation.";
+    reference
+      "RFC 6243; Section 4.5.1";
+    uses with-defaults-parameters;
+  }
+
+  augment "/nc:copy-config/nc:input" {
+    description
+      "Adds the &lt;with-defaults&gt; parameter to
+       the input of the NETCONF &lt;copy-config&gt; operation.";
+    reference
+      "RFC 6243; Section 4.5.1";
+    uses with-defaults-parameters;
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-with-defaults@2011-06-01.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf-with-defaults@2011-06-01.yin
new file mode 100644 (file)
index 0000000..d87ea7f
--- /dev/null
@@ -0,0 +1,152 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-netconf-with-defaults"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ncwd="urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults"
+        xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults"/&gt;
+  &lt;prefix value="ncwd"/&gt;
+  &lt;import module="ietf-netconf"&gt;
+    &lt;prefix value="nc"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration Protocol) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+
+WG List:  &amp;lt;netconf@ietf.org&amp;gt;
+
+WG Chair: Bert Wijnen
+          &amp;lt;bertietf@bwijnen.net&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mehmet.ersue@nsn.com&amp;gt;
+
+Editor: Andy Bierman
+        &amp;lt;andy.bierman@brocade.com&amp;gt;
+
+Editor: Balazs Lengyel
+        &amp;lt;balazs.lengyel@ericsson.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module defines an extension to the NETCONF protocol
+that allows the NETCONF client to control how default
+values are handled by the server in particular NETCONF
+operations.
+
+Copyright (c) 2011 IETF Trust and the persons identified as
+the document authors.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 6243; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2011-06-01"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6243: With-defaults Capability for NETCONF&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="with-defaults-mode"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="report-all"&gt;
+        &lt;description&gt;
+          &lt;text&gt;All default data is reported.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6243; Section 3.1&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/enum&gt;
+      &lt;enum name="report-all-tagged"&gt;
+        &lt;description&gt;
+          &lt;text&gt;All default data is reported.
+Any nodes considered to be default data
+will contain a 'default' XML attribute,
+set to 'true' or '1'.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6243; Section 3.4&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/enum&gt;
+      &lt;enum name="trim"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Values are not reported if they contain the default.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6243; Section 3.2&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/enum&gt;
+      &lt;enum name="explicit"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Report values that contain the definition of
+explicitly set data.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6243; Section 3.3&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Possible modes to report default data.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6243; Section 3.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;grouping name="with-defaults-parameters"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Contains the &amp;lt;with-defaults&amp;gt; parameter for control
+of defaults in NETCONF retrieval operations.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="with-defaults"&gt;
+      &lt;type name="with-defaults-mode"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The explicit defaults processing mode requested.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;RFC 6243; Section 4.5.1&lt;/text&gt;
+      &lt;/reference&gt;
+    &lt;/leaf&gt;
+  &lt;/grouping&gt;
+  &lt;augment target-node="/nc:get-config/nc:input"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Adds the &amp;lt;with-defaults&amp;gt; parameter to the
+input of the NETCONF &amp;lt;get-config&amp;gt; operation.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6243; Section 4.5.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;uses name="with-defaults-parameters"/&gt;
+  &lt;/augment&gt;
+  &lt;augment target-node="/nc:get/nc:input"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Adds the &amp;lt;with-defaults&amp;gt; parameter to
+the input of the NETCONF &amp;lt;get&amp;gt; operation.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6243; Section 4.5.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;uses name="with-defaults-parameters"/&gt;
+  &lt;/augment&gt;
+  &lt;augment target-node="/nc:copy-config/nc:input"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Adds the &amp;lt;with-defaults&amp;gt; parameter to
+the input of the NETCONF &amp;lt;copy-config&amp;gt; operation.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6243; Section 4.5.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;uses name="with-defaults-parameters"/&gt;
+  &lt;/augment&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf@2011-06-01.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf@2011-06-01.yang
new file mode 100644 (file)
index 0000000..1ed9a5a
--- /dev/null
@@ -0,0 +1,938 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-netconf {
+  namespace "urn:ietf:params:xml:ns:netconf:base:1.0";
+  prefix nc;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm {
+    prefix nacm;
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;netconf@ietf.org&gt;
+
+     WG Chair: Bert Wijnen
+               &lt;bertietf@bwijnen.net&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mehmet.ersue@nsn.com&gt;
+
+     Editor:   Martin Bjorklund
+               &lt;mbj@tail-f.com&gt;
+
+     Editor:   Juergen Schoenwaelder
+               &lt;j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Andy Bierman
+               &lt;andy.bierman@brocade.com&gt;";
+  description
+    "NETCONF Protocol Data Types and Protocol Operations.
+
+     Copyright (c) 2011 IETF Trust and the persons identified as
+     the document authors.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6241; see
+     the RFC itself for full legal notices.";
+
+  revision 2011-06-01 {
+    description
+      "Initial revision;
+       2013-09-29: Updated to include NACM attributes,
+       as specified in RFC 6536: sec 3.2.5 and 3.2.8";
+    reference
+      "RFC 6241: Network Configuration Protocol";
+  }
+
+  extension get-filter-element-attributes {
+    description
+      "If this extension is present within an 'anyxml'
+       statement named 'filter', which must be conceptually
+       defined within the RPC input section for the &lt;get&gt;
+       and &lt;get-config&gt; protocol operations, then the
+       following unqualified XML attribute is supported
+       within the &lt;filter&gt; element, within a &lt;get&gt; or
+       &lt;get-config&gt; protocol operation:
+
+         type : optional attribute with allowed
+                value strings 'subtree' and 'xpath'.
+                If missing, the default value is 'subtree'.
+
+       If the 'xpath' feature is supported, then the
+       following unqualified XML attribute is
+       also supported:
+
+         select: optional attribute containing a
+                 string representing an XPath expression.
+                 The 'type' attribute must be equal to 'xpath'
+                 if this attribute is present.";
+  }
+
+
+  feature writable-running {
+    description
+      "NETCONF :writable-running capability;
+       If the server advertises the :writable-running
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.2";
+  }
+
+  feature candidate {
+    description
+      "NETCONF :candidate capability;
+       If the server advertises the :candidate
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.3";
+  }
+
+  feature confirmed-commit {
+    if-feature "candidate";
+    description
+      "NETCONF :confirmed-commit:1.1 capability;
+       If the server advertises the :confirmed-commit:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.4";
+  }
+
+  feature rollback-on-error {
+    description
+      "NETCONF :rollback-on-error capability;
+       If the server advertises the :rollback-on-error
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.5";
+  }
+
+  feature validate {
+    description
+      "NETCONF :validate:1.1 capability;
+       If the server advertises the :validate:1.1
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.6";
+  }
+
+  feature startup {
+    description
+      "NETCONF :startup capability;
+       If the server advertises the :startup
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.7";
+  }
+
+  feature url {
+    description
+      "NETCONF :url capability;
+       If the server advertises the :url
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.8";
+  }
+
+  feature xpath {
+    description
+      "NETCONF :xpath capability;
+       If the server advertises the :xpath
+       capability for a session, then this feature must
+       also be enabled for that session.  Otherwise,
+       this feature must not be enabled.";
+    reference
+      "RFC 6241, Section 8.9";
+  }
+
+  typedef session-id-type {
+    type uint32 {
+      range "1..max";
+    }
+    description
+      "NETCONF Session Id";
+  }
+
+  typedef session-id-or-zero-type {
+    type uint32;
+    description
+      "NETCONF Session Id or Zero to indicate none";
+  }
+
+  typedef error-tag-type {
+    type enumeration {
+      enum "in-use" {
+        description
+          "The request requires a resource that
+           already is in use.";
+      }
+      enum "invalid-value" {
+        description
+          "The request specifies an unacceptable value for one
+           or more parameters.";
+      }
+      enum "too-big" {
+        description
+          "The request or response (that would be generated) is
+           too large for the implementation to handle.";
+      }
+      enum "missing-attribute" {
+        description
+          "An expected attribute is missing.";
+      }
+      enum "bad-attribute" {
+        description
+          "An attribute value is not correct; e.g., wrong type,
+           out of range, pattern mismatch.";
+      }
+      enum "unknown-attribute" {
+        description
+          "An unexpected attribute is present.";
+      }
+      enum "missing-element" {
+        description
+          "An expected element is missing.";
+      }
+      enum "bad-element" {
+        description
+          "An element value is not correct; e.g., wrong type,
+           out of range, pattern mismatch.";
+      }
+      enum "unknown-element" {
+        description
+          "An unexpected element is present.";
+      }
+      enum "unknown-namespace" {
+        description
+          "An unexpected namespace is present.";
+      }
+      enum "access-denied" {
+        description
+          "Access to the requested protocol operation or
+           data model is denied because authorization failed.";
+      }
+      enum "lock-denied" {
+        description
+          "Access to the requested lock is denied because the
+           lock is currently held by another entity.";
+      }
+      enum "resource-denied" {
+        description
+          "Request could not be completed because of
+           insufficient resources.";
+      }
+      enum "rollback-failed" {
+        description
+          "Request to roll back some configuration change (via
+           rollback-on-error or &lt;discard-changes&gt; operations)
+           was not completed for some reason.";
+      }
+      enum "data-exists" {
+        description
+          "Request could not be completed because the relevant
+           data model content already exists.  For example,
+           a 'create' operation was attempted on data that
+           already exists.";
+      }
+      enum "data-missing" {
+        description
+          "Request could not be completed because the relevant
+           data model content does not exist.  For example,
+           a 'delete' operation was attempted on
+           data that does not exist.";
+      }
+      enum "operation-not-supported" {
+        description
+          "Request could not be completed because the requested
+           operation is not supported by this implementation.";
+      }
+      enum "operation-failed" {
+        description
+          "Request could not be completed because the requested
+           operation failed for some reason not covered by
+           any other error condition.";
+      }
+      enum "partial-operation" {
+        description
+          "This error-tag is obsolete, and SHOULD NOT be sent
+           by servers conforming to this document.";
+      }
+      enum "malformed-message" {
+        description
+          "A message could not be handled because it failed to
+           be parsed correctly.  For example, the message is not
+           well-formed XML or it uses an invalid character set.";
+      }
+    }
+    description
+      "NETCONF Error Tag";
+    reference
+      "RFC 6241, Appendix A";
+  }
+
+  typedef error-severity-type {
+    type enumeration {
+      enum "error" {
+        description
+          "Error severity";
+      }
+      enum "warning" {
+        description
+          "Warning severity";
+      }
+    }
+    description
+      "NETCONF Error Severity";
+    reference
+      "RFC 6241, Section 4.3";
+  }
+
+  typedef edit-operation-type {
+    type enumeration {
+      enum "merge" {
+        description
+          "The configuration data identified by the
+           element containing this attribute is merged
+           with the configuration at the corresponding
+           level in the configuration datastore identified
+           by the target parameter.";
+      }
+      enum "replace" {
+        description
+          "The configuration data identified by the element
+           containing this attribute replaces any related
+           configuration in the configuration datastore
+           identified by the target parameter.  If no such
+           configuration data exists in the configuration
+           datastore, it is created.  Unlike a
+           &lt;copy-config&gt; operation, which replaces the
+           entire target configuration, only the configuration
+           actually present in the config parameter is affected.";
+      }
+      enum "create" {
+        description
+          "The configuration data identified by the element
+           containing this attribute is added to the
+           configuration if and only if the configuration
+           data does not already exist in the configuration
+           datastore.  If the configuration data exists, an
+           &lt;rpc-error&gt; element is returned with an
+           &lt;error-tag&gt; value of 'data-exists'.";
+      }
+      enum "delete" {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if and only if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, an &lt;rpc-error&gt; element is returned with
+           an &lt;error-tag&gt; value of 'data-missing'.";
+      }
+      enum "remove" {
+        description
+          "The configuration data identified by the element
+           containing this attribute is deleted from the
+           configuration if the configuration
+           data currently exists in the configuration
+           datastore.  If the configuration data does not
+           exist, the 'remove' operation is silently ignored
+           by the server.";
+      }
+    }
+    default "merge";
+    description
+      "NETCONF 'operation' attribute values";
+    reference
+      "RFC 6241, Section 7.2";
+  }
+
+  rpc get-config {
+    description
+      "Retrieve all or part of a specified configuration.";
+    reference
+      "RFC 6241, Section 7.1";
+    input {
+      container source {
+        description
+          "Particular configuration to retrieve.";
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration to retrieve.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config source.
+               This is optional-to-implement on the server because
+               not all servers will support filtering for this
+               datastore.";
+          }
+        }
+      }
+
+      anyxml filter {
+        nc:get-filter-element-attributes;
+        description
+          "Subtree or XPath filter to use.";
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the source datastore subset that matched
+           the filter criteria (if any).  An empty data container
+           indicates that the request did not produce any results.";
+      }
+    }
+  }
+
+  rpc edit-config {
+    description
+      "The &lt;edit-config&gt; operation loads all or part of a specified
+       configuration to the specified target configuration.";
+    reference
+      "RFC 6241, Section 7.2";
+    input {
+      container target {
+        description
+          "Particular configuration to edit.";
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+
+          leaf running {
+            if-feature "writable-running";
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+        }
+      }
+
+      leaf default-operation {
+        type enumeration {
+          enum "merge" {
+            description
+              "The default operation is merge.";
+          }
+          enum "replace" {
+            description
+              "The default operation is replace.";
+          }
+          enum "none" {
+            description
+              "There is no default operation.";
+          }
+        }
+        default "merge";
+        description
+          "The default operation to use.";
+      }
+
+      leaf test-option {
+        if-feature "validate";
+        type enumeration {
+          enum "test-then-set" {
+            description
+              "The server will test and then set if no errors.";
+          }
+          enum "set" {
+            description
+              "The server will set without a test first.";
+          }
+          enum "test-only" {
+            description
+              "The server will only test and not set, even
+               if there are no errors.";
+          }
+        }
+        default "test-then-set";
+        description
+          "The test option to use.";
+      }
+
+      leaf error-option {
+        type enumeration {
+          enum "stop-on-error" {
+            description
+              "The server will stop on errors.";
+          }
+          enum "continue-on-error" {
+            description
+              "The server may continue on errors.";
+          }
+          enum "rollback-on-error" {
+            description
+              "The server will roll back on errors.
+               This value can only be used if the 'rollback-on-error'
+               feature is supported.";
+          }
+        }
+        default "stop-on-error";
+        description
+          "The error option to use.";
+      }
+
+      choice edit-content {
+        mandatory true;
+        description
+          "The content for the edit operation.";
+        anyxml config {
+          description
+            "Inline Config content.";
+        }
+
+        leaf url {
+          if-feature "url";
+          type inet:uri;
+          description
+            "URL-based config content.";
+        }
+      }
+    }
+  }
+
+  rpc copy-config {
+    description
+      "Create or replace an entire configuration datastore with the
+       contents of another complete configuration datastore.";
+    reference
+      "RFC 6241, Section 7.3";
+    input {
+      container target {
+        description
+          "Particular configuration to copy to.";
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target of the copy operation.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+
+          leaf running {
+            if-feature "writable-running";
+            type empty;
+            description
+              "The running configuration is the config target.
+               This is optional-to-implement on the server.";
+          }
+
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+
+          leaf url {
+            if-feature "url";
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+
+      container source {
+        description
+          "Particular configuration to copy from.";
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source for the copy operation.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+
+          leaf url {
+            if-feature "url";
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+
+          anyxml config {
+            description
+              "Inline Config content: &lt;config&gt; element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc delete-config {
+    nacm:default-deny-all;
+    description
+      "Delete a configuration datastore.";
+    reference
+      "RFC 6241, Section 7.4";
+    input {
+      container target {
+        description
+          "Particular configuration to delete.";
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to delete.";
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+
+          leaf url {
+            if-feature "url";
+            type inet:uri;
+            description
+              "The URL-based configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc lock {
+    description
+      "The lock operation allows the client to lock the configuration
+       system of a device.";
+    reference
+      "RFC 6241, Section 7.5";
+    input {
+      container target {
+        description
+          "Particular configuration to lock.";
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to lock.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc unlock {
+    description
+      "The unlock operation is used to release a configuration lock,
+       previously obtained with the 'lock' operation.";
+    reference
+      "RFC 6241, Section 7.6";
+    input {
+      container target {
+        description
+          "Particular configuration to unlock.";
+        choice config-target {
+          mandatory true;
+          description
+            "The configuration target to unlock.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config target.";
+          }
+
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config target.";
+          }
+
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config target.";
+          }
+        }
+      }
+    }
+  }
+
+  rpc get {
+    description
+      "Retrieve running configuration and device state information.";
+    reference
+      "RFC 6241, Section 7.7";
+    input {
+      anyxml filter {
+        nc:get-filter-element-attributes;
+        description
+          "This parameter specifies the portion of the system
+           configuration and state data to retrieve.";
+      }
+    }
+
+    output {
+      anyxml data {
+        description
+          "Copy of the running datastore subset and/or state
+           data that matched the filter criteria (if any).
+           An empty data container indicates that the request did not
+           produce any results.";
+      }
+    }
+  }
+
+  rpc close-session {
+    description
+      "Request graceful termination of a NETCONF session.";
+    reference
+      "RFC 6241, Section 7.8";
+  }
+
+  rpc kill-session {
+    nacm:default-deny-all;
+    description
+      "Force the termination of a NETCONF session.";
+    reference
+      "RFC 6241, Section 7.9";
+    input {
+      leaf session-id {
+        type session-id-type;
+        mandatory true;
+        description
+          "Particular session to kill.";
+      }
+    }
+  }
+
+  rpc commit {
+    if-feature "candidate";
+    description
+      "Commit the candidate configuration as the device's new
+       current configuration.";
+    reference
+      "RFC 6241, Section 8.3.4.1";
+    input {
+      leaf confirmed {
+        if-feature "confirmed-commit";
+        type empty;
+        description
+          "Requests a confirmed commit.";
+        reference
+          "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf confirm-timeout {
+        if-feature "confirmed-commit";
+        type uint32 {
+          range "1..max";
+        }
+        units "seconds";
+        default "600";
+        description
+          "The timeout interval for a confirmed commit.";
+        reference
+          "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist {
+        if-feature "confirmed-commit";
+        type string;
+        description
+          "This parameter is used to make a confirmed commit
+           persistent.  A persistent confirmed commit is not aborted
+           if the NETCONF session terminates.  The only way to abort
+           a persistent confirmed commit is to let the timer expire,
+           or to use the &lt;cancel-commit&gt; operation.
+
+           The value of this parameter is a token that must be given
+           in the 'persist-id' parameter of &lt;commit&gt; or
+           &lt;cancel-commit&gt; operations in order to confirm or cancel
+           the persistent confirmed commit.
+
+           The token should be a random string.";
+        reference
+          "RFC 6241, Section 8.3.4.1";
+      }
+
+      leaf persist-id {
+        if-feature "confirmed-commit";
+        type string;
+        description
+          "This parameter is given in order to commit a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the &lt;commit&gt; operation.
+           If it does not match, the operation fails with an
+           'invalid-value' error.";
+        reference
+          "RFC 6241, Section 8.3.4.1";
+      }
+    }
+  }
+
+  rpc discard-changes {
+    if-feature "candidate";
+    description
+      "Revert the candidate configuration to the current
+       running configuration.";
+    reference
+      "RFC 6241, Section 8.3.4.2";
+  }
+
+  rpc cancel-commit {
+    if-feature "confirmed-commit";
+    description
+      "This operation is used to cancel an ongoing confirmed commit.
+       If the confirmed commit is persistent, the parameter
+       'persist-id' must be given, and it must match the value of the
+       'persist' parameter.";
+    reference
+      "RFC 6241, Section 8.4.4.1";
+    input {
+      leaf persist-id {
+        type string;
+        description
+          "This parameter is given in order to cancel a persistent
+           confirmed commit.  The value must be equal to the value
+           given in the 'persist' parameter to the &lt;commit&gt; operation.
+           If it does not match, the operation fails with an
+           'invalid-value' error.";
+      }
+    }
+  }
+
+  rpc validate {
+    if-feature "validate";
+    description
+      "Validates the contents of the specified configuration.";
+    reference
+      "RFC 6241, Section 8.6.4.1";
+    input {
+      container source {
+        description
+          "Particular configuration to validate.";
+        choice config-source {
+          mandatory true;
+          description
+            "The configuration source to validate.";
+          leaf candidate {
+            if-feature "candidate";
+            type empty;
+            description
+              "The candidate configuration is the config source.";
+          }
+
+          leaf running {
+            type empty;
+            description
+              "The running configuration is the config source.";
+          }
+
+          leaf startup {
+            if-feature "startup";
+            type empty;
+            description
+              "The startup configuration is the config source.";
+          }
+
+          leaf url {
+            if-feature "url";
+            type inet:uri;
+            description
+              "The URL-based configuration is the config source.";
+          }
+
+          anyxml config {
+            description
+              "Inline Config content: &lt;config&gt; element.  Represents
+               an entire configuration datastore, not
+               a subset of the running datastore.";
+          }
+        }
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf@2011-06-01.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-netconf@2011-06-01.yin
new file mode 100644 (file)
index 0000000..65b800e
--- /dev/null
@@ -0,0 +1,1035 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-netconf"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:nacm="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:netconf:base:1.0"/&gt;
+  &lt;prefix value="nc"/&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-netconf-acm"&gt;
+    &lt;prefix value="nacm"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;netconf@ietf.org&amp;gt;
+
+WG Chair: Bert Wijnen
+          &amp;lt;bertietf@bwijnen.net&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mehmet.ersue@nsn.com&amp;gt;
+
+Editor:   Martin Bjorklund
+          &amp;lt;mbj@tail-f.com&amp;gt;
+
+Editor:   Juergen Schoenwaelder
+          &amp;lt;j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Andy Bierman
+          &amp;lt;andy.bierman@brocade.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;NETCONF Protocol Data Types and Protocol Operations.
+
+Copyright (c) 2011 IETF Trust and the persons identified as
+the document authors.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 6241; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2011-06-01"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision;
+2013-09-29: Updated to include NACM attributes,
+as specified in RFC 6536: sec 3.2.5 and 3.2.8&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241: Network Configuration Protocol&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;extension name="get-filter-element-attributes"&gt;
+    &lt;description&gt;
+      &lt;text&gt;If this extension is present within an 'anyxml'
+statement named 'filter', which must be conceptually
+defined within the RPC input section for the &amp;lt;get&amp;gt;
+and &amp;lt;get-config&amp;gt; protocol operations, then the
+following unqualified XML attribute is supported
+within the &amp;lt;filter&amp;gt; element, within a &amp;lt;get&amp;gt; or
+&amp;lt;get-config&amp;gt; protocol operation:
+
+  type : optional attribute with allowed
+         value strings 'subtree' and 'xpath'.
+         If missing, the default value is 'subtree'.
+
+If the 'xpath' feature is supported, then the
+following unqualified XML attribute is
+also supported:
+
+  select: optional attribute containing a
+          string representing an XPath expression.
+          The 'type' attribute must be equal to 'xpath'
+          if this attribute is present.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/extension&gt;
+  &lt;feature name="writable-running"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :writable-running capability;
+If the server advertises the :writable-running
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="candidate"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :candidate capability;
+If the server advertises the :candidate
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.3&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="confirmed-commit"&gt;
+    &lt;if-feature name="candidate"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :confirmed-commit:1.1 capability;
+If the server advertises the :confirmed-commit:1.1
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.4&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="rollback-on-error"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :rollback-on-error capability;
+If the server advertises the :rollback-on-error
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.5&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="validate"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :validate:1.1 capability;
+If the server advertises the :validate:1.1
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.6&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="startup"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :startup capability;
+If the server advertises the :startup
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.7&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="url"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :url capability;
+If the server advertises the :url
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.8&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="xpath"&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF :xpath capability;
+If the server advertises the :xpath
+capability for a session, then this feature must
+also be enabled for that session.  Otherwise,
+this feature must not be enabled.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.9&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;typedef name="session-id-type"&gt;
+    &lt;type name="uint32"&gt;
+      &lt;range value="1..max"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF Session Id&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="session-id-or-zero-type"&gt;
+    &lt;type name="uint32"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF Session Id or Zero to indicate none&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="error-tag-type"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="in-use"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The request requires a resource that
+already is in use.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="invalid-value"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The request specifies an unacceptable value for one
+or more parameters.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="too-big"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The request or response (that would be generated) is
+too large for the implementation to handle.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="missing-attribute"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An expected attribute is missing.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="bad-attribute"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An attribute value is not correct; e.g., wrong type,
+out of range, pattern mismatch.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="unknown-attribute"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An unexpected attribute is present.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="missing-element"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An expected element is missing.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="bad-element"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An element value is not correct; e.g., wrong type,
+out of range, pattern mismatch.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="unknown-element"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An unexpected element is present.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="unknown-namespace"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An unexpected namespace is present.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="access-denied"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Access to the requested protocol operation or
+data model is denied because authorization failed.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="lock-denied"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Access to the requested lock is denied because the
+lock is currently held by another entity.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="resource-denied"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Request could not be completed because of
+insufficient resources.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="rollback-failed"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Request to roll back some configuration change (via
+rollback-on-error or &amp;lt;discard-changes&amp;gt; operations)
+was not completed for some reason.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="data-exists"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Request could not be completed because the relevant
+data model content already exists.  For example,
+a 'create' operation was attempted on data that
+already exists.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="data-missing"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Request could not be completed because the relevant
+data model content does not exist.  For example,
+a 'delete' operation was attempted on
+data that does not exist.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="operation-not-supported"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Request could not be completed because the requested
+operation is not supported by this implementation.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="operation-failed"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Request could not be completed because the requested
+operation failed for some reason not covered by
+any other error condition.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="partial-operation"&gt;
+        &lt;description&gt;
+          &lt;text&gt;This error-tag is obsolete, and SHOULD NOT be sent
+by servers conforming to this document.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="malformed-message"&gt;
+        &lt;description&gt;
+          &lt;text&gt;A message could not be handled because it failed to
+be parsed correctly.  For example, the message is not
+well-formed XML or it uses an invalid character set.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF Error Tag&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Appendix A&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="error-severity-type"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="error"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Error severity&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="warning"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Warning severity&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF Error Severity&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 4.3&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="edit-operation-type"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="merge"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The configuration data identified by the
+element containing this attribute is merged
+with the configuration at the corresponding
+level in the configuration datastore identified
+by the target parameter.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="replace"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The configuration data identified by the element
+containing this attribute replaces any related
+configuration in the configuration datastore
+identified by the target parameter.  If no such
+configuration data exists in the configuration
+datastore, it is created.  Unlike a
+&amp;lt;copy-config&amp;gt; operation, which replaces the
+entire target configuration, only the configuration
+actually present in the config parameter is affected.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="create"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The configuration data identified by the element
+containing this attribute is added to the
+configuration if and only if the configuration
+data does not already exist in the configuration
+datastore.  If the configuration data exists, an
+&amp;lt;rpc-error&amp;gt; element is returned with an
+&amp;lt;error-tag&amp;gt; value of 'data-exists'.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="delete"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The configuration data identified by the element
+containing this attribute is deleted from the
+configuration if and only if the configuration
+data currently exists in the configuration
+datastore.  If the configuration data does not
+exist, an &amp;lt;rpc-error&amp;gt; element is returned with
+an &amp;lt;error-tag&amp;gt; value of 'data-missing'.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+      &lt;enum name="remove"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The configuration data identified by the element
+containing this attribute is deleted from the
+configuration if the configuration
+data currently exists in the configuration
+datastore.  If the configuration data does not
+exist, the 'remove' operation is silently ignored
+by the server.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/enum&gt;
+    &lt;/type&gt;
+    &lt;default value="merge"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;NETCONF 'operation' attribute values&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;rpc name="get-config"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Retrieve all or part of a specified configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="source"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to retrieve.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-source"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration to retrieve.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config source.
+This is optional-to-implement on the server because
+not all servers will support filtering for this
+datastore.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+      &lt;anyxml name="filter"&gt;
+        &lt;nc:get-filter-element-attributes/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Subtree or XPath filter to use.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/anyxml&gt;
+    &lt;/input&gt;
+    &lt;output&gt;
+      &lt;anyxml name="data"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Copy of the source datastore subset that matched
+the filter criteria (if any).  An empty data container
+indicates that the request did not produce any results.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/anyxml&gt;
+    &lt;/output&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="edit-config"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The &amp;lt;edit-config&amp;gt; operation loads all or part of a specified
+configuration to the specified target configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.2&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="target"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to edit.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-target"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration target.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;if-feature name="writable-running"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+      &lt;leaf name="default-operation"&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="merge"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The default operation is merge.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="replace"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The default operation is replace.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="none"&gt;
+            &lt;description&gt;
+              &lt;text&gt;There is no default operation.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;default value="merge"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The default operation to use.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="test-option"&gt;
+        &lt;if-feature name="validate"/&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="test-then-set"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The server will test and then set if no errors.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="set"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The server will set without a test first.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="test-only"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The server will only test and not set, even
+if there are no errors.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;default value="test-then-set"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The test option to use.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="error-option"&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="stop-on-error"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The server will stop on errors.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="continue-on-error"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The server may continue on errors.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="rollback-on-error"&gt;
+            &lt;description&gt;
+              &lt;text&gt;The server will roll back on errors.
+This value can only be used if the 'rollback-on-error'
+feature is supported.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;default value="stop-on-error"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The error option to use.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;choice name="edit-content"&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The content for the edit operation.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;anyxml name="config"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Inline Config content.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/anyxml&gt;
+        &lt;leaf name="url"&gt;
+          &lt;if-feature name="url"/&gt;
+          &lt;type name="inet:uri"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;URL-based config content.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/choice&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="copy-config"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Create or replace an entire configuration datastore with the
+contents of another complete configuration datastore.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.3&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="target"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to copy to.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-target"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration target of the copy operation.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;if-feature name="writable-running"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config target.
+This is optional-to-implement on the server.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="url"&gt;
+            &lt;if-feature name="url"/&gt;
+            &lt;type name="inet:uri"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The URL-based configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+      &lt;container name="source"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to copy from.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-source"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration source for the copy operation.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="url"&gt;
+            &lt;if-feature name="url"/&gt;
+            &lt;type name="inet:uri"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The URL-based configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;anyxml name="config"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Inline Config content: &amp;lt;config&amp;gt; element.  Represents
+an entire configuration datastore, not
+a subset of the running datastore.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/anyxml&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="delete-config"&gt;
+    &lt;nacm:default-deny-all/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Delete a configuration datastore.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.4&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="target"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to delete.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-target"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration target to delete.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="url"&gt;
+            &lt;if-feature name="url"/&gt;
+            &lt;type name="inet:uri"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The URL-based configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="lock"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The lock operation allows the client to lock the configuration
+system of a device.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.5&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="target"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to lock.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-target"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration target to lock.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="unlock"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The unlock operation is used to release a configuration lock,
+previously obtained with the 'lock' operation.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.6&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="target"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to unlock.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-target"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration target to unlock.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config target.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="get"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Retrieve running configuration and device state information.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.7&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;anyxml name="filter"&gt;
+        &lt;nc:get-filter-element-attributes/&gt;
+        &lt;description&gt;
+          &lt;text&gt;This parameter specifies the portion of the system
+configuration and state data to retrieve.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/anyxml&gt;
+    &lt;/input&gt;
+    &lt;output&gt;
+      &lt;anyxml name="data"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Copy of the running datastore subset and/or state
+data that matched the filter criteria (if any).
+An empty data container indicates that the request did not
+produce any results.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/anyxml&gt;
+    &lt;/output&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="close-session"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Request graceful termination of a NETCONF session.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.8&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="kill-session"&gt;
+    &lt;nacm:default-deny-all/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Force the termination of a NETCONF session.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 7.9&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;leaf name="session-id"&gt;
+        &lt;type name="session-id-type"/&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular session to kill.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="commit"&gt;
+    &lt;if-feature name="candidate"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Commit the candidate configuration as the device's new
+current configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.3.4.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;leaf name="confirmed"&gt;
+        &lt;if-feature name="confirmed-commit"/&gt;
+        &lt;type name="empty"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Requests a confirmed commit.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6241, Section 8.3.4.1&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="confirm-timeout"&gt;
+        &lt;if-feature name="confirmed-commit"/&gt;
+        &lt;type name="uint32"&gt;
+          &lt;range value="1..max"/&gt;
+        &lt;/type&gt;
+        &lt;units name="seconds"/&gt;
+        &lt;default value="600"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The timeout interval for a confirmed commit.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6241, Section 8.3.4.1&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="persist"&gt;
+        &lt;if-feature name="confirmed-commit"/&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;This parameter is used to make a confirmed commit
+persistent.  A persistent confirmed commit is not aborted
+if the NETCONF session terminates.  The only way to abort
+a persistent confirmed commit is to let the timer expire,
+or to use the &amp;lt;cancel-commit&amp;gt; operation.
+
+The value of this parameter is a token that must be given
+in the 'persist-id' parameter of &amp;lt;commit&amp;gt; or
+&amp;lt;cancel-commit&amp;gt; operations in order to confirm or cancel
+the persistent confirmed commit.
+
+The token should be a random string.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6241, Section 8.3.4.1&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="persist-id"&gt;
+        &lt;if-feature name="confirmed-commit"/&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;This parameter is given in order to commit a persistent
+confirmed commit.  The value must be equal to the value
+given in the 'persist' parameter to the &amp;lt;commit&amp;gt; operation.
+If it does not match, the operation fails with an
+'invalid-value' error.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6241, Section 8.3.4.1&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="discard-changes"&gt;
+    &lt;if-feature name="candidate"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Revert the candidate configuration to the current
+running configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.3.4.2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="cancel-commit"&gt;
+    &lt;if-feature name="confirmed-commit"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;This operation is used to cancel an ongoing confirmed commit.
+If the confirmed commit is persistent, the parameter
+'persist-id' must be given, and it must match the value of the
+'persist' parameter.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.4.4.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;leaf name="persist-id"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;This parameter is given in order to cancel a persistent
+confirmed commit.  The value must be equal to the value
+given in the 'persist' parameter to the &amp;lt;commit&amp;gt; operation.
+If it does not match, the operation fails with an
+'invalid-value' error.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="validate"&gt;
+    &lt;if-feature name="validate"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Validates the contents of the specified configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6241, Section 8.6.4.1&lt;/text&gt;
+    &lt;/reference&gt;
+    &lt;input&gt;
+      &lt;container name="source"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Particular configuration to validate.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;choice name="config-source"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The configuration source to validate.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="candidate"&gt;
+            &lt;if-feature name="candidate"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The candidate configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="running"&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The running configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="startup"&gt;
+            &lt;if-feature name="startup"/&gt;
+            &lt;type name="empty"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The startup configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="url"&gt;
+            &lt;if-feature name="url"/&gt;
+            &lt;type name="inet:uri"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The URL-based configuration is the config source.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;anyxml name="config"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Inline Config content: &amp;lt;config&amp;gt; element.  Represents
+an entire configuration datastore, not
+a subset of the running datastore.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/anyxml&gt;
+        &lt;/choice&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ssh-server@2016-11-02.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ssh-server@2016-11-02.yang
new file mode 100644 (file)
index 0000000..e739311
--- /dev/null
@@ -0,0 +1,171 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-ssh-server {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-ssh-server";
+  prefix sshs;
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+
+  import ietf-keystore {
+    prefix ks;
+    reference
+      "RFC YYYY: Keystore Model";
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+
+     WG Chair: Mahesh Jethanandani
+               &lt;mailto:mjethanandani@gmail.com&gt;
+
+     Editor:   Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;";
+  description
+    "This module defines a reusable grouping for a SSH server that
+     can be used as a basis for specific SSH server instances.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+  revision 2016-11-02 {
+    description
+      "Initial version";
+    reference
+      "RFC XXXX: SSH Client and Server Models";
+  }
+
+  feature ssh-x509-certs {
+    description
+      "The ssh-x509-certs feature indicates that the NETCONF
+       server supports RFC 6187";
+    reference
+      "RFC 6187: X.509v3 Certificates for Secure Shell
+       Authentication";
+  }
+
+  grouping non-listening-ssh-server-grouping {
+    description
+      "A reusable grouping for a SSH server that can be used as a
+       basis for specific SSH server instances.";
+    container host-keys {
+      description
+        "The list of host-keys the SSH server will present when
+         establishing a SSH connection.";
+      list host-key {
+        key "name";
+        min-elements 1;
+        ordered-by user;
+        description
+          "An ordered list of host keys the SSH server will use to
+           construct its ordered list of algorithms, when sending
+           its SSH_MSG_KEXINIT message, as defined in Section 7.1
+           of RFC 4253.";
+        reference
+          "RFC 4253: The Secure Shell (SSH) Transport Layer Protocol";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for this host-key";
+        }
+
+        choice host-key-type {
+          mandatory true;
+          description
+            "The type of host key being specified";
+          leaf public-key {
+            type leafref {
+              path "/ks:keystore/ks:private-keys/ks:private-key/ks:name";
+            }
+            description
+              "The public key is actually identified by the name of
+               its cooresponding private-key in the keystore.";
+          }
+
+          leaf certificate {
+            if-feature "ssh-x509-certs";
+            type leafref {
+              path "/ks:keystore/ks:private-keys/ks:private-key/ks:certificate-chains/ks:certificate-chain/ks:name";
+            }
+            description
+              "The name of a certificate in the keystore.";
+          }
+        }
+      }
+    }
+
+    container client-cert-auth {
+      if-feature "ssh-x509-certs";
+      description
+        "A reference to a list of trusted certificate authority (CA)
+         certificates and a reference to a list of trusted client
+         certificates.";
+      leaf trusted-ca-certs {
+        type leafref {
+          path "/ks:keystore/ks:trusted-certificates/ks:name";
+        }
+        description
+          "A reference to a list of certificate authority (CA)
+           certificates used by the SSH server to authenticate
+           SSH client certificates.";
+      }
+
+      leaf trusted-client-certs {
+        type leafref {
+          path "/ks:keystore/ks:trusted-certificates/ks:name";
+        }
+        description
+          "A reference to a list of client certificates used by
+           the SSH server to authenticate SSH client certificates.
+           A clients certificate is authenticated if it is an
+           exact match to a configured trusted client certificate.";
+      }
+    }
+  }
+
+  grouping listening-ssh-server-grouping {
+    description
+      "A reusable grouping for a SSH server that can be used as a
+       basis for specific SSH server instances.";
+    leaf address {
+      type inet:ip-address;
+      description
+        "The IP address of the interface to listen on.  The SSH
+         server will listen on all interfaces if no value is
+         specified.  Please note that some addresses have special
+         meanings (e.g., '0.0.0.0' and '::').";
+    }
+
+    leaf port {
+      type inet:port-number;
+      description
+        "The local port number on this interface the SSH server
+         listens on.  When this grouping is used, it is RECOMMENED
+         that refine statement is used to either set a default port
+         value or to set mandatory true.";
+    }
+
+    uses non-listening-ssh-server-grouping;
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ssh-server@2016-11-02.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-ssh-server@2016-11-02.yin
new file mode 100644 (file)
index 0000000..e57fcd3
--- /dev/null
@@ -0,0 +1,186 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-ssh-server"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:sshs="urn:ietf:params:xml:ns:yang:ietf-ssh-server"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:ks="urn:ietf:params:xml:ns:yang:ietf-keystore"&gt;
+  &lt;yang-version value="1.1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-ssh-server"/&gt;
+  &lt;prefix value="sshs"/&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-keystore"&gt;
+    &lt;prefix value="ks"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC YYYY: Keystore Model&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+
+WG Chair: Mahesh Jethanandani
+          &amp;lt;mailto:mjethanandani@gmail.com&amp;gt;
+
+Editor:   Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module defines a reusable grouping for a SSH server that
+can be used as a basis for specific SSH server instances.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD
+License set forth in Section 4.c of the IETF Trust's
+Legal Provisions Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC XXXX; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2016-11-02"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC XXXX: SSH Client and Server Models&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;feature name="ssh-x509-certs"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The ssh-x509-certs feature indicates that the NETCONF
+server supports RFC 6187&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6187: X.509v3 Certificates for Secure Shell
+Authentication&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;grouping name="non-listening-ssh-server-grouping"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A reusable grouping for a SSH server that can be used as a
+basis for specific SSH server instances.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="host-keys"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The list of host-keys the SSH server will present when
+establishing a SSH connection.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="host-key"&gt;
+        &lt;key value="name"/&gt;
+        &lt;min-elements value="1"/&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An ordered list of host keys the SSH server will use to
+construct its ordered list of algorithms, when sending
+its SSH_MSG_KEXINIT message, as defined in Section 7.1
+of RFC 4253.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 4253: The Secure Shell (SSH) Transport Layer Protocol&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for this host-key&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="host-key-type"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The type of host key being specified&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="public-key"&gt;
+            &lt;type name="leafref"&gt;
+              &lt;path value="/ks:keystore/ks:private-keys/ks:private-key/ks:name"/&gt;
+            &lt;/type&gt;
+            &lt;description&gt;
+              &lt;text&gt;The public key is actually identified by the name of
+its cooresponding private-key in the keystore.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="certificate"&gt;
+            &lt;if-feature name="ssh-x509-certs"/&gt;
+            &lt;type name="leafref"&gt;
+              &lt;path value="/ks:keystore/ks:private-keys/ks:private-key/ks:certificate-chains/ks:certificate-chain/ks:name"/&gt;
+            &lt;/type&gt;
+            &lt;description&gt;
+              &lt;text&gt;The name of a certificate in the keystore.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/choice&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="client-cert-auth"&gt;
+      &lt;if-feature name="ssh-x509-certs"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;A reference to a list of trusted certificate authority (CA)
+certificates and a reference to a list of trusted client
+certificates.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="trusted-ca-certs"&gt;
+        &lt;type name="leafref"&gt;
+          &lt;path value="/ks:keystore/ks:trusted-certificates/ks:name"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;A reference to a list of certificate authority (CA)
+certificates used by the SSH server to authenticate
+SSH client certificates.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="trusted-client-certs"&gt;
+        &lt;type name="leafref"&gt;
+          &lt;path value="/ks:keystore/ks:trusted-certificates/ks:name"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;A reference to a list of client certificates used by
+the SSH server to authenticate SSH client certificates.
+A clients certificate is authenticated if it is an
+exact match to a configured trusted client certificate.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/container&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="listening-ssh-server-grouping"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A reusable grouping for a SSH server that can be used as a
+basis for specific SSH server instances.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="address"&gt;
+      &lt;type name="inet:ip-address"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The IP address of the interface to listen on.  The SSH
+server will listen on all interfaces if no value is
+specified.  Please note that some addresses have special
+meanings (e.g., '0.0.0.0' and '::').&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="port"&gt;
+      &lt;type name="inet:port-number"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The local port number on this interface the SSH server
+listens on.  When this grouping is used, it is RECOMMENED
+that refine statement is used to either set a default port
+value or to set mandatory true.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;uses name="non-listening-ssh-server-grouping"/&gt;
+  &lt;/grouping&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-system@2014-08-06.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-system@2014-08-06.yang
new file mode 100644 (file)
index 0000000..3b1ff6d
--- /dev/null
@@ -0,0 +1,779 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="<MID>">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-system {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-system";
+  prefix sys;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import ietf-netconf-acm {
+    prefix nacm;
+  }
+
+  import iana-crypt-hash {
+    prefix ianach;
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netmod/&gt;
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: Thomas Nadeau
+               &lt;mailto:tnadeau@lucidvision.com&gt;
+
+     WG Chair: Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Andy Bierman
+               &lt;mailto:andy@yumaworks.com&gt;
+
+     Editor:   Martin Bjorklund
+               &lt;mailto:mbj@tail-f.com&gt;";
+  description
+    "This module contains a collection of YANG definitions for the
+     configuration and identification of some common system
+     properties within a device containing a NETCONF server.  This
+     includes data node definitions for system identification,
+     time-of-day management, user management, DNS resolver
+     configuration, and some protocol operations for system
+     management.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7317; see
+     the RFC itself for full legal notices.";
+
+  revision 2014-08-06 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7317: A YANG Data Model for System Management";
+  }
+
+  feature radius {
+    description
+      "Indicates that the device can be configured as a RADIUS
+       client.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  feature authentication {
+    description
+      "Indicates that the device supports configuration of
+       user authentication.";
+  }
+
+  feature local-users {
+    if-feature "authentication";
+    description
+      "Indicates that the device supports configuration of
+       local user authentication.";
+  }
+
+  feature radius-authentication {
+    if-feature "radius";
+    if-feature "authentication";
+    description
+      "Indicates that the device supports configuration of user
+       authentication over RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  feature ntp {
+    description
+      "Indicates that the device can be configured to use one or
+       more NTP servers to set the system date and time.";
+  }
+
+  feature ntp-udp-port {
+    if-feature "ntp";
+    description
+      "Indicates that the device supports the configuration of
+       the UDP port for NTP servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+  feature timezone-name {
+    description
+      "Indicates that the local time zone on the device
+       can be configured to use the TZ database
+       to set the time zone and manage daylight saving time.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+  }
+
+  feature dns-udp-tcp-port {
+    description
+      "Indicates that the device supports the configuration of
+       the UDP and TCP port for DNS servers.
+
+       This is a 'feature', since many implementations do not support
+       any port other than the default port.";
+  }
+
+  identity authentication-method {
+    description
+      "Base identity for user authentication methods.";
+  }
+
+  identity radius {
+    base authentication-method;
+    description
+      "Indicates user authentication using RADIUS.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+       RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+                 Authorization for Network Access Server (NAS)
+                 Management";
+  }
+
+  identity local-users {
+    base authentication-method;
+    description
+      "Indicates password-based authentication of locally
+       configured users.";
+  }
+
+  identity radius-authentication-type {
+    description
+      "Base identity for RADIUS authentication types.";
+  }
+
+  identity radius-pap {
+    base radius-authentication-type;
+    description
+      "The device requests Password Authentication Protocol (PAP)
+       authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  identity radius-chap {
+    base radius-authentication-type;
+    description
+      "The device requests Challenge Handshake Authentication
+       Protocol (CHAP) authentication from the RADIUS server.";
+    reference
+      "RFC 2865: Remote Authentication Dial In User Service (RADIUS)";
+  }
+
+  typedef timezone-name {
+    type string;
+    description
+      "A time zone name as used by the Time Zone Database,
+       sometimes referred to as the 'Olson Database'.
+
+       The exact set of valid values is an implementation-specific
+       matter.  Client discovery of the exact set of time zone names
+       for a particular server is out of scope.";
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database";
+  }
+
+  container system {
+    description
+      "System group configuration.";
+    leaf contact {
+      type string;
+      description
+        "The administrator contact information for the system.
+
+         A server implementation MAY map this leaf to the sysContact
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysContact.  The definition of
+         such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysContact";
+    }
+
+    leaf hostname {
+      type inet:domain-name;
+      description
+        "The name of the host.  This name can be a single domain
+         label or the fully qualified domain name of the host.";
+    }
+
+    leaf location {
+      type string;
+      description
+        "The system location.
+
+         A server implementation MAY map this leaf to the sysLocation
+         MIB object.  Such an implementation needs to use some
+         mechanism to handle the differences in size and characters
+         allowed between this leaf and sysLocation.  The definition
+         of such a mechanism is outside the scope of this document.";
+      reference
+        "RFC 3418: Management Information Base (MIB) for the
+                   Simple Network Management Protocol (SNMP)
+                   SNMPv2-MIB.sysLocation";
+    }
+
+    container clock {
+      description
+        "Configuration of the system date and time properties.";
+      choice timezone {
+        description
+          "The system time zone information.";
+        case timezone-name {
+          if-feature "timezone-name";
+          leaf timezone-name {
+            type timezone-name;
+            description
+              "The TZ database name to use for the system, such
+               as 'Europe/Stockholm'.";
+          }
+        }
+
+        case timezone-utc-offset {
+          leaf timezone-utc-offset {
+            type int16 {
+              range "-1500 .. 1500";
+            }
+            units "minutes";
+            description
+              "The number of minutes to add to UTC time to
+               identify the time zone for this system.  For example,
+               'UTC - 8:00 hours' would be represented as '-480'.
+               Note that automatic daylight saving time adjustment
+               is not provided if this object is used.";
+          }
+        }
+      }
+    }
+
+    container ntp {
+      if-feature "ntp";
+      presence "Enables the NTP client unless the 'enabled' leaf
+       (which defaults to 'true') is set to 'false'";
+      description
+        "Configuration of the NTP client.";
+      leaf enabled {
+        type boolean;
+        default "true";
+        description
+          "Indicates that the system should attempt to
+           synchronize the system clock with an NTP server
+           from the 'ntp/server' list.";
+      }
+
+      list server {
+        key "name";
+        description
+          "List of NTP servers to use for system clock
+           synchronization.  If '/system/ntp/enabled'
+           is 'true', then the system will attempt to
+           contact and utilize the specified NTP servers.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the NTP server.";
+        }
+
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for NTP.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the NTP server.";
+              }
+
+              leaf port {
+                if-feature "ntp-udp-port";
+                type inet:port-number;
+                default "123";
+                description
+                  "The port number of the NTP server.";
+              }
+            }
+          }
+        }
+
+        leaf association-type {
+          type enumeration {
+            enum "server" {
+              description
+                "Use client association mode.  This device
+                 will not provide synchronization to the
+                 configured NTP server.";
+            }
+            enum "peer" {
+              description
+                "Use symmetric active association mode.
+                 This device may provide synchronization
+                 to the configured NTP server.";
+            }
+            enum "pool" {
+              description
+                "Use client association mode with one or
+                 more of the NTP servers found by DNS
+                 resolution of the domain name given by
+                 the 'address' leaf.  This device will not
+                 provide synchronization to the servers.";
+            }
+          }
+          default "server";
+          description
+            "The desired association type for this NTP server.";
+        }
+
+        leaf iburst {
+          type boolean;
+          default "false";
+          description
+            "Indicates whether this server should enable burst
+             synchronization or not.";
+        }
+
+        leaf prefer {
+          type boolean;
+          default "false";
+          description
+            "Indicates whether this server should be preferred
+             or not.";
+        }
+      }
+    }
+
+    container dns-resolver {
+      description
+        "Configuration of the DNS resolver.";
+      leaf-list search {
+        type inet:domain-name;
+        ordered-by user;
+        description
+          "An ordered list of domains to search when resolving
+           a host name.";
+      }
+
+      list server {
+        key "name";
+        ordered-by user;
+        description
+          "List of the DNS servers that the resolver should query.
+
+           When the resolver is invoked by a calling application, it
+           sends the query to the first name server in this list.  If
+           no response has been received within 'timeout' seconds,
+           the resolver continues with the next server in the list.
+           If no response is received from any server, the resolver
+           continues with the first server again.  When the resolver
+           has traversed the list 'attempts' times without receiving
+           any response, it gives up and returns an error to the
+           calling application.
+
+           Implementations MAY limit the number of entries in this
+           list.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the DNS server.";
+        }
+
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+          case udp-and-tcp {
+            container udp-and-tcp {
+              description
+                "Contains UDP- and TCP-specific configuration
+                 parameters for DNS.";
+              reference
+                "RFC 1035: Domain Names - Implementation and
+                           Specification
+                 RFC 5966: DNS Transport over TCP - Implementation
+                           Requirements";
+              leaf address {
+                type inet:ip-address;
+                mandatory true;
+                description
+                  "The address of the DNS server.";
+              }
+
+              leaf port {
+                if-feature "dns-udp-tcp-port";
+                type inet:port-number;
+                default "53";
+                description
+                  "The UDP and TCP port number of the DNS server.";
+              }
+            }
+          }
+        }
+      }
+
+      container options {
+        description
+          "Resolver options.  The set of available options has been
+           limited to those that are generally available across
+           different resolver implementations and generally useful.";
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The amount of time the resolver will wait for a
+             response from each remote name server before
+             retrying the query via a different name server.";
+        }
+
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the resolver will send a query to
+             all of its name servers before giving up and returning
+             an error to the calling application.";
+        }
+      }
+    }
+
+    container radius {
+      if-feature "radius";
+      description
+        "Configuration of the RADIUS client.";
+      list server {
+        key "name";
+        ordered-by user;
+        description
+          "List of RADIUS servers used by the device.
+
+           When the RADIUS client is invoked by a calling
+           application, it sends the query to the first server in
+           this list.  If no response has been received within
+           'timeout' seconds, the client continues with the next
+           server in the list.  If no response is received from any
+           server, the client continues with the first server again.
+           When the client has traversed the list 'attempts' times
+           without receiving any response, it gives up and returns an
+           error to the calling application.";
+        leaf name {
+          type string;
+          description
+            "An arbitrary name for the RADIUS server.";
+        }
+
+        choice transport {
+          mandatory true;
+          description
+            "The transport-protocol-specific parameters for this
+             server.";
+          case udp {
+            container udp {
+              description
+                "Contains UDP-specific configuration parameters
+                 for RADIUS.";
+              leaf address {
+                type inet:host;
+                mandatory true;
+                description
+                  "The address of the RADIUS server.";
+              }
+
+              leaf authentication-port {
+                type inet:port-number;
+                default "1812";
+                description
+                  "The port number of the RADIUS server.";
+              }
+
+              leaf shared-secret {
+                nacm:default-deny-all;
+                type string;
+                mandatory true;
+                description
+                  "The shared secret, which is known to both the
+                   RADIUS client and server.";
+                reference
+                  "RFC 2865: Remote Authentication Dial In User
+                             Service (RADIUS)";
+              }
+            }
+          }
+        }
+
+        leaf authentication-type {
+          type identityref {
+            base radius-authentication-type;
+          }
+          default "radius-pap";
+          description
+            "The authentication type requested from the RADIUS
+             server.";
+        }
+      }
+
+      container options {
+        description
+          "RADIUS client options.";
+        leaf timeout {
+          type uint8 {
+            range "1..max";
+          }
+          units "seconds";
+          default "5";
+          description
+            "The number of seconds the device will wait for a
+             response from each RADIUS server before trying with a
+             different server.";
+        }
+
+        leaf attempts {
+          type uint8 {
+            range "1..max";
+          }
+          default "2";
+          description
+            "The number of times the device will send a query to
+             all of its RADIUS servers before giving up.";
+        }
+      }
+    }
+
+    container authentication {
+      nacm:default-deny-write;
+      if-feature "authentication";
+      description
+        "The authentication configuration subtree.";
+      leaf-list user-authentication-order {
+        type identityref {
+          base authentication-method;
+        }
+        must "(. != \"sys:radius\" or ../../radius/server)" {
+          error-message
+            "When 'radius' is used, a RADIUS server must be configured.";
+          description
+            "When 'radius' is used as an authentication method,
+             a RADIUS server must be configured.";
+        }
+        ordered-by user;
+        description
+          "When the device authenticates a user with a password,
+           it tries the authentication methods in this leaf-list in
+           order.  If authentication with one method fails, the next
+           method is used.  If no method succeeds, the user is
+           denied access.
+
+           An empty user-authentication-order leaf-list still allows
+           authentication of users using mechanisms that do not
+           involve a password.
+
+           If the 'radius-authentication' feature is advertised by
+           the NETCONF server, the 'radius' identity can be added to
+           this list.
+
+           If the 'local-users' feature is advertised by the
+           NETCONF server, the 'local-users' identity can be
+           added to this list.";
+      }
+
+      list user {
+        if-feature "local-users";
+        key "name";
+        description
+          "The list of local users configured on this device.";
+        leaf name {
+          type string;
+          description
+            "The user name string identifying this entry.";
+        }
+
+        leaf password {
+          type ianach:crypt-hash;
+          description
+            "The password for this entry.";
+        }
+
+        list authorized-key {
+          key "name";
+          description
+            "A list of public SSH keys for this user.  These keys
+             are allowed for SSH authentication, as described in
+             RFC 4253.";
+          reference
+            "RFC 4253: The Secure Shell (SSH) Transport Layer
+                       Protocol";
+          leaf name {
+            type string;
+            description
+              "An arbitrary name for the SSH key.";
+          }
+
+          leaf algorithm {
+            type string;
+            mandatory true;
+            description
+              "The public key algorithm name for this SSH key.
+
+               Valid values are the values in the IANA 'Secure Shell
+               (SSH) Protocol Parameters' registry, Public Key
+               Algorithm Names.";
+            reference
+              "IANA 'Secure Shell (SSH) Protocol Parameters'
+               registry, Public Key Algorithm Names";
+          }
+
+          leaf key-data {
+            type binary;
+            mandatory true;
+            description
+              "The binary public key data for this SSH key, as
+               specified by RFC 4253, Section 6.6, i.e.:
+
+                 string    certificate or public key format
+                           identifier
+                 byte[n]   key/certificate data.";
+            reference
+              "RFC 4253: The Secure Shell (SSH) Transport Layer
+                         Protocol";
+          }
+        }
+      }
+    }
+  }
+
+  container system-state {
+    config false;
+    description
+      "System group operational state.";
+    container platform {
+      description
+        "Contains vendor-specific information for
+         identifying the system platform and operating system.";
+      reference
+        "IEEE Std 1003.1-2008 - sys/utsname.h";
+      leaf os-name {
+        type string;
+        description
+          "The name of the operating system in use -
+           for example, 'Linux'.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.sysname";
+      }
+
+      leaf os-release {
+        type string;
+        description
+          "The current release level of the operating
+           system in use.  This string MAY indicate
+           the OS source code revision.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.release";
+      }
+
+      leaf os-version {
+        type string;
+        description
+          "The current version level of the operating
+           system in use.  This string MAY indicate
+           the specific OS build date and target variant
+           information.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.version";
+      }
+
+      leaf machine {
+        type string;
+        description
+          "A vendor-specific identifier string representing
+           the hardware in use.";
+        reference
+          "IEEE Std 1003.1-2008 - utsname.machine";
+      }
+    }
+
+    container clock {
+      description
+        "Monitoring of the system date and time properties.";
+      leaf current-datetime {
+        type yang:date-and-time;
+        description
+          "The current system date and time.";
+      }
+
+      leaf boot-datetime {
+        type yang:date-and-time;
+        description
+          "The system date and time when the system last restarted.";
+      }
+    }
+  }
+
+  rpc set-current-datetime {
+    nacm:default-deny-all;
+    description
+      "Set the /system-state/clock/current-datetime leaf
+       to the specified value.
+
+       If the system is using NTP (i.e., /system/ntp/enabled
+       is set to 'true'), then this operation will fail with
+       error-tag 'operation-failed' and error-app-tag value of
+       'ntp-active'.";
+    input { 
+      leaf current-datetime {
+        type yang:date-and-time;
+        mandatory true;
+        description
+          "The current system date and time.";
+      }
+    }
+  }
+
+  rpc system-restart {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be restarted immediately.
+       A server SHOULD send an rpc reply to the client before
+       restarting the system.";
+  }
+
+  rpc system-shutdown {
+    nacm:default-deny-all;
+    description
+      "Request that the entire system be shut down immediately.
+       A server SHOULD send an rpc reply to the client before
+       shutting down the system.";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-system@2014-08-06.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-system@2014-08-06.yin
new file mode 100644 (file)
index 0000000..45ef3e5
--- /dev/null
@@ -0,0 +1,833 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-system"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:sys="urn:ietf:params:xml:ns:yang:ietf-system"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:nacm="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"
+        xmlns:ianach="urn:ietf:params:xml:ns:yang:iana-crypt-hash"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-system"/&gt;
+  &lt;prefix value="sys"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-netconf-acm"&gt;
+    &lt;prefix value="nacm"/&gt;
+  &lt;/import&gt;
+  &lt;import module="iana-crypt-hash"&gt;
+    &lt;prefix value="ianach"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netmod/&amp;gt;
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: Thomas Nadeau
+          &amp;lt;mailto:tnadeau@lucidvision.com&amp;gt;
+
+WG Chair: Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Andy Bierman
+          &amp;lt;mailto:andy@yumaworks.com&amp;gt;
+
+Editor:   Martin Bjorklund
+          &amp;lt;mailto:mbj@tail-f.com&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of YANG definitions for the
+configuration and identification of some common system
+properties within a device containing a NETCONF server.  This
+includes data node definitions for system identification,
+time-of-day management, user management, DNS resolver
+configuration, and some protocol operations for system
+management.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 7317; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2014-08-06"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7317: A YANG Data Model for System Management&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;feature name="radius"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device can be configured as a RADIUS
+client.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2865: Remote Authentication Dial In User Service (RADIUS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="authentication"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports configuration of
+user authentication.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="local-users"&gt;
+    &lt;if-feature name="authentication"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports configuration of
+local user authentication.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="radius-authentication"&gt;
+    &lt;if-feature name="radius"/&gt;
+    &lt;if-feature name="authentication"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports configuration of user
+authentication over RADIUS.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+          Authorization for Network Access Server (NAS)
+          Management&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="ntp"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device can be configured to use one or
+more NTP servers to set the system date and time.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="ntp-udp-port"&gt;
+    &lt;if-feature name="ntp"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports the configuration of
+the UDP port for NTP servers.
+
+This is a 'feature', since many implementations do not support
+any port other than the default port.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;feature name="timezone-name"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the local time zone on the device
+can be configured to use the TZ database
+to set the time zone and manage daylight saving time.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6557: Procedures for Maintaining the Time Zone Database&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/feature&gt;
+  &lt;feature name="dns-udp-tcp-port"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates that the device supports the configuration of
+the UDP and TCP port for DNS servers.
+
+This is a 'feature', since many implementations do not support
+any port other than the default port.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/feature&gt;
+  &lt;identity name="authentication-method"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity for user authentication methods.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="radius"&gt;
+    &lt;base name="authentication-method"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates user authentication using RADIUS.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2865: Remote Authentication Dial In User Service (RADIUS)
+RFC 5607: Remote Authentication Dial-In User Service (RADIUS)
+          Authorization for Network Access Server (NAS)
+          Management&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="local-users"&gt;
+    &lt;base name="authentication-method"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Indicates password-based authentication of locally
+configured users.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="radius-authentication-type"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity for RADIUS authentication types.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="radius-pap"&gt;
+    &lt;base name="radius-authentication-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The device requests Password Authentication Protocol (PAP)
+authentication from the RADIUS server.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2865: Remote Authentication Dial In User Service (RADIUS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="radius-chap"&gt;
+    &lt;base name="radius-authentication-type"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The device requests Challenge Handshake Authentication
+Protocol (CHAP) authentication from the RADIUS server.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2865: Remote Authentication Dial In User Service (RADIUS)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;typedef name="timezone-name"&gt;
+    &lt;type name="string"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;A time zone name as used by the Time Zone Database,
+sometimes referred to as the 'Olson Database'.
+
+The exact set of valid values is an implementation-specific
+matter.  Client discovery of the exact set of time zone names
+for a particular server is out of scope.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6557: Procedures for Maintaining the Time Zone Database&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;container name="system"&gt;
+    &lt;description&gt;
+      &lt;text&gt;System group configuration.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="contact"&gt;
+      &lt;type name="string"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The administrator contact information for the system.
+
+A server implementation MAY map this leaf to the sysContact
+MIB object.  Such an implementation needs to use some
+mechanism to handle the differences in size and characters
+allowed between this leaf and sysContact.  The definition of
+such a mechanism is outside the scope of this document.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;RFC 3418: Management Information Base (MIB) for the
+          Simple Network Management Protocol (SNMP)
+          SNMPv2-MIB.sysContact&lt;/text&gt;
+      &lt;/reference&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="hostname"&gt;
+      &lt;type name="inet:domain-name"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The name of the host.  This name can be a single domain
+label or the fully qualified domain name of the host.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="location"&gt;
+      &lt;type name="string"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The system location.
+
+A server implementation MAY map this leaf to the sysLocation
+MIB object.  Such an implementation needs to use some
+mechanism to handle the differences in size and characters
+allowed between this leaf and sysLocation.  The definition
+of such a mechanism is outside the scope of this document.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;RFC 3418: Management Information Base (MIB) for the
+          Simple Network Management Protocol (SNMP)
+          SNMPv2-MIB.sysLocation&lt;/text&gt;
+      &lt;/reference&gt;
+    &lt;/leaf&gt;
+    &lt;container name="clock"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Configuration of the system date and time properties.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;choice name="timezone"&gt;
+        &lt;description&gt;
+          &lt;text&gt;The system time zone information.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;case name="timezone-name"&gt;
+          &lt;if-feature name="timezone-name"/&gt;
+          &lt;leaf name="timezone-name"&gt;
+            &lt;type name="timezone-name"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The TZ database name to use for the system, such
+as 'Europe/Stockholm'.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/case&gt;
+        &lt;case name="timezone-utc-offset"&gt;
+          &lt;leaf name="timezone-utc-offset"&gt;
+            &lt;type name="int16"&gt;
+              &lt;range value="-1500 .. 1500"/&gt;
+            &lt;/type&gt;
+            &lt;units name="minutes"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The number of minutes to add to UTC time to
+identify the time zone for this system.  For example,
+'UTC - 8:00 hours' would be represented as '-480'.
+Note that automatic daylight saving time adjustment
+is not provided if this object is used.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/case&gt;
+      &lt;/choice&gt;
+    &lt;/container&gt;
+    &lt;container name="ntp"&gt;
+      &lt;if-feature name="ntp"/&gt;
+      &lt;presence value="Enables the NTP client unless the 'enabled' leaf
+(which defaults to 'true') is set to 'false'"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Configuration of the NTP client.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="enabled"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;default value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates that the system should attempt to
+synchronize the system clock with an NTP server
+from the 'ntp/server' list.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;list name="server"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of NTP servers to use for system clock
+synchronization.  If '/system/ntp/enabled'
+is 'true', then the system will attempt to
+contact and utilize the specified NTP servers.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for the NTP server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="transport"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The transport-protocol-specific parameters for this
+server.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;case name="udp"&gt;
+            &lt;container name="udp"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Contains UDP-specific configuration parameters
+for NTP.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;leaf name="address"&gt;
+                &lt;type name="inet:host"/&gt;
+                &lt;mandatory value="true"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The address of the NTP server.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+              &lt;leaf name="port"&gt;
+                &lt;if-feature name="ntp-udp-port"/&gt;
+                &lt;type name="inet:port-number"/&gt;
+                &lt;default value="123"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The port number of the NTP server.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+        &lt;/choice&gt;
+        &lt;leaf name="association-type"&gt;
+          &lt;type name="enumeration"&gt;
+            &lt;enum name="server"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Use client association mode.  This device
+will not provide synchronization to the
+configured NTP server.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="peer"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Use symmetric active association mode.
+This device may provide synchronization
+to the configured NTP server.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+            &lt;enum name="pool"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Use client association mode with one or
+more of the NTP servers found by DNS
+resolution of the domain name given by
+the 'address' leaf.  This device will not
+provide synchronization to the servers.&lt;/text&gt;
+              &lt;/description&gt;
+            &lt;/enum&gt;
+          &lt;/type&gt;
+          &lt;default value="server"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The desired association type for this NTP server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="iburst"&gt;
+          &lt;type name="boolean"/&gt;
+          &lt;default value="false"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Indicates whether this server should enable burst
+synchronization or not.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="prefer"&gt;
+          &lt;type name="boolean"/&gt;
+          &lt;default value="false"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Indicates whether this server should be preferred
+or not.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="dns-resolver"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Configuration of the DNS resolver.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf-list name="search"&gt;
+        &lt;type name="inet:domain-name"/&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An ordered list of domains to search when resolving
+a host name.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf-list&gt;
+      &lt;list name="server"&gt;
+        &lt;key value="name"/&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of the DNS servers that the resolver should query.
+
+When the resolver is invoked by a calling application, it
+sends the query to the first name server in this list.  If
+no response has been received within 'timeout' seconds,
+the resolver continues with the next server in the list.
+If no response is received from any server, the resolver
+continues with the first server again.  When the resolver
+has traversed the list 'attempts' times without receiving
+any response, it gives up and returns an error to the
+calling application.
+
+Implementations MAY limit the number of entries in this
+list.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for the DNS server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="transport"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The transport-protocol-specific parameters for this
+server.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;case name="udp-and-tcp"&gt;
+            &lt;container name="udp-and-tcp"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Contains UDP- and TCP-specific configuration
+parameters for DNS.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;reference&gt;
+                &lt;text&gt;RFC 1035: Domain Names - Implementation and
+          Specification
+RFC 5966: DNS Transport over TCP - Implementation
+          Requirements&lt;/text&gt;
+              &lt;/reference&gt;
+              &lt;leaf name="address"&gt;
+                &lt;type name="inet:ip-address"/&gt;
+                &lt;mandatory value="true"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The address of the DNS server.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+              &lt;leaf name="port"&gt;
+                &lt;if-feature name="dns-udp-tcp-port"/&gt;
+                &lt;type name="inet:port-number"/&gt;
+                &lt;default value="53"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The UDP and TCP port number of the DNS server.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+        &lt;/choice&gt;
+      &lt;/list&gt;
+      &lt;container name="options"&gt;
+        &lt;description&gt;
+          &lt;text&gt;Resolver options.  The set of available options has been
+limited to those that are generally available across
+different resolver implementations and generally useful.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="timeout"&gt;
+          &lt;type name="uint8"&gt;
+            &lt;range value="1..max"/&gt;
+          &lt;/type&gt;
+          &lt;units name="seconds"/&gt;
+          &lt;default value="5"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The amount of time the resolver will wait for a
+response from each remote name server before
+retrying the query via a different name server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="attempts"&gt;
+          &lt;type name="uint8"&gt;
+            &lt;range value="1..max"/&gt;
+          &lt;/type&gt;
+          &lt;default value="2"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of times the resolver will send a query to
+all of its name servers before giving up and returning
+an error to the calling application.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/container&gt;
+    &lt;/container&gt;
+    &lt;container name="radius"&gt;
+      &lt;if-feature name="radius"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Configuration of the RADIUS client.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="server"&gt;
+        &lt;key value="name"/&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of RADIUS servers used by the device.
+
+When the RADIUS client is invoked by a calling
+application, it sends the query to the first server in
+this list.  If no response has been received within
+'timeout' seconds, the client continues with the next
+server in the list.  If no response is received from any
+server, the client continues with the first server again.
+When the client has traversed the list 'attempts' times
+without receiving any response, it gives up and returns an
+error to the calling application.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary name for the RADIUS server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;choice name="transport"&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The transport-protocol-specific parameters for this
+server.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;case name="udp"&gt;
+            &lt;container name="udp"&gt;
+              &lt;description&gt;
+                &lt;text&gt;Contains UDP-specific configuration parameters
+for RADIUS.&lt;/text&gt;
+              &lt;/description&gt;
+              &lt;leaf name="address"&gt;
+                &lt;type name="inet:host"/&gt;
+                &lt;mandatory value="true"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The address of the RADIUS server.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+              &lt;leaf name="authentication-port"&gt;
+                &lt;type name="inet:port-number"/&gt;
+                &lt;default value="1812"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The port number of the RADIUS server.&lt;/text&gt;
+                &lt;/description&gt;
+              &lt;/leaf&gt;
+              &lt;leaf name="shared-secret"&gt;
+                &lt;nacm:default-deny-all/&gt;
+                &lt;type name="string"/&gt;
+                &lt;mandatory value="true"/&gt;
+                &lt;description&gt;
+                  &lt;text&gt;The shared secret, which is known to both the
+RADIUS client and server.&lt;/text&gt;
+                &lt;/description&gt;
+                &lt;reference&gt;
+                  &lt;text&gt;RFC 2865: Remote Authentication Dial In User
+          Service (RADIUS)&lt;/text&gt;
+                &lt;/reference&gt;
+              &lt;/leaf&gt;
+            &lt;/container&gt;
+          &lt;/case&gt;
+        &lt;/choice&gt;
+        &lt;leaf name="authentication-type"&gt;
+          &lt;type name="identityref"&gt;
+            &lt;base name="radius-authentication-type"/&gt;
+          &lt;/type&gt;
+          &lt;default value="radius-pap"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The authentication type requested from the RADIUS
+server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+      &lt;container name="options"&gt;
+        &lt;description&gt;
+          &lt;text&gt;RADIUS client options.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="timeout"&gt;
+          &lt;type name="uint8"&gt;
+            &lt;range value="1..max"/&gt;
+          &lt;/type&gt;
+          &lt;units name="seconds"/&gt;
+          &lt;default value="5"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of seconds the device will wait for a
+response from each RADIUS server before trying with a
+different server.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="attempts"&gt;
+          &lt;type name="uint8"&gt;
+            &lt;range value="1..max"/&gt;
+          &lt;/type&gt;
+          &lt;default value="2"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The number of times the device will send a query to
+all of its RADIUS servers before giving up.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/container&gt;
+    &lt;/container&gt;
+    &lt;container name="authentication"&gt;
+      &lt;nacm:default-deny-write/&gt;
+      &lt;if-feature name="authentication"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The authentication configuration subtree.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf-list name="user-authentication-order"&gt;
+        &lt;type name="identityref"&gt;
+          &lt;base name="authentication-method"/&gt;
+        &lt;/type&gt;
+        &lt;must condition="(. != &amp;quot;sys:radius&amp;quot; or ../../radius/server)"&gt;
+          &lt;error-message&gt;
+            &lt;value&gt;When 'radius' is used, a RADIUS server must be configured.&lt;/value&gt;
+          &lt;/error-message&gt;
+          &lt;description&gt;
+            &lt;text&gt;When 'radius' is used as an authentication method,
+a RADIUS server must be configured.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/must&gt;
+        &lt;ordered-by value="user"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;When the device authenticates a user with a password,
+it tries the authentication methods in this leaf-list in
+order.  If authentication with one method fails, the next
+method is used.  If no method succeeds, the user is
+denied access.
+
+An empty user-authentication-order leaf-list still allows
+authentication of users using mechanisms that do not
+involve a password.
+
+If the 'radius-authentication' feature is advertised by
+the NETCONF server, the 'radius' identity can be added to
+this list.
+
+If the 'local-users' feature is advertised by the
+NETCONF server, the 'local-users' identity can be
+added to this list.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf-list&gt;
+      &lt;list name="user"&gt;
+        &lt;if-feature name="local-users"/&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of local users configured on this device.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The user name string identifying this entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="password"&gt;
+          &lt;type name="ianach:crypt-hash"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The password for this entry.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;list name="authorized-key"&gt;
+          &lt;key value="name"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A list of public SSH keys for this user.  These keys
+are allowed for SSH authentication, as described in
+RFC 4253.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;reference&gt;
+            &lt;text&gt;RFC 4253: The Secure Shell (SSH) Transport Layer
+          Protocol&lt;/text&gt;
+          &lt;/reference&gt;
+          &lt;leaf name="name"&gt;
+            &lt;type name="string"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;An arbitrary name for the SSH key.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="algorithm"&gt;
+            &lt;type name="string"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The public key algorithm name for this SSH key.
+
+Valid values are the values in the IANA 'Secure Shell
+(SSH) Protocol Parameters' registry, Public Key
+Algorithm Names.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;reference&gt;
+              &lt;text&gt;IANA 'Secure Shell (SSH) Protocol Parameters'
+registry, Public Key Algorithm Names&lt;/text&gt;
+            &lt;/reference&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="key-data"&gt;
+            &lt;type name="binary"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;The binary public key data for this SSH key, as
+specified by RFC 4253, Section 6.6, i.e.:
+
+  string    certificate or public key format
+            identifier
+  byte[n]   key/certificate data.&lt;/text&gt;
+            &lt;/description&gt;
+            &lt;reference&gt;
+              &lt;text&gt;RFC 4253: The Secure Shell (SSH) Transport Layer
+          Protocol&lt;/text&gt;
+            &lt;/reference&gt;
+          &lt;/leaf&gt;
+        &lt;/list&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;container name="system-state"&gt;
+    &lt;config value="false"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;System group operational state.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="platform"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains vendor-specific information for
+identifying the system platform and operating system.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;IEEE Std 1003.1-2008 - sys/utsname.h&lt;/text&gt;
+      &lt;/reference&gt;
+      &lt;leaf name="os-name"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The name of the operating system in use -
+for example, 'Linux'.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;IEEE Std 1003.1-2008 - utsname.sysname&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="os-release"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The current release level of the operating
+system in use.  This string MAY indicate
+the OS source code revision.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;IEEE Std 1003.1-2008 - utsname.release&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="os-version"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The current version level of the operating
+system in use.  This string MAY indicate
+the specific OS build date and target variant
+information.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;IEEE Std 1003.1-2008 - utsname.version&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="machine"&gt;
+        &lt;type name="string"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A vendor-specific identifier string representing
+the hardware in use.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;IEEE Std 1003.1-2008 - utsname.machine&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+    &lt;/container&gt;
+    &lt;container name="clock"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Monitoring of the system date and time properties.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="current-datetime"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The current system date and time.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="boot-datetime"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The system date and time when the system last restarted.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;rpc name="set-current-datetime"&gt;
+    &lt;nacm:default-deny-all/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Set the /system-state/clock/current-datetime leaf
+to the specified value.
+
+If the system is using NTP (i.e., /system/ntp/enabled
+is set to 'true'), then this operation will fail with
+error-tag 'operation-failed' and error-app-tag value of
+'ntp-active'.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="current-datetime"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The current system date and time.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="system-restart"&gt;
+    &lt;nacm:default-deny-all/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Request that the entire system be restarted immediately.
+A server SHOULD send an rpc reply to the client before
+restarting the system.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="system-shutdown"&gt;
+    &lt;nacm:default-deny-all/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Request that the entire system be shut down immediately.
+A server SHOULD send an rpc reply to the client before
+shutting down the system.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/rpc&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-tls-server@2016-11-02.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-tls-server@2016-11-02.yang
new file mode 100644 (file)
index 0000000..6a15a55
--- /dev/null
@@ -0,0 +1,141 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-tls-server {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-tls-server";
+  prefix tlss;
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+
+  import ietf-keystore {
+    prefix ks;
+    reference
+      "RFC YYYY: Keystore Model";
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     WG Chair: Mehmet Ersue
+               &lt;mailto:mehmet.ersue@nsn.com&gt;
+
+     WG Chair: Mahesh Jethanandani
+               &lt;mailto:mjethanandani@gmail.com&gt;
+
+     Editor:   Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;";
+  description
+    "This module defines a reusable grouping for a TLS server that
+     can be used as a basis for specific TLS server instances.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code. All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD
+     License set forth in Section 4.c of the IETF Trust's
+     Legal Provisions Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+  revision 2016-11-02 {
+    description
+      "Initial version";
+    reference
+      "RFC XXXX: TLS Client and Server Models";
+  }
+
+  grouping non-listening-tls-server-grouping {
+    description
+      "A reusable grouping for a TLS server that can be used as a
+       basis for specific TLS server instances.";
+    container certificates {
+      description
+        "The list of certificates the TLS server will present when
+         establishing a TLS connection in its Certificate message,
+         as defined in Section 7.4.2 in RRC 5246.";
+      reference
+        "RFC 5246:
+           The Transport Layer Security (TLS) Protocol Version 1.2";
+      list certificate {
+        key "name";
+        min-elements 1;
+        description
+          "An unordered list of certificates the TLS server can pick
+           from when sending its Server Certificate message.";
+        reference
+          "RFC 5246: The TLS Protocol, Section 7.4.2";
+        leaf name {
+          type leafref {
+            path "/ks:keystore/ks:private-keys/ks:private-key/ks:certificate-chains/ks:certificate-chain/ks:name";
+          }
+          description
+            "The name of the certificate in the keystore.";
+        }
+      }
+    }
+
+    container client-auth {
+      description
+        "A reference to a list of trusted certificate authority (CA)
+         certificates and a reference to a list of trusted client
+         certificates.";
+      leaf trusted-ca-certs {
+        type leafref {
+          path "/ks:keystore/ks:trusted-certificates/ks:name";
+        }
+        description
+          "A reference to a list of certificate authority (CA)
+           certificates used by the TLS server to authenticate
+           TLS client certificates.";
+      }
+
+      leaf trusted-client-certs {
+        type leafref {
+          path "/ks:keystore/ks:trusted-certificates/ks:name";
+        }
+        description
+          "A reference to a list of client certificates used by
+           the TLS server to authenticate TLS client certificates.
+           A clients certificate is authenticated if it is an
+           exact match to a configured trusted client certificate.";
+      }
+    }
+  }
+
+  grouping listening-tls-server-grouping {
+    description
+      "A reusable grouping for a TLS server that can be used as a
+       basis for specific TLS server instances.";
+    leaf address {
+      type inet:ip-address;
+      description
+        "The IP address of the interface to listen on.  The TLS
+         server will listen on all interfaces if no value is
+         specified. Please note that some addresses have special
+         meanings (e.g., '0.0.0.0' and '::').";
+    }
+
+    leaf port {
+      type inet:port-number;
+      description
+        "The local port number on this interface the TLS server
+         listens on.  When this grouping is used, it is RECOMMENDED
+         that refine statement is used to either set a default port
+         value or to set mandatory true.";
+    }
+
+    uses non-listening-tls-server-grouping;
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-tls-server@2016-11-02.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-tls-server@2016-11-02.yin
new file mode 100644 (file)
index 0000000..ee67095
--- /dev/null
@@ -0,0 +1,155 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-tls-server"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:tlss="urn:ietf:params:xml:ns:yang:ietf-tls-server"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:ks="urn:ietf:params:xml:ns:yang:ietf-keystore"&gt;
+  &lt;yang-version value="1.1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-tls-server"/&gt;
+  &lt;prefix value="tlss"/&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-keystore"&gt;
+    &lt;prefix value="ks"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC YYYY: Keystore Model&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+WG Chair: Mehmet Ersue
+          &amp;lt;mailto:mehmet.ersue@nsn.com&amp;gt;
+
+WG Chair: Mahesh Jethanandani
+          &amp;lt;mailto:mjethanandani@gmail.com&amp;gt;
+
+Editor:   Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module defines a reusable grouping for a TLS server that
+can be used as a basis for specific TLS server instances.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code. All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD
+License set forth in Section 4.c of the IETF Trust's
+Legal Provisions Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC XXXX; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2016-11-02"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial version&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC XXXX: TLS Client and Server Models&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;grouping name="non-listening-tls-server-grouping"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A reusable grouping for a TLS server that can be used as a
+basis for specific TLS server instances.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="certificates"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The list of certificates the TLS server will present when
+establishing a TLS connection in its Certificate message,
+as defined in Section 7.4.2 in RRC 5246.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;RFC 5246:
+  The Transport Layer Security (TLS) Protocol Version 1.2&lt;/text&gt;
+      &lt;/reference&gt;
+      &lt;list name="certificate"&gt;
+        &lt;key value="name"/&gt;
+        &lt;min-elements value="1"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An unordered list of certificates the TLS server can pick
+from when sending its Server Certificate message.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 5246: The TLS Protocol, Section 7.4.2&lt;/text&gt;
+        &lt;/reference&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="leafref"&gt;
+            &lt;path value="/ks:keystore/ks:private-keys/ks:private-key/ks:certificate-chains/ks:certificate-chain/ks:name"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;The name of the certificate in the keystore.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="client-auth"&gt;
+      &lt;description&gt;
+        &lt;text&gt;A reference to a list of trusted certificate authority (CA)
+certificates and a reference to a list of trusted client
+certificates.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="trusted-ca-certs"&gt;
+        &lt;type name="leafref"&gt;
+          &lt;path value="/ks:keystore/ks:trusted-certificates/ks:name"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;A reference to a list of certificate authority (CA)
+certificates used by the TLS server to authenticate
+TLS client certificates.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="trusted-client-certs"&gt;
+        &lt;type name="leafref"&gt;
+          &lt;path value="/ks:keystore/ks:trusted-certificates/ks:name"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;A reference to a list of client certificates used by
+the TLS server to authenticate TLS client certificates.
+A clients certificate is authenticated if it is an
+exact match to a configured trusted client certificate.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/container&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="listening-tls-server-grouping"&gt;
+    &lt;description&gt;
+      &lt;text&gt;A reusable grouping for a TLS server that can be used as a
+basis for specific TLS server instances.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="address"&gt;
+      &lt;type name="inet:ip-address"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The IP address of the interface to listen on.  The TLS
+server will listen on all interfaces if no value is
+specified. Please note that some addresses have special
+meanings (e.g., '0.0.0.0' and '::').&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="port"&gt;
+      &lt;type name="inet:port-number"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The local port number on this interface the TLS server
+listens on.  When this grouping is used, it is RECOMMENDED
+that refine statement is used to either set a default port
+value or to set mandatory true.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;uses name="non-listening-tls-server-grouping"/&gt;
+  &lt;/grouping&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-x509-cert-to-name@2014-12-10.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-x509-cert-to-name@2014-12-10.yang
new file mode 100644 (file)
index 0000000..c0dfd35
--- /dev/null
@@ -0,0 +1,293 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-x509-cert-to-name {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name";
+  prefix x509c2n;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netmod/&gt;
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: Thomas Nadeau
+               &lt;mailto:tnadeau@lucidvision.com&gt;
+
+     WG Chair: Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Martin Bjorklund
+               &lt;mailto:mbj@tail-f.com&gt;
+
+     Editor:   Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;";
+  description
+    "This module contains a collection of YANG definitions for
+     extracting a name from an X.509 certificate.
+     The algorithm used to extract a name from an X.509 certificate
+     was first defined in RFC 6353.
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7407; see
+     the RFC itself for full legal notices.";
+  reference
+    "RFC 6353: Transport Layer Security (TLS) Transport Model for
+       the Simple Network Management Protocol (SNMP)";
+
+  revision 2014-12-10 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7407: A YANG Data Model for SNMP Configuration";
+  }
+
+  identity cert-to-name {
+    description
+      "Base identity for algorithms to derive a name from a
+       certificate.";
+  }
+
+  identity specified {
+    base cert-to-name;
+    description
+      "Directly specifies the name to be used for the certificate.
+       The value of the leaf 'name' in the cert-to-name list is
+       used.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSpecified";
+  }
+
+  identity san-rfc822-name {
+    base cert-to-name;
+    description
+      "Maps a subjectAltName's rfc822Name to a name.  The local part
+       of the rfc822Name is passed unaltered, but the host-part of
+       the name must be passed in lowercase.  For example, the
+       rfc822Name field FooBar@Example.COM is mapped to name
+       FooBar@example.com.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANRFC822Name";
+  }
+
+  identity san-dns-name {
+    base cert-to-name;
+    description
+      "Maps a subjectAltName's dNSName to a name after first
+       converting it to all lowercase (RFC 5280 does not specify
+       converting to lowercase, so this involves an extra step).
+       This mapping results in a 1:1 correspondence between
+       subjectAltName dNSName values and the name values.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANDNSName";
+  }
+
+  identity san-ip-address {
+    base cert-to-name;
+    description
+      "Maps a subjectAltName's iPAddress to a name by
+       transforming the binary-encoded address as follows:
+
+         1) for IPv4, the value is converted into a
+            decimal-dotted quad address (e.g., '192.0.2.1').
+
+         2) for IPv6 addresses, the value is converted into a
+            32-character, all-lowercase hexadecimal string
+            without any colon separators.
+
+       This mapping results in a 1:1 correspondence between
+       subjectAltName iPAddress values and the name values.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANIpAddress";
+  }
+
+  identity san-any {
+    base cert-to-name;
+    description
+      "Maps any of the following fields using the corresponding
+       mapping algorithms:
+
+         +------------+-----------------+
+         | Type       | Algorithm       |
+         |------------+-----------------|
+         | rfc822Name | san-rfc822-name |
+         | dNSName    | san-dns-name    |
+         | iPAddress  | san-ip-address  |
+         +------------+-----------------+
+
+       The first matching subjectAltName value found in the
+       certificate of the above types MUST be used when deriving
+       the name.  The mapping algorithm specified in the
+       'Algorithm' column MUST be used to derive the name.
+
+       This mapping results in a 1:1 correspondence between
+       subjectAltName values and name values.  The three sub-mapping
+       algorithms produced by this combined algorithm cannot produce
+       conflicting results between themselves.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertSANAny";
+  }
+
+  identity common-name {
+    base cert-to-name;
+    description
+      "Maps a certificate's CommonName to a name after converting
+       it to a UTF-8 encoding.  The usage of CommonNames is
+       deprecated, and users are encouraged to use subjectAltName
+       mapping methods instead.  This mapping results in a 1:1
+       correspondence between certificate CommonName values and name
+       values.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.snmpTlstmCertCommonName";
+  }
+
+  typedef tls-fingerprint {
+    type yang:hex-string {
+      pattern "([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){0,254}";
+    }
+    description
+      "A fingerprint value that can be used to uniquely reference
+       other data of potentially arbitrary length.
+
+       A tls-fingerprint value is composed of a 1-octet hashing
+       algorithm identifier followed by the fingerprint value.  The
+       first octet value identifying the hashing algorithm is taken
+       from the IANA 'TLS HashAlgorithm Registry' (RFC 5246).  The
+       remaining octets are filled using the results of the hashing
+       algorithm.";
+    reference
+      "RFC 6353: Transport Layer Security (TLS) Transport Model
+         for the Simple Network Management Protocol (SNMP).
+         SNMP-TLS-TM-MIB.SnmpTLSFingerprint";
+  }
+
+  grouping cert-to-name {
+    description
+      "Defines nodes for mapping certificates to names.  Modules
+       that use this grouping should describe how the resulting
+       name is used.";
+    list cert-to-name {
+      key "id";
+      description
+        "This list defines how certificates are mapped to names.
+         The name is derived by considering each cert-to-name
+         list entry in order.  The cert-to-name entry's fingerprint
+         determines whether the list entry is a match:
+
+         1) If the cert-to-name list entry's fingerprint value
+            matches that of the presented certificate, then consider
+            the list entry a successful match.
+
+         2) If the cert-to-name list entry's fingerprint value
+            matches that of a locally held copy of a trusted CA
+            certificate, and that CA certificate was part of the CA
+            certificate chain to the presented certificate, then
+            consider the list entry a successful match.
+
+         Once a matching cert-to-name list entry has been found, the
+         map-type is used to determine how the name associated with
+         the certificate should be determined.  See the map-type
+         leaf's description for details on determining the name value.
+         If it is impossible to determine a name from the cert-to-name
+         list entry's data combined with the data presented in the
+         certificate, then additional cert-to-name list entries MUST
+         be searched to look for another potential match.
+
+         Security administrators are encouraged to make use of
+         certificates with subjectAltName fields that can be mapped to
+         names so that a single root CA certificate can allow all
+         child certificates' subjectAltName fields to map directly to
+         a name via a 1:1 transformation.";
+      reference
+        "RFC 6353: Transport Layer Security (TLS) Transport Model
+           for the Simple Network Management Protocol (SNMP).
+           SNMP-TLS-TM-MIB.snmpTlstmCertToTSNEntry";
+      leaf id {
+        type uint32;
+        description
+          "The id specifies the order in which the entries in the
+           cert-to-name list are searched.  Entries with lower
+           numbers are searched first.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNID";
+      }
+
+      leaf fingerprint {
+        type x509c2n:tls-fingerprint;
+        mandatory true;
+        description
+          "Specifies a value with which the fingerprint of the
+           full certificate presented by the peer is compared.  If
+           the fingerprint of the full certificate presented by the
+           peer does not match the fingerprint configured, then the
+           entry is skipped, and the search for a match continues.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNFingerprint";
+      }
+
+      leaf map-type {
+        type identityref {
+          base cert-to-name;
+        }
+        mandatory true;
+        description
+          "Specifies the algorithm used to map the certificate
+           presented by the peer to a name.
+
+           Mappings that need additional configuration objects should
+           use the 'when' statement to make them conditional based on
+           the map-type.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNMapType";
+      }
+
+      leaf name {
+        when "../map-type = 'x509c2n:specified'";
+        type string;
+        mandatory true;
+        description
+          "Directly specifies the NETCONF username when the
+           map-type is 'specified'.";
+        reference
+          "RFC 6353: Transport Layer Security (TLS) Transport Model
+             for the Simple Network Management Protocol
+             (SNMP).
+             SNMP-TLS-TM-MIB.snmpTlstmCertToTSNData";
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-x509-cert-to-name@2014-12-10.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-x509-cert-to-name@2014-12-10.yin
new file mode 100644 (file)
index 0000000..f39e026
--- /dev/null
@@ -0,0 +1,314 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-x509-cert-to-name"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:x509c2n="urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name"/&gt;
+  &lt;prefix value="x509c2n"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netmod/&amp;gt;
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: Thomas Nadeau
+          &amp;lt;mailto:tnadeau@lucidvision.com&amp;gt;
+
+WG Chair: Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Martin Bjorklund
+          &amp;lt;mailto:mbj@tail-f.com&amp;gt;
+
+Editor:   Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of YANG definitions for
+extracting a name from an X.509 certificate.
+The algorithm used to extract a name from an X.509 certificate
+was first defined in RFC 6353.
+
+Copyright (c) 2014 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 7407; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;reference&gt;
+    &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model for
+  the Simple Network Management Protocol (SNMP)&lt;/text&gt;
+  &lt;/reference&gt;
+  &lt;revision date="2014-12-10"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7407: A YANG Data Model for SNMP Configuration&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;identity name="cert-to-name"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Base identity for algorithms to derive a name from a
+certificate.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/identity&gt;
+  &lt;identity name="specified"&gt;
+    &lt;base name="cert-to-name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Directly specifies the name to be used for the certificate.
+The value of the leaf 'name' in the cert-to-name list is
+used.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertSpecified&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="san-rfc822-name"&gt;
+    &lt;base name="cert-to-name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Maps a subjectAltName's rfc822Name to a name.  The local part
+of the rfc822Name is passed unaltered, but the host-part of
+the name must be passed in lowercase.  For example, the
+rfc822Name field FooBar@Example.COM is mapped to name
+FooBar@example.com.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertSANRFC822Name&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="san-dns-name"&gt;
+    &lt;base name="cert-to-name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Maps a subjectAltName's dNSName to a name after first
+converting it to all lowercase (RFC 5280 does not specify
+converting to lowercase, so this involves an extra step).
+This mapping results in a 1:1 correspondence between
+subjectAltName dNSName values and the name values.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertSANDNSName&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="san-ip-address"&gt;
+    &lt;base name="cert-to-name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Maps a subjectAltName's iPAddress to a name by
+transforming the binary-encoded address as follows:
+
+  1) for IPv4, the value is converted into a
+     decimal-dotted quad address (e.g., '192.0.2.1').
+
+  2) for IPv6 addresses, the value is converted into a
+     32-character, all-lowercase hexadecimal string
+     without any colon separators.
+
+This mapping results in a 1:1 correspondence between
+subjectAltName iPAddress values and the name values.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertSANIpAddress&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="san-any"&gt;
+    &lt;base name="cert-to-name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Maps any of the following fields using the corresponding
+mapping algorithms:
+
+  +------------+-----------------+
+  | Type       | Algorithm       |
+  |------------+-----------------|
+  | rfc822Name | san-rfc822-name |
+  | dNSName    | san-dns-name    |
+  | iPAddress  | san-ip-address  |
+  +------------+-----------------+
+
+The first matching subjectAltName value found in the
+certificate of the above types MUST be used when deriving
+the name.  The mapping algorithm specified in the
+'Algorithm' column MUST be used to derive the name.
+
+This mapping results in a 1:1 correspondence between
+subjectAltName values and name values.  The three sub-mapping
+algorithms produced by this combined algorithm cannot produce
+conflicting results between themselves.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertSANAny&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;identity name="common-name"&gt;
+    &lt;base name="cert-to-name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Maps a certificate's CommonName to a name after converting
+it to a UTF-8 encoding.  The usage of CommonNames is
+deprecated, and users are encouraged to use subjectAltName
+mapping methods instead.  This mapping results in a 1:1
+correspondence between certificate CommonName values and name
+values.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertCommonName&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/identity&gt;
+  &lt;typedef name="tls-fingerprint"&gt;
+    &lt;type name="yang:hex-string"&gt;
+      &lt;pattern value="([0-9a-fA-F]){2}(:([0-9a-fA-F]){2}){0,254}"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;A fingerprint value that can be used to uniquely reference
+other data of potentially arbitrary length.
+
+A tls-fingerprint value is composed of a 1-octet hashing
+algorithm identifier followed by the fingerprint value.  The
+first octet value identifying the hashing algorithm is taken
+from the IANA 'TLS HashAlgorithm Registry' (RFC 5246).  The
+remaining octets are filled using the results of the hashing
+algorithm.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.SnmpTLSFingerprint&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;grouping name="cert-to-name"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Defines nodes for mapping certificates to names.  Modules
+that use this grouping should describe how the resulting
+name is used.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;list name="cert-to-name"&gt;
+      &lt;key value="id"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;This list defines how certificates are mapped to names.
+The name is derived by considering each cert-to-name
+list entry in order.  The cert-to-name entry's fingerprint
+determines whether the list entry is a match:
+
+1) If the cert-to-name list entry's fingerprint value
+   matches that of the presented certificate, then consider
+   the list entry a successful match.
+
+2) If the cert-to-name list entry's fingerprint value
+   matches that of a locally held copy of a trusted CA
+   certificate, and that CA certificate was part of the CA
+   certificate chain to the presented certificate, then
+   consider the list entry a successful match.
+
+Once a matching cert-to-name list entry has been found, the
+map-type is used to determine how the name associated with
+the certificate should be determined.  See the map-type
+leaf's description for details on determining the name value.
+If it is impossible to determine a name from the cert-to-name
+list entry's data combined with the data presented in the
+certificate, then additional cert-to-name list entries MUST
+be searched to look for another potential match.
+
+Security administrators are encouraged to make use of
+certificates with subjectAltName fields that can be mapped to
+names so that a single root CA certificate can allow all
+child certificates' subjectAltName fields to map directly to
+a name via a 1:1 transformation.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;reference&gt;
+        &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertToTSNEntry&lt;/text&gt;
+      &lt;/reference&gt;
+      &lt;leaf name="id"&gt;
+        &lt;type name="uint32"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The id specifies the order in which the entries in the
+cert-to-name list are searched.  Entries with lower
+numbers are searched first.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol
+  (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertToTSNID&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="fingerprint"&gt;
+        &lt;type name="x509c2n:tls-fingerprint"/&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Specifies a value with which the fingerprint of the
+full certificate presented by the peer is compared.  If
+the fingerprint of the full certificate presented by the
+peer does not match the fingerprint configured, then the
+entry is skipped, and the search for a match continues.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol
+  (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertToTSNFingerprint&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="map-type"&gt;
+        &lt;type name="identityref"&gt;
+          &lt;base name="cert-to-name"/&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Specifies the algorithm used to map the certificate
+presented by the peer to a name.
+
+Mappings that need additional configuration objects should
+use the 'when' statement to make them conditional based on
+the map-type.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol
+  (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertToTSNMapType&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="name"&gt;
+        &lt;when condition="../map-type = 'x509c2n:specified'"/&gt;
+        &lt;type name="string"/&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Directly specifies the NETCONF username when the
+map-type is 'specified'.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;reference&gt;
+          &lt;text&gt;RFC 6353: Transport Layer Security (TLS) Transport Model
+  for the Simple Network Management Protocol
+  (SNMP).
+  SNMP-TLS-TM-MIB.snmpTlstmCertToTSNData&lt;/text&gt;
+        &lt;/reference&gt;
+      &lt;/leaf&gt;
+    &lt;/list&gt;
+  &lt;/grouping&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-library@2017-08-17.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-library@2017-08-17.yang
new file mode 100644 (file)
index 0000000..67974c1
--- /dev/null
@@ -0,0 +1,492 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-yang-library {
+  yang-version 1.1;
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
+  prefix yanglib;
+
+  import ietf-yang-types {
+    prefix yang;
+    reference
+      "RFC 6991: Common YANG Data Types.";
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+    reference
+      "RFC 6991: Common YANG Data Types.";
+  }
+
+  import ietf-datastores {
+    prefix ds;
+    reference
+      "I-D.ietf-revised-datastores:
+       Network Management Datastore Architecture.";
+  }
+
+  organization
+    "IETF NETCONF (Network Configuration) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netconf/&gt;
+     WG List:  &lt;mailto:netconf@ietf.org&gt;
+
+     Author:   Andy Bierman
+               &lt;mailto:andy@yumaworks.com&gt;
+
+     Author:   Martin Bjorklund
+               &lt;mailto:mbj@tail-f.com&gt;
+
+     Author:   Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;";
+  description
+    "This module contains information about the YANG server
+     instance, including the modules and datastores the
+     server supports, and which modules are present in
+     which datastores.
+
+     Copyright (c) 2017 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC XXXX; see
+     the RFC itself for full legal notices.";
+
+  revision 2017-08-17 {
+    description
+      "Updated revision.";
+    reference
+      "RFC XXXX: YANG Library.";
+  }
+  revision 2016-04-09 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7895: YANG Module Library.";
+  }
+
+  typedef revision-identifier {
+    type string {
+      pattern "\\d{4}-\\d{2}-\\d{2}";
+    }
+    description
+      "Represents a specific date in YYYY-MM-DD format.";
+  }
+
+  grouping module-identification-leafs {
+    description
+      "Parameters for identifying YANG modules and submodules.";
+    leaf name {
+      type yang:yang-identifier;
+      mandatory true;
+      description
+        "The YANG module or submodule name.";
+    }
+
+    leaf revision {
+      type union {
+        type revision-identifier;
+        type string {
+          length "0";
+        }
+      }
+      mandatory true;
+      description
+        "The YANG module or submodule revision date.
+         A zero-length string is used if no revision statement
+         is present in the YANG module or submodule.";
+    }
+  }
+
+  grouping schema-leaf {
+    description
+      "Common schema leaf parameter for modules and submodules.";
+    leaf schema {
+      type inet:uri;
+      description
+        "Contains a URL that represents the YANG schema
+         resource for this module or submodule.
+         This leaf will only be present if there is a URL
+         available for retrieval of the schema for this entry.";
+    }
+  }
+
+  grouping implementation-parameters {
+    description
+      "Parameters for describing the implementation of a module.";
+    leaf-list feature {
+      type yang:yang-identifier;
+      description
+        "List of YANG feature names from this module that are
+         supported by the server, regardless whether they are defined
+         in the module or any included submodule.";
+    }
+
+    list deviation {
+      key "name revision";
+      description
+        "List of YANG deviation module names and revisions used by
+         this server to modify the conformance of the module
+         associated with this entry.  Note that the same module can
+         be used for deviations for multiple modules, so the same
+         entry MAY appear within multiple 'module' entries.
+
+         The deviation module MUST be present in the 'module' list,
+         with the same name and revision values.  The
+         'conformance-type' value will be 'implement' for the
+         deviation module.";
+      uses module-identification-leafs;
+    }
+
+    leaf conformance-type {
+      type enumeration {
+        enum "implement" {
+          description
+            "Indicates that the server implements one or more
+             protocol-accessible objects defined in the YANG module
+             identified in this entry.  This includes deviation
+             statements defined in the module.
+
+             For YANG version 1.1 modules, there is at most one
+             module entry with conformance type 'implement' for a
+             particular module name, since YANG 1.1 requires that at
+             most one revision of a module is implemented.
+
+             For YANG version 1 modules, there SHOULD NOT be more
+             than one module entry for a particular module name.";
+        }
+        enum "import" {
+          description
+            "Indicates that the server imports reusable definitions
+             from the specified revision of the module, but does not
+             implement any protocol accessible objects from this
+             revision.
+
+             Multiple module entries for the same module name MAY
+             exist. This can occur if multiple modules import the
+             same module, but specify different revision-dates in the
+             import statements.";
+        }
+      }
+      mandatory true;
+      description
+        "Indicates the type of conformance the server is claiming
+         for the YANG module identified by this entry.";
+    }
+  }
+
+  grouping yang-library-parameters {
+    description
+      "The YANG library data structure is represented as a grouping
+       so it can be reused in configuration or another monitoring
+       data structure.";
+    container modules {
+      description
+        "A container holding a list of modules.  Note, modules being
+         listed here does not mean that they are supported by any
+         particular datastore.";
+      list module {
+        key "id";
+        description
+          "Each entry represents one revision of one module
+           currently supported by the server.";
+        leaf id {
+          type string;
+          description
+            "A stable identifier, independent of any other part
+             of this module instance.";
+        }
+
+        uses module-identification-leafs;
+
+        uses schema-leaf;
+
+        leaf namespace {
+          type inet:uri;
+          mandatory true;
+          description
+            "The XML namespace identifier for this module.";
+        }
+
+        uses implementation-parameters;
+
+        list submodule {
+          key "name revision";
+          description
+            "Each entry represents one submodule within the
+             parent module.";
+          uses module-identification-leafs;
+
+          uses schema-leaf;
+        }
+      }
+    }
+
+    container module-sets {
+      description
+        "A container for a list of module-sets.  Module-sets being
+         listed here does not mean that they are used by any
+         particular datastore.";
+      list module-set {
+        key "id";
+        description
+          "An arbitrary module-set definition provided by the
+           server.";
+        leaf id {
+          type string;
+          description
+            "A system-generated value that uniquely represents the
+             referenced set of modules.  Any change to the number
+             of modules referenced, or to the modules themselves,
+             generates a different value.";
+        }
+
+        leaf-list module {
+          type leafref {
+            path "../../../modules/module/id";
+          }
+          description
+            "A module-instance supported by the server, including its
+             features and deviations.";
+        }
+      }
+    }
+
+    container datastores {
+      description
+        "A container for a list of datastores supported by the
+         server.  Each datastore indicates which module-sets it
+         supports.";
+      list datastore {
+        key "name";
+        description
+          "A datastore supported by this server.";
+        leaf name {
+          type identityref {
+            base ds:datastore;
+          }
+          description
+            "The identity of the datastore.";
+        }
+
+        leaf module-set {
+          type leafref {
+            path "../../../module-sets/module-set/id";
+          }
+          description
+            "A reference to a module-set supported by this
+             datastore";
+        }
+      }
+    }
+  }
+
+  grouping module-list {
+    status deprecated;
+    description
+      "The module data structure is represented as a grouping
+       so it can be reused in configuration or another monitoring
+       data structure.";
+    grouping common-leafs {
+      status deprecated;
+      description
+        "Common parameters for YANG modules and submodules.";
+      leaf name {
+        type yang:yang-identifier;
+        status deprecated;
+        description
+          "The YANG module or submodule name.";
+      }
+
+      leaf revision {
+        type union {
+          type revision-identifier;
+          type string {
+            length "0";
+          }
+        }
+        status deprecated;
+        description
+          "The YANG module or submodule revision date.
+           A zero-length string is used if no revision statement
+           is present in the YANG module or submodule.";
+      }
+    }
+
+    list module {
+      key "name revision";
+      status deprecated;
+      description
+        "Each entry represents one revision of one module
+         currently supported by the server.";
+      uses common-leafs {
+        status deprecated;
+      }
+
+      uses schema-leaf {
+        status deprecated;
+      }
+
+      leaf namespace {
+        type inet:uri;
+        mandatory true;
+        status deprecated;
+        description
+          "The XML namespace identifier for this module.";
+      }
+
+      leaf-list feature {
+        type yang:yang-identifier;
+        status deprecated;
+        description
+          "List of YANG feature names from this module that are
+           supported by the server, regardless whether they are
+           defined in the module or any included submodule.";
+      }
+
+      list deviation {
+        key "name revision";
+        status deprecated;
+        description
+          "List of YANG deviation module names and revisions
+           used by this server to modify the conformance of
+           the module associated with this entry.  Note that
+           the same module can be used for deviations for
+           multiple modules, so the same entry MAY appear
+           within multiple 'module' entries.
+
+           The deviation module MUST be present in the 'module'
+           list, with the same name and revision values.
+           The 'conformance-type' value will be 'implement' for
+           the deviation module.";
+        uses common-leafs {
+          status deprecated;
+        }
+      }
+
+      leaf conformance-type {
+        type enumeration {
+          enum "implement" {
+            description
+              "Indicates that the server implements one or more
+               protocol-accessible objects defined in the YANG module
+               identified in this entry.  This includes deviation
+               statements defined in the module.
+
+               For YANG version 1.1 modules, there is at most one
+               module entry with conformance type 'implement' for a
+               particular module name, since YANG 1.1 requires that
+               at most one revision of a module is implemented.
+
+               For YANG version 1 modules, there SHOULD NOT be more
+               than one module entry for a particular module name.";
+          }
+          enum "import" {
+            description
+              "Indicates that the server imports reusable definitions
+               from the specified revision of the module, but does
+               not implement any protocol accessible objects from
+               this revision.
+
+               Multiple module entries for the same module name MAY
+               exist. This can occur if multiple modules import the
+               same module, but specify different revision-dates in
+               the import statements.";
+          }
+        }
+        mandatory true;
+        status deprecated;
+        description
+          "Indicates the type of conformance the server is claiming
+           for the YANG module identified by this entry.";
+      }
+
+      list submodule {
+        key "name revision";
+        status deprecated;
+        description
+          "Each entry represents one submodule within the
+           parent module.";
+        uses common-leafs {
+          status deprecated;
+        }
+
+        uses schema-leaf {
+          status deprecated;
+        }
+      }
+    }
+  }
+
+  container yang-library {
+    config false;
+    description
+      "Container providing all the YANG meta information the
+       server possesses.";
+    uses yang-library-parameters;
+
+    leaf checksum {
+      type string;
+      config false;
+      mandatory true;
+      description
+        "A server-generated checksum of the contents of the
+         'yang-library' tree.  The server MUST change the value of
+         this leaf if the information represented by the
+         'yang-library' tree, except yang-library/checksum, has
+         changed.";
+    }
+  }
+
+  container modules-state {
+    config false;
+    status deprecated;
+    description
+      "Contains YANG module monitoring information.";
+    leaf module-set-id {
+      type string;
+      mandatory true;
+      status deprecated;
+      description
+        "Contains a server-specific identifier representing
+         the current set of modules and submodules.  The
+         server MUST change the value of this leaf if the
+         information represented by the 'module' list instances
+         has changed.";
+    }
+
+    uses module-list {
+      status deprecated;
+    }
+  }
+
+  notification yang-library-update {
+    description
+      "Generated when any YANG library information on the
+       server has changed.";
+  }
+
+  notification yang-library-change {
+    status deprecated;
+    description
+      "Generated when the set of modules and submodules supported
+       by the server has changed.";
+    leaf module-set-id {
+      type leafref {
+        path "/yanglib:modules-state/yanglib:module-set-id";
+      }
+      mandatory true;
+      status deprecated;
+      description
+        "Contains the module-set-id value representing the
+         set of modules and submodules supported at the server
+         at the time the notification is generated.";
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-library@2017-08-17.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-library@2017-08-17.yin
new file mode 100644 (file)
index 0000000..95749bb
--- /dev/null
@@ -0,0 +1,514 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-yang-library"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:yanglib="urn:ietf:params:xml:ns:yang:ietf-yang-library"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"
+        xmlns:inet="urn:ietf:params:xml:ns:yang:ietf-inet-types"
+        xmlns:ds="urn:ietf:params:xml:ns:yang:ietf-datastores"&gt;
+  &lt;yang-version value="1.1"/&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-yang-library"/&gt;
+  &lt;prefix value="yanglib"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-inet-types"&gt;
+    &lt;prefix value="inet"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;import module="ietf-datastores"&gt;
+    &lt;prefix value="ds"/&gt;
+    &lt;reference&gt;
+      &lt;text&gt;I-D.ietf-revised-datastores:
+Network Management Datastore Architecture.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF (Network Configuration) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netconf/&amp;gt;
+WG List:  &amp;lt;mailto:netconf@ietf.org&amp;gt;
+
+Author:   Andy Bierman
+          &amp;lt;mailto:andy@yumaworks.com&amp;gt;
+
+Author:   Martin Bjorklund
+          &amp;lt;mailto:mbj@tail-f.com&amp;gt;
+
+Author:   Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains information about the YANG server
+instance, including the modules and datastores the
+server supports, and which modules are present in
+which datastores.
+
+Copyright (c) 2017 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC XXXX; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2017-08-17"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Updated revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC XXXX: YANG Library.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;revision date="2016-04-09"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7895: YANG Module Library.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="revision-identifier"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="\d{4}-\d{2}-\d{2}"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Represents a specific date in YYYY-MM-DD format.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;grouping name="module-identification-leafs"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Parameters for identifying YANG modules and submodules.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="name"&gt;
+      &lt;type name="yang:yang-identifier"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The YANG module or submodule name.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="revision"&gt;
+      &lt;type name="union"&gt;
+        &lt;type name="revision-identifier"/&gt;
+        &lt;type name="string"&gt;
+          &lt;length value="0"/&gt;
+        &lt;/type&gt;
+      &lt;/type&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The YANG module or submodule revision date.
+A zero-length string is used if no revision statement
+is present in the YANG module or submodule.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="schema-leaf"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Common schema leaf parameter for modules and submodules.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="schema"&gt;
+      &lt;type name="inet:uri"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains a URL that represents the YANG schema
+resource for this module or submodule.
+This leaf will only be present if there is a URL
+available for retrieval of the schema for this entry.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="implementation-parameters"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Parameters for describing the implementation of a module.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf-list name="feature"&gt;
+      &lt;type name="yang:yang-identifier"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of YANG feature names from this module that are
+supported by the server, regardless whether they are defined
+in the module or any included submodule.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf-list&gt;
+    &lt;list name="deviation"&gt;
+      &lt;key value="name revision"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of YANG deviation module names and revisions used by
+this server to modify the conformance of the module
+associated with this entry.  Note that the same module can
+be used for deviations for multiple modules, so the same
+entry MAY appear within multiple 'module' entries.
+
+The deviation module MUST be present in the 'module' list,
+with the same name and revision values.  The
+'conformance-type' value will be 'implement' for the
+deviation module.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;uses name="module-identification-leafs"/&gt;
+    &lt;/list&gt;
+    &lt;leaf name="conformance-type"&gt;
+      &lt;type name="enumeration"&gt;
+        &lt;enum name="implement"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Indicates that the server implements one or more
+protocol-accessible objects defined in the YANG module
+identified in this entry.  This includes deviation
+statements defined in the module.
+
+For YANG version 1.1 modules, there is at most one
+module entry with conformance type 'implement' for a
+particular module name, since YANG 1.1 requires that at
+most one revision of a module is implemented.
+
+For YANG version 1 modules, there SHOULD NOT be more
+than one module entry for a particular module name.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+        &lt;enum name="import"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Indicates that the server imports reusable definitions
+from the specified revision of the module, but does not
+implement any protocol accessible objects from this
+revision.
+
+Multiple module entries for the same module name MAY
+exist. This can occur if multiple modules import the
+same module, but specify different revision-dates in the
+import statements.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/enum&gt;
+      &lt;/type&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Indicates the type of conformance the server is claiming
+for the YANG module identified by this entry.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="yang-library-parameters"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The YANG library data structure is represented as a grouping
+so it can be reused in configuration or another monitoring
+data structure.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="modules"&gt;
+      &lt;description&gt;
+        &lt;text&gt;A container holding a list of modules.  Note, modules being
+listed here does not mean that they are supported by any
+particular datastore.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="module"&gt;
+        &lt;key value="id"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Each entry represents one revision of one module
+currently supported by the server.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="id"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A stable identifier, independent of any other part
+of this module instance.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;uses name="module-identification-leafs"/&gt;
+        &lt;uses name="schema-leaf"/&gt;
+        &lt;leaf name="namespace"&gt;
+          &lt;type name="inet:uri"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The XML namespace identifier for this module.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;uses name="implementation-parameters"/&gt;
+        &lt;list name="submodule"&gt;
+          &lt;key value="name revision"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;Each entry represents one submodule within the
+parent module.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;uses name="module-identification-leafs"/&gt;
+          &lt;uses name="schema-leaf"/&gt;
+        &lt;/list&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="module-sets"&gt;
+      &lt;description&gt;
+        &lt;text&gt;A container for a list of module-sets.  Module-sets being
+listed here does not mean that they are used by any
+particular datastore.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="module-set"&gt;
+        &lt;key value="id"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An arbitrary module-set definition provided by the
+server.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="id"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A system-generated value that uniquely represents the
+referenced set of modules.  Any change to the number
+of modules referenced, or to the modules themselves,
+generates a different value.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf-list name="module"&gt;
+          &lt;type name="leafref"&gt;
+            &lt;path value="../../../modules/module/id"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;A module-instance supported by the server, including its
+features and deviations.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf-list&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+    &lt;container name="datastores"&gt;
+      &lt;description&gt;
+        &lt;text&gt;A container for a list of datastores supported by the
+server.  Each datastore indicates which module-sets it
+supports.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="datastore"&gt;
+        &lt;key value="name"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A datastore supported by this server.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="identityref"&gt;
+            &lt;base name="ds:datastore"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;The identity of the datastore.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="module-set"&gt;
+          &lt;type name="leafref"&gt;
+            &lt;path value="../../../module-sets/module-set/id"/&gt;
+          &lt;/type&gt;
+          &lt;description&gt;
+            &lt;text&gt;A reference to a module-set supported by this
+datastore&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/grouping&gt;
+  &lt;grouping name="module-list"&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The module data structure is represented as a grouping
+so it can be reused in configuration or another monitoring
+data structure.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;grouping name="common-leafs"&gt;
+      &lt;status value="deprecated"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Common parameters for YANG modules and submodules.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="name"&gt;
+        &lt;type name="yang:yang-identifier"/&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The YANG module or submodule name.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="revision"&gt;
+        &lt;type name="union"&gt;
+          &lt;type name="revision-identifier"/&gt;
+          &lt;type name="string"&gt;
+            &lt;length value="0"/&gt;
+          &lt;/type&gt;
+        &lt;/type&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The YANG module or submodule revision date.
+A zero-length string is used if no revision statement
+is present in the YANG module or submodule.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/grouping&gt;
+    &lt;list name="module"&gt;
+      &lt;key value="name revision"/&gt;
+      &lt;status value="deprecated"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Each entry represents one revision of one module
+currently supported by the server.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;uses name="common-leafs"&gt;
+        &lt;status value="deprecated"/&gt;
+      &lt;/uses&gt;
+      &lt;uses name="schema-leaf"&gt;
+        &lt;status value="deprecated"/&gt;
+      &lt;/uses&gt;
+      &lt;leaf name="namespace"&gt;
+        &lt;type name="inet:uri"/&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The XML namespace identifier for this module.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf-list name="feature"&gt;
+        &lt;type name="yang:yang-identifier"/&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of YANG feature names from this module that are
+supported by the server, regardless whether they are
+defined in the module or any included submodule.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf-list&gt;
+      &lt;list name="deviation"&gt;
+        &lt;key value="name revision"/&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;List of YANG deviation module names and revisions
+used by this server to modify the conformance of
+the module associated with this entry.  Note that
+the same module can be used for deviations for
+multiple modules, so the same entry MAY appear
+within multiple 'module' entries.
+
+The deviation module MUST be present in the 'module'
+list, with the same name and revision values.
+The 'conformance-type' value will be 'implement' for
+the deviation module.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;uses name="common-leafs"&gt;
+          &lt;status value="deprecated"/&gt;
+        &lt;/uses&gt;
+      &lt;/list&gt;
+      &lt;leaf name="conformance-type"&gt;
+        &lt;type name="enumeration"&gt;
+          &lt;enum name="implement"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Indicates that the server implements one or more
+protocol-accessible objects defined in the YANG module
+identified in this entry.  This includes deviation
+statements defined in the module.
+
+For YANG version 1.1 modules, there is at most one
+module entry with conformance type 'implement' for a
+particular module name, since YANG 1.1 requires that
+at most one revision of a module is implemented.
+
+For YANG version 1 modules, there SHOULD NOT be more
+than one module entry for a particular module name.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+          &lt;enum name="import"&gt;
+            &lt;description&gt;
+              &lt;text&gt;Indicates that the server imports reusable definitions
+from the specified revision of the module, but does
+not implement any protocol accessible objects from
+this revision.
+
+Multiple module entries for the same module name MAY
+exist. This can occur if multiple modules import the
+same module, but specify different revision-dates in
+the import statements.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/enum&gt;
+        &lt;/type&gt;
+        &lt;mandatory value="true"/&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Indicates the type of conformance the server is claiming
+for the YANG module identified by this entry.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;list name="submodule"&gt;
+        &lt;key value="name revision"/&gt;
+        &lt;status value="deprecated"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Each entry represents one submodule within the
+parent module.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;uses name="common-leafs"&gt;
+          &lt;status value="deprecated"/&gt;
+        &lt;/uses&gt;
+        &lt;uses name="schema-leaf"&gt;
+          &lt;status value="deprecated"/&gt;
+        &lt;/uses&gt;
+      &lt;/list&gt;
+    &lt;/list&gt;
+  &lt;/grouping&gt;
+  &lt;container name="yang-library"&gt;
+    &lt;config value="false"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Container providing all the YANG meta information the
+server possesses.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;uses name="yang-library-parameters"/&gt;
+    &lt;leaf name="checksum"&gt;
+      &lt;type name="string"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;A server-generated checksum of the contents of the
+'yang-library' tree.  The server MUST change the value of
+this leaf if the information represented by the
+'yang-library' tree, except yang-library/checksum, has
+changed.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/container&gt;
+  &lt;container name="modules-state"&gt;
+    &lt;config value="false"/&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Contains YANG module monitoring information.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="module-set-id"&gt;
+      &lt;type name="string"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;status value="deprecated"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains a server-specific identifier representing
+the current set of modules and submodules.  The
+server MUST change the value of this leaf if the
+information represented by the 'module' list instances
+has changed.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;uses name="module-list"&gt;
+      &lt;status value="deprecated"/&gt;
+    &lt;/uses&gt;
+  &lt;/container&gt;
+  &lt;notification name="yang-library-update"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when any YANG library information on the
+server has changed.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/notification&gt;
+  &lt;notification name="yang-library-change"&gt;
+    &lt;status value="deprecated"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Generated when the set of modules and submodules supported
+by the server has changed.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="module-set-id"&gt;
+      &lt;type name="leafref"&gt;
+        &lt;path value="/yanglib:modules-state/yanglib:module-set-id"/&gt;
+      &lt;/type&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;status value="deprecated"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Contains the module-set-id value representing the
+set of modules and submodules supported at the server
+at the time the notification is generated.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/notification&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-metadata@2016-08-05.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-metadata@2016-08-05.yang
new file mode 100644 (file)
index 0000000..b0b0961
--- /dev/null
@@ -0,0 +1,83 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-yang-metadata {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-metadata";
+  prefix md;
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;https://datatracker.ietf.org/wg/netmod/&gt;
+
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: Lou Berger
+               &lt;mailto:lberger@labn.net&gt;
+
+     WG Chair: Kent Watsen
+               &lt;mailto:kwatsen@juniper.net&gt;
+
+     Editor:   Ladislav Lhotka
+               &lt;mailto:lhotka@nic.cz&gt;";
+  description
+    "This YANG module defines an 'extension' statement that allows
+     for defining metadata annotations.
+
+     Copyright (c) 2016 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject to
+     the license terms contained in, the Simplified BSD License set
+     forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 7952
+     (http://www.rfc-editor.org/info/rfc7952); see the RFC itself
+     for full legal notices.";
+
+  revision 2016-08-05 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7952: Defining and Using Metadata with YANG";
+  }
+
+  extension annotation {
+    argument name;
+    description
+      "This extension allows for defining metadata annotations in
+       YANG modules.  The 'md:annotation' statement can appear only
+       at the top level of a YANG module or submodule, i.e., it
+       becomes a new alternative in the ABNF production rule for
+       'body-stmts' (Section 14 in RFC 7950).
+
+       The argument of the 'md:annotation' statement defines the name
+       of the annotation.  Syntactically, it is a YANG identifier as
+       defined in Section 6.2 of RFC 7950.
+
+       An annotation defined with this 'extension' statement inherits
+       the namespace and other context from the YANG module in which
+       it is defined.
+
+       The data type of the annotation value is specified in the same
+       way as for a leaf data node using the 'type' statement.
+
+       The semantics of the annotation and other documentation can be
+       specified using the following standard YANG substatements (all
+       are optional): 'description', 'if-feature', 'reference',
+       'status', and 'units'.
+
+       A server announces support for a particular annotation by
+       including the module in which the annotation is defined among
+       the advertised YANG modules, e.g., in a NETCONF &lt;hello&gt;
+       message or in the YANG library (RFC 7950).  The annotation can
+       then be attached to any instance of a data node defined in any
+       YANG module that is advertised by the server.
+
+       XML encoding and JSON encoding of annotations are defined in
+       RFC 7952.";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-metadata@2016-08-05.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-metadata@2016-08-05.yin
new file mode 100644 (file)
index 0000000..6b87e82
--- /dev/null
@@ -0,0 +1,89 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-yang-metadata"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:md="urn:ietf:params:xml:ns:yang:ietf-yang-metadata"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-yang-metadata"/&gt;
+  &lt;prefix value="md"/&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;https://datatracker.ietf.org/wg/netmod/&amp;gt;
+
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: Lou Berger
+          &amp;lt;mailto:lberger@labn.net&amp;gt;
+
+WG Chair: Kent Watsen
+          &amp;lt;mailto:kwatsen@juniper.net&amp;gt;
+
+Editor:   Ladislav Lhotka
+          &amp;lt;mailto:lhotka@nic.cz&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This YANG module defines an 'extension' statement that allows
+for defining metadata annotations.
+
+Copyright (c) 2016 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject to
+the license terms contained in, the Simplified BSD License set
+forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 7952
+(http://www.rfc-editor.org/info/rfc7952); see the RFC itself
+for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2016-08-05"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7952: Defining and Using Metadata with YANG&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;extension name="annotation"&gt;
+    &lt;argument name="name"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;This extension allows for defining metadata annotations in
+YANG modules.  The 'md:annotation' statement can appear only
+at the top level of a YANG module or submodule, i.e., it
+becomes a new alternative in the ABNF production rule for
+'body-stmts' (Section 14 in RFC 7950).
+
+The argument of the 'md:annotation' statement defines the name
+of the annotation.  Syntactically, it is a YANG identifier as
+defined in Section 6.2 of RFC 7950.
+
+An annotation defined with this 'extension' statement inherits
+the namespace and other context from the YANG module in which
+it is defined.
+
+The data type of the annotation value is specified in the same
+way as for a leaf data node using the 'type' statement.
+
+The semantics of the annotation and other documentation can be
+specified using the following standard YANG substatements (all
+are optional): 'description', 'if-feature', 'reference',
+'status', and 'units'.
+
+A server announces support for a particular annotation by
+including the module in which the annotation is defined among
+the advertised YANG modules, e.g., in a NETCONF &amp;lt;hello&amp;gt;
+message or in the YANG library (RFC 7950).  The annotation can
+then be attached to any instance of a data node defined in any
+YANG module that is advertised by the server.
+
+XML encoding and JSON encoding of annotations are defined in
+RFC 7952.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/extension&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-types@2013-07-15.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-types@2013-07-15.yang
new file mode 100644 (file)
index 0000000..f09381f
--- /dev/null
@@ -0,0 +1,455 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module ietf-yang-types {
+  namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+  prefix yang;
+
+  organization
+    "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+  contact
+    "WG Web:   &lt;http://tools.ietf.org/wg/netmod/&gt;
+     WG List:  &lt;mailto:netmod@ietf.org&gt;
+
+     WG Chair: David Kessens
+               &lt;mailto:david.kessens@nsn.com&gt;
+
+     WG Chair: Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;
+
+     Editor:   Juergen Schoenwaelder
+               &lt;mailto:j.schoenwaelder@jacobs-university.de&gt;";
+  description
+    "This module contains a collection of generally useful derived
+     YANG data types.
+
+     Copyright (c) 2013 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     This version of this YANG module is part of RFC 6991; see
+     the RFC itself for full legal notices.";
+
+  revision 2013-07-15 {
+    description
+      "This revision adds the following new data types:
+       - yang-identifier
+       - hex-string
+       - uuid
+       - dotted-quad";
+    reference
+      "RFC 6991: Common YANG Data Types";
+  }
+  revision 2010-09-24 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 6021: Common YANG Data Types";
+  }
+
+  typedef counter32 {
+    type uint32;
+    description
+      "The counter32 type represents a non-negative integer
+       that monotonically increases until it reaches a
+       maximum value of 2^32-1 (4294967295 decimal), when it
+       wraps around and starts increasing again from zero.
+
+       Counters have no defined 'initial' value, and thus, a
+       single value of a counter has (in general) no information
+       content.  Discontinuities in the monotonically increasing
+       value normally occur at re-initialization of the
+       management system, and at other times as specified in the
+       description of a schema node using this type.  If such
+       other times can occur, for example, the creation of
+       a schema node of type counter32 at times other than
+       re-initialization, then a corresponding schema node
+       should be defined, with an appropriate type, to indicate
+       the last discontinuity.
+
+       The counter32 type should not be used for configuration
+       schema nodes.  A default statement SHOULD NOT be used in
+       combination with the type counter32.
+
+       In the value set and its semantics, this type is equivalent
+       to the Counter32 type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef zero-based-counter32 {
+    type yang:counter32;
+    default "0";
+    description
+      "The zero-based-counter32 type represents a counter32
+       that has the defined 'initial' value zero.
+
+       A schema node of this type will be set to zero (0) on creation
+       and will thereafter increase monotonically until it reaches
+       a maximum value of 2^32-1 (4294967295 decimal), when it
+       wraps around and starts increasing again from zero.
+
+       Provided that an application discovers a new schema node
+       of this type within the minimum time to wrap, it can use the
+       'initial' value as a delta.  It is important for a management
+       station to be aware of this minimum time and the actual time
+       between polls, and to discard data if the actual time is too
+       long or there is no defined minimum time.
+
+       In the value set and its semantics, this type is equivalent
+       to the ZeroBasedCounter32 textual convention of the SMIv2.";
+    reference
+      "RFC 4502: Remote Network Monitoring Management Information
+                 Base Version 2";
+  }
+
+  typedef counter64 {
+    type uint64;
+    description
+      "The counter64 type represents a non-negative integer
+       that monotonically increases until it reaches a
+       maximum value of 2^64-1 (18446744073709551615 decimal),
+       when it wraps around and starts increasing again from zero.
+
+       Counters have no defined 'initial' value, and thus, a
+       single value of a counter has (in general) no information
+       content.  Discontinuities in the monotonically increasing
+       value normally occur at re-initialization of the
+       management system, and at other times as specified in the
+       description of a schema node using this type.  If such
+       other times can occur, for example, the creation of
+       a schema node of type counter64 at times other than
+       re-initialization, then a corresponding schema node
+       should be defined, with an appropriate type, to indicate
+       the last discontinuity.
+
+       The counter64 type should not be used for configuration
+       schema nodes.  A default statement SHOULD NOT be used in
+       combination with the type counter64.
+
+       In the value set and its semantics, this type is equivalent
+       to the Counter64 type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef zero-based-counter64 {
+    type yang:counter64;
+    default "0";
+    description
+      "The zero-based-counter64 type represents a counter64 that
+       has the defined 'initial' value zero.
+
+       A schema node of this type will be set to zero (0) on creation
+       and will thereafter increase monotonically until it reaches
+       a maximum value of 2^64-1 (18446744073709551615 decimal),
+       when it wraps around and starts increasing again from zero.
+
+       Provided that an application discovers a new schema node
+       of this type within the minimum time to wrap, it can use the
+       'initial' value as a delta.  It is important for a management
+       station to be aware of this minimum time and the actual time
+       between polls, and to discard data if the actual time is too
+       long or there is no defined minimum time.
+
+       In the value set and its semantics, this type is equivalent
+       to the ZeroBasedCounter64 textual convention of the SMIv2.";
+    reference
+      "RFC 2856: Textual Conventions for Additional High Capacity
+                 Data Types";
+  }
+
+  typedef gauge32 {
+    type uint32;
+    description
+      "The gauge32 type represents a non-negative integer, which
+       may increase or decrease, but shall never exceed a maximum
+       value, nor fall below a minimum value.  The maximum value
+       cannot be greater than 2^32-1 (4294967295 decimal), and
+       the minimum value cannot be smaller than 0.  The value of
+       a gauge32 has its maximum value whenever the information
+       being modeled is greater than or equal to its maximum
+       value, and has its minimum value whenever the information
+       being modeled is smaller than or equal to its minimum value.
+       If the information being modeled subsequently decreases
+       below (increases above) the maximum (minimum) value, the
+       gauge32 also decreases (increases).
+
+       In the value set and its semantics, this type is equivalent
+       to the Gauge32 type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef gauge64 {
+    type uint64;
+    description
+      "The gauge64 type represents a non-negative integer, which
+       may increase or decrease, but shall never exceed a maximum
+       value, nor fall below a minimum value.  The maximum value
+       cannot be greater than 2^64-1 (18446744073709551615), and
+       the minimum value cannot be smaller than 0.  The value of
+       a gauge64 has its maximum value whenever the information
+       being modeled is greater than or equal to its maximum
+       value, and has its minimum value whenever the information
+       being modeled is smaller than or equal to its minimum value.
+       If the information being modeled subsequently decreases
+       below (increases above) the maximum (minimum) value, the
+       gauge64 also decreases (increases).
+
+       In the value set and its semantics, this type is equivalent
+       to the CounterBasedGauge64 SMIv2 textual convention defined
+       in RFC 2856";
+    reference
+      "RFC 2856: Textual Conventions for Additional High Capacity
+                 Data Types";
+  }
+
+  typedef object-identifier {
+    type string {
+      pattern "(([0-1](\\.[1-3]?[0-9]))|(2\\.(0|([1-9]\\d*))))(\\.(0|([1-9]\\d*)))*";
+    }
+    description
+      "The object-identifier type represents administratively
+       assigned names in a registration-hierarchical-name tree.
+
+       Values of this type are denoted as a sequence of numerical
+       non-negative sub-identifier values.  Each sub-identifier
+       value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+       are separated by single dots and without any intermediate
+       whitespace.
+
+       The ASN.1 standard restricts the value space of the first
+       sub-identifier to 0, 1, or 2.  Furthermore, the value space
+       of the second sub-identifier is restricted to the range
+       0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+       the ASN.1 standard requires that an object identifier
+       has always at least two sub-identifiers.  The pattern
+       captures these restrictions.
+
+       Although the number of sub-identifiers is not limited,
+       module designers should realize that there may be
+       implementations that stick with the SMIv2 limit of 128
+       sub-identifiers.
+
+       This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+       since it is not restricted to 128 sub-identifiers.  Hence,
+       this type SHOULD NOT be used to represent the SMIv2 OBJECT
+       IDENTIFIER type; the object-identifier-128 type SHOULD be
+       used instead.";
+    reference
+      "ISO9834-1: Information technology -- Open Systems
+       Interconnection -- Procedures for the operation of OSI
+       Registration Authorities: General procedures and top
+       arcs of the ASN.1 Object Identifier tree";
+  }
+
+  typedef object-identifier-128 {
+    type object-identifier {
+      pattern "\\d*(\\.\\d*){1,127}";
+    }
+    description
+      "This type represents object-identifiers restricted to 128
+       sub-identifiers.
+
+       In the value set and its semantics, this type is equivalent
+       to the OBJECT IDENTIFIER type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef yang-identifier {
+    type string {
+      length "1..max";
+      pattern "[a-zA-Z_][a-zA-Z0-9\\-_.]*";
+      pattern ".|..|[^xX].*|.[^mM].*|..[^lL].*";
+    }
+    description
+      "A YANG identifier string as defined by the 'identifier'
+       rule in Section 12 of RFC 6020.  An identifier must
+       start with an alphabetic character or an underscore
+       followed by an arbitrary sequence of alphabetic or
+       numeric characters, underscores, hyphens, or dots.
+
+       A YANG identifier MUST NOT start with any possible
+       combination of the lowercase or uppercase character
+       sequence 'xml'.";
+    reference
+      "RFC 6020: YANG - A Data Modeling Language for the Network
+                 Configuration Protocol (NETCONF)";
+  }
+
+  typedef date-and-time {
+    type string {
+      pattern "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[\\+\\-]\\d{2}:\\d{2})";
+    }
+    description
+      "The date-and-time type is a profile of the ISO 8601
+       standard for representation of dates and times using the
+       Gregorian calendar.  The profile is defined by the
+       date-time production in Section 5.6 of RFC 3339.
+
+       The date-and-time type is compatible with the dateTime XML
+       schema type with the following notable exceptions:
+
+       (a) The date-and-time type does not allow negative years.
+
+       (b) The date-and-time time-offset -00:00 indicates an unknown
+           time zone (see RFC 3339) while -00:00 and +00:00 and Z
+           all represent the same time zone in dateTime.
+
+       (c) The canonical format (see below) of data-and-time values
+           differs from the canonical format used by the dateTime XML
+           schema type, which requires all times to be in UTC using
+           the time-offset 'Z'.
+
+       This type is not equivalent to the DateAndTime textual
+       convention of the SMIv2 since RFC 3339 uses a different
+       separator between full-date and full-time and provides
+       higher resolution of time-secfrac.
+
+       The canonical format for date-and-time values with a known time
+       zone uses a numeric time zone offset that is calculated using
+       the device's configured known offset to UTC time.  A change of
+       the device's offset to UTC time will cause date-and-time values
+       to change accordingly.  Such changes might happen periodically
+       in case a server follows automatically daylight saving time
+       (DST) time zone offset changes.  The canonical format for
+       date-and-time values with an unknown time zone (usually
+       referring to the notion of local time) uses the time-offset
+       -00:00.";
+    reference
+      "RFC 3339: Date and Time on the Internet: Timestamps
+       RFC 2579: Textual Conventions for SMIv2
+       XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+  }
+
+  typedef timeticks {
+    type uint32;
+    description
+      "The timeticks type represents a non-negative integer that
+       represents the time, modulo 2^32 (4294967296 decimal), in
+       hundredths of a second between two epochs.  When a schema
+       node is defined that uses this type, the description of
+       the schema node identifies both of the reference epochs.
+
+       In the value set and its semantics, this type is equivalent
+       to the TimeTicks type of the SMIv2.";
+    reference
+      "RFC 2578: Structure of Management Information Version 2
+                 (SMIv2)";
+  }
+
+  typedef timestamp {
+    type yang:timeticks;
+    description
+      "The timestamp type represents the value of an associated
+       timeticks schema node at which a specific occurrence
+       happened.  The specific occurrence must be defined in the
+       description of any schema node defined using this type.  When
+       the specific occurrence occurred prior to the last time the
+       associated timeticks attribute was zero, then the timestamp
+       value is zero.  Note that this requires all timestamp values
+       to be reset to zero when the value of the associated timeticks
+       attribute reaches 497+ days and wraps around to zero.
+
+       The associated timeticks schema node must be specified
+       in the description of any schema node using this type.
+
+       In the value set and its semantics, this type is equivalent
+       to the TimeStamp textual convention of the SMIv2.";
+    reference
+      "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef phys-address {
+    type string {
+      pattern "([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?";
+    }
+    description
+      "Represents media- or physical-level addresses represented
+       as a sequence octets, each octet represented by two hexadecimal
+       numbers.  Octets are separated by colons.  The canonical
+       representation uses lowercase characters.
+
+       In the value set and its semantics, this type is equivalent
+       to the PhysAddress textual convention of the SMIv2.";
+    reference
+      "RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef mac-address {
+    type string {
+      pattern "[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}";
+    }
+    description
+      "The mac-address type represents an IEEE 802 MAC address.
+       The canonical representation uses lowercase characters.
+
+       In the value set and its semantics, this type is equivalent
+       to the MacAddress textual convention of the SMIv2.";
+    reference
+      "IEEE 802: IEEE Standard for Local and Metropolitan Area
+                 Networks: Overview and Architecture
+       RFC 2579: Textual Conventions for SMIv2";
+  }
+
+  typedef xpath1.0 {
+    type string;
+    description
+      "This type represents an XPATH 1.0 expression.
+
+       When a schema node is defined that uses this type, the
+       description of the schema node MUST specify the XPath
+       context in which the XPath expression is evaluated.";
+    reference
+      "XPATH: XML Path Language (XPath) Version 1.0";
+  }
+
+  typedef hex-string {
+    type string {
+      pattern "([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?";
+    }
+    description
+      "A hexadecimal string with octets represented as hex digits
+       separated by colons.  The canonical representation uses
+       lowercase characters.";
+  }
+
+  typedef uuid {
+    type string {
+      pattern "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}";
+    }
+    description
+      "A Universally Unique IDentifier in the string representation
+       defined in RFC 4122.  The canonical representation uses
+       lowercase characters.
+
+       The following is an example of a UUID in string representation:
+       f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+       ";
+    reference
+      "RFC 4122: A Universally Unique IDentifier (UUID) URN
+                 Namespace";
+  }
+
+  typedef dotted-quad {
+    type string {
+      pattern "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
+    }
+    description
+      "An unsigned 32-bit number expressed in the dotted-quad
+       notation, i.e., four octets written as decimal numbers
+       and separated with the '.' (full stop) character.";
+  }
+}
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-types@2013-07-15.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/ietf-yang-types@2013-07-15.yin
new file mode 100644 (file)
index 0000000..07db8fe
--- /dev/null
@@ -0,0 +1,479 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="ietf-yang-types"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:ietf-yang-types"/&gt;
+  &lt;prefix value="yang"/&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETMOD (NETCONF Data Modeling Language) Working Group&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;WG Web:   &amp;lt;http://tools.ietf.org/wg/netmod/&amp;gt;
+WG List:  &amp;lt;mailto:netmod@ietf.org&amp;gt;
+
+WG Chair: David Kessens
+          &amp;lt;mailto:david.kessens@nsn.com&amp;gt;
+
+WG Chair: Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;
+
+Editor:   Juergen Schoenwaelder
+          &amp;lt;mailto:j.schoenwaelder@jacobs-university.de&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This module contains a collection of generally useful derived
+YANG data types.
+
+Copyright (c) 2013 IETF Trust and the persons identified as
+authors of the code.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or
+without modification, is permitted pursuant to, and subject
+to the license terms contained in, the Simplified BSD License
+set forth in Section 4.c of the IETF Trust's Legal Provisions
+Relating to IETF Documents
+(http://trustee.ietf.org/license-info).
+
+This version of this YANG module is part of RFC 6991; see
+the RFC itself for full legal notices.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2013-07-15"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This revision adds the following new data types:
+- yang-identifier
+- hex-string
+- uuid
+- dotted-quad&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6991: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;revision date="2010-09-24"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6021: Common YANG Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="counter32"&gt;
+    &lt;type name="uint32"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The counter32 type represents a non-negative integer
+that monotonically increases until it reaches a
+maximum value of 2^32-1 (4294967295 decimal), when it
+wraps around and starts increasing again from zero.
+
+Counters have no defined 'initial' value, and thus, a
+single value of a counter has (in general) no information
+content.  Discontinuities in the monotonically increasing
+value normally occur at re-initialization of the
+management system, and at other times as specified in the
+description of a schema node using this type.  If such
+other times can occur, for example, the creation of
+a schema node of type counter32 at times other than
+re-initialization, then a corresponding schema node
+should be defined, with an appropriate type, to indicate
+the last discontinuity.
+
+The counter32 type should not be used for configuration
+schema nodes.  A default statement SHOULD NOT be used in
+combination with the type counter32.
+
+In the value set and its semantics, this type is equivalent
+to the Counter32 type of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2578: Structure of Management Information Version 2
+          (SMIv2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="zero-based-counter32"&gt;
+    &lt;type name="yang:counter32"/&gt;
+    &lt;default value="0"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The zero-based-counter32 type represents a counter32
+that has the defined 'initial' value zero.
+
+A schema node of this type will be set to zero (0) on creation
+and will thereafter increase monotonically until it reaches
+a maximum value of 2^32-1 (4294967295 decimal), when it
+wraps around and starts increasing again from zero.
+
+Provided that an application discovers a new schema node
+of this type within the minimum time to wrap, it can use the
+'initial' value as a delta.  It is important for a management
+station to be aware of this minimum time and the actual time
+between polls, and to discard data if the actual time is too
+long or there is no defined minimum time.
+
+In the value set and its semantics, this type is equivalent
+to the ZeroBasedCounter32 textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4502: Remote Network Monitoring Management Information
+          Base Version 2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="counter64"&gt;
+    &lt;type name="uint64"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The counter64 type represents a non-negative integer
+that monotonically increases until it reaches a
+maximum value of 2^64-1 (18446744073709551615 decimal),
+when it wraps around and starts increasing again from zero.
+
+Counters have no defined 'initial' value, and thus, a
+single value of a counter has (in general) no information
+content.  Discontinuities in the monotonically increasing
+value normally occur at re-initialization of the
+management system, and at other times as specified in the
+description of a schema node using this type.  If such
+other times can occur, for example, the creation of
+a schema node of type counter64 at times other than
+re-initialization, then a corresponding schema node
+should be defined, with an appropriate type, to indicate
+the last discontinuity.
+
+The counter64 type should not be used for configuration
+schema nodes.  A default statement SHOULD NOT be used in
+combination with the type counter64.
+
+In the value set and its semantics, this type is equivalent
+to the Counter64 type of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2578: Structure of Management Information Version 2
+          (SMIv2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="zero-based-counter64"&gt;
+    &lt;type name="yang:counter64"/&gt;
+    &lt;default value="0"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The zero-based-counter64 type represents a counter64 that
+has the defined 'initial' value zero.
+
+A schema node of this type will be set to zero (0) on creation
+and will thereafter increase monotonically until it reaches
+a maximum value of 2^64-1 (18446744073709551615 decimal),
+when it wraps around and starts increasing again from zero.
+
+Provided that an application discovers a new schema node
+of this type within the minimum time to wrap, it can use the
+'initial' value as a delta.  It is important for a management
+station to be aware of this minimum time and the actual time
+between polls, and to discard data if the actual time is too
+long or there is no defined minimum time.
+
+In the value set and its semantics, this type is equivalent
+to the ZeroBasedCounter64 textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2856: Textual Conventions for Additional High Capacity
+          Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="gauge32"&gt;
+    &lt;type name="uint32"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The gauge32 type represents a non-negative integer, which
+may increase or decrease, but shall never exceed a maximum
+value, nor fall below a minimum value.  The maximum value
+cannot be greater than 2^32-1 (4294967295 decimal), and
+the minimum value cannot be smaller than 0.  The value of
+a gauge32 has its maximum value whenever the information
+being modeled is greater than or equal to its maximum
+value, and has its minimum value whenever the information
+being modeled is smaller than or equal to its minimum value.
+If the information being modeled subsequently decreases
+below (increases above) the maximum (minimum) value, the
+gauge32 also decreases (increases).
+
+In the value set and its semantics, this type is equivalent
+to the Gauge32 type of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2578: Structure of Management Information Version 2
+          (SMIv2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="gauge64"&gt;
+    &lt;type name="uint64"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The gauge64 type represents a non-negative integer, which
+may increase or decrease, but shall never exceed a maximum
+value, nor fall below a minimum value.  The maximum value
+cannot be greater than 2^64-1 (18446744073709551615), and
+the minimum value cannot be smaller than 0.  The value of
+a gauge64 has its maximum value whenever the information
+being modeled is greater than or equal to its maximum
+value, and has its minimum value whenever the information
+being modeled is smaller than or equal to its minimum value.
+If the information being modeled subsequently decreases
+below (increases above) the maximum (minimum) value, the
+gauge64 also decreases (increases).
+
+In the value set and its semantics, this type is equivalent
+to the CounterBasedGauge64 SMIv2 textual convention defined
+in RFC 2856&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2856: Textual Conventions for Additional High Capacity
+          Data Types&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="object-identifier"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))(\.(0|([1-9]\d*)))*"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The object-identifier type represents administratively
+assigned names in a registration-hierarchical-name tree.
+
+Values of this type are denoted as a sequence of numerical
+non-negative sub-identifier values.  Each sub-identifier
+value MUST NOT exceed 2^32-1 (4294967295).  Sub-identifiers
+are separated by single dots and without any intermediate
+whitespace.
+
+The ASN.1 standard restricts the value space of the first
+sub-identifier to 0, 1, or 2.  Furthermore, the value space
+of the second sub-identifier is restricted to the range
+0 to 39 if the first sub-identifier is 0 or 1.  Finally,
+the ASN.1 standard requires that an object identifier
+has always at least two sub-identifiers.  The pattern
+captures these restrictions.
+
+Although the number of sub-identifiers is not limited,
+module designers should realize that there may be
+implementations that stick with the SMIv2 limit of 128
+sub-identifiers.
+
+This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+since it is not restricted to 128 sub-identifiers.  Hence,
+this type SHOULD NOT be used to represent the SMIv2 OBJECT
+IDENTIFIER type; the object-identifier-128 type SHOULD be
+used instead.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;ISO9834-1: Information technology -- Open Systems
+Interconnection -- Procedures for the operation of OSI
+Registration Authorities: General procedures and top
+arcs of the ASN.1 Object Identifier tree&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="object-identifier-128"&gt;
+    &lt;type name="object-identifier"&gt;
+      &lt;pattern value="\d*(\.\d*){1,127}"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;This type represents object-identifiers restricted to 128
+sub-identifiers.
+
+In the value set and its semantics, this type is equivalent
+to the OBJECT IDENTIFIER type of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2578: Structure of Management Information Version 2
+          (SMIv2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="yang-identifier"&gt;
+    &lt;type name="string"&gt;
+      &lt;length value="1..max"/&gt;
+      &lt;pattern value="[a-zA-Z_][a-zA-Z0-9\-_.]*"/&gt;
+      &lt;pattern value=".|..|[^xX].*|.[^mM].*|..[^lL].*"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;A YANG identifier string as defined by the 'identifier'
+rule in Section 12 of RFC 6020.  An identifier must
+start with an alphabetic character or an underscore
+followed by an arbitrary sequence of alphabetic or
+numeric characters, underscores, hyphens, or dots.
+
+A YANG identifier MUST NOT start with any possible
+combination of the lowercase or uppercase character
+sequence 'xml'.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6020: YANG - A Data Modeling Language for the Network
+          Configuration Protocol (NETCONF)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="date-and-time"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2})"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The date-and-time type is a profile of the ISO 8601
+standard for representation of dates and times using the
+Gregorian calendar.  The profile is defined by the
+date-time production in Section 5.6 of RFC 3339.
+
+The date-and-time type is compatible with the dateTime XML
+schema type with the following notable exceptions:
+
+(a) The date-and-time type does not allow negative years.
+
+(b) The date-and-time time-offset -00:00 indicates an unknown
+    time zone (see RFC 3339) while -00:00 and +00:00 and Z
+    all represent the same time zone in dateTime.
+
+(c) The canonical format (see below) of data-and-time values
+    differs from the canonical format used by the dateTime XML
+    schema type, which requires all times to be in UTC using
+    the time-offset 'Z'.
+
+This type is not equivalent to the DateAndTime textual
+convention of the SMIv2 since RFC 3339 uses a different
+separator between full-date and full-time and provides
+higher resolution of time-secfrac.
+
+The canonical format for date-and-time values with a known time
+zone uses a numeric time zone offset that is calculated using
+the device's configured known offset to UTC time.  A change of
+the device's offset to UTC time will cause date-and-time values
+to change accordingly.  Such changes might happen periodically
+in case a server follows automatically daylight saving time
+(DST) time zone offset changes.  The canonical format for
+date-and-time values with an unknown time zone (usually
+referring to the notion of local time) uses the time-offset
+-00:00.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 3339: Date and Time on the Internet: Timestamps
+RFC 2579: Textual Conventions for SMIv2
+XSD-TYPES: XML Schema Part 2: Datatypes Second Edition&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="timeticks"&gt;
+    &lt;type name="uint32"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The timeticks type represents a non-negative integer that
+represents the time, modulo 2^32 (4294967296 decimal), in
+hundredths of a second between two epochs.  When a schema
+node is defined that uses this type, the description of
+the schema node identifies both of the reference epochs.
+
+In the value set and its semantics, this type is equivalent
+to the TimeTicks type of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2578: Structure of Management Information Version 2
+          (SMIv2)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="timestamp"&gt;
+    &lt;type name="yang:timeticks"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The timestamp type represents the value of an associated
+timeticks schema node at which a specific occurrence
+happened.  The specific occurrence must be defined in the
+description of any schema node defined using this type.  When
+the specific occurrence occurred prior to the last time the
+associated timeticks attribute was zero, then the timestamp
+value is zero.  Note that this requires all timestamp values
+to be reset to zero when the value of the associated timeticks
+attribute reaches 497+ days and wraps around to zero.
+
+The associated timeticks schema node must be specified
+in the description of any schema node using this type.
+
+In the value set and its semantics, this type is equivalent
+to the TimeStamp textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2579: Textual Conventions for SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="phys-address"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Represents media- or physical-level addresses represented
+as a sequence octets, each octet represented by two hexadecimal
+numbers.  Octets are separated by colons.  The canonical
+representation uses lowercase characters.
+
+In the value set and its semantics, this type is equivalent
+to the PhysAddress textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 2579: Textual Conventions for SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="mac-address"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;The mac-address type represents an IEEE 802 MAC address.
+The canonical representation uses lowercase characters.
+
+In the value set and its semantics, this type is equivalent
+to the MacAddress textual convention of the SMIv2.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;IEEE 802: IEEE Standard for Local and Metropolitan Area
+          Networks: Overview and Architecture
+RFC 2579: Textual Conventions for SMIv2&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="xpath1.0"&gt;
+    &lt;type name="string"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;This type represents an XPATH 1.0 expression.
+
+When a schema node is defined that uses this type, the
+description of the schema node MUST specify the XPath
+context in which the XPath expression is evaluated.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;XPATH: XML Path Language (XPath) Version 1.0&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="hex-string"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;A hexadecimal string with octets represented as hex digits
+separated by colons.  The canonical representation uses
+lowercase characters.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="uuid"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;A Universally Unique IDentifier in the string representation
+defined in RFC 4122.  The canonical representation uses
+lowercase characters.
+
+The following is an example of a UUID in string representation:
+f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 4122: A Universally Unique IDentifier (UUID) URN
+          Namespace&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="dotted-quad"&gt;
+    &lt;type name="string"&gt;
+      &lt;pattern value="(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;An unsigned 32-bit number expressed in the dotted-quad
+notation, i.e., four octets written as decimal numbers
+and separated with the '.' (full stop) character.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/response.groovy
new file mode 100644 (file)
index 0000000..2d42afd
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "lock!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/lock/NA/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/nc-notifications@2008-07-14.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/nc-notifications@2008-07-14.yang
new file mode 100644 (file)
index 0000000..bdbd000
--- /dev/null
@@ -0,0 +1,96 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module nc-notifications {
+  namespace "urn:ietf:params:xml:ns:netmod:notification";
+  prefix manageEvent;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import notifications {
+    prefix ncEvent;
+  }
+
+  organization
+    "IETF NETCONF WG";
+  contact
+    "netconf@ietf.org";
+  description
+    "Conversion of the 'manageEvent' XSD in the NETCONF
+     Notifications RFC.";
+  reference
+    "RFC 5277";
+
+  revision 2008-07-14 {
+    description
+      "RFC 5277 version.";
+  }
+
+  container netconf {
+    config false;
+    description
+      "Top-level element in the notification namespace";
+    container streams {
+      description
+        "The list of event streams supported by the system. When
+         a query is issued, the returned set of streams is
+         determined based on user privileges.";
+      list stream {
+        key "name";
+        min-elements 1;
+        description
+          "Stream name, description and other information.";
+        leaf name {
+          type ncEvent:streamNameType;
+          description
+            "The name of the event stream. If this is the default
+             NETCONF stream, this must have the value 'NETCONF'.";
+        }
+
+        leaf description {
+          type string;
+          mandatory true;
+          description
+            "A description of the event stream, including such
+             information as the type of events that are sent over
+             this stream.";
+        }
+
+        leaf replaySupport {
+          type boolean;
+          mandatory true;
+          description
+            "A description of the event stream, including such
+             information as the type of events that are sent over
+             this stream.";
+        }
+
+        leaf replayLogCreationTime {
+          type yang:date-and-time;
+          description
+            "The timestamp of the creation of the log used to support
+             the replay function on this stream. Note that this might
+             be earlier then the earliest available notification in
+             the log. This object is updated if the log resets for
+             some reason.  This object MUST be present if replay is
+             supported.";
+        }
+      }
+    }
+  }
+
+  notification replayComplete {
+    description
+      "This notification is sent to signal the end of a replay
+       portion of a subscription.";
+  }
+
+  notification notificationComplete {
+    description
+      "This notification is sent to signal the end of a notification
+       subscription. It is sent in the case that stopTime was
+       specified during the creation of the subscription..";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/nc-notifications@2008-07-14.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/nc-notifications@2008-07-14.yin
new file mode 100644 (file)
index 0000000..5f063a0
--- /dev/null
@@ -0,0 +1,105 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="nc-notifications"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:manageEvent="urn:ietf:params:xml:ns:netmod:notification"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"
+        xmlns:ncEvent="urn:ietf:params:xml:ns:netconf:notification:1.0"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:netmod:notification"/&gt;
+  &lt;prefix value="manageEvent"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;import module="notifications"&gt;
+    &lt;prefix value="ncEvent"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF WG&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;netconf@ietf.org&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;Conversion of the 'manageEvent' XSD in the NETCONF
+Notifications RFC.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;reference&gt;
+    &lt;text&gt;RFC 5277&lt;/text&gt;
+  &lt;/reference&gt;
+  &lt;revision date="2008-07-14"&gt;
+    &lt;description&gt;
+      &lt;text&gt;RFC 5277 version.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/revision&gt;
+  &lt;container name="netconf"&gt;
+    &lt;config value="false"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Top-level element in the notification namespace&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;container name="streams"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The list of event streams supported by the system. When
+a query is issued, the returned set of streams is
+determined based on user privileges.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="stream"&gt;
+        &lt;key value="name"/&gt;
+        &lt;min-elements value="1"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Stream name, description and other information.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="name"&gt;
+          &lt;type name="ncEvent:streamNameType"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The name of the event stream. If this is the default
+NETCONF stream, this must have the value 'NETCONF'.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="description"&gt;
+          &lt;type name="string"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A description of the event stream, including such
+information as the type of events that are sent over
+this stream.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="replaySupport"&gt;
+          &lt;type name="boolean"/&gt;
+          &lt;mandatory value="true"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;A description of the event stream, including such
+information as the type of events that are sent over
+this stream.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;leaf name="replayLogCreationTime"&gt;
+          &lt;type name="yang:date-and-time"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;The timestamp of the creation of the log used to support
+the replay function on this stream. Note that this might
+be earlier then the earliest available notification in
+the log. This object is updated if the log resets for
+some reason.  This object MUST be present if replay is
+supported.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;notification name="replayComplete"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This notification is sent to signal the end of a replay
+portion of a subscription.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/notification&gt;
+  &lt;notification name="notificationComplete"&gt;
+    &lt;description&gt;
+      &lt;text&gt;This notification is sent to signal the end of a notification
+subscription. It is sent in the case that stopTime was
+specified during the creation of the subscription..&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/notification&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/notifications@2008-07-14.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/notifications@2008-07-14.yang
new file mode 100644 (file)
index 0000000..9dce511
--- /dev/null
@@ -0,0 +1,92 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module notifications {
+  namespace "urn:ietf:params:xml:ns:netconf:notification:1.0";
+  prefix ncEvent;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "IETF NETCONF WG";
+  contact
+    "netconf@ops.ietf.org";
+  description
+    "Conversion of the 'ncEvent' XSD in the
+     NETCONF Notifications RFC.";
+  reference
+    "RFC 5277.";
+
+  revision 2008-07-14 {
+    description
+      "RFC 5277 version.";
+  }
+
+  typedef streamNameType {
+    type string;
+    description
+      "The name of an event stream.";
+  }
+
+  container notification {
+    config false;
+    description
+      "internal struct to start a notification";
+    leaf eventTime {
+      type yang:date-and-time;
+      mandatory true;
+    }
+  }
+
+  rpc create-subscription {
+    description
+      "The command to create a notification subscription. It
+       takes as argument the name of the notification stream
+       and filter. Both of those options limit the content of
+       the subscription. In addition, there are two time-related
+       parameters, startTime and stopTime, which can be used to
+       select the time interval of interest to the notification
+       replay feature.";
+    input {
+      leaf stream {
+        type streamNameType;
+        default "NETCONF";
+        description
+          "An optional parameter that indicates which stream of events
+           is of interest. If not present, then events in the default
+           NETCONF stream will be sent.";
+      }
+
+      anyxml filter {
+        description
+          "An optional parameter that indicates which subset of all
+           possible events is of interest. The format of this
+           parameter is the same as that of the filter parameter
+           in the NETCONF protocol operations. If not present,
+           all events not precluded by other parameters will
+           be sent.";
+      }
+
+      leaf startTime {
+        type yang:date-and-time;
+        description
+          "A parameter used to trigger the replay feature and
+           indicates that the replay should start at the time
+           specified. If start time is not present, this is not a
+           replay subscription.";
+      }
+
+      leaf stopTime {
+        type yang:date-and-time;
+        description
+          "An optional parameter used with the optional replay
+           feature to indicate the newest notifications of
+           interest. If stop time is not present, the notifications
+           will continue until the subscription is terminated.
+           Must be used with startTime.";
+      }
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/notifications@2008-07-14.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/notifications@2008-07-14.yin
new file mode 100644 (file)
index 0000000..3633d0f
--- /dev/null
@@ -0,0 +1,99 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="notifications"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:ncEvent="urn:ietf:params:xml:ns:netconf:notification:1.0"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:ietf-yang-types"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:netconf:notification:1.0"/&gt;
+  &lt;prefix value="ncEvent"/&gt;
+  &lt;import module="ietf-yang-types"&gt;
+    &lt;prefix value="yang"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;IETF NETCONF WG&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;netconf@ops.ietf.org&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;Conversion of the 'ncEvent' XSD in the
+NETCONF Notifications RFC.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;reference&gt;
+    &lt;text&gt;RFC 5277.&lt;/text&gt;
+  &lt;/reference&gt;
+  &lt;revision date="2008-07-14"&gt;
+    &lt;description&gt;
+      &lt;text&gt;RFC 5277 version.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="streamNameType"&gt;
+    &lt;type name="string"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;The name of an event stream.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;container name="notification"&gt;
+    &lt;config value="false"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;internal struct to start a notification&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="eventTime"&gt;
+      &lt;type name="yang:date-and-time"/&gt;
+      &lt;mandatory value="true"/&gt;
+    &lt;/leaf&gt;
+  &lt;/container&gt;
+  &lt;rpc name="create-subscription"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The command to create a notification subscription. It
+takes as argument the name of the notification stream
+and filter. Both of those options limit the content of
+the subscription. In addition, there are two time-related
+parameters, startTime and stopTime, which can be used to
+select the time interval of interest to the notification
+replay feature.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="stream"&gt;
+        &lt;type name="streamNameType"/&gt;
+        &lt;default value="NETCONF"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An optional parameter that indicates which stream of events
+is of interest. If not present, then events in the default
+NETCONF stream will be sent.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;anyxml name="filter"&gt;
+        &lt;description&gt;
+          &lt;text&gt;An optional parameter that indicates which subset of all
+possible events is of interest. The format of this
+parameter is the same as that of the filter parameter
+in the NETCONF protocol operations. If not present,
+all events not precluded by other parameters will
+be sent.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/anyxml&gt;
+      &lt;leaf name="startTime"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;A parameter used to trigger the replay feature and
+indicates that the replay should start at the time
+specified. If start time is not present, this is not a
+replay subscription.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="stopTime"&gt;
+        &lt;type name="yang:date-and-time"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;An optional parameter used with the optional replay
+feature to indicate the newest notifications of
+interest. If stop time is not present, the notifications
+will continue until the subscription is terminated.
+Must be used with startTime.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/rpc-reply.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/rpc-reply.xml
new file mode 100644 (file)
index 0000000..c5ca49b
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>3</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/response.groovy
new file mode 100644 (file)
index 0000000..b2be5fd
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "run-until!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"http://example.net/turing-machine\"> <step-count>12</step-count><halted>true</halted></rpc-reply>";
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/response.xml
new file mode 100644 (file)
index 0000000..a2909ff
--- /dev/null
@@ -0,0 +1,3 @@
+<rpc-reply <RPCHEADER>>
+  <data/>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/system/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/system/response.xml
new file mode 100644 (file)
index 0000000..46ba494
--- /dev/null
@@ -0,0 +1,7 @@
+<rpc-reply <RPCHEADER>>
+  <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <system xmlns="http://acme.example.com/system">
+    <host-name>aaaaa</host-name>
+  </system>
+</data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/turing-machine/response.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/run-until/NA/turing-machine/response.xml
new file mode 100644 (file)
index 0000000..4a659af
--- /dev/null
@@ -0,0 +1,76 @@
+<rpc-reply <RPCHEADER>>
+  <data>
+<turing-machine xmlns="http://example.net/turing-machine">
+  <transition-function>
+    <delta>
+      <label>separator</label>
+      <output>
+        <state>4</state>
+        <symbol>1</symbol>
+      </output>
+      <input>
+        <state>0</state>
+        <symbol>0</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>go home</label>
+      <output>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>write separator</label>
+      <output>
+        <state>3</state>
+        <head-move>left</head-move>
+        <symbol>0</symbol>
+      </output>
+      <input>
+        <state>2</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right summand</label>
+      <input>
+        <state>1</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>left summand</label>
+      <input>
+        <state>0</state>
+        <symbol>1</symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>right end</label>
+      <output>
+        <state>2</state>
+        <head-move>left</head-move>
+      </output>
+      <input>
+        <state>1</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+    <delta>
+      <label>final step</label>
+      <output>
+        <state>4</state>
+      </output>
+      <input>
+        <state>3</state>
+        <symbol></symbol>
+      </input>
+    </delta>
+  </transition-function>
+</turing-machine>
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/schema-reply-template.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/schema-reply-template.xml
new file mode 100644 (file)
index 0000000..b063f8e
--- /dev/null
@@ -0,0 +1 @@
+<SCHEMAREPLY>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/schema-reply.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/schema-reply.xml
new file mode 100644 (file)
index 0000000..8d2c318
--- /dev/null
@@ -0,0 +1,270 @@
+<rpc-reply message-id="m-1"
+  xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <data
+  xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+module turing-machine {
+  namespace "http://example.net/turing-machine";
+  prefix tm;
+
+  description
+    "Data model for the Turing Machine.";
+
+  revision 2013-12-27 {
+    description
+      "Initial revision.";
+  }
+
+  typedef tape-symbol {
+    type string {
+      length "0..1";
+    }
+    description
+      "Type of symbols appearing in tape cells.
+
+       A blank is represented as an empty string where necessary.";
+  }
+
+  typedef cell-index {
+    type int64;
+    description
+      "Type for indexing tape cells.";
+  }
+
+  typedef state-index {
+    type uint16;
+    description
+      "Type for indexing states of the control unit.";
+  }
+
+  typedef head-dir {
+    type enumeration {
+      enum "left";
+      enum "right";
+    }
+    default "right";
+    description
+      "Possible directions for moving the read/write head, one cell
+       to the left or right (default).";
+  }
+
+  grouping tape-cells {
+    description
+      "The tape of the Turing Machine is represented as a sparse
+       array.";
+    list cell {
+      key "coord";
+      description
+        "List of non-blank cells.";
+      leaf coord {
+        type cell-index;
+        description
+          "Coordinate (index) of the tape cell.";
+      }
+
+      leaf symbol {
+        type tape-symbol {
+          length "1";
+        }
+        description
+          "Symbol appearing in the tape cell.
+
+           Blank (empty string) is not allowed here because the
+           'cell' list only contains non-blank cells.";
+      }
+    }
+  }
+
+  container turing-machine {
+    description
+      "State data and configuration of a Turing Machine.";
+    leaf state {
+      type state-index;
+      config false;
+      mandatory true;
+      description
+        "Current state of the control unit.
+
+         The initial state is 0.";
+    }
+
+    leaf head-position {
+      type cell-index;
+      config false;
+      mandatory true;
+      description
+        "Position of tape read/write head.";
+    }
+
+    container tape {
+      config false;
+      description
+        "The contents of the tape.";
+      uses tape-cells;
+    }
+
+    container transition-function {
+      description
+        "The Turing Machine is configured by specifying the
+         transition function.";
+      list delta {
+        key "label";
+        unique "input/state input/symbol";
+        description
+          "The list of transition rules.";
+        leaf label {
+          type string;
+          description
+            "An arbitrary label of the transition rule.";
+        }
+
+        container input {
+          description
+            "Input parameters (arguments) of the transition rule.";
+          leaf state {
+            type state-index;
+            mandatory true;
+            description
+              "Current state of the control unit.";
+          }
+
+          leaf symbol {
+            type tape-symbol;
+            mandatory true;
+            description
+              "Symbol read from the tape cell.";
+          }
+        }
+
+        container output {
+          description
+            "Output values of the transition rule.";
+          leaf state {
+            type state-index;
+            description
+              "New state of the control unit. If this leaf is not
+               present, the state doesn't change.";
+          }
+
+          leaf symbol {
+            type tape-symbol;
+            description
+              "Symbol to be written to the tape cell. If this leaf is
+               not present, the symbol doesn't change.";
+          }
+
+          leaf head-move {
+            type head-dir;
+            description
+              "Move the head one cell to the left or right";
+          }
+        }
+      }
+    }
+  }
+
+  rpc initialize {
+    description
+      "Initialize the Turing Machine as follows:
+
+       1. Put the control unit into the initial state (0).
+
+       2. Move the read/write head to the tape cell with coordinate
+          zero.
+
+       3. Write the string from the 'tape-content' input parameter to
+          the tape, character by character, starting at cell 0. The
+          tape is othewise empty.";
+    input {
+      leaf tape-content {
+        type string;
+        default "";
+        description
+          "The string with which the tape shall be initialized. The
+           leftmost symbol will be at tape coordinate 0.";
+      }
+    }
+  }
+
+  rpc run {
+    description
+      "Start the Turing Machine operation.";
+  }
+
+  rpc run-until {
+    description
+      "Start the Turing Machine operation and let it run until it is halted
+       or ALL the defined breakpoint conditions are satisfied.";
+    input {
+      leaf state {
+        type state-index;
+        description
+          "What state the control unit has to be at for the execution to be paused.";
+      }
+
+      leaf head-position {
+        type cell-index;
+        description
+          "Position of tape read/write head for which the breakpoint applies.";
+      }
+
+      container tape {
+        description
+          "What content the tape has to have for the breakpoint to apply.";
+        uses tape-cells;
+      }
+    }
+
+    output {
+      leaf step-count {
+        type uint64;
+        description
+          "The number of steps executed since the last 'run-until' call.";
+      }
+
+      leaf halted {
+        type boolean;
+        description
+          "'True' if the Turing machine is halted, 'false' if it is only paused.";
+      }
+    }
+  }
+
+  notification halted {
+    description
+      "The Turing Machine has halted. This means that there is no
+       transition rule for the current state and tape symbol.";
+    leaf state {
+      type state-index;
+      mandatory true;
+      description
+        "The state of the control unit in which the machine has
+         halted.";
+    }
+  }
+
+  notification paused {
+    description
+      "The Turing machine has reached a breakpoint and was paused.";
+    leaf state {
+      type state-index;
+      mandatory true;
+      description
+        "State of the control unit in which the machine was paused.";
+    }
+
+    leaf head-position {
+      type cell-index;
+      mandatory true;
+      description
+        "Position of tape read/write head when the machine was paused.";
+    }
+
+    container tape {
+      description
+        "Content of the tape when the machine was paused.";
+      uses tape-cells;
+    }
+  }
+}
+  </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/schema.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/schema.xml
new file mode 100644 (file)
index 0000000..82b2c5d
--- /dev/null
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-0">
+  <data>
+    <netconf-state xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+      <schemas>
+        <schema>
+          <identifier>RCAPoCModel</identifier>
+          <version>2017-04-27</version>
+          <format>yang</format>
+          <namespace>urn:opendaylight:params:xml:ns:yang:oripWnc</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>RCAPoCModel</identifier>
+          <version>2017-04-27</version>
+          <format>yin</format>
+          <namespace>urn:opendaylight:params:xml:ns:yang:oripWnc</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-yang-metadata</identifier>
+          <version>2016-08-05</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-yang-metadata</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-yang-metadata</identifier>
+          <version>2016-08-05</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-yang-metadata</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>yang</identifier>
+          <version>2017-02-20</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:1</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>yang</identifier>
+          <version>2017-02-20</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:1</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-inet-types</identifier>
+          <version>2013-07-15</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-inet-types</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-inet-types</identifier>
+          <version>2013-07-15</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-inet-types</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-yang-types</identifier>
+          <version>2013-07-15</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-yang-types</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-yang-types</identifier>
+          <version>2013-07-15</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-yang-types</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-datastores</identifier>
+          <version>2017-08-17</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-datastores</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-datastores</identifier>
+          <version>2017-08-17</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-datastores</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-yang-library</identifier>
+          <version>2017-08-17</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-yang-library</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-yang-library</identifier>
+          <version>2017-08-17</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-yang-library</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-acm</identifier>
+          <version>2012-02-22</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-acm</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-acm</identifier>
+          <version>2012-02-22</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-acm</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf</identifier>
+          <version>2011-06-01</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:netconf:base:1.0</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf</identifier>
+          <version>2011-06-01</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:netconf:base:1.0</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-notifications</identifier>
+          <version>2012-02-06</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-notifications</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-notifications</identifier>
+          <version>2012-02-06</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-notifications</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>notifications</identifier>
+          <version>2008-07-14</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:netconf:notification:1.0</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>notifications</identifier>
+          <version>2008-07-14</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:netconf:notification:1.0</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>nc-notifications</identifier>
+          <version>2008-07-14</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:netmod:notification</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>nc-notifications</identifier>
+          <version>2008-07-14</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:netmod:notification</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>turing-machine</identifier>
+          <version>2013-12-27</version>
+          <format>yang</format>
+          <namespace>http://example.net/turing-machine</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>turing-machine</identifier>
+          <version>2013-12-27</version>
+          <format>yin</format>
+          <namespace>http://example.net/turing-machine</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-interfaces</identifier>
+          <version>2014-05-08</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-interfaces</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-interfaces</identifier>
+          <version>2014-05-08</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-interfaces</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>iana-if-type</identifier>
+          <version>2014-05-08</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:iana-if-type</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>iana-if-type</identifier>
+          <version>2014-05-08</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:iana-if-type</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-ip</identifier>
+          <version>2014-06-16</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-ip</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-ip</identifier>
+          <version>2014-06-16</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-ip</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-x509-cert-to-name</identifier>
+          <version>2014-12-10</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-x509-cert-to-name</identifier>
+          <version>2014-12-10</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-keystore</identifier>
+          <version>2016-10-31</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-keystore</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-keystore</identifier>
+          <version>2016-10-31</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-keystore</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-ssh-server</identifier>
+          <version>2016-11-02</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-ssh-server</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-ssh-server</identifier>
+          <version>2016-11-02</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-ssh-server</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-tls-server</identifier>
+          <version>2016-11-02</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-tls-server</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-tls-server</identifier>
+          <version>2016-11-02</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-tls-server</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-server</identifier>
+          <version>2016-11-02</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-server</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-server</identifier>
+          <version>2016-11-02</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-server</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>iana-crypt-hash</identifier>
+          <version>2014-08-06</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:iana-crypt-hash</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>iana-crypt-hash</identifier>
+          <version>2014-08-06</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:iana-crypt-hash</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-system</identifier>
+          <version>2014-08-06</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-system</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-system</identifier>
+          <version>2014-08-06</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-system</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-monitoring</identifier>
+          <version>2010-10-04</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-monitoring</identifier>
+          <version>2010-10-04</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-with-defaults</identifier>
+          <version>2011-06-01</version>
+          <format>yang</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults</namespace>
+          <location>NETCONF</location>
+        </schema>
+        <schema>
+          <identifier>ietf-netconf-with-defaults</identifier>
+          <version>2011-06-01</version>
+          <format>yin</format>
+          <namespace>urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults</namespace>
+          <location>NETCONF</location>
+        </schema>
+      </schemas>
+    </netconf-state>
+  </data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/schema2.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/schema2.xml
new file mode 100644 (file)
index 0000000..ae0f4f6
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rpc-reply message-id="102" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+<data>
+    <netconf-state xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+      <schemas>
+      <schema>
+          <identifier>bar</identifier>
+          <version>2008-06-01</version>
+          <format>yang</format>
+          <namespace>http://example.com/bar</namespace>
+          <location>NETCONF</location>
+        </schema>
+     </schemas>
+    </netconf-state>
+  </data>
+</rpc-reply>
+]]>]]>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/schema3.xml b/vnfs/TestVNF/netconftemplates/netconftemplates/schema3.xml
new file mode 100644 (file)
index 0000000..b288276
--- /dev/null
@@ -0,0 +1,197 @@
+<rpc-reply message-id="102"
+           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+           <data
+           xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+module toaster {
+
+    namespace "http://netconfcentral.org/ns/toaster";
+
+    prefix "toast";
+
+    organization
+        "Netconf Central";
+
+    contact
+        "Andy Bierman <andy@netconfcentral.org>";
+
+    description
+        "YANG version of the TOASTER-MIB.";
+
+
+    revision 2009-11-20 {
+        description "Toaster module in progress.";
+    }
+
+    identity toast-type {
+        description
+          "Base for all bread types supported by the toaster.
+           New bread types not listed here nay be added in the
+           future.";
+    }
+
+    identity white-bread {
+        description
+          "White bread.";
+        base toast:toast-type;
+    }
+
+    identity wheat-bread {
+        description
+          "Wheat bread.";
+        base toast-type;
+    }
+
+    identity wonder-bread {
+        description
+          "Wonder bread.";
+        base toast-type;
+    }
+
+    identity frozen-waffle {
+        description
+          "Frozen waffle.";
+        base toast-type;
+    }
+
+    identity frozen-bagel {
+        description
+          "Frozen bagel.";
+        base toast-type;
+    }
+
+    identity hash-brown {
+        description
+          "Hash browned potatos.";
+        base toast-type;
+    }
+
+    typedef DisplayString {
+        description
+          "YANG version of the SMIv2 DisplayString TEXTUAL-CONVENTION.";
+        reference "RFC 2579, section 2.";
+        type string {
+            length "0 .. 255";
+        }
+    }
+
+    container toaster {
+        presence
+          "Indicates the toaster service is available";
+
+        description
+          "Top-level container for all toaster database objects.";
+
+        leaf toasterManufacturer {
+            type DisplayString;
+            config false;
+            mandatory true;
+            description
+              "The name of the toaster's manufacturer. For instance,
+                Microsoft Toaster.";
+        }
+
+        leaf toasterModelNumber {
+            type DisplayString;
+            config false;
+            mandatory true;
+            description
+              "The name of the toaster's model. For instance,
+               Radiant Automatic.";
+        }
+
+        leaf toasterStatus {
+            type enumeration {
+                enum up {
+                  value 1;
+                  description
+                    "The toaster knob position is up.
+                      No toast is being made now.";
+                }
+                enum down {
+                  value 2;
+                  description
+                    "The toaster knob position is down.
+                      Toast is being made now.";
+
+                }
+            }
+            config false;
+            mandatory true;
+            description
+              "This variable indicates the current state of
+               the toaster.";
+        }
+    }
+
+    rpc make-toast {
+        description
+          "Make some toast.
+           The toastDone notification will be sent when
+           the toast is finished.
+           An 'in-use' error will be returned if toast
+           is already being made.
+           A 'resource-denied' error will be returned
+           if the toaster service is disabled.";
+        input {
+            leaf toasterDoneness {
+                type uint32 {
+                    range "1 .. 10";
+                }
+                default 5;
+                description
+                  "This variable controls how well-done is the
+                   ensuing toast. It should be on a scale of 1 to 10.
+                   Toast made at 10 generally is considered unfit
+                   for human consumption; toast made at 1 is warmed
+                   lightly.";
+            }
+            leaf toasterToastType {
+                type identityref {
+                    base toast:toast-type;
+                }
+                default toast:wheat-bread;
+                description
+                  "This variable informs the toaster of the type of
+                   material that is being toasted. The toaster
+                   uses this information, combined with
+                   toasterDoneness, to compute for how
+                   long the material must be toasted to achieve
+                   the required doneness.";
+            }
+        }
+    }
+
+    rpc cancel-toast {
+        description
+          "Stop making toast, if any is being made.
+           A 'resource-denied' error will be returned
+           if the toaster service is disabled.";
+    }
+
+    notification toastDone {
+        description
+          "Indicates that the toast in progress has completed.";
+
+        leaf toastStatus {
+           description
+             "Indicates the final toast status";
+           type enumeration {
+               enum done {
+                  description
+                    "The toast is done.";
+               }
+               enum cancelled {
+                  description
+                    "The toast was cancelled.";
+               }
+               enum error {
+                  description
+                    "The toaster service was disabled or
+                     the toaster is broken.";
+               }
+            }
+        }
+    }
+}
+ </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/send-event-schema.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/send-event-schema.yang
new file mode 100644 (file)
index 0000000..ffc5b6d
--- /dev/null
@@ -0,0 +1,19 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="<MID>">
+  <data xmlns="http://example.net/send-event-method/1.0">
+       rpc send-event {
+         description
+           "The &lt;send-event&gt; operation takes in a content in JSON format and sends the entire content to the specified target address.";
+               
+               container config {
+             leaf target-name {
+                 type string;
+                 description "name of the target to which the content is to be sent";
+             }
+         }
+             leaf content {
+               type string;
+               description "JSON string to be sent";
+             }
+       }
+       </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/send-event/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/send-event/NA/response.groovy
new file mode 100644 (file)
index 0000000..dbd1c0a
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+import com.ericsson.testvnf.server.models.RpcData;
+import groovy.sql.Sql;
+import groovy.util.XmlParser
+import java.util.logging.Logger;
+Logger logger = Logger.getLogger("")
+
+println "send-event!"
+def RpcData data = binding.getVariable("RpcData")
+result = "ignore"
+try{
+       def operationsData = new XmlParser().parseText(data.getOperationTagContent())
+       println "operations data::::" + operationsData
+       
+       def targetName
+       if (!operationsData.config.'target-name'.isEmpty()){
+               targetName = operationsData.config.'target-name'.text()
+               println "target-name ::::" + operationsData.config.'target-name'.text()
+
+               logger.info("in the groovy file. going to open a database session.")
+               def db = [url: "jdbc:mariadb://localhost:3306/netconf_db?useSSL=false",
+                                 user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+       //      def db = [url: "jdbc:mariadb://mariadb:3306/netconf_db?useSSL=false",
+       //                user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+               def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
+               println "DB connection ready"
+               logger.info("DB connection ready")
+               def metadata = sql.connection.getMetaData()
+               def tables = metadata.getTables(null, null, "AddressTable", null)
+               def targetURL = ""
+               if (!tables.next()) {
+                       logger.info("table not found");
+                       println "table not found"
+                       sql.execute("CREATE TABLE AddressTable (Name varchar(255), HTTPAddress varchar(255), PRIMARY KEY (Name))")
+               }else{
+                       def query = "select HTTPAddress from AddressTable where Name=\"".concat(targetName).concat("\"")
+                       println "query" + query
+                       logger.info(query)
+                       sql.eachRow(query, { res ->
+                               println "sending JSON data to "+res.HTTPAddress
+                               targetURL = res.HTTPAddress
+                       })
+               }
+               println "targetURL:"+targetURL
+               logger.info(targetURL)
+               if(targetURL!="") {
+                       def post = new URL(targetURL).openConnection();
+                       def message = operationsData.content.text()
+                       post.setRequestMethod("POST")
+                       post.setDoOutput(true)
+                       post.setRequestProperty("Content-Type", "application/json")
+                       post.getOutputStream().write(message.getBytes("UTF-8"));
+                       def postRC = post.getResponseCode();
+                       println(postRC);
+                       if(postRC.equals(200)) {
+                               println(post.getInputStream().getText());
+                               result = "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
+                       }
+               }else {
+                       println "No url found in database.."
+                       logger.info("no url found in database")
+                       result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">No url found in database</error-message></rpc-error></rpc-reply>"
+               }
+       } else{
+               logger.info("targetName not found");
+               println("targetName not found")
+               result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">No target name in request</error-message></rpc-error></rpc-reply>"
+       }
+}
+catch (Exception e)
+{
+ e.printStackTrace();
+}
+
+return result;
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/send-models-schema.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/send-models-schema.yang
new file mode 100644 (file)
index 0000000..cb13b61
--- /dev/null
@@ -0,0 +1,19 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="<MID>">
+  <data xmlns="http://example.net/send-models-method/1.0">
+       rpc send-models {
+         description
+           "The &lt;send-models&gt; operation takes in a content in JSON format and sends the entire content to the specified target address.";
+               
+               container config {
+             leaf target-name {
+                 type string;
+                 description "name of the target to which all the events are to be sent";
+             }
+         }
+             leaf content {
+               type string;
+               description "JSON string to be sent, which contains all the events to be sent";
+             }
+       }
+       </data>
+</rpc-reply>
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/send-models/NA/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/send-models/NA/response.groovy
new file mode 100644 (file)
index 0000000..d45fea4
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+import com.ericsson.testvnf.server.models.RpcData;
+
+import java.util.concurrent.TimeUnit;
+import groovy.sql.Sql;
+import groovy.util.XmlParser
+import java.util.logging.Logger;
+import groovy.json.JsonSlurper 
+import groovy.json.JsonOutput 
+
+Logger logger = Logger.getLogger("")
+
+println "send-models!"
+def RpcData data = binding.getVariable("RpcData")
+Object connectionResetMap = binding.getVariable("connectionResetMap")
+println  "connectionResetMap:" + connectionResetMap.get(data.getTargetName())
+result = "ignore"
+try{
+       def operationsData = new XmlParser().parseText(data.getOperationTagContent())
+       println "operations data::::" + operationsData
+       
+       def targetName
+       if (!operationsData.config.'target-name'.isEmpty()){
+               targetName = operationsData.config.'target-name'.text()
+               println "target-name ::::" + operationsData.config.'target-name'.text()
+               
+               logger.info("in the groovy file. going to open a database session.")
+               def db = [url: "jdbc:mariadb://localhost:3306/netconf_db?useSSL=false",
+                                 user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+       //      def db = [url: "jdbc:mariadb://mariadb:3306/netconf_db?useSSL=false",
+       //                user: "root", password: "root", driver: 'org.mariadb.jdbc.Driver']
+               def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
+               println "DB connection ready"
+               logger.info("DB connection ready")
+               def metadata = sql.connection.getMetaData()
+               def tables = metadata.getTables(null, null, "AddressTable", null)
+               def targetURL = ""
+               if (!tables.next()) {
+                       logger.info("table not found");
+                       println "table not found"
+                       sql.execute("CREATE TABLE AddressTable (Name varchar(255), HTTPAddress varchar(255), PRIMARY KEY (Name))")
+               }else{
+                       def query = "select HTTPAddress from AddressTable where Name=\"".concat(targetName).concat("\"")
+                       println "query" + query
+                       logger.info(query)
+                       sql.eachRow(query, { res ->
+                               println "sending JSON data to "+res.HTTPAddress
+                               targetURL = res.HTTPAddress
+                       })
+               }
+               println "targetURL:"+targetURL
+               logger.info(targetURL)
+               if(targetURL!="") {
+                       def url = url = new URL(targetURL)
+                       
+                       def message = operationsData.content.text()
+                       def jsonSlurper = new JsonSlurper()
+                       Object jsonData = jsonSlurper.parseText(message)
+                       for (i=0; i<jsonData.size(); i++){
+                               def post = url.openConnection();
+                               post.setRequestMethod("POST")
+                               post.setDoOutput(true)
+                               post.setRequestProperty("Content-Type", "application/json")
+                               
+                               println  "connectionResetMap:" + connectionResetMap.get(data.getTargetName())
+                               if (connectionResetMap.get(data.getTargetName())){
+                                       println "ConfigUpdate received. Sending a final event."
+                                       post.getOutputStream().write('{"event":{"commonEventHeader":{"startEpochMicrosec":1.53456715899E+12,"sourceId":"mmisVnfName","sequence":1910,"eventId":"ManagedElement=1","domain":"other","lastEpochMicrosec":1.53805815899E+12,"eventName":"PM_ManagedElement=1","internalHeaderFields":{"collectorTimeStamp":"Thu, 09 27 2018 02:22:48 GMT"},"sourceName":"000.111.222.333:4002","priority":"Low","version":2,"reportingEntityName":"ManagedElement=1"},"otherField":{"nameValuePairs":[{"name":"StartTime","value":"2018-1-26 8:49:50"},{"name":"WEB04NY_tej","value":"406"}],"otherFieldVersion":2}}}'.getBytes("UTF-8"))
+                                       def postRC = post.getResponseCode();
+                                       println(postRC);
+                                       if(postRC.equals(200)) {
+                                               println(post.getInputStream().getText());
+                                               result = "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
+                                       } else{
+                                               println "Final event not accepted. Respnse code "+ postRC+ " received."
+                                       }
+                                       break
+                               }
+                               
+                               def eventMessage = JsonOutput.toJson(jsonData[i])
+                               println "sending event " + i + ":" + eventMessage
+                               post.getOutputStream().write(eventMessage.getBytes("UTF-8"));
+                               def postRC = post.getResponseCode();
+                               println(postRC);
+                               if(postRC.equals(200)) {
+                                       println(post.getInputStream().getText());
+                                       result = "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
+                               } else{
+                                       println "Event not accepted. Response code "+ postRC+ " received."
+                               }
+                               if(i==jsonData.size()-1){
+                                       i=-1
+                               }
+                               
+                               println "sleeping for "+Long.valueOf(data.getTimeDelayForSendingEvents())+" milliseconds.."
+                               sleep(Long.valueOf(data.getTimeDelayForSendingEvents()))
+                               
+                       }
+               }else {
+                       println "No url found in database.."
+                       logger.info("no url found in database")
+                       result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">No url found in database</error-message></rpc-error></rpc-reply>"
+               }
+       } else{
+               logger.info("targetName not found");
+               println("targetName not found")
+               result = "<rpc-reply message-id=\\\"<MID>\\\" xmlns=\\\"urn:ietf:params:xml:ns:netconf:base:1.0\\\"> <rpc-error><error-type>application</error-type><error-message xml:lang=\"en\">No target name in request</error-message></rpc-error></rpc-reply>"
+       }
+}
+catch (Exception e)
+{
+ e.printStackTrace();
+}
+return result;
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/server-config.properties b/vnfs/TestVNF/netconftemplates/netconftemplates/server-config.properties
new file mode 100644 (file)
index 0000000..a88f5f7
--- /dev/null
@@ -0,0 +1,2 @@
+host = 0.0.0.0
+port = 2052
\ No newline at end of file
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/turing-machine@2013-12-27.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/turing-machine@2013-12-27.yang
new file mode 100644 (file)
index 0000000..2a5a94f
--- /dev/null
@@ -0,0 +1,267 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module turing-machine {
+  namespace "http://example.net/turing-machine";
+  prefix tm;
+
+  description
+    "Data model for the Turing Machine.";
+
+  revision 2013-12-27 {
+    description
+      "Initial revision.";
+  }
+
+  typedef tape-symbol {
+    type string {
+      length "0..1";
+    }
+    description
+      "Type of symbols appearing in tape cells.
+
+       A blank is represented as an empty string where necessary.";
+  }
+
+  typedef cell-index {
+    type int64;
+    description
+      "Type for indexing tape cells.";
+  }
+
+  typedef state-index {
+    type uint16;
+    description
+      "Type for indexing states of the control unit.";
+  }
+
+  typedef head-dir {
+    type enumeration {
+      enum "left";
+      enum "right";
+    }
+    default "right";
+    description
+      "Possible directions for moving the read/write head, one cell
+       to the left or right (default).";
+  }
+
+  grouping tape-cells {
+    description
+      "The tape of the Turing Machine is represented as a sparse
+       array.";
+    list cell {
+      key "coord";
+      description
+        "List of non-blank cells.";
+      leaf coord {
+        type cell-index;
+        description
+          "Coordinate (index) of the tape cell.";
+      }
+
+      leaf symbol {
+        type tape-symbol {
+          length "1";
+        }
+        description
+          "Symbol appearing in the tape cell.
+
+           Blank (empty string) is not allowed here because the
+           'cell' list only contains non-blank cells.";
+      }
+    }
+  }
+
+  container turing-machine {
+    description
+      "State data and configuration of a Turing Machine.";
+    leaf state {
+      type state-index;
+      config false;
+      mandatory true;
+      description
+        "Current state of the control unit.
+
+         The initial state is 0.";
+    }
+
+    leaf head-position {
+      type cell-index;
+      config false;
+      mandatory true;
+      description
+        "Position of tape read/write head.";
+    }
+
+    container tape {
+      config false;
+      description
+        "The contents of the tape.";
+      uses tape-cells;
+    }
+
+    container transition-function {
+      description
+        "The Turing Machine is configured by specifying the
+         transition function.";
+      list delta {
+        key "label";
+        unique "input/state input/symbol";
+        description
+          "The list of transition rules.";
+        leaf label {
+          type string;
+          description
+            "An arbitrary label of the transition rule.";
+        }
+
+        container input {
+          description
+            "Input parameters (arguments) of the transition rule.";
+          leaf state {
+            type state-index;
+            mandatory true;
+            description
+              "Current state of the control unit.";
+          }
+
+          leaf symbol {
+            type tape-symbol;
+            mandatory true;
+            description
+              "Symbol read from the tape cell.";
+          }
+        }
+
+        container output {
+          description
+            "Output values of the transition rule.";
+          leaf state {
+            type state-index;
+            description
+              "New state of the control unit. If this leaf is not
+               present, the state doesn't change.";
+          }
+
+          leaf symbol {
+            type tape-symbol;
+            description
+              "Symbol to be written to the tape cell. If this leaf is
+               not present, the symbol doesn't change.";
+          }
+
+          leaf head-move {
+            type head-dir;
+            description
+              "Move the head one cell to the left or right";
+          }
+        }
+      }
+    }
+  }
+
+  rpc initialize {
+    description
+      "Initialize the Turing Machine as follows:
+
+       1. Put the control unit into the initial state (0).
+
+       2. Move the read/write head to the tape cell with coordinate
+          zero.
+
+       3. Write the string from the 'tape-content' input parameter to
+          the tape, character by character, starting at cell 0. The
+          tape is othewise empty.";
+    input {
+      leaf tape-content {
+        type string;
+        default "";
+        description
+          "The string with which the tape shall be initialized. The
+           leftmost symbol will be at tape coordinate 0.";
+      }
+    }
+  }
+
+  rpc run {
+    description
+      "Start the Turing Machine operation.";
+  }
+
+  rpc run-until {
+    description
+      "Start the Turing Machine operation and let it run until it is halted
+       or ALL the defined breakpoint conditions are satisfied.";
+    input {
+      leaf state {
+        type state-index;
+        description
+          "What state the control unit has to be at for the execution to be paused.";
+      }
+
+      leaf head-position {
+        type cell-index;
+        description
+          "Position of tape read/write head for which the breakpoint applies.";
+      }
+
+      container tape {
+        description
+          "What content the tape has to have for the breakpoint to apply.";
+        uses tape-cells;
+      }
+    }
+
+    output {
+      leaf step-count {
+        type uint64;
+        description
+          "The number of steps executed since the last 'run-until' call.";
+      }
+
+      leaf halted {
+        type boolean;
+        description
+          "'True' if the Turing machine is halted, 'false' if it is only paused.";
+      }
+    }
+  }
+
+  notification halted {
+    description
+      "The Turing Machine has halted. This means that there is no
+       transition rule for the current state and tape symbol.";
+    leaf state {
+      type state-index;
+      mandatory true;
+      description
+        "The state of the control unit in which the machine has
+         halted.";
+    }
+  }
+
+  notification paused {
+    description
+      "The Turing machine has reached a breakpoint and was paused.";
+    leaf state {
+      type state-index;
+      mandatory true;
+      description
+        "State of the control unit in which the machine was paused.";
+    }
+
+    leaf head-position {
+      type cell-index;
+      mandatory true;
+      description
+        "Position of tape read/write head when the machine was paused.";
+    }
+
+    container tape {
+      description
+        "Content of the tape when the machine was paused.";
+      uses tape-cells;
+    }
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/turing-machine@2013-12-27.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/turing-machine@2013-12-27.yin
new file mode 100644 (file)
index 0000000..7654999
--- /dev/null
@@ -0,0 +1,281 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="turing-machine"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:tm="http://example.net/turing-machine"&gt;
+  &lt;namespace uri="http://example.net/turing-machine"/&gt;
+  &lt;prefix value="tm"/&gt;
+  &lt;description&gt;
+    &lt;text&gt;Data model for the Turing Machine.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2013-12-27"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/revision&gt;
+  &lt;typedef name="tape-symbol"&gt;
+    &lt;type name="string"&gt;
+      &lt;length value="0..1"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;Type of symbols appearing in tape cells.
+
+A blank is represented as an empty string where necessary.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="cell-index"&gt;
+    &lt;type name="int64"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Type for indexing tape cells.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="state-index"&gt;
+    &lt;type name="uint16"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Type for indexing states of the control unit.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;typedef name="head-dir"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="left"/&gt;
+      &lt;enum name="right"/&gt;
+    &lt;/type&gt;
+    &lt;default value="right"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;Possible directions for moving the read/write head, one cell
+to the left or right (default).&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/typedef&gt;
+  &lt;grouping name="tape-cells"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The tape of the Turing Machine is represented as a sparse
+array.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;list name="cell"&gt;
+      &lt;key value="coord"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;List of non-blank cells.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;leaf name="coord"&gt;
+        &lt;type name="cell-index"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Coordinate (index) of the tape cell.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="symbol"&gt;
+        &lt;type name="tape-symbol"&gt;
+          &lt;length value="1"/&gt;
+        &lt;/type&gt;
+        &lt;description&gt;
+          &lt;text&gt;Symbol appearing in the tape cell.
+
+Blank (empty string) is not allowed here because the
+'cell' list only contains non-blank cells.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/list&gt;
+  &lt;/grouping&gt;
+  &lt;container name="turing-machine"&gt;
+    &lt;description&gt;
+      &lt;text&gt;State data and configuration of a Turing Machine.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="state"&gt;
+      &lt;type name="state-index"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Current state of the control unit.
+
+The initial state is 0.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="head-position"&gt;
+      &lt;type name="cell-index"/&gt;
+      &lt;config value="false"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Position of tape read/write head.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;container name="tape"&gt;
+      &lt;config value="false"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The contents of the tape.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;uses name="tape-cells"/&gt;
+    &lt;/container&gt;
+    &lt;container name="transition-function"&gt;
+      &lt;description&gt;
+        &lt;text&gt;The Turing Machine is configured by specifying the
+transition function.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;list name="delta"&gt;
+        &lt;key value="label"/&gt;
+        &lt;unique tag="input/state input/symbol"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The list of transition rules.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;leaf name="label"&gt;
+          &lt;type name="string"/&gt;
+          &lt;description&gt;
+            &lt;text&gt;An arbitrary label of the transition rule.&lt;/text&gt;
+          &lt;/description&gt;
+        &lt;/leaf&gt;
+        &lt;container name="input"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Input parameters (arguments) of the transition rule.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="state"&gt;
+            &lt;type name="state-index"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Current state of the control unit.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="symbol"&gt;
+            &lt;type name="tape-symbol"/&gt;
+            &lt;mandatory value="true"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Symbol read from the tape cell.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/container&gt;
+        &lt;container name="output"&gt;
+          &lt;description&gt;
+            &lt;text&gt;Output values of the transition rule.&lt;/text&gt;
+          &lt;/description&gt;
+          &lt;leaf name="state"&gt;
+            &lt;type name="state-index"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;New state of the control unit. If this leaf is not
+present, the state doesn't change.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="symbol"&gt;
+            &lt;type name="tape-symbol"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Symbol to be written to the tape cell. If this leaf is
+not present, the symbol doesn't change.&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+          &lt;leaf name="head-move"&gt;
+            &lt;type name="head-dir"/&gt;
+            &lt;description&gt;
+              &lt;text&gt;Move the head one cell to the left or right&lt;/text&gt;
+            &lt;/description&gt;
+          &lt;/leaf&gt;
+        &lt;/container&gt;
+      &lt;/list&gt;
+    &lt;/container&gt;
+  &lt;/container&gt;
+  &lt;rpc name="initialize"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initialize the Turing Machine as follows:
+
+1. Put the control unit into the initial state (0).
+
+2. Move the read/write head to the tape cell with coordinate
+   zero.
+
+3. Write the string from the 'tape-content' input parameter to
+   the tape, character by character, starting at cell 0. The
+   tape is othewise empty.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="tape-content"&gt;
+        &lt;type name="string"/&gt;
+        &lt;default value=""/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The string with which the tape shall be initialized. The
+leftmost symbol will be at tape coordinate 0.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/input&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="run"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Start the Turing Machine operation.&lt;/text&gt;
+    &lt;/description&gt;
+  &lt;/rpc&gt;
+  &lt;rpc name="run-until"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Start the Turing Machine operation and let it run until it is halted
+or ALL the defined breakpoint conditions are satisfied.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;input&gt;
+      &lt;leaf name="state"&gt;
+        &lt;type name="state-index"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;What state the control unit has to be at for the execution to be paused.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="head-position"&gt;
+        &lt;type name="cell-index"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;Position of tape read/write head for which the breakpoint applies.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;container name="tape"&gt;
+        &lt;description&gt;
+          &lt;text&gt;What content the tape has to have for the breakpoint to apply.&lt;/text&gt;
+        &lt;/description&gt;
+        &lt;uses name="tape-cells"/&gt;
+      &lt;/container&gt;
+    &lt;/input&gt;
+    &lt;output&gt;
+      &lt;leaf name="step-count"&gt;
+        &lt;type name="uint64"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;The number of steps executed since the last 'run-until' call.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+      &lt;leaf name="halted"&gt;
+        &lt;type name="boolean"/&gt;
+        &lt;description&gt;
+          &lt;text&gt;'True' if the Turing machine is halted, 'false' if it is only paused.&lt;/text&gt;
+        &lt;/description&gt;
+      &lt;/leaf&gt;
+    &lt;/output&gt;
+  &lt;/rpc&gt;
+  &lt;notification name="halted"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The Turing Machine has halted. This means that there is no
+transition rule for the current state and tape symbol.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="state"&gt;
+      &lt;type name="state-index"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;The state of the control unit in which the machine has
+halted.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+  &lt;/notification&gt;
+  &lt;notification name="paused"&gt;
+    &lt;description&gt;
+      &lt;text&gt;The Turing machine has reached a breakpoint and was paused.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;leaf name="state"&gt;
+      &lt;type name="state-index"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;State of the control unit in which the machine was paused.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;leaf name="head-position"&gt;
+      &lt;type name="cell-index"/&gt;
+      &lt;mandatory value="true"/&gt;
+      &lt;description&gt;
+        &lt;text&gt;Position of tape read/write head when the machine was paused.&lt;/text&gt;
+      &lt;/description&gt;
+    &lt;/leaf&gt;
+    &lt;container name="tape"&gt;
+      &lt;description&gt;
+        &lt;text&gt;Content of the tape when the machine was paused.&lt;/text&gt;
+      &lt;/description&gt;
+      &lt;uses name="tape-cells"/&gt;
+    &lt;/container&gt;
+  &lt;/notification&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/validate/candidate/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/validate/candidate/response.groovy
new file mode 100644 (file)
index 0000000..2529739
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "validate-candidate datastore!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/validate/running/response.groovy b/vnfs/TestVNF/netconftemplates/netconftemplates/validate/running/response.groovy
new file mode 100644 (file)
index 0000000..d9b82e0
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+println "validate-running datastore!"
+return "<rpc-reply message-id=\"<MID>\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"> <ok/> </rpc-reply>";
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/yang@2017-02-20.yang b/vnfs/TestVNF/netconftemplates/netconftemplates/yang@2017-02-20.yang
new file mode 100644 (file)
index 0000000..0d3bec9
--- /dev/null
@@ -0,0 +1,78 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module yang {
+  namespace "urn:ietf:params:xml:ns:yang:1";
+  prefix yang;
+
+  import ietf-yang-metadata {
+    prefix md;
+    revision-date 2016-08-05;
+  }
+
+  organization
+    "libyang";
+  contact
+    "Web:    &lt;https://github.com/CESNET/libyang/&gt;
+     Author: Radek Krejci &lt;rkrejci@cesnet.cz&gt;";
+  description
+    "This is a kind of fake model with no data, typedefs or anything
+     else. libyang uses this module to implement various YANG attributes
+     defined in RFC 6020.";
+
+  revision 2017-02-20 {
+    description
+      "Added metadata for NETCONF's edit-config manipulation with ordered
+       lists and leaf-lists.";
+    reference
+      "RFC 7950: The YANG 1.1 Data Modeling Language";
+  }
+  revision 2016-02-11 {
+    description
+      "Initial revision";
+    reference
+      "RFC 6020: YANG - A Data Modeling Language for
+       the Network Configuration Protocol (NETCONF)";
+  }
+
+  md:annotation "insert" {
+    type enumeration {
+      enum "first";
+      enum "last";
+      enum "before";
+      enum "after";
+    }
+    description
+      "In user ordered leaf-list, the attribute can be used to control
+       where in the leaf-list the entry is inserted. It can be used during
+       the NETCONF &lt;edit-config&gt; \"create\" operations to insert a new list or
+       leaf-list entry, or during \"merge\" or \"replace\" operations to insert
+       a new list or leaf-list entry or move an existing one.
+
+       If the value is \"before\" or \"after\", the \"value\"/\"key\" attribute
+       MUST also be used to specify an existing entry in the list or leaf-list.
+
+       If no \"insert\" attribute is present in the \"create\" operation, it
+       defaults to \"last\".";
+    reference
+      "RFC7950 section 7.8.6. and section 7.7.9.";
+  }
+  md:annotation "value" {
+    type string;
+    description
+      "In user ordered leaf-list, the attribute must be used if the attribute
+       insert is used and specifies before/after which existing instance the
+       new instance should be inserted.";
+    reference
+      "RFC7950 section 7.7.9.";
+  }
+  md:annotation "key" {
+    type string;
+    description
+      "In user ordered list, the attribute must be used if the attribute
+       insert is used and specifies before/after which existing instance the
+       new instance should be inserted.";
+    reference
+      "RFC7950 section 7.8.6.";
+  }
+}
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/netconftemplates/netconftemplates/yang@2017-02-20.yin b/vnfs/TestVNF/netconftemplates/netconftemplates/yang@2017-02-20.yin
new file mode 100644 (file)
index 0000000..7a4d584
--- /dev/null
@@ -0,0 +1,91 @@
+<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-1">
+  <data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;module name="yang"
+        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
+        xmlns:yang="urn:ietf:params:xml:ns:yang:1"
+        xmlns:md="urn:ietf:params:xml:ns:yang:ietf-yang-metadata"&gt;
+  &lt;namespace uri="urn:ietf:params:xml:ns:yang:1"/&gt;
+  &lt;prefix value="yang"/&gt;
+  &lt;import module="ietf-yang-metadata"&gt;
+    &lt;prefix value="md"/&gt;
+    &lt;revision-date date="2016-08-05"/&gt;
+  &lt;/import&gt;
+  &lt;organization&gt;
+    &lt;text&gt;libyang&lt;/text&gt;
+  &lt;/organization&gt;
+  &lt;contact&gt;
+    &lt;text&gt;Web:    &amp;lt;https://github.com/CESNET/libyang/&amp;gt;
+Author: Radek Krejci &amp;lt;rkrejci@cesnet.cz&amp;gt;&lt;/text&gt;
+  &lt;/contact&gt;
+  &lt;description&gt;
+    &lt;text&gt;This is a kind of fake model with no data, typedefs or anything
+else. libyang uses this module to implement various YANG attributes
+defined in RFC 6020.&lt;/text&gt;
+  &lt;/description&gt;
+  &lt;revision date="2017-02-20"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Added metadata for NETCONF's edit-config manipulation with ordered
+lists and leaf-lists.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 7950: The YANG 1.1 Data Modeling Language&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;revision date="2016-02-11"&gt;
+    &lt;description&gt;
+      &lt;text&gt;Initial revision&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC 6020: YANG - A Data Modeling Language for
+the Network Configuration Protocol (NETCONF)&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/revision&gt;
+  &lt;md:annotation name="insert"&gt;
+    &lt;type name="enumeration"&gt;
+      &lt;enum name="first"/&gt;
+      &lt;enum name="last"/&gt;
+      &lt;enum name="before"/&gt;
+      &lt;enum name="after"/&gt;
+    &lt;/type&gt;
+    &lt;description&gt;
+      &lt;text&gt;In user ordered leaf-list, the attribute can be used to control
+where in the leaf-list the entry is inserted. It can be used during
+the NETCONF &amp;lt;edit-config&amp;gt; &amp;quot;create&amp;quot; operations to insert a new list or
+leaf-list entry, or during &amp;quot;merge&amp;quot; or &amp;quot;replace&amp;quot; operations to insert
+a new list or leaf-list entry or move an existing one.
+
+If the value is &amp;quot;before&amp;quot; or &amp;quot;after&amp;quot;, the &amp;quot;value&amp;quot;/&amp;quot;key&amp;quot; attribute
+MUST also be used to specify an existing entry in the list or leaf-list.
+
+If no &amp;quot;insert&amp;quot; attribute is present in the &amp;quot;create&amp;quot; operation, it
+defaults to &amp;quot;last&amp;quot;.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC7950 section 7.8.6. and section 7.7.9.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/md:annotation&gt;
+  &lt;md:annotation name="value"&gt;
+    &lt;type name="string"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;In user ordered leaf-list, the attribute must be used if the attribute
+insert is used and specifies before/after which existing instance the
+new instance should be inserted.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC7950 section 7.7.9.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/md:annotation&gt;
+  &lt;md:annotation name="key"&gt;
+    &lt;type name="string"/&gt;
+    &lt;description&gt;
+      &lt;text&gt;In user ordered list, the attribute must be used if the attribute
+insert is used and specifies before/after which existing instance the
+new instance should be inserted.&lt;/text&gt;
+    &lt;/description&gt;
+    &lt;reference&gt;
+      &lt;text&gt;RFC7950 section 7.8.6.&lt;/text&gt;
+    &lt;/reference&gt;
+  &lt;/md:annotation&gt;
+&lt;/module&gt;
+</data>
+</rpc-reply>
diff --git a/vnfs/TestVNF/sample rpc requests/R13_get_running.xml b/vnfs/TestVNF/sample rpc requests/R13_get_running.xml
new file mode 100644 (file)
index 0000000..24e8866
--- /dev/null
@@ -0,0 +1,10 @@
+<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="r13_get_running">
+  <get-config>
+    <source>
+      <running/>
+    </source>
+    <filter type="subtree">
+      <configure xmlns="urn:alcatel-lucent.com:sros:ns:yang:conf-r13"/>
+    </filter>
+  </get-config>
+</rpc>
diff --git a/vnfs/TestVNF/sample rpc requests/edit_config_sample_request_httpAddress.xml b/vnfs/TestVNF/sample rpc requests/edit_config_sample_request_httpAddress.xml
new file mode 100644 (file)
index 0000000..45f6e98
--- /dev/null
@@ -0,0 +1,12 @@
+<rpc message-id="1"
+     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <edit-config>
+    <target>
+      <running />
+    </target>
+    <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
+          <target-name>vesip</target-name>
+          <target-address>http://131.160.203.58:8080/eventListener/v5</target-address>
+    </config>
+  </edit-config>
+</rpc>
diff --git a/vnfs/TestVNF/sample rpc requests/get_schema_sample_request.xml b/vnfs/TestVNF/sample rpc requests/get_schema_sample_request.xml
new file mode 100644 (file)
index 0000000..f51e35c
--- /dev/null
@@ -0,0 +1,6 @@
+<rpc message-id="104" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+  <get-schema xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">
+      <identifier>send-models</identifier>
+      <version>1.0</version>
+  </get-schema>
+</rpc>
diff --git a/vnfs/TestVNF/sample rpc requests/send_event_sample_request.xml b/vnfs/TestVNF/sample rpc requests/send_event_sample_request.xml
new file mode 100644 (file)
index 0000000..8bd64ae
--- /dev/null
@@ -0,0 +1,39 @@
+<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-2">
+    <send-event xmlns="http://example.net/send-event-method/1.0">
+      <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
+            <target-name>eth5</target-name>
+      </config>
+  <content>
+    {
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.23456814897E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.53805814897E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:38 GMT"
+                       },
+                       "sourceName": "131.160.203.248:7af9d6a3-5269-4c45-9060-c6ac6f9f3153",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "350"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    }
+</content>
+</send-event>
+</rpc>
diff --git a/vnfs/TestVNF/sample rpc requests/send_models_sample_request.xml b/vnfs/TestVNF/sample rpc requests/send_models_sample_request.xml
new file mode 100644 (file)
index 0000000..9b34b85
--- /dev/null
@@ -0,0 +1,184 @@
+<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="m-2">
+    <send-models xmlns="http://example.net/send-models-method/1.0">
+      <config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
+            <target-name>vesip</target-name>
+      </config>
+  <content>
+    [{
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.51234513894E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.50234513894E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:28 GMT"
+                       },
+                       "sourceName": "131.160.203.4444:4002",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "15"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    },{
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.51234513894E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.50234513894E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:28 GMT"
+                       },
+                       "sourceName": "131.160.203.000:4002",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "150"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    },{
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.51234513894E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.51234513894E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:28 GMT"
+                       },
+                       "sourceName": "131.160.203.111:4002",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "250"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    }, {
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.52345614897E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.53805814897E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:38 GMT"
+                       },
+                       "sourceName": "131.160.203.222:4002",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "350"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    }, {
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.53456715899E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.53805815899E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:48 GMT"
+                       },
+                       "sourceName": "131.160.203.333:4002",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "450"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    },{
+       "event": {
+               "commonEventHeader": {
+                       "startEpochMicrosec": 1.51234513894E12,
+                       "sourceId": "mmisVnfName",
+                       "sequence": 1910,
+                       "eventId": "ManagedElement=1",
+                       "domain": "other",
+                       "lastEpochMicrosec": 1.50234513894E12,
+                       "eventName": "PM_ManagedElement=1",
+                       "internalHeaderFields": {
+                               "collectorTimeStamp": "Thu, 09 27 2018 02:22:28 GMT"
+                       },
+                       "sourceName": "131.160.203.5555:4002",
+                       "priority": "Low",
+                       "version": 2,
+                       "reportingEntityName": "ManagedElement=1"
+               },
+               "otherField": {
+                       "nameValuePairs": [{
+                               "name": "StartTime",
+                               "value": "2018-1-26 8:49:50"
+                       }, {
+                               "name": "WEB04NY_tej",
+                               "value": "205"
+                       }],
+                       "otherFieldVersion": 2
+               }
+       }
+    }]
+</content>
+</send-models>
+</rpc>
diff --git a/vnfs/TestVNF/sample rpc requests/test.xml b/vnfs/TestVNF/sample rpc requests/test.xml
new file mode 100644 (file)
index 0000000..55fbec6
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rpc message-id="terminateConnection" xmlns:netconf="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
+<close-session/>
+</rpc>