diff --git a/apps/l3vpn/BUCK b/apps/l3vpn/BUCK
index 3ab949f..4e6aaf3 100644
--- a/apps/l3vpn/BUCK
+++ b/apps/l3vpn/BUCK
@@ -1,19 +1,41 @@
-APPS = [
-  'org.onosproject.yang',
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//models/l3vpn:onos-models-l3vpn',
+    '//apps/config:onos-apps-config',
+    '//core/store/serializers:onos-core-serializers',
+    '//lib:onos-yang-model',
+    '//lib:onos-yang-runtime',
+    '//apps/yang:onos-apps-yang',
 ]
 
-BUNDLES = [
-  '//apps/l3vpn/yangmodel:onos-apps-l3vpn-yangmodel',
-  '//apps/l3vpn/netl3vpn:onos-apps-l3vpn-netl3vpn',
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+    '//utils/osgi:onlab-osgi-tests',
 ]
 
+APPS = [
+    'org.onosproject.yang',
+    'org.onosproject.yang-gui',
+    'org.onosproject.config',
+    'org.onosproject.restconf',
+    'org.onosproject.yms',
+    'org.onosproject.protocols.restconfserver',
+    'org.onosproject.netconf',
+    'org.onosproject.netconfsb',
+    'org.onosproject.models.l3vpn',
+]
+
+osgi_jar_with_tests(
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+)
+
 onos_app(
-  app_name = 'org.onosproject.l3vpn',
-  title = 'YANG L3VPN App',
-  category = 'Traffic Steering',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-  description = 'L3VPN YANG Application',
-  required_apps = APPS,
+    app_name = 'org.onosproject.l3vpn',
+    title = 'YANG L3VPN App',
+    category = 'Traffic Steering',
+    url = 'http://onosproject.org',
+    description = 'L3VPN YANG Application',
+    required_apps = APPS,
 )
 
diff --git a/apps/l3vpn/netl3vpn/BUCK b/apps/l3vpn/netl3vpn/BUCK
deleted file mode 100644
index 4028606..0000000
--- a/apps/l3vpn/netl3vpn/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//apps/l3vpn/yangmodel:onos-apps-l3vpn-yangmodel',
-  '//apps/config:onos-apps-config',
-  '//core/store/serializers:onos-core-serializers',
-  '//lib:onos-yang-model',
-  '//lib:onos-yang-runtime',
-  '//apps/yang:onos-apps-yang',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests(
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
diff --git a/apps/l3vpn/netl3vpn/pom.xml b/apps/l3vpn/netl3vpn/pom.xml
deleted file mode 100644
index 24f989f..0000000
--- a/apps/l3vpn/netl3vpn/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-app-l3vpn</artifactId>
-        <version>1.10.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-app-l3vpn-netl3vpn</artifactId>
-    <packaging>bundle</packaging>
-
-    <description>IETF L3VPN Service Model</description>
-
-    <properties>
-        <yang-tool-version>1.12.0-b7</yang-tool-version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onlab-junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-model</artifactId>
-            <version>${yang-tool-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-runtime</artifactId>
-            <version>${yang-tool-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-l3vpn-yangmodel</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-config</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-app-yang</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-    </dependencies>
-</project>
diff --git a/apps/l3vpn/pom.xml b/apps/l3vpn/pom.xml
deleted file mode 100644
index 3bfb833..0000000
--- a/apps/l3vpn/pom.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-apps</artifactId>
-        <version>1.10.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-app-l3vpn</artifactId>
-    <packaging>pom</packaging>
-
-    <modules>
-        <module>netl3vpn</module>
-        <module>yangmodel</module>
-    </modules>
-
-    <description>L3VPN YANG Application</description>
-</project>
-
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/AccessInfo.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/AccessInfo.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/AccessInfo.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/AccessInfo.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpDriverInfo.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpDriverInfo.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpDriverInfo.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpDriverInfo.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpInfo.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpInfo.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpInfo.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpInfo.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpModelIdLevel.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpModelIdLevel.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpModelIdLevel.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/BgpModelIdLevel.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/DeviceInfo.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/DeviceInfo.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/DeviceInfo.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/DeviceInfo.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/FullMeshVpnConfig.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/FullMeshVpnConfig.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/FullMeshVpnConfig.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/FullMeshVpnConfig.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/HubSpokeVpnConfig.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/HubSpokeVpnConfig.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/HubSpokeVpnConfig.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/HubSpokeVpnConfig.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/InterfaceInfo.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/InterfaceInfo.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/InterfaceInfo.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/InterfaceInfo.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnException.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnException.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnException.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnException.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnStore.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnStore.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnStore.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/NetL3VpnStore.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/RouteProtocol.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/RouteProtocol.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/RouteProtocol.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/RouteProtocol.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnConfig.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnConfig.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnConfig.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnConfig.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnInstance.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnInstance.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnInstance.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnInstance.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnSiteRole.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnSiteRole.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnSiteRole.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnSiteRole.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnType.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnType.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnType.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/VpnType.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/BgpConstructionUtil.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/BgpConstructionUtil.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/BgpConstructionUtil.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/BgpConstructionUtil.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/DistributedNetL3VpnStore.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/DistributedNetL3VpnStore.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/DistributedNetL3VpnStore.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/DistributedNetL3VpnStore.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/InsConstructionUtil.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/InsConstructionUtil.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/InsConstructionUtil.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/InsConstructionUtil.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/IntConstructionUtil.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/IntConstructionUtil.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/IntConstructionUtil.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/IntConstructionUtil.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/L3VpnModelRegistrator.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/L3VpnModelRegistrator.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/L3VpnModelRegistrator.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/L3VpnModelRegistrator.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnManager.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnManager.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnManager.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnManager.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnUtil.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnUtil.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnUtil.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/NetL3VpnUtil.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/package-info.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/package-info.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/package-info.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/impl/package-info.java
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/package-info.java b/apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/package-info.java
similarity index 100%
rename from apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/package-info.java
rename to apps/l3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/package-info.java
diff --git a/apps/l3vpn/yangmodel/BUCK b/apps/l3vpn/yangmodel/BUCK
deleted file mode 100644
index 386be7b..0000000
--- a/apps/l3vpn/yangmodel/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:onos-yang-model',
-]
-
-yang_osgi_jar(
-  deps = COMPILE_DEPS,
-  name = 'onos-apps-l3vpn-yangmodel',
-  srcs = glob(['src/main/**/*.yang']),
-  visibility = [
-    'PUBLIC'
-  ],
-)
\ No newline at end of file
diff --git a/apps/l3vpn/yangmodel/pom.xml b/apps/l3vpn/yangmodel/pom.xml
deleted file mode 100644
index 8fd8aed..0000000
--- a/apps/l3vpn/yangmodel/pom.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2017-present Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-app-l3vpn</artifactId>
-        <version>1.10.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-app-l3vpn-yangmodel</artifactId>
-    <packaging>bundle</packaging>
-
-    <description>IETF L3VPN YANG models</description>
-
-    <properties>
-        <yang-tool-version>1.12.0-b7</yang-tool-version>
-    </properties>
-
-    <dependencies>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-datamodel</artifactId>
-            <version>1.11</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-yang-model</artifactId>
-            <version>${yang-tool-version}</version>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <plugins>
-           <plugin>
-                <groupId>org.onosproject</groupId>
-                <artifactId>onos-yang-compiler-maven-plugin</artifactId>
-                <version>${yang-tool-version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>yang2java</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>add-source</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>add-source</goal>
-                        </goals>
-                        <configuration>
-                            <sources combine.children="append">
-                                <source>${project.build.directory}/generated-sources/</source>
-                            </sources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-
-
-    </build>
-</project>
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang
deleted file mode 100644
index 276a59f..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang
+++ /dev/null
@@ -1,723 +0,0 @@
-module ietf-bgp-l3vpn {
-  namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-l3vpn";
-  // replace with IANA namespace when assigned
-  prefix l3vpn ;
-
-  import ietf-network-instance {
-    prefix ni;
-    revision-date 2016-06-23;
-  }
-
-  import ietf-interfaces {
-    prefix if;
-  }
-
-// TODO: TBD for bgp-info
-//  import ietf-bgp {
-//    prefix bgp;
-//    revision-date 2016-06-21;
-//  }
-
-  organization
-     "IETF BGP Enabled Services WG";
-
-  contact
-     "BESS working group - bess@ietf.org";
-  description
-    "This YANG module defines a YANG data model to configure and
-     manage BGP Layer3 VPNs. It augments the IETF bgp yang model
-     and IETF network instance model to add L3VPN specific
-     configuration and operational knobs.
-
-
-     Terms and Acronyms
-
-     AF : Address Family
-
-     AS : Autonomous System
-
-     ASBR : Autonomous Systems Border Router
-
-     BGP (bgp) : Border Gateway Protocol
-
-     CE  : Customer Edge
-
-     IP (ip) : Internet Protocol
-
-     IPv4 (ipv4):Internet Protocol Version 4
-
-     IPv6 (ipv6): Internet Protocol Version 6
-
-     L3VPN: Layer 3 VPN
-
-     PE : Provider Edge
-
-     RT : Route Target
-
-     RD : Route Distinguisher
-
-     VPN : Virtual Private Network
-
-     VRF : Virtual Routing and Forwarding
-
-    ";
-
-  revision 2016-09-09 {
-    description
-      "Initial revision.";
-    reference
-      "RFC XXXX: A YANG Data Model for BGP L3VPN config management";
-  }
-
-  //RD
-  grouping route-distinguisher-params {
-    description "BGP route distinguisher";
-    container route-distinguisher {
-      description "Route distinguisher value as per RFC4364";
-        container config {
-          description
-            "Configuration parameters for route distinguisher";
-          leaf rd {
-            type string;
-            description "Route distinguisher value as per RFC4364";
-          }
-        }
-        container state {
-          config "false" ;
-          description
-            "State information for route distinguisher";
-          leaf rd {
-            type string;
-            description "Route distinguisher value";
-          }
-        }
-     }
-  }
-
-  //Label mode
-  typedef bgp-label-mode {
-    type enumeration {
-      enum per-ce {
-        description "Allocate labels per CE";
-      }
-      enum per-route {
-        description "Allocate labels per prefix";
-      }
-      enum per-vpn {
-        description "Allocate labels per VRF";
-      }
-    }
-    description "BGP label allocation mode";
-  }
-
-  //Fwding mode
-  typedef fwd-mode-type {
-    type enumeration {
-      enum mpls {
-        description "Forwarding mode mpls";
-      }
-    }
-    description
-      "Enable forwarding mode under ASBR facing interface";
-  }
-
-  grouping forwarding-mode {
-    description "Forwarding mode of interface for ASBR scenario";
-    container forwarding-mode {
-      description "Forwarding mode of interface for ASBR scenario";
-      container config {
-        description "Configuration of Forwarding mode";
-        leaf forwarding-mode {
-          type  fwd-mode-type;
-          description "Forwarding mode for this interface";
-        }
-      }
-      container state {
-        config "false";
-        description "State information of Forwarding mode";
-        leaf forwarding-mode {
-        type  fwd-mode-type;
-          description "Forwarding mode for this interface";
-        }
-      }
-    }
- }
-
-  grouping label-security {
-    description "Mpls label security for ASBR option B scenario";
-    container mpls-label-security {
-      description "MPLS label secruity";
-      container config {
-        description "Configuration parameters";
-        leaf rpf {
-          type boolean;
-          description "Enable MPLS label security rpf on interface";
-        }
-      }
-      container state {
-        config "false";
-        description "State information";
-        leaf rpf {
-          type boolean;
-          description "MPLS label security rpf on interface";
-        }
-      }
-    }
-  }
-
-
-  //per VPN instance table limit under BGP
-  grouping prefix-limit {
-    description
-       "The prefix limit command sets a limit on the maximum
-        number of prefixes supported in the existing VPN
-        instance, preventing the PE from importing excessive
-        VPN route prefixes.
-       ";
-
-    leaf prefix-limit-number {
-      type uint32 {
-         range "1..4294967295";
-      }
-      description
-             "Specifies the maximum number of prefixes supported in the
-              VPN instance IPv4 or IPv6 address family.";
-    }
-
-    choice prefix-limit-action {
-      description ".";
-      case enable-alert-percent {
-        leaf alert-percent-value {
-           type uint8 {
-             range "1..100";
-           }
-           description
-             "Specifies the proportion of the alarm threshold to the
-              maximum number of prefixes.";
-        }
-        leaf route-unchanged {
-           type boolean;
-           default "false";
-           description
-                 "Indicates that the routing table remains unchanged.
-                  By default, route-unchanged is not configured. When
-                  the number of prefixes in the routing table is
-                  greater than the value of the parameter number,
-                  routes are processed as follows:
-                  (1)If route-unchanged is configured, routes in the
-                     routing table remain unchanged.
-                  (2)If route-unchanged is not configured, all routes
-                     in the routing table are deleted and then
-                     re-added.";
-        }
-      }
-      case enable-simple-alert {
-        leaf simple-alert {
-          type boolean;
-          default "false";
-          description
-                 "Indicates that when the number of VPN route prefixes
-                  exceeds number, prefixes can still join the VPN
-                  routing table and alarms are displayed.";
-        }
-      }
-    }
-  }
-
-  grouping  vpn-pfx-limit {
-    description "Per VPN instance table limit under BGP";
-    container vpn-prefix-limit {
-      description "Prefix limit for this table";
-      container config {
-         description "Config parameters";
-         uses prefix-limit;
-      }
-      container state {
-         config "false";
-         description "State parameters";
-         uses prefix-limit;
-      }
-    }
-  }
-
-  grouping route-target-set {
-    description
-      "Extended community route-target set ";
-    list rts {
-      key "rt" ;
-      description
-         "List of route-targets" ;
-      leaf rt {
-        type string {
-          pattern '([0-9]+:[0-9]+)';
-        }
-        description "Route target extended community as per RFC4360";
-      }
-      leaf rt-type {
-        type enumeration {
-          enum import {
-            description "Route target is for import routes";
-          }
-          enum export {
-            description "Route target is for export routes";
-          }
-          enum both {
-            description
-              "Route target is for both import and export routes";
-          }
-        }
-        description "Route target type";
-      }
-    }
-    leaf route-policy {
-      type string;
-      description
-         "Reference to the policy containing set of routes.
-          TBD: leafref to policy entry in IETF policy model";
-    }
-  }
-
-  grouping import-from-gbl {
-    description "Import from global routing table";
-    leaf enable {
-      type boolean;
-        description "Enable";
-    }
-    leaf advertise-as-vpn {
-      type boolean;
-      description
-        "Advertise routes imported from global table as VPN routes";
-    }
-    leaf route-policy {
-      type string;
-      description "Route policy as filter for importing routes";
-    }
-
-    leaf bgp-valid-route {
-      type boolean;
-      description
-        "Enable all valid routes (including non-best paths) to be
-         candidate for import";
-    }
-
-    leaf protocol {
-      type enumeration {
-        enum ALL {
-          value "0";
-          description "ALL:";
-        }
-        enum Direct {
-          value "1";
-          description "Direct:";
-        }
-        enum OSPF {
-          value "2";
-          description "OSPF:";
-        }
-        enum ISIS {
-          value "3";
-          description "ISIS:";
-        }
-        enum Static {
-          value "4";
-          description "Static:";
-        }
-        enum RIP {
-          value "5";
-          description "RIP:";
-        }
-        enum BGP {
-          value "6";
-          description "BGP:";
-        }
-        enum OSPFV3 {
-          value "7";
-          description "OSPFV3:";
-        }
-        enum RIPNG {
-          value "8";
-          description "RIPNG:";
-        }
-      }
-      description
-         "Specifies the protocol from which routes are imported.
-          At present, In the IPv4 unicast address family view,
-          the protocol can be IS-IS,static, direct and BGP.";
-      }
-
-      leaf instance {
-        type string;
-        description
-             "Specifies the instance id of the protocol";
-      }
-  }
-  grouping global-imports {
-      description "Grouping for imports from global routing table";
-    container import-from-global {
-      description "Import from global routing table";
-      container config {
-          description "Configuration";
-          uses import-from-gbl;
-      }
-      container state {
-          config "false";
-          description "State";
-          uses import-from-gbl;
-      }
-    }
-  }
-
-
-  grouping export-to-gbl {
-    description "Export routes to default VRF";
-    leaf enable {
-      type boolean;
-        description "Enable";
-    }
-  }
-
-  grouping global-exports {
-    description "Grouping for exports routes to global table";
-    container export-to-global {
-      description "Export to global routing table";
-      container config {
-         description "Configuration";
-         uses export-to-gbl;
-      }
-      container state {
-        config "false";
-        description "State";
-        uses export-to-gbl;
-      }
-    }
-  }
-
-  grouping route-target-params {
-    description "Grouping to specify rules for route import and export";
-    container route-targets {
-      description
-        "Set of route-targets to match for import and export routes
-         to/from VRF";
-      container config {
-         description
-               "Configuration of route targets";
-           uses route-target-set ;
-      }
-      container state {
-        config "false" ;
-        description
-               "State information for route targets";
-           uses route-target-set ;
-      }
-    }
-  }
-
-  grouping route-tbl-limit-params {
-     description "Grouping for VPN table prefix limit config";
-     leaf routing-table-limit-number {
-        type uint32 {
-          range "1..4294967295";
-        }
-        description
-          "Specifies the maximum number of routes supported by a
-           VPN instance. ";
-        }
-
-       choice routing-table-limit-action {
-          description ".";
-           case enable-alert-percent {
-             leaf alert-percent-value {
-               type uint8 {
-                 range "1..100";
-               }
-               description
-                 "Specifies the percentage of the maximum number of
-                  routes. When the maximum number of routes that join
-                  the VPN instance is up to the value
-                  (number*alert-percent)/100, the system prompts
-                  alarms. The VPN routes can be still added to the
-                  routing table, but after the number of routes
-                  reaches number, the subsequent routes are
-                  dropped.";
-           }
-        }
-        case enable-simple-alert {
-          leaf simple-alert {
-               type boolean;
-               description
-                 "Indicates that when VPN routes exceed number, routes
-                  can still be added into the routing table, but the
-                  system prompts alarms.
-                  However, after the total number of VPN routes and
-                  network public routes reaches the unicast route limit
-                  specified in the License, the subsequent VPN routes
-                  are dropped.";
-             }
-           }
-       }
-   }
-
-   grouping routing-tbl-limit {
-      description ".";
-      container routing-table-limit {
-         description
-           "The routing-table limit command sets a limit on the maximum
-            number of routes that the IPv4 or IPv6 address family of a
-            VPN instance can support.
-            By default, there is no limit on the maximum number of
-            routes that the IPv4 or IPv6 address family of a VPN
-            instance can support, but the total number of private
-            network and public network routes on a device cannot
-            exceed the allowed maximum number of unicast routes.";
-          container config {
-             description "Config parameters";
-             uses route-tbl-limit-params;
-          }
-          container state {
-              config "false";
-              description "State parameters";
-              uses route-tbl-limit-params;
-          }
-       }
-   }
-
-  // Tunnel policy parameters
-  grouping tunnel-params {
-     description "Tunnel parameters";
-     container tunnel-params {
-        description "Tunnel config parameters";
-        container config {
-           description "configuration parameters";
-           leaf tunnel-policy {
-              type string;
-              description
-                  "Tunnel policy name.";
-           }
-        }
-        container state {
-           config "false";
-           description "state parameters";
-           leaf tunnel-policy {
-              type string;
-              description
-                   "Tunnel policy name.";
-           }
-        }
-     }
-  }
-
-  // Grouping for the L3vpn specific parameters under VRF
-  // (network-instance)
-  grouping l3vpn-vrf-params {
-      description "Specify route filtering rules for import/export";
-      container ipv4 {
-         description
-           "Specify route filtering rules for import/export";
-         container unicast {
-            description
-              "Specify route filtering rules for import/export";
-            uses route-target-params;
-            uses global-imports;
-            uses global-exports;
-            uses routing-tbl-limit;
-            uses tunnel-params;
-         }
-      }
-      container ipv6 {
-         description
-           "Ipv6 address family specific rules for import/export";
-         container unicast {
-             description "Ipv6 unicast address family";
-             uses route-target-params;
-             uses global-imports;
-             uses global-exports;
-             uses routing-tbl-limit;
-             uses tunnel-params;
-         }
-     }
-  }
-
-  grouping bgp-label-mode {
-       description "MPLS/VPN label allocation mode";
-       container config {
-         description
-           "Configuration parameters for label allocation mode";
-         leaf label-mode {
-           type bgp-label-mode;
-           description "Label allocation mode";
-         }
-       }
-       container state {
-         config "false" ;
-         description "State information for label allocation mode";
-         leaf label-mode {
-           type bgp-label-mode;
-           description "Label allocation mode";
-         }
-       }
-  }
-
-  grouping retain-route-targets {
-       description "Grouping for route target accept";
-    container retain-route-targets {
-      description "Control route target acceptance behavior for ASBRs";
-      container config {
-         description
-           "Configuration parameters for retaining route targets";
-         leaf all {
-            type empty;
-            description "Disable filtering of all route-targets";
-         }
-         leaf route-policy {
-            type string;
-            description "Filter routes as per filter policy name
-                         TBD: leafref to IETF routing policy model";
-         }
-      }
-      container state {
-         config "false" ;
-         description "State information for retaining route targets";
-         leaf all {
-            type empty;
-            description "Disable filtering of all route-targets";
-         }
-         leaf route-policy {
-            type string;
-            description "Filter routes as per filter policy name";
-         }
-      }
-    }
-  }
-
-  grouping nexthop-opts {
-     description "Next hop control options for inter-as route exchange";
-     leaf next-hop-self {
-        type boolean;
-        description
-          "Set nexthop of the route to self when advertising routes";
-     }
-     leaf next-hop-unchanged {
-        type boolean;
-        description "Enforce no nexthop change when advertising routes";
-     }
-  }
-
-  grouping asbr-nexthop-options {
-     description "Nexthop parameters for inter-as VPN options ";
-     container nexthop-options {
-         description "Nexthop related options for inter-as options";
-         container config {
-             description "Configuration parameters for nexthop options";
-             uses nexthop-opts;
-         }
-         container state {
-             config "false";
-             description "State information for nexthop options" ;
-             uses nexthop-opts;
-         }
-     }
-  }
-
-  //
-  // VRF specific parameters.
-  // RD and RTs and route import-export rules are added under
-  // network instance container in network instance model, hence
-  // per VRF scoped
-  augment "/ni:devices/ni:device/ni:network-instances/ni:network-instance" {
-     description
-       "Augment network instance for per VRF L3vpn parameters";
-     container l3vpn {
-        //Enable this check once network instance model has
-        //identify defined for VRF type
-        //when "../type='rt:vrf-network-instance'" {
-        //  description
-        //    "This container is only valid for vrf routing instance.";
-        //}
-        description "Configuration of L3VPN specific parameters";
-
-        uses route-distinguisher-params;
-        uses l3vpn-vrf-params ;
-     }
-  }
-
-  // bgp mpls forwarding enable required for inter-as option AB.
-  augment "/if:devices/if:device/if:interfaces/if:interface" {
-    description
-      "BGP mpls forwarding mode configuration on interface for
-       ASBR scenario";
-    uses forwarding-mode ;
-    uses label-security;
-  }
-
-  //
-  // BGP Specific Paramters
-  //
-
-  //
-  // Retain route-target for inter-as option ASBR knob.
-  // vpn prefix limits
-  // vpnv4/vpnv6 address-family only.
-  //augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
-  //        "bgp:afi-safi/bgp:l3vpn-ipv4-unicast" {
-  //  description "Retain route targets for ASBR scenario";
-  //  uses retain-route-targets;
-  //  uses vpn-pfx-limit;
- // }
-
- // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
- //         "bgp:afi-safi/bgp:l3vpn-ipv6-unicast" {
- //   description "Retain route targets for ASBR scenario";
- //   uses retain-route-targets;
- //   uses vpn-pfx-limit;
- // }
-
-  // Label allocation mode configuration. Certain AFs only.
- // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
- //         "bgp:afi-safi/bgp:ipv4-unicast" {
- //    description
- //      "Augment BGP global AF mode for label allocation mode
- //       configuration";
- //    uses bgp-label-mode ;
- //    uses routing-tbl-limit;
- // }
-
- // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
- //         "bgp:afi-safi/bgp:ipv6-unicast" {
- //    description
- //      "Augment BGP global AF mode for label allocation mode
- //       configuration";
- //    uses bgp-label-mode ;
- //    uses routing-tbl-limit;
- // }
-
-
-  // Nexthop options for the inter-as ASBR peering.
- // augment "/bgp:bgp/bgp:neighbors/bgp:neighbor" {
- //    description
- //      "Augment BGP NBR mode with nexthop options for inter-as ASBRs";
- //    uses asbr-nexthop-options;
- // }
-
- // augment "/bgp:bgp/bgp:peer-groups/bgp:peer-group" {
- //    description
- //      "Augment BGP peer-group mode with nexthop options for inter-as
- //       ASBRs";
- //    uses asbr-nexthop-options;
- // }
-
- // augment "/bgp:bgp/bgp:neighbors/bgp:neighbor/" +
- //         "bgp:afi-safis/bgp:afi-safi" {
- //    description
- //      "Augment BGP NBR AF mode with nexthop options for inter-as
- //       ASBRs";
- //    uses asbr-nexthop-options;
- // }
-
- // augment "/bgp:bgp/bgp:peer-groups/bgp:peer-group/" +
- //         "bgp:afi-safis/bgp:afi-safi" {
- //    description
- //      "Augment BGP peer-group AF mode with nexthop options for inter-as
- //       ASBRs";
- //    uses asbr-nexthop-options;
- // }
-}
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-inet-types.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-inet-types.yang
deleted file mode 100755
index 51a44a3..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-inet-types.yang
+++ /dev/null
@@ -1,454 +0,0 @@
-  module ietf-inet-types {
-
-    yang-version 1;
-
-    namespace
-      "urn:ietf:params:xml:ns:yang:ietf-inet-types";
-
-    prefix inet;
-
-    organization
-      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
-    contact
-      "WG Web:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: David Kessens
-              <mailto:david.kessens@nsn.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>";
-
-    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 <http://www.iana.org/>.
-
-      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 ipv4-address;
-        type 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 ipv4-address-no-zone;
-        type 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 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 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 ipv4-prefix;
-        type 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 ip-address;
-        type 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)";
-
-    }
-  }
\ No newline at end of file
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang
deleted file mode 100644
index 2171a5a..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang
+++ /dev/null
@@ -1,704 +0,0 @@
-module ietf-interfaces {
-
-     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:   <http://tools.ietf.org/wg/netmod/>
-        WG List:  <mailto:netmod@ietf.org>
-
-        WG Chair: Thomas Nadeau
-                  <mailto:tnadeau@lucidvision.com>
-
-        WG Chair: Juergen Schoenwaelder
-                  <mailto:j.schoenwaelder@jacobs-university.de>
-
-        Editor:   Martin Bjorklund
-                  <mailto:mbj@tail-f.com>";
-
-     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";
-     }
-
-     /*
-      * Typedefs
-      */
-
-     typedef interface-ref {
-       type leafref {
-         path "/if:devices/if:device/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:devices/if:device/if:interfaces-state/if:interface/if:name";
-       }
-       description
-         "This type is used by data models that need to reference
-          the operationally present interfaces.";
-     }
-
-     /*
-      * Identities
-      */
-
-     identity interface-type {
-       description
-         "Base identity from which specific interface types are
-          derived.";
-     }
-
-     /*
-      * Features
-      */
-
-     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";
-     }
-
-     /*
-      * Configuration data nodes
-      */
-     container devices {
-         list device {
-             key deviceid;
-             leaf deviceid {
-                 type string;
-             }
-             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 of a
-                         /interfaces-state/interface list.  If the configuration
-                         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 touse some mechanism to handle the
-                             differences in sizeand 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";
-                     }
-                 }
-             }
-             /*
-              * Operational state data nodes
-              */
-
-             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";
-                   }
-                 }
-               }
-             }
-         }
-     }
-   }
\ No newline at end of file
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-ip@2014-06-16.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-ip@2014-06-16.yang
deleted file mode 100644
index 0446258..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-ip@2014-06-16.yang
+++ /dev/null
@@ -1,740 +0,0 @@
-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:   <http://tools.ietf.org/wg/netmod/>
-    WG List:  <mailto:netmod@ietf.org>
-
-    WG Chair: Thomas Nadeau
-              <mailto:tnadeau@lucidvision.com>
-
-    WG Chair: Juergen Schoenwaelder
-              <mailto:j.schoenwaelder@jacobs-university.de>
-
-    Editor:   Martin Bjorklund
-              <mailto:mbj@tail-f.com>";
-
-    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:devices/if:device/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.";
-            }
-          }  // choice subnet
-        }  // list address
-
-        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.";
-          }
-        }  // list neighbor
-      }  // container ipv4
-
-      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 address
-
-        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.";
-          }
-        }  // list neighbor
-
-        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";
-
-          }
-        }  // container autoconf
-      }  // container ipv6
-    }
-
-    augment /if:devices/if:device/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.";
-            }
-          }  // choice subnet
-
-          leaf origin {
-            type ip-address-origin;
-            description
-              "The origin of this address.";
-          }
-        }  // list 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.";
-          }
-        }  // list neighbor
-      }  // container ipv4
-
-      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 address
-
-        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";
-
-          }
-        }  // list neighbor
-      }  // container ipv6
-    }
-  }  // module ietf-ip
-
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-l3vpn-svc@2016-07-30.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-l3vpn-svc@2016-07-30.yang
deleted file mode 100755
index dbd60dc..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-l3vpn-svc@2016-07-30.yang
+++ /dev/null
@@ -1,2599 +0,0 @@
-module ietf-l3vpn-svc {
-
-    namespace "urn:ietf:params:xml:ns:yang:ietf-l3vpn-svc";
-
-    prefix l3vpn-svc;
-
-    import ietf-inet-types {
-        prefix inet;
-    }
-
-    import ietf-yang-types {
-        prefix yang;
-    }
-
-    organization
-     "IETF L3SM Working Group";
-
-    contact
-        "WG List:   &lt;mailto:l3sm@ietf.org&gt;
-
-        Editor:
-
-        ";
-
-    description
-        "The YANG module defines a generic service configuration
-        model for Layer 3 VPN common across all of the vendor
-        implementations.";
-
-    revision 2016-07-30 {
-        description
-        "Eliminated warnings";
-        reference
-            "draft-ietf-l3sm-l3vpn-service-yang-11";
-    }
-
-    revision 2016-07-05 {
-        description
-        "Draft text update";
-        reference
-            "draft-ietf-l3sm-l3vpn-service-yang-11";
-    }
-    revision 2016-06-27 {
-        description
-        "
-        * Removed templates
-        * Add site-network-access-type
-        * Add a leaf number-of-dynamic-address in case
-        of pe-dhcp addressing;
-
-        ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-10";
-    }
-    revision 2016-06-10 {
-        description
-         "Add site-vpn-flavor NNI";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-09";
-    }
-    revision 2016-06-09 {
-        description
-         "Traffic protection moved to site level.
-          Decouple operational-requirements in two containers.
-         ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-08";
-    }
-    revision 2016-06-06 {
-        description
-         "Set config false to actual-site-start and stop
-          Add a container before cloud-access list
-          Add a container before authorized-sites list
-          Add a container before denied-sites list
-          Modified access-diversity modeling
-          Replacing type placement diversity by an identity";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-07";
-    }
-    revision 2016-04-19 {
-        description
-         "* remove reference to core routing model :
-            created new address family identities
-          * added features
-          * Modified bearer parameters
-          * Modified union for ipv4/ipv6 addresses to ip-address
-          type
-          * Add BSR parameters for multicast
-          * Add applications matching for QoS classification
-          ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-06";
-    }
-    revision 2016-04-05 {
-        description
-         "
-         * Added linecard diverse for site diversity
-         * Added a new diversity enum in placement-diversity : none
-         * Added state to site location
-
-         ";
-        reference "";
-    }
-    revision 2016-03-11 {
-        description
-        "
-            * Modify VPN policy and creating a vpn-policy-list
-            * Add VPN policy reference and VPN ID reference
-            under site-network-access
-        ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-05";
-    }
-    revision 2016-01-04 {
-        description
-        "
-            * Add extranet-vpn container in vpn-svc
-            * Creating top level containers
-            * Refine groupings
-            * Added site-vpn-flavor
-        ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-03";
-    }
-    revision 2016-01-04 {
-        description
-         "
-            * qos-profile moved to choice
-            * vpn leaf moved to vpn-id in vpn-policy
-            * added ordered-by user to qos classification list
-            * moved traffic protection to access availability
-            * creating a choice in matching filter for VPN policy
-            * added dot1p matching field in flow-definition
-        ";
-        reference "";
-    }
-    revision 2015-12-07 {
-        description
-         "
-            * A site is now a collection of site-accesses.
-            This was introduced to support M to N availability.
-            * Site-availability has been removed, replaced by
-            availability parameters under site-accesses
-            * Added transport-constraints within vpn-svc
-        ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-02";
-    }
-    revision 2015-11-03 {
-        description "
-        * Add ToS support in match-flow
-        * nexthop in cascaded lan as mandatory
-        * customer-specific-info deleted and moved to routing
-        protocols
-        * customer-lan-connection modified : need prefix and CE address
-        * add choice in managing PE-CE addressing
-        * Simplifying traffic protection
-        ";
-        reference "";
-    }
-    revision 2015-09-10 {
-        description "
-        * Refine groupings for vpn-svc
-        * Removed name in vpn-svc
-        * id in vpn-svc moved to string
-        * Rename id in vpn-svc to vpn-id
-        * Changed key of vpn-svc list to vpn-id
-        * Add DSCP support in flow definition
-        ";
-        reference "";
-    }
-    revision 2015-08-07 {
-        description
-         "
-          Multicast :
-            * Removed ACL from security
-            * Add FW for site and cloud access
-         ";
-        reference "";
-    }
-    revision 2015-08-05 {
-        description
-         "
-          Multicast :
-          * Removed anycast-rp identity as discovery mechanism
-          * Added rp-group mappings for multicast
-          * Added flag for provider managed RP.
-         ";
-        reference "";
-    }
-    revision 2015-08-03 {
-        description
-         " * Creating multiple reusable groupings
-           * Added mpls leaf in vpn-svc for carrier's carrier case
-           * Modify identity single to single-site
-           * Modify site-type to site-role and also child identities.
-           * Creating OAM container under site and moved BFD in.
-           * Creating flow-definition grouping to be reused
-           in ACL, QoS ...
-           * Simplified VPN policy.
-           * Adding multicast static group to RP mappings.
-           * Removed native-vpn and site-role from global site
-           cfg, now managed within the VPN policy.
-           * Creating a separate list for site templates.
-         ";
-        reference "draft-ietf-l3sm-l3vpn-service-yang-01";
-    }
-    revision 2015-07-02 {
-        reference "draft-ietf-l3sm-l3vpn-service-yang-00";
-    }
-    revision 2015-04-24 {
-        description "
-        * Add encryption parameters
-        * Adding holdtime for BFD.
-        * Add postal address in location
-        ";
-        reference "draft-lstd-l3sm-l3vpn-service-yang-00";
-    }
-    revision 2015-02-05 {
-        description "Initial revision.";
-        reference "draft-l3vpn-service-yang-00";
-    }
-
-    /* Features */
-
-    feature cloud-access {
-        description
-         "Allow VPN to connect to a Cloud Service
-         provider.";
-    }
-    feature multicast {
-        description
-        "Enables multicast capabilities in a VPN";
-    }
-    feature ipv4 {
-        description
-        "Enables IPv4 support in a VPN";
-    }
-    feature ipv6 {
-        description
-        "Enables IPv6 support in a VPN";
-    }
-    feature carrierscarrier {
-        description
-        "Enables support of carrier's carrier";
-    }
-    feature traffic-engineering {
-        description
-        "Enables support of transport constraint.";
-    }
-    feature traffic-engineering-multicast {
-        description
-        "Enables support of transport constraint
-        for multicast.";
-    }
-    feature extranet-vpn {
-        description
-        "Enables support of extranet VPNs";
-    }
-    feature site-diversity {
-        description
-        "Enables support of site diversity constraints";
-    }
-    feature encryption {
-        description
-        "Enables support of encryption";
-    }
-    feature qos {
-        description
-        "Enables support of Class of Services";
-    }
-    feature qos-custom {
-        description
-        "Enables support of custom qos profile";
-    }
-    feature rtg-bgp {
-        description
-        "Enables support of BGP routing protocol.";
-    }
-    feature rtg-rip {
-        description
-        "Enables support of RIP routing protocol.";
-    }
-    feature rtg-ospf {
-        description
-        "Enables support of OSPF routing protocol.";
-    }
-    feature rtg-ospf-sham-link {
-        description
-        "Enables support of OSPF sham-links.";
-    }
-    feature rtg-vrrp {
-        description
-        "Enables support of VRRP routing protocol.";
-    }
-    feature fast-reroute {
-        description
-        "Enables support of Fast Reroute.";
-    }
-    feature bfd {
-        description
-        "Enables support of BFD.";
-    }
-    feature always-on {
-        description
-        "Enables support for always-on access
-        constraint.";
-    }
-    feature requested-type {
-        description
-        "Enables support for requested-type access
-        constraint.";
-    }
-    feature bearer-reference {
-        description
-        "Enables support for bearer-reference access
-        constraint.";
-    }
-
-    /* Typedefs */
-
-    typedef svc-id {
-        type string;
-        description
-         "Defining a type of service component
-         identificators.";
-    }
-
-    typedef template-id {
-        type string;
-        description
-         "Defining a type of service template
-         identificators.";
-    }
-
-    /* Identities */
-
-    identity site-network-access-type {
-        description
-         "Base identity for site-network-access type";
-    }
-    identity point-to-point {
-        base site-network-access-type;
-        description
-        "Identity for point-to-point connection";
-    }
-    identity multipoint {
-        base site-network-access-type;
-        description
-        "Identity for multipoint connection
-        Example : ethernet broadcast segment";
-    }
-    identity placement-diversity {
-        description
-         "Base identity for site placement
-         constraints";
-    }
-    identity pe-diverse {
-        base placement-diversity;
-        description
-        "Identity for PE diversity";
-    }
-    identity pop-diverse {
-        base placement-diversity;
-        description
-        "Identity for POP diversity";
-    }
-    identity linecard-diverse {
-        base placement-diversity;
-        description
-        "Identity for linecard diversity";
-    }
-    identity same-pe {
-        base placement-diversity;
-        description
-        "Identity for having sites connected
-        on the same PE";
-    }
-    identity same-bearer {
-        base placement-diversity;
-        description
-        "Identity for having sites connected
-        using the same bearer";
-    }
-    identity customer-application {
-        description
-         "Base identity for customer application";
-    }
-    identity web {
-        base customer-application;
-        description
-         "Identity for web application (e.g. HTTP,HTTPS)";
-    }
-    identity mail {
-        base customer-application;
-        description
-         "Identity for mail applications";
-    }
-    identity file-transfer {
-        base customer-application;
-        description
-         "Identity for file transfer applications (
-         e.g. FTP, SFTP, ...)";
-    }
-    identity database {
-        base customer-application;
-        description
-         "Identity for database applications";
-    }
-    identity social {
-        base customer-application;
-        description
-         "Identity for social network applications";
-    }
-    identity games {
-        base customer-application;
-        description
-         "Identity for gaming applications";
-    }
-    identity p2p {
-        base customer-application;
-        description
-         "Identity for peer to peer applications";
-    }
-    identity network-management {
-        base customer-application;
-        description
-         "Identity for management applications (e.g. telnet
-            syslog, snmp ...)";
-    }
-    identity voice {
-        base customer-application;
-        description
-         "Identity for voice applications";
-    }
-    identity video {
-        base customer-application;
-        description
-         "Identity for video conference applications";
-    }
-    identity address-family {
-        description
-         "Base identity for an address family.";
-    }
-    identity ipv4 {
-        base address-family;
-        description
-        "Identity for IPv4 address family.";
-    }
-    identity ipv6 {
-        base address-family;
-        description
-        "Identity for IPv6 address family.";
-    }
-    identity site-vpn-flavor {
-        description
-        "Base identity for the site VPN service flavor.";
-    }
-    identity site-vpn-flavor-single {
-        base site-vpn-flavor;
-        description
-        "Base identity for the site VPN service flavor.
-        Used when the site belongs to only one VPN.";
-    }
-    identity site-vpn-flavor-multi {
-        base site-vpn-flavor;
-        description
-        "Base identity for the site VPN service flavor.
-        Used when a logical connection of a site
-        belongs to multiple VPNs.";
-    }
-    identity site-vpn-flavor-sub {
-        base site-vpn-flavor;
-        description
-        "Base identity for the site VPN service flavor.
-        Used when a site has multiple logical connections.
-        Each of the connection may belong to different
-        multiple VPNs.";
-    }
-    identity site-vpn-flavor-nni {
-        base site-vpn-flavor;
-        description
-        "Base identity for the site VPN service flavor.
-        Used to describe a NNI option A connection.";
-    }
-    identity transport-constraint {
-        description
-         "Base identity for transport constraint.";
-    }
-    identity tc-latency {
-        base transport-constraint;
-        description
-         "Base identity for transport constraint
-         based on latency.";
-    }
-    identity tc-jitter {
-        base transport-constraint;
-        description
-         "Base identity for transport constraint
-         based on jitter.";
-    }
-    identity tc-bandwidth {
-        base transport-constraint;
-        description
-         "Base identity for transport constraint
-         based on bandwidth.";
-    }
-    identity tc-path-diversity {
-        base transport-constraint;
-        description
-         "Base identity for transport constraint
-         based on path diversity.";
-    }
-    identity tc-site-diversity {
-        base transport-constraint;
-        description
-         "Base identity for transport constraint
-         based on site diversity.";
-    }
-    identity management {
-        description
-         "Base identity for site management scheme.";
-    }
-    identity co-managed {
-        base management;
-        description
-         "Base identity for comanaged site.";
-    }
-    identity customer-managed {
-        base management;
-        description
-         "Base identity for customer managed site.";
-    }
-    identity provider-managed {
-        base management;
-        description
-         "Base identity for provider managed site.";
-    }
-    identity address-allocation-type {
-        description
-         "Base identity for address-allocation-type
-         for PE-CE link.";
-    }
-    identity pe-dhcp {
-        base address-allocation-type;
-        description
-         "PE router provides DHCP service to CE.";
-    }
-    identity static-address {
-        base address-allocation-type;
-        description
-         "PE-CE addressing is static.";
-    }
-    identity slaac {
-        base address-allocation-type;
-        description
-         "Use IPv6 SLAAC.";
-    }
-    identity site-role {
-        description
-         "Base identity for site type.";
-    }
-    identity any-to-any-role {
-        base site-role;
-        description
-         "Site in a any to any IPVPN.";
-    }
-    identity spoke-role {
-        base site-role;
-        description
-         "Spoke Site in a Hub & Spoke IPVPN.";
-    }
-    identity hub-role {
-        base site-role;
-        description
-         "Hub Site in a Hub & Spoke IPVPN.";
-    }
-    identity vpn-topology {
-        description
-         "Base identity for VPN topology.";
-    }
-    identity any-to-any {
-        base vpn-topology;
-        description
-         "Identity for any to any VPN topology.";
-    }
-    identity hub-spoke {
-        base vpn-topology;
-        description
-         "Identity for Hub'n'Spoke VPN topology.";
-    }
-    identity hub-spoke-disjoint {
-        base vpn-topology;
-        description
-         "Identity for Hub'n'Spoke VPN topology
-          where Hubs cannot talk between each other.";
-    }
-    identity multicast-tree-type {
-        description
-         "Base identity for multicast tree type.";
-    }
-    identity ssm-tree-type {
-        base multicast-tree-type;
-        description
-         "Identity for SSM tree type.";
-    }
-    identity asm-tree-type {
-        base multicast-tree-type;
-        description
-         "Identity for ASM tree type.";
-    }
-    identity bidir-tree-type {
-        base multicast-tree-type;
-        description
-         "Identity for BiDir tree type.";
-    }
-    identity multicast-rp-discovery-type {
-        description
-         "Base identity for rp discovery type.";
-    }
-    identity auto-rp {
-        base multicast-rp-discovery-type;
-        description
-         "Base identity for auto-rp discovery type.";
-    }
-    identity static-rp {
-        base multicast-rp-discovery-type;
-        description
-         "Base identity for static type.";
-    }
-    identity bsr-rp {
-        base multicast-rp-discovery-type;
-        description
-         "Base identity for BDR discovery type.";
-    }
-    identity routing-protocol-type {
-        description
-         "Base identity for routing-protocol type.";
-    }
-    identity ospf {
-        base routing-protocol-type;
-        description
-         "Identity for OSPF protocol type.";
-    }
-    identity bgp {
-        base routing-protocol-type;
-        description
-         "Identity for BGP protocol type.";
-    }
-    identity static {
-        base routing-protocol-type;
-        description
-         "Identity for static routing protocol type.";
-    }
-    identity rip {
-        base routing-protocol-type;
-        description
-         "Identity for RIP protocol type.";
-    }
-    identity rip-ng {
-        base routing-protocol-type;
-        description
-         "Identity for RIPng protocol type.";
-    }
-    identity vrrp {
-        base routing-protocol-type;
-        description
-         "Identity for VRRP protocol type.
-         This is to be used when LAn are directly connected
-         to provider Edge routers.";
-    }
-    identity direct {
-        base routing-protocol-type;
-        description
-         "Identity for direct protocol type.
-        .";
-    }
-    identity protocol-type {
-        description
-         "Base identity for protocol field type.";
-    }
-    identity tcp {
-        base protocol-type;
-        description
-         "TCP protocol type.";
-    }
-    identity udp {
-        base protocol-type;
-        description
-         "UDP protocol type.";
-    }
-    identity icmp {
-        base protocol-type;
-        description
-         "icmp protocol type.";
-    }
-    identity icmp6 {
-        base protocol-type;
-        description
-         "icmp v6 protocol type.";
-    }
-    identity gre {
-        base protocol-type;
-        description
-         "GRE protocol type.";
-    }
-    identity ipip {
-        base protocol-type;
-        description
-         "IPinIP protocol type.";
-    }
-    identity hop-by-hop {
-        base protocol-type;
-        description
-         "Hop by Hop IPv6 header type.";
-    }
-    identity routing {
-        base protocol-type;
-        description
-         "Routing IPv6 header type.";
-    }
-    identity esp {
-        base protocol-type;
-        description
-         "ESP header type.";
-    }
-    identity ah {
-        base protocol-type;
-        description
-         "AH header type.";
-    }
-
-    /* Groupings */
-
-    grouping vpn-service-cloud-access {
-        container cloud-accesses {
-        list cloud-access {
-            if-feature cloud-access;
-            key cloud-identifier;
-
-            leaf cloud-identifier {
-                type string;
-                description
-                 "Identification of cloud service. Local
-                 admin meaning.";
-            }
-            container authorized-sites {
-                list authorized-site {
-                    key site-id;
-
-                    leaf site-id {
-                        type leafref {
-                            path "/l3vpn-svc/sites/site/site-id";
-                        }
-                        description
-                         "Site ID.";
-                    }
-                    description
-                     "List of authorized sites.";
-                }
-                description
-                "Configuration of authorized sites";
-            }
-            container denied-sites {
-                list denied-site {
-                    key site-id;
-
-                    leaf site-id {
-                        type leafref {
-                            path "/l3vpn-svc/sites/site/site-id";
-                        }
-                        description
-                         "Site ID.";
-                    }
-                    description
-                     "List of denied sites.";
-                }
-                description
-                "Configuration of denied sites";
-            }
-            leaf nat-enabled {
-                type boolean;
-                description
-                 "Control if NAT is required or not.";
-            }
-            leaf customer-nat-address {
-                type inet:ipv4-address;
-                description
-                 "NAT address to be used in case of public
-                 or shared cloud.
-                 This is to be used in case customer is providing
-                 the public address.";
-            }
-            description
-             "Cloud access configuration.";
-        }
-            description
-             "Container for cloud access configurations";
-        }
-        description
-         "grouping for vpn cloud definition";
-    }
-
-    grouping multicast-rp-group-cfg {
-        choice group-format {
-            case startend {
-                leaf group-start {
-                    type inet:ip-address;
-                    description
-                     "First group address.";
-                }
-                leaf group-end {
-                    type inet:ip-address;
-                    description
-                     "Last group address.";
-                }
-            }
-            case singleaddress {
-                leaf group-address {
-                    type inet:ip-address;
-                    description
-                     "Group address";
-                }
-            }
-            description
-             "Choice for group format.";
-        }
-        description
-         "Definition of groups for
-         RP to group mapping.";
-    }
-
-    grouping vpn-service-multicast {
-        container multicast {
-            if-feature multicast;
-            leaf enabled {
-                type boolean;
-                default false;
-                description
-                 "Enable multicast.";
-            }
-            container customer-tree-flavors {
-                list tree-flavor {
-                    key type;
-
-                    leaf type {
-                        type identityref {
-                            base multicast-tree-type;
-                        }
-                        description
-                         "Type of tree to be used.";
-                    }
-                    description
-                     "List of tree flavors.";
-                }
-                description
-                 "Type of trees used by customer.";
-            }
-            container rp {
-                container rp-group-mappings {
-                    list rp-group-mapping {
-                        key "id";
-
-                        leaf id {
-                            type uint16;
-                            description
-                             "Unique identifier for the mapping.";
-                        }
-                        container provider-managed {
-                            leaf enabled {
-                                type boolean;
-                                default false;
-                                description
-                                 "Set to true, if the RP must be a
-                                 provider
-                                 managed node.
-                                 Set to false, if it is a customer
-                                 managed node.";
-                            }
-
-                            leaf rp-redundancy {
-                                when "../enabled = 'true'" {
-                                    description
-                                     "Relevant when RP
-                                     is provider managed.";
-                                }
-                                type boolean;
-                                default false;
-                                description
-                                 "If true, redundancy
-                                 mechanism for RP is required.";
-                            }
-                            leaf optimal-traffic-delivery {
-                                when "../enabled = 'true'" {
-                                    description
-                                     "Relevant when RP
-                                     is provider managed.";
-                                }
-                                type boolean;
-                                default false;
-                                description
-                                 "If true, SP must ensure
-                                 that traffic uses an optimal path.";
-                            }
-                            description
-                             "Parameters for provider managed RP.";
-                        }
-
-                        leaf rp-address {
-                            when "../provider-managed/enabled='false'" {
-                                description
-                                 "Relevant when RP
-                                 is provider managed.";
-                            }
-                            type inet:ip-address;
-                            description
-                            "Defines the address of the
-                            RendezvousPoint.
-                            Used if RP is customer managed.";
-                        }
-
-                        container groups {
-                            list group {
-                                key id;
-
-                                leaf id {
-                                    type uint16;
-                                    description
-                                     "Identifier for the group.";
-                                }
-                                uses multicast-rp-group-cfg;
-                                description
-                                "List of groups.";
-                            }
-                            description
-                             "Multicast groups associated with RP.";
-                        }
-
-                        description
-                         "List of RP to group mappings.";
-                    }
-                    description
-                    "RP to group mappings.";
-                }
-                container rp-discovery {
-                    leaf rp-discovery-type {
-                        type identityref {
-                            base multicast-rp-discovery-type;
-                        }
-                        default static-rp;
-                        description
-                         "Type of RP discovery used.";
-                    }
-                    container bsr-candidates {
-                        when "../rp-discovery-type='bsr-rp'" {
-                            description
-                             "Only applicable if discovery type
-                             is BSR-RP";
-                        }
-                        list bsr-candidate {
-                            key address;
-
-                            leaf address {
-                                type inet:ip-address;
-                                description
-                                 "Address of BSR candidate";
-                            }
-
-                            description
-                             "List of customer BSR candidates";
-                        }
-                        description
-                         "Customer BSR candidates address";
-                    }
-                    description
-                     "RP discovery parameters";
-                }
-
-                description
-                 "RendezvousPoint parameters.";
-            }
-            description
-                "Multicast global parameters for the VPN service.";
-        }
-        description
-         "grouping for multicast vpn definition";
-    }
-
-    grouping vpn-service-mpls {
-        leaf carrierscarrier {
-            if-feature carrierscarrier;
-            type boolean;
-            default false;
-            description
-             "The VPN is using Carrier's Carrier,
-             and so MPLS is required.";
-        }
-        description
-         "grouping for mpls CsC definition";
-    }
-
-    grouping customer-location-info {
-        container location {
-                leaf address {
-                    type string;
-                    description
-                    "Address (number and street)
-                    of the site.";
-
-                }
-                leaf zip-code {
-                    type string;
-                    description
-                    "ZIP code of the site.";
-                }
-                leaf state {
-                    type string;
-                    description
-                    "State of the site.
-                    This leaf can also be used
-                    to describe a region
-                    for country who does not have
-                    states.
-                    ";
-                }
-                leaf city {
-                    type string;
-                    description
-                     "City of the site.";
-                }
-                leaf country-code {
-                    type string;
-                    description
-                     "Country of the site.";
-                }
-                description
-                    "Location of the site.";
-        }
-        description
-         "This grouping defines customer location
-          parameters";
-    }
-
-    grouping site-diversity {
-        container site-diversity {
-                if-feature site-diversity;
-
-                container groups {
-                    list group {
-                        key group-id;
-
-                        leaf group-id {
-                            type string;
-                            description
-                             "Group-id the site
-                             is belonging to";
-                        }
-                        description
-                        "List of group-id";
-                    }
-                    description
-                     "Groups the site
-                     is belonging to.
-                     All site network accesses will
-                     inherit those group values.";
-                }
-                description
-                     "Diversity constraint type.";
-            }
-        description
-         "This grouping defines site diversity
-          parameters";
-    }
-
-    grouping access-diversity {
-        container access-diversity {
-                if-feature site-diversity;
-                container groups {
-                    list group {
-                        key group-id;
-
-                        leaf group-id {
-                            type string;
-                            description
-                             "Group-id the site network access
-                             is belonging to";
-                        }
-                        description
-                        "List of group-id";
-                    }
-                    description
-                     "Groups the site network access
-                     is belonging to";
-                }
-                container constraints {
-                    list constraint {
-                        key constraint-type;
-
-                        leaf constraint-type {
-                            type identityref {
-                                base placement-diversity;
-                            }
-                            description
-                             "Diversity constraint type.";
-                        }
-                        container target {
-                            choice target-flavor {
-                                case id {
-                                    list group {
-                                        key group-id;
-
-                                        leaf group-id {
-                                            type string;
-                                            description
-                                             "The constraint will apply
-                                             against this particular
-                                             group-id";
-                                        }
-                                        description
-                                         "List of groups";
-                                    }
-                                }
-                                case all-accesses {
-                                    leaf all-other-accesses {
-                                        type empty;
-                                        description
-                                         "The constraint will apply
-                                         against all other site network
-                                         access
-                                         of this site";
-                                    }
-                                }
-                                case all-groups {
-                                    leaf all-other-groups {
-                                        type empty;
-                                        description
-                                         "The constraint will apply
-                                         against all other groups the
-                                         customer
-                                         is managing";
-                                    }
-                                }
-                                description
-                                 "Choice for the group definition";
-                            }
-                            description
-                             "The constraint will apply against
-                             this list of groups";
-                        }
-                        description
-                         "List of constraints";
-                    }
-                    description
-                     "Constraints for placing this site
-                     network access";
-                }
-
-                description
-                     "Diversity parameters.";
-            }
-        description
-         "This grouping defines access diversity
-          parameters";
-    }
-
-    grouping operational-requirements {
-          leaf requested-site-start {
-               type yang:date-and-time;
-               description
-                "Optional leaf indicating requested date
-                and time
-                when the service at a particular site is
-                expected
-                to start";
-           }
-
-           leaf requested-site-stop {
-               type yang:date-and-time;
-               description
-                "Optional leaf indicating requested date
-                and time
-                when the service at a particular site is
-                expected
-                to stop";
-           }
-        description
-         "This grouping defines some operational parameters
-          parameters";
-    }
-
-    grouping operational-requirements-ops {
-           leaf actual-site-start {
-               type yang:date-and-time;
-               config false;
-               description
-                "Optional leaf indicating actual date
-                and time
-                when the service at a particular site
-                actually
-                started";
-           }
-           leaf actual-site-stop {
-               type yang:date-and-time;
-               config false;
-               description
-                "Optional leaf indicating actual date
-                and time
-                when the service at a particular site
-                actually
-                stopped";
-           }
-        description
-         "This grouping defines some operational parameters
-          parameters";
-    }
-
-    grouping flow-definition {
-        container match-flow {
-            leaf dscp {
-                type uint8 {
-                    range "0 .. 63";
-                }
-                description
-                 "DSCP value.";
-            }
-            leaf tos {
-                type uint8 {
-                    range "0 .. 254";
-                }
-                description
-                 "TOS value.";
-            }
-            leaf dot1p {
-                type uint8 {
-                    range "0 .. 7";
-                }
-                description
-                "802.1p matching.";
-            }
-            leaf ipv4-src-prefix {
-                type inet:ipv4-prefix;
-                description
-                 "Match on IPv4 src address.";
-            }
-            leaf ipv6-src-prefix {
-                type inet:ipv6-prefix;
-                description
-                 "Match on IPv6 src address.";
-            }
-            leaf ipv4-dst-prefix {
-                type inet:ipv4-prefix;
-                description
-                 "Match on IPv4 dst address.";
-            }
-            leaf ipv6-dst-prefix {
-                type inet:ipv6-prefix;
-                description
-                 "Match on IPv6 dst address.";
-            }
-            leaf l4-src-port {
-                type uint16;
-                description
-                 "Match on layer 4 src port.";
-            }
-            leaf l4-dst-port {
-                type uint16;
-                description
-                 "Match on layer 4 dst port.";
-            }
-            leaf protocol-field {
-                type union {
-                    type uint8;
-                    type identityref {
-                        base protocol-type;
-                    }
-                }
-                description
-                 "Match on IPv4 protocol or
-                  Ipv6 Next Header
-                 field.";
-            }
-
-            description
-             "Describe flow matching
-             criterions.";
-        }
-        description
-         "Flow definition based on criteria.";
-    }
-
-    grouping site-service-basic {
-        leaf svc-input-bandwidth {
-               type uint32;
-               units bps;
-               description
-                "From the PE perspective, the service input
-                bandwidth of the connection.";
-        }
-        leaf svc-output-bandwidth {
-           type uint32;
-           units bps;
-           description
-            "From the PE perspective, the service output
-            bandwidth of the connection.";
-        }
-        leaf svc-mtu {
-            type uint16;
-            units bytes;
-            description
-             "MTU at service level.
-             If the service is IP,
-             it refers to the IP MTU.";
-        }
-        description
-         "Defines basic service parameters for a site.";
-    }
-
-    grouping site-protection {
-        container traffic-protection {
-            if-feature fast-reroute;
-            leaf enabled {
-                type boolean;
-                description
-                 "Enables
-                 traffic protection of access link.";
-            }
-
-            description
-             "Fast reroute service parameters
-             for the site.";
-        }
-        description
-         "Defines protection service parameters for a site.";
-    }
-
-    grouping site-service-mpls {
-        container carrierscarrier {
-            if-feature carrierscarrier;
-            leaf signalling-type {
-                type enumeration {
-                    enum "ldp" {
-                        description
-                            "Use LDP as signalling
-                            protocol between PE and CE.";
-                    }
-                    enum "bgp" {
-                        description
-                            "Use BGP 3107 as signalling
-                            protocol between PE and CE.
-                            In this case, bgp must be also
-                            configured
-                            as routing-protocol.
-                            ";
-                    }
-                }
-                description
-                 "MPLS signalling type.";
-            }
-            description
-             "This container is used when customer provides
-             MPLS based services.
-             This is used in case of Carrier's
-             Carrier.";
-        }
-        description
-         "Defines MPLS service parameters for a site.";
-    }
-
-    grouping site-service-qos-profile {
-        container qos {
-            if-feature qos;
-            container qos-classification-policy {
-                list rule {
-                    key id;
-                    ordered-by user;
-
-                    leaf id {
-                        type uint16;
-                        description
-                         "ID of the rule.";
-                    }
-
-                    choice match-type {
-                        case match-flow {
-                            uses flow-definition;
-                        }
-                        case match-application {
-                            leaf match-application {
-                                type identityref {
-                                    base customer-application;
-                                }
-                                description
-                                 "Defines the application
-                                 to match.";
-                            }
-                        }
-                        description
-                         "Choice for classification";
-                    }
-
-                    leaf target-class-id {
-                        type string;
-                        description
-                         "Identification of the
-                         class of service.
-                         This identifier is internal to
-                         the administration.";
-                    }
-
-                    description
-                     "List of marking rules.";
-                }
-                description
-                 "Need to express marking rules ...";
-            }
-            container qos-profile {
-
-                choice qos-profile {
-                    description
-                     "Choice for QoS profile.
-                     Can be standard profile or custom.";
-                    case standard {
-                        leaf profile {
-                            type string;
-                            description
-                             "QoS profile to be used";
-                        }
-                    }
-                    case custom {
-                        container classes {
-                            if-feature qos-custom;
-                            list class {
-                                key class-id;
-
-                                leaf class-id {
-                                    type string;
-                                    description
-                                     "Identification of the
-                                     class of service.
-                                     This identifier is internal to
-                                     the administration.";
-                                }
-                                leaf rate-limit {
-                                    type uint8;
-                                    units percent;
-                                    description
-                                     "To be used if class must
-                                     be rate
-                                     limited. Expressed as
-                                     percentage of the svc-bw.";
-                                }
-                                leaf priority-level {
-                                    type uint8;
-                                    description
-                                     "Defines the level of the
-                                     class in
-                                     term of priority queueing.
-                                      The higher the level is the
-                                      higher
-                                      is the priority.";
-                                }
-                                leaf guaranteed-bw-percent {
-                                    type uint8;
-                                    units percent;
-                                    description
-                                     "To be used to define the
-                                     guaranteed
-                                     BW in percent of the svc-bw
-                                     available at the priority-level.";
-                                }
-                                description
-                                 "List of class of services.";
-                            }
-                            description
-                                 "Container for
-                                 list of class of services.";
-                        }
-
-                    }
-
-                }
-                description
-                "Qos profile configuration.";
-            }
-            description
-             "QoS configuration.";
-        }
-        description
-         "This grouping defines QoS parameters
-         for a site";
-
-    }
-
-    grouping site-security-authentication {
-        container authentication {
-            description
-             "Authentication parameters";
-        }
-        description
-         "This grouping defines authentication
-         parameters
-         for a site";
-    }
-
-    grouping site-security-encryption {
-        container encryption {
-            if-feature encryption;
-            leaf enabled {
-                type boolean;
-                description
-                 "If true, access encryption is required.";
-            }
-            leaf layer {
-                type enumeration {
-                    enum layer2 {
-                        description
-                         "Encryption will occur at layer2.";
-                    }
-                    enum layer3 {
-                        description
-                         "IPSec is requested.";
-                    }
-                }
-                description
-                 "Layer on which encryption is applied.";
-            }
-            container encryption-profile {
-                choice profile {
-                    case provider-profile {
-                        leaf profile-name {
-                            type string;
-                            description
-                             "Name of the SP profile
-                             to be applied.";
-                        }
-                    }
-                    case customer-profile {
-                        leaf algorithm {
-                            type string;
-                            description
-                             "Encryption algorithm to
-                             be used.";
-                        }
-                        choice key-type {
-                            case psk {
-                                leaf preshared-key {
-                                    type string;
-                                    description
-                                     "Key coming from
-                                     customer.";
-                                }
-                            }
-                            case pki {
-
-                            }
-                            description
-                             "Type of keys to be used.";
-                        }
-                    }
-                    description
-                     "Choice of profile.";
-                }
-                description
-                 "Profile of encryption to be applied.";
-            }
-            description
-             "Encryption parameters.";
-        }
-        description
-         "This grouping defines encryption parameters
-         for a site";
-    }
-
-    grouping site-attachment-bearer {
-        container bearer {
-            container requested-type {
-                if-feature requested-type;
-                leaf requested-type {
-                    type string;
-                    description
-                     "Type of requested bearer Ethernet, DSL,
-                     Wireless ...
-                     Operator specific.";
-                }
-                leaf strict {
-                    type boolean;
-                    default false;
-                    description
-                     "define if the requested-type is a preference
-                     or a strict requirement.";
-                }
-                description
-                 "Container for requested type.";
-            }
-            leaf always-on {
-                if-feature always-on;
-                type boolean;
-                default true;
-                description
-                "Request for an always on access type.
-                This means no Dial access type for
-                example.";
-            }
-            leaf bearer-reference {
-                if-feature bearer-reference;
-                type string;
-                description
-                 "This is an internal reference for the
-                 service provider.
-                 Used ";
-            }
-            description
-             "Bearer specific parameters.
-             To be augmented.";
-        }
-        description
-         "Defines physical properties of
-         a site attachment.";
-    }
-
-    grouping site-routing {
-        container routing-protocols {
-            list routing-protocol {
-                key type;
-
-                leaf type {
-                    type identityref {
-                        base routing-protocol-type;
-                    }
-                    description
-                     "Type of routing protocol.";
-                }
-
-
-                container ospf {
-                    when "../type = 'ospf'" {
-                        description
-                         "Only applies
-                         when protocol is OSPF.";
-                    }
-                    if-feature rtg-ospf;
-                    leaf-list address-family {
-                        type identityref {
-                            base address-family;
-                        }
-                        description
-                         "Address family to be activated.";
-                    }
-                    leaf area-address {
-                        type yang:dotted-quad;
-                        description
-                         "Area address.";
-                    }
-                    leaf metric {
-                        type uint16;
-                        description
-                         "Metric of PE-CE link.";
-                    }
-                    container sham-links {
-                        if-feature rtg-ospf-sham-link;
-                        list sham-link {
-                            key target-site;
-
-                            leaf target-site {
-                                type svc-id;
-                                description
-                                 "Target site for the sham link
-                                  connection.
-                                  The site is referred through it's ID.";
-                            }
-                            leaf metric {
-                                type uint16;
-                                description
-                                 "Metric of the sham link.";
-                            }
-                            description
-                             "Creates a shamlink with another
-                             site";
-                        }
-                        description
-                         "List of Sham links";
-                    }
-                    description
-                     "OSPF specific configuration.";
-                }
-
-                container bgp {
-
-                    when "../type = 'bgp'" {
-                        description
-                         "Only applies when
-                         protocol is BGP.";
-                    }
-                    if-feature rtg-bgp;
-                    leaf autonomous-system {
-                        type uint32;
-                        description
-                         "AS number.";
-                    }
-                    leaf-list address-family {
-                        type identityref {
-                            base address-family;
-                        }
-                        description
-                         "Address family to be activated.";
-                    }
-                    description
-                     "BGP specific configuration.";
-                }
-                container static {
-                    when "../type = 'static'" {
-                        description
-                         "Only applies when protocol
-                         is static.";
-                    }
-
-                    container cascaded-lan-prefixes {
-                        list ipv4-lan-prefixes {
-                            if-feature ipv4;
-                            key "lan next-hop";
-
-                            leaf lan {
-                                type inet:ipv4-prefix;
-                                description
-                                 "Lan prefixes.";
-                            }
-                            leaf lan-tag {
-                                type string;
-                                description
-                                 "Internal tag to be used in vpn
-                                 policies.";
-                            }
-                            leaf next-hop {
-                                type inet:ipv4-address;
-                                description
-                                 "Nexthop address to use at customer
-                                 side.";
-                            }
-                            description "
-                                List of LAN prefixes for
-                                the site.
-                                ";
-                        }
-                        list ipv6-lan-prefixes {
-                            if-feature ipv6;
-                            key "lan next-hop";
-
-                            leaf lan {
-                                type inet:ipv6-prefix;
-                                description
-                                 "Lan prefixes.";
-                            }
-                            leaf lan-tag {
-                                type string;
-                                description
-                                 "Internal tag to be used
-                                 in vpn policies.";
-                            }
-                            leaf next-hop {
-                                type inet:ipv6-address;
-                                description
-                                 "Nexthop address to use at
-                                 customer side.";
-                            }
-                            description "
-                                List of LAN prefixes for the site.
-                                ";
-                        }
-                        description
-                            "LAN prefixes from the customer.";
-                    }
-                    description
-                     "Static routing
-                     specific configuration.";
-                }
-                container rip {
-
-                    when "../type = 'rip'" {
-                        description
-                         "Only applies when
-                         protocol is RIP.";
-                    }
-                    if-feature rtg-rip;
-                    leaf-list address-family {
-                        type identityref {
-                            base address-family;
-                        }
-                        description
-                         "Address family to be
-                         activated.";
-                    }
-
-                    description
-                     "RIP routing specific
-                     configuration.";
-                }
-
-
-                container vrrp {
-
-                    when "../type = 'vrrp'" {
-                        description
-                         "Only applies when
-                         protocol is VRRP.";
-                    }
-                    if-feature rtg-vrrp;
-                    leaf-list address-family {
-                        type identityref {
-                            base address-family;
-                        }
-                        description
-                         "Address family to be activated.";
-                    }
-                    description
-                     "VRRP routing specific configuration.";
-                }
-
-
-                description
-                 "List of routing protocols used
-                 on the site.
-                 Need to be augmented.";
-            }
-            description
-             "Defines routing protocols.";
-        }
-        description
-         "Grouping for routing protocols.";
-    }
-
-    grouping site-attachment-ip-connection {
-        container ip-connection {
-            container ipv4 {
-                if-feature ipv4;
-                leaf address-allocation-type {
-                    type identityref {
-                        base address-allocation-type;
-                    }
-
-                    default "static-address";
-                    description
-                     "Defines how addresses are allocated.
-                     ";
-                }
-
-                leaf number-of-dynamic-address {
-                    when
-                    "../address-allocation-type = 'pe-dhcp'"
-                     {
-                        description
-                         "Only applies when
-                         protocol allocation type is static";
-                    }
-                    type uint8;
-                    default 1;
-                    description
-                     "Describes the number of IP addresses the
-                     customer requires";
-                }
-                container addresses {
-                    when
-                    "../address-allocation-type = 'static-address'" {
-                        description
-                         "Only applies when
-                         protocol allocation type is static";
-                    }
-                    leaf provider-address {
-                        type inet:ipv4-address;
-                        description
-                         "Provider side address.";
-                    }
-                    leaf customer-address {
-                        type inet:ipv4-address;
-                        description
-                         "Customer side address.";
-                    }
-                    leaf mask {
-                        type uint8 {
-                            range "0..32";
-                        }
-                        description
-                         "Subnet mask expressed
-                         in bits";
-                    }
-                    description
-                     "Describes IP addresses used";
-                }
-                description
-                 "IPv4 specific parameters";
-
-            }
-            container ipv6 {
-                if-feature ipv6;
-                leaf address-allocation-type {
-                    type identityref {
-                        base address-allocation-type;
-                    }
-                    default "static-address";
-                    description
-                     "Defines how addresses are allocated.
-                     ";
-                }
-                leaf number-of-dynamic-address {
-                    when
-                    "../address-allocation-type = 'pe-dhcp'" {
-                        description
-                         "Only applies when
-                         protocol allocation type is static";
-                    }
-                    type uint8;
-                    default 1;
-                    description
-                     "Describes the number of IP addresses the
-                     customer requires";
-                }
-                container addresses {
-                    when
-                    "../address-allocation-type = 'static-address'" {
-                        description
-                         "Only applies when
-                         protocol allocation type is static";
-                    }
-                    leaf provider-address {
-                        type inet:ipv6-address;
-                        description
-                         "Provider side address.";
-                    }
-                    leaf customer-address {
-                        type inet:ipv6-address;
-                        description
-                         "Customer side address.";
-                    }
-                    leaf mask {
-                        type uint8 {
-                            range "0..128";
-
-                        }
-                        description
-                         "Subnet mask expressed
-                         in bits";
-                    }
-                    description
-                     "Describes IP addresses used";
-                }
-
-                description
-                 "IPv6 specific parameters";
-
-            }
-            container oam {
-                container bfd {
-                    if-feature bfd;
-                    leaf bfd-enabled {
-                        type boolean;
-                        description
-                         "BFD activation";
-                    }
-
-                    choice holdtime {
-                        case profile {
-                            leaf profile-name {
-                                type string;
-                                description
-                                 "Service provider well
-                                 known profile.";
-                            }
-                            description
-                                 "Service provider well
-                                 known profile.";
-                        }
-                        case fixed {
-                            leaf fixed-value {
-                                type uint32;
-                                units msec;
-                                description
-                                 "Expected holdtime
-                                 expressed
-                                 in msec.";
-                            }
-                        }
-                        description
-                         "Choice for holdtime flavor.";
-                    }
-                    description
-                     "Container for BFD.";
-                }
-                description
-                 "Define the OAM used on the connection.";
-            }
-            description
-             "Defines connection parameters.";
-        }
-        description
-         "This grouping defines IP connection parameters.";
-    }
-
-    grouping site-service-multicast {
-        container multicast {
-            if-feature multicast;
-            leaf multicast-site-type {
-                type enumeration {
-                    enum receiver-only {
-                        description
-                         "The site has only receivers.";
-                    }
-                    enum source-only {
-                        description
-                         "The site has only sources.";
-                    }
-                    enum source-receiver {
-                        description
-                         "The site has both
-                         sources & receivers.";
-                    }
-                }
-                default "source-receiver";
-                description
-                 "Type of multicast site.";
-            }
-            container multicast-transport-protocol {
-                leaf ipv4 {
-                    if-feature ipv4;
-                    type boolean;
-                    default true;
-                    description
-                        "Enables ipv4 multicast transport";
-                }
-                leaf ipv6 {
-                    if-feature ipv6;
-                    type boolean;
-                    default false;
-                    description
-                        "Enables ipv6 multicast transport";
-                }
-                description
-                 "Defines protocol to transport multicast.";
-            }
-            leaf protocol-type {
-                type enumeration {
-                    enum host {
-                        description
-                         "
-                         Hosts are directly connected
-                         to the provider network.
-                         Host protocols like IGMP, MLD
-                         are required.
-                         ";
-                    }
-                    enum router {
-                        description
-                         "
-                         Hosts are behind a customer router.
-                         PIM will be implemented.
-                         ";
-                    }
-                    enum both {
-                        description
-                         "Some Hosts are behind a customer
-                         router and some others are directly
-                         connected to the provider network.
-                         Both host and routing protocols must be
-                         used. Typically IGMP and PIM will be
-                         implemented.
-                         ";
-                    }
-                }
-                default "both";
-                description
-                 "Multicast protocol type to be used
-                 with the customer site.";
-            }
-
-            description
-             "Multicast parameters for the site.";
-        }
-        description
-          "Multicast parameters for the site.";
-    }
-
-    grouping site-management {
-        container management {
-            leaf type {
-                type identityref {
-                    base management;
-                }
-                description
-                "Management type of the connection.";
-            }
-            leaf management-transport {
-                type identityref {
-                    base address-family;
-                }
-                description
-                 "Transport protocol used for management.";
-            }
-            leaf address {
-                type inet:ip-address;
-                description
-                 "Management address";
-            }
-
-            description
-             "Management configuration";
-        }
-        description
-          "Management parameters for the site.";
-    }
-
-    grouping site-vpn-flavor-profile {
-        leaf site-vpn-flavor {
-            type identityref {
-                base site-vpn-flavor;
-            }
-            default site-vpn-flavor-single;
-            description
-             "Defines if the site
-            is a single VPN site, or multiVPN or ...";
-        }
-        description
-         "Grouping for site-vpn-flavor.";
-    }
-
-    grouping site-vpn-policy {
-        container vpn-policy-list {
-            list vpn-policy {
-                key vpn-policy-id;
-
-                leaf vpn-policy-id {
-                    type svc-id;
-                    description
-                     "Unique identifier for
-                     the VPN policy.";
-                }
-
-                list entries {
-                    key id;
-
-                    leaf id {
-                            type svc-id;
-                            description
-                             "Unique identifier for
-                              the policy entry.";
-                    }
-                    container filter {
-                        choice lan {
-                            case lan-prefix {
-                                container lan-prefixes {
-                                    list ipv4-lan-prefixes {
-                                        if-feature ipv4;
-                                        key lan;
-
-                                        leaf lan {
-                                            type inet:ipv4-prefix;
-                                            description
-                                             "Lan prefixes.";
-                                        }
-                                        description "
-                                            List of LAN prefixes
-                                            for the site.
-                                            ";
-                                    }
-                                    list ipv6-lan-prefixes {
-                                        if-feature ipv6;
-                                        key lan;
-
-                                        leaf lan {
-                                            type inet:ipv6-prefix;
-                                            description
-                                             "Lan prefixes.";
-                                        }
-                                        description "
-                                            List of LAN prefixes
-                                            for the site.
-                                            ";
-                                    }
-                                    description
-                                     "LAN prefixes from the customer.";
-                                }
-                            }
-                            case lan-tag {
-                                leaf-list lan-tag {
-                                    type string;
-                                    description
-                                     "List of lan-tags to be matched.";
-                                }
-                            }
-                            description
-                             "Choice for LAN matching type";
-                        }
-                        description
-                         "If used, it permit to split site LANs
-                         among multiple VPNs.
-                         If no filter used, all the LANs will be
-                         part of the same VPNs with the same
-                         role.";
-                    }
-                    container vpn {
-                        leaf vpn-id {
-                            type leafref {
-                                path "/l3vpn-svc/vpn-services/vpn-svc/vpn-id";
-                            }
-                            mandatory true;
-                            description
-                             "Reference to an IPVPN.";
-                        }
-                        leaf site-role {
-                            type identityref {
-                                base site-role;
-                            }
-                            mandatory true;
-                            description
-                             "Role of the site in the IPVPN.";
-                        }
-                        description
-                         "List of VPNs the LAN is associated to.";
-                    }
-                    description
-                     "List of entries for export policy.";
-                }
-                description
-                 "List of VPN policies.";
-            }
-            description
-                 "VPN policy.";
-        }
-        description
-          "VPN policy parameters for the site.";
-    }
-
-    grouping site-maximum-routes {
-        container maximum-routes {
-            list address-family {
-                key af;
-
-                leaf af {
-                    type identityref {
-                        base address-family;
-                    }
-                    description
-                     "Address-family.";
-                }
-                leaf maximum-routes {
-                    type uint32;
-                    description
-                     "Maximum prefixes the VRF can
-                     accept for this
-                     address-family.";
-                }
-                description
-                 "List of address families.";
-            }
-
-            description
-             "Define maximum-routes for the VRF.";
-        }
-        description
-        "Define maximum-routes for the site.";
-    }
-
-    grouping site-security {
-        container security {
-            uses site-security-authentication;
-            uses site-security-encryption;
-
-            description
-             "Site specific security parameters.";
-        }
-        description
-         "Grouping for security parameters.";
-    }
-
-    grouping site-service {
-        container service {
-            uses site-service-basic;
-            uses site-service-qos-profile;
-            uses site-service-mpls;
-            uses site-service-multicast;
-
-            description
-             "Service parameters on the attachement.";
-        }
-        description
-         "Grouping for service parameters.";
-    }
-
-    grouping transport-constraint-profile {
-        list constraint-list {
-            key constraint-type;
-
-            leaf constraint-type {
-                type identityref {
-                    base transport-constraint;
-                }
-                description
-                 "Constraint type to be applied.";
-            }
-            leaf constraint-opaque-value {
-                type string;
-                description
-                "Opaque value that can be used to
-                specify constraint parameters.";
-            }
-            description
-             "List of constraints";
-        }
-        description
-         "Grouping for transport constraint.";
-    }
-
-    grouping transport-constraints {
-        container transport-constraints {
-            if-feature traffic-engineering;
-            container unicast-transport-constraints {
-                list constraint {
-                    key constraint-id;
-
-                    leaf constraint-id {
-                        type svc-id;
-                        description
-                         "Defines an ID for the constraint
-                         rule.";
-                    }
-
-                    leaf site1 {
-                        type svc-id;
-                        description
-                         "The ID refers to one site end.";
-                    }
-                    leaf site2 {
-                        type svc-id;
-                        description
-                         "The ID refers to the other
-                         site end.";
-                    }
-                    uses transport-constraint-profile;
-                    description
-                     "List of constraints.
-                     Constraints are bidirectional.";
-                }
-                description
-                 "Unicast transport constraints.";
-            }
-            container multicast-transport-constraints {
-                if-feature traffic-engineering-multicast;
-                list constraint {
-                    key constraint-id;
-
-                    leaf constraint-id {
-                        type svc-id;
-                        description
-                         "Defines an ID for the constraint
-                         rule.";
-                    }
-
-                    leaf src-site {
-                        type svc-id;
-                        description
-                         "The ID refers to source site.";
-                    }
-                    leaf dst-site {
-                        type svc-id;
-                        description
-                         "The ID refers to the receiver
-                         site.";
-                    }
-                    uses transport-constraint-profile;
-                    description
-                     "List of constraints.
-                     Constraints are unidirectional.";
-                }
-                description
-                 "Multicast transport constraints.";
-            }
-            description
-                 "transport constraints.";
-        }
-        description
-         "Grouping for transport constraints
-         description.";
-    }
-
-    grouping vpn-extranet {
-        container extranet-vpns {
-            if-feature extranet-vpn;
-            list extranet-vpn {
-                key vpn-id;
-
-                leaf vpn-id {
-                    type svc-id;
-                    description
-                        "Identifies the target VPN";
-                }
-                leaf local-sites-role {
-                    type identityref {
-                        base site-role;
-                    }
-                    description
-                     "This describes the role of the
-                     local sites in the target VPN topology.";
-                }
-                description
-                 "List of extranet VPNs the local
-                 VPN is attached to.";
-            }
-            description
-             "Container for extranet vpn cfg.";
-        }
-        description
-            "grouping for extranet VPN configuration.
-            Extranet provides a way to interconnect all sites
-            from two VPNs in a easy way.";
-    }
-
-    grouping site-attachment-availability {
-        container availability {
-            leaf access-priority {
-                type uint32;
-                default 1;
-                description
-                 "Defines the priority for the access.
-                 The highest the priority value is,
-                 the highest the
-                 preference of the access is.";
-            }
-            description
-             "Availability parameters
-             (used for multihoming)";
-        }
-        description
-         "Defines site availability parameters.";
-    }
-
-    grouping access-vpn-policy {
-        container vpn-attachment {
-            choice attachment-flavor {
-                case vpn-policy-id {
-                    leaf vpn-policy-id {
-                        type leafref {
-                            path "/l3vpn-svc/sites/site/"+
-                            "vpn-policy-list/vpn-policy/"+
-                            "vpn-policy-id";
-                        }
-                        description
-                         "Reference to a VPN policy.";
-                    }
-                }
-                case vpn-id {
-                    leaf vpn-id {
-                        type leafref {
-                            path "/l3vpn-svc/vpn-services"+
-                            "/vpn-svc/vpn-id";
-                        }
-                        description
-                            "Reference to a VPN.";
-                    }
-                    leaf site-role {
-                        type identityref {
-                                base site-role;
-                            }
-                        mandatory true;
-                        description
-                         "Role of the site in the IPVPN.";
-                    }
-                }
-                mandatory true;
-                description
-                 "Choice for VPN attachment flavor.";
-            }
-            description
-             "Defines VPN attachment of a site.";
-        }
-        description
-         "Defines the VPN attachment rules
-         for a site logical access.";
-    }
-
-    grouping vpn-svc-cfg {
-        leaf vpn-id {
-                type svc-id;
-                description
-                "VPN identifier. Local administration meaning.";
-            }
-        leaf customer-name {
-            type string;
-            description
-             "Name of the customer.";
-        }
-        leaf topology {
-            type identityref {
-                base vpn-topology;
-            }
-            default "any-to-any";
-            description
-             "VPN topology.";
-        }
-
-        uses vpn-service-cloud-access;
-        uses vpn-service-multicast;
-        uses vpn-service-mpls;
-        uses transport-constraints;
-        uses vpn-extranet;
-
-        description
-         "grouping for vpn-svc configuration.";
-    }
-
-    grouping site-top-level-cfg {
-        uses operational-requirements;
-        uses customer-location-info;
-        uses site-diversity;
-        uses site-management;
-        uses site-vpn-policy;
-        uses site-vpn-flavor-profile;
-        uses site-maximum-routes;
-        uses site-security;
-        uses site-service;
-        uses site-protection;
-        uses site-routing;
-
-        description
-         "Grouping for site top level cfg.";
-    }
-
-    grouping site-network-access-top-level-cfg {
-        leaf site-network-access-type {
-            type identityref {
-                base site-network-access-type;
-            }
-            default "point-to-point";
-            description
-            "Describes the type of connection, e.g. :
-            point-to-point or multipoint";
-        }
-        uses access-diversity;
-        uses site-attachment-bearer;
-        uses site-attachment-ip-connection;
-        uses site-security;
-        uses site-service;
-        uses site-routing;
-        uses site-attachment-availability;
-        uses access-vpn-policy;
-
-        description
-         "Grouping for site network access
-         top level cfg.";
-    }
-
-    /* Main blocks */
-
-    container l3vpn-svc {
-        container vpn-services {
-            list vpn-svc {
-                key vpn-id;
-
-                uses vpn-svc-cfg;
-
-                description "
-                    List of VPN services.
-
-                ";
-            }
-            description
-             "top level container
-             for the VPN services.";
-        }
-
-        container sites {
-            list site {
-                key site-id;
-
-                leaf site-id {
-                    type svc-id;
-                    description
-                        "Identifier of the site.";
-                }
-
-                uses site-top-level-cfg;
-                uses operational-requirements-ops;
-
-                container site-network-accesses {
-                    list site-network-access {
-                        key site-network-access-id;
-
-                        leaf site-network-access-id {
-                            type svc-id;
-                            description
-                             "Identifier for the access";
-                        }
-                        uses site-network-access-top-level-cfg;
-
-                        description
-                         "List of accesses for a site.";
-                    }
-                    description
-                     "List of accesses for a site.";
-                }
-
-                description "List of sites.";
-            }
-            description
-             "Container for sites";
-        }
-
-        description
-         "Main container for L3VPN service configuration.";
-    }
-}
\ No newline at end of file
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang
deleted file mode 100644
index 57eebdc..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-network-instance@2016-06-23.yang
+++ /dev/null
@@ -1,241 +0,0 @@
-module ietf-network-instance {
-
-     yang-version "1";
-
-     // namespace
-     namespace "urn:ietf:params:xml:ns:yang:ietf-network-instance";
-
-     prefix "ni";
-
-     // import some basic types
-     import ietf-interfaces {
-       prefix if;
-     }
-
-     import ietf-ip {
-       prefix ip;
-     }
-
-     // meta
-     organization "IETF Routing Area Working Group (rtgwg)";
-
-     contact
-         "Routing Area Working Group - <rtgwg@ietf.org>";
-
-
-     description
-       "This module is used to support multiple network instances
-        within a single physical or virtual device.  Network
-        instances are commonly know as VRFs (virtual routing
-        and forwarding) and VSIs (virtual switching instances).";
-
-     revision "2016-06-23" {
-       description
-         "Initial revision.";
-       reference "RFC TBD";
-     }
-
-     // extension statements
-
-     feature bind-network-instance-name {
-       description
-         "Network Instance to which an interface instance is bound";
-     }
-
-     // identity statements
-
-     identity network-instance-type {
-         description
-            "Base identity from which identities describing
-             network instance types are derived.";
-     }
-
-      identity ipv4-interface-protocol-type {
-         description
-             "Base identity for derivation of IPv4 interface
-              protocols";
-      }
-
-      identity ipv6-interface-protocol-type {
-         description
-             "Base identity for derivation of IPv6 interface
-              protocols";
-      }
-
-     // typedef statements
-
-     // grouping statements
-
-     grouping interface-ip-common {
-       description
-         "interface-specific configuration for IP interfaces, IPv4 and
-         IPv6";
-
-     }
-
-     grouping ipv4-interface-protocols {
-         container ipv4-interface-protocols {
-             list ipv4-interface-protocol {
-                 key "type";
-                 leaf type {
-                     type identityref {
-                         base ipv4-interface-protocol-type;
-                     }
-                     mandatory true;
-                     description
-                         "ARP, ICMP, VRRP, DHCP Client, etc.";
-                 }
-                 description
-                     "List of IPv4 protocols configured
-                      on an interface";
-             }
-             description
-                 "Container for list of IPv4 protocols configured
-                   on an interface";
-         }
-         description
-             "Grouping for IPv4 protocols configured on an interface";
-     }
-
-     grouping ipv6-interface-protocols {
-         description
-             "Grouping for IPv6 protocols configured on
-              an interface.";
-         container ipv6-interface-protocols {
-             description
-                 "Container for list of IPv6 protocols configured
-                   on an interface.";
-             list ipv6-interface-protocol {
-                 key "type";
-                 description
-                     "List of IPv6 protocols configured
-                      on an interface";
-                 leaf type {
-                     type identityref {
-                         base ipv6-interface-protocol-type;
-                     }
-                     mandatory true;
-                     description
-                         "ND, ICMPv6, VRRP, DHCPv6 Client, etc.";
-                 }
-             }
-         }
-     }
-
-     grouping network-instance-policy {
-       description
-           "Network instance policies such as route
-            distinguisher, route targets, VPLS ID and neighbor,
-            Ethernet ID, etc. ";
-       reference
-           "RFC 4364 - BGP/MPLS Virtual Private Networks (VPNs)
-            RFC 6074 - Provisioning, Auto-Discovery, and Signaling
-                 in Layer 2 Virtual Private Networks (L2VPNs)
-            RFC 7432 - BGP MPLS-Based Ethernet VPN";
-       container network-instance-policy {
-           description "Network Instance Policy -- details TBD";
-       }
-     }
-
-     // top level device definition statements
-     container devices {
-         list device {
-             key deviceid;
-             leaf deviceid {
-                 type string;
-             }
-             container network-instances {
-                 description "Network instances each of which have
-                      and protocol instantiations. For layer 3,
-                      this consistent with the routing-instance
-                      definition in ietf-routing";
-                 reference "draft-ietf-netmod-routing-cfg";
-                 list network-instance {
-                     key name;
-                     description "List of network-instances";
-                     leaf name {
-                         type string;
-                         description "device scoped
-                              identifier for the network
-                              instance";
-                     }
-                     leaf type {
-                         type identityref {
-                             base network-instance-type;
-                         }
-                         description
-                             "The network instance type -- details TBD
-                              Likely types include core, L3-VRF, VPLS,
-                              L2-cross-connect, L2-VSI, etc.";
-                     }
-                     leaf enabled {
-                         type boolean;
-                         default "true";
-                         description
-                           "Flag indicating whether or not the network
-                            instance is enabled.";
-                     }
-                     leaf description {
-                         type string;
-                         description
-                           "Description of the network instance
-                           and its intended purpose";
-                     }
-                     uses network-instance-policy;
-                //     leaf root {
-                //       type schema-mount;
-                //       description "Root for models supported per
-                //                    network instance";
-                //     }
-                 }
-             }
-         }
-     }
-
-     // augment statements
-     augment "/if:devices/if:device/if:interfaces/if:interface" {
-       description
-           "Add a node for the identification of the logical network
-           instance (which is within the interface's identified logical
-           network element) associated with the IP information
-           configured on an interface";
-
-       leaf bind-network-instance-name {
-         type string;
-         description
-           "Network Instance to which an interface is bound";
-       }
-     }
-
-     augment "/if:devices/if:device/if:interfaces/if:interface/ip:ipv4" {
-       description
-           "Add a node for the identification of the logical
-           network instance (which is within the interface's
-           identified physical or virtual device) associated with
-           the IP information configured on an interface";
-
-       leaf bind-network-instance-name {
-         type string;
-         description
-           "Network Instance to which IPv4 interface is bound";
-
-       }
-     }
-
-     augment "/if:devices/if:device/if:interfaces/if:interface/ip:ipv6" {
-       description
-           "Add a node for the identification of the logical
-           network instance (which is within the interface's
-           identified physical or virtual device) associated with
-           the IP information configured on an interface";
-
-       leaf bind-network-instance-name {
-         type string;
-         description
-           "Network Instance to which IPv6 interface is bound";
-
-       }
-     }
-     // rpc statements
-     // notification statements
-   }
\ No newline at end of file
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-yang-types.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-yang-types.yang
deleted file mode 100755
index 3f87464..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/ietf-yang-types.yang
+++ /dev/null
@@ -1,473 +0,0 @@
-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:   <http://tools.ietf.org/wg/netmod/>
-       WG List:  <mailto:netmod@ietf.org>
-
-       WG Chair: David Kessens
-                 <mailto:david.kessens@nsn.com>
-
-       WG Chair: Juergen Schoenwaelder
-                 <mailto:j.schoenwaelder@jacobs-university.de>
-
-       Editor:   Juergen Schoenwaelder
-                 <mailto:j.schoenwaelder@jacobs-university.de>";
-
-     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";
-     }
-
-     /*** collection of counter and gauge 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";
-     }
-
-     /*** collection of identifier-related 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)";
-     }
-
-     /*** collection of types related to date and time***/
-
-     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";
-     }
-
-     /*** collection of generic address types ***/
-
-     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";
-     }
-
-     /*** collection of XML-specific types ***/
-
-     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";
-     }
-
-     /*** collection of string types ***/
-
-     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.";
-     }
-   }
\ No newline at end of file
diff --git a/apps/l3vpn/yangmodel/src/main/yang/l3vpn-svc-ext@2016-07-30.yang b/apps/l3vpn/yangmodel/src/main/yang/l3vpn-svc-ext@2016-07-30.yang
deleted file mode 100644
index e3fecb6..0000000
--- a/apps/l3vpn/yangmodel/src/main/yang/l3vpn-svc-ext@2016-07-30.yang
+++ /dev/null
@@ -1,362 +0,0 @@
-module l3vpn-svc-ext {
-    yang-version 1;
-    namespace "urn:ietf:params:xml:ns:yang:l3vpn:svc:ext";
-    prefix "l3vpn-svc-ext";
-
-    import ietf-inet-types { prefix inet;  }
-    import ietf-l3vpn-svc { prefix l3vpn;  }
-
-    revision 2016-07-30 {
-        description
-        "Eliminated warnings";
-    }
-
-    revision "2016-07-20" {
-        description "Initial revision of extended l3vpn yang model";
-    }
-
-    typedef short-as-number {
-        type inet:as-number {
-            range 0..65535;
-        }
-    }
-
-    typedef route-distinguisher {
-        reference "https://tools.ietf.org/html/rfc4364#section-4.2";
-        type union {
-            type rd-ipv4;
-            type rd-as;
-            type rd-as2;
-        }
-    }
-
-    typedef rd-ipv4 {
-        type string {
-            /* IPv4 : 2B number */
-            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-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
-                + '[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|'
-                + '65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])';
-        }
-    }
-
-    typedef rd-as {
-        type string {
-            /* 2B AS : 4B number */
-            pattern '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
-                + '[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|'
-                + '65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])'
-                + ':'
-                + '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
-                + '[1-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '[1-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '4[0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|42[0-8][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '429[0-3][0-9][0-9][0-9][0-9][0-9][0-9]|4294[0-8][0-9][0-9][0-9][0-9][0-9]|'
-                + '42949[0-5][0-9][0-9][0-9][0-9]|429496[0-6][0-9][0-9][0-9]|4294967[0-1][0-9][0-9]|'
-                + '42949672[0-8][0-9]|429496729[0-5])';
-        }
-    }
-
-    typedef rd-as2 {
-        type string {
-            /* 4B AS : 2B number */
-            pattern '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
-                + '[1-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '[1-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|[1-3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '4[0-1][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|42[0-8][0-9][0-9][0-9][0-9][0-9][0-9][0-9]|'
-                + '429[0-3][0-9][0-9][0-9][0-9][0-9][0-9]|4294[0-8][0-9][0-9][0-9][0-9][0-9]|'
-                + '42949[0-5][0-9][0-9][0-9][0-9]|429496[0-6][0-9][0-9][0-9]|4294967[0-1][0-9][0-9]|'
-                + '42949672[0-8][0-9]|429496729[0-5])'
-                + ':'
-                + '([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|'
-                + '[1-5][0-9][0-9][0-9][0-9]|6[0-4][0-9][0-9][0-9]|'
-                + '65[0-4][0-9][0-9]|655[0-2][0-9]|6553[0-5])';
-        }
-    }
-
-    identity tc-demanded-tunnel {
-        base l3vpn:transport-constraint;
-        description "on-demand tunnel.";
-    }
-
-    grouping class-profile {
-        list qos-class {
-            key class-id;
-            leaf class-id {
-                type string;
-                description
-                 "Identification of the
-                 class of service.
-                 This identifier is internal to
-                 the administration.";
-            }
-            leaf rate-limit {
-                type uint8;
-                units percent;
-                description
-                 "To be used if class must
-                 be rate
-                 limited. Expressed as
-                 percentage of the svc-bw.";
-            }
-            leaf priority-level {
-                type uint8;
-                description
-                 "Defines the level of the
-                 class in
-                 term of priority queueing.
-                 The higher the level is the
-                 higher
-                 is the priority.";
-            }
-            leaf guaranteed-bw-percent {
-                type uint8;
-                units percent;
-                description
-                 "To be used to define the
-                 guaranteed
-                 BW in percent of the svc-bw
-                 available at the priority-level.";
-            }
-            description
-             "List of class of services.";
-        }
-    }
-
-    augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:service/l3vpn:qos/l3vpn:qos-profile/l3vpn:qos-profile" {
-        case custom-unicom {
-            container inbound-classes {
-                uses class-profile;
-            }
-            container outbound-classes {
-                uses class-profile;
-            }
-        }
-    }
-
-    grouping bearer-attachment-grouping {
-        container bearer-attachment {
-            leaf pe-name {
-                type string;
-            }
-            leaf pe-mgmt-ip {
-                type inet:ipv4-address;
-            }
-            description "attached PE";
-        }
-    }
-
-    augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:bearer" {
-        uses bearer-attachment-grouping;
-    }
-
-    grouping requested-type-grouping {
-        container requested-type-profile {
-            choice requested-type-choice {
-                case dot1q-case {
-                    container dot1q {
-                        leaf physical-if {
-                            description "physical interface name.";
-                            type string;
-                        }
-                        leaf vlan-id {
-                            type uint16 {
-                                range "1..4096";
-                            }
-                        }
-                    }
-                }
-                case physical-case {
-                    container physical {
-                        leaf physical-if {
-                            description "physical interface name.";
-                            type string;
-                        }
-                    }
-                }
-            }
-            leaf circuit-id {
-                description "circuit description for PE-CE port.";
-                type string;
-            }
-        }
-    }
-
-    augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:bearer/l3vpn:requested-type" {
-        uses requested-type-grouping;
-    }
-
-    grouping bfd-grouping {
-        leaf bfd-enabled {
-            type boolean;
-            description
-             "BFD activation";
-        }
-        choice holdtime {
-            case profile {
-                leaf profile-name {
-                    type string;
-                    description
-                     "Service provider well
-                     known profile.";
-                }
-                description
-                 "Service provider well
-                 known profile.";
-            }
-            case fixed {
-                leaf fixed-value {
-                    type uint32;
-                    units msec;
-                    description
-                     "Expected holdtime
-                     expressed
-                     in msec.";
-                }
-            }
-            case dynamic {
-                container dynamic-value {
-                    leaf interval {
-                        type uint16;
-                        units msec;
-                        default 500;
-                    }
-                    leaf multiplier {
-                        type uint16;
-                        default 3;
-                    }
-                    description
-                     "interval * multiplier is
-                     timeout value.";
-                }
-            }
-        }
-    }
-
-    grouping bgp-profile {
-        leaf as-override {
-            type boolean;
-            default false;
-        }
-        container soo {
-            leaf soo-enabled {
-                type boolean;
-            }
-            leaf soo-value {
-                type string;
-            }
-        }
-        container password {
-            leaf password-enabled {
-                type boolean;
-            }
-            leaf password-value {
-                type string;
-            }
-        }
-        container bgp-timer {
-            leaf keep-alive {
-                type uint16;
-                default 60;
-                units "seconds";
-            }
-            leaf hold-time {
-                type uint16;
-                default 180;
-                units "seconds";
-            }
-        }
-        container bfd {
-            uses bfd-grouping;
-        }
-    }
-
-    augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:routing-protocols/l3vpn:routing-protocol/l3vpn:bgp" {
-        uses bgp-profile;
-    }
-
-    augment "/l3vpn:l3vpn-svc/l3vpn:vpn-services/l3vpn:vpn-svc/l3vpn:transport-constraints/l3vpn:unicast-transport-constraints/l3vpn:constraint/l3vpn:constraint-list" {
-        leaf constraint-opaque-value2 {
-            type string;
-            description
-             "Opaque value that can be used to
-             specify constraint parameters.";
-        }
-    }
-
-    grouping route-ipv4-extended-community {
-        reference "http://tools.ietf.org/html/rfc4360";
-        leaf global-administrator {
-            type inet:ipv4-address;
-        }
-        leaf local-administrator {
-            type uint16;
-        }
-    }
-
-    grouping extended-community {
-        choice extended-community {
-            reference "http://tools.ietf.org/html/rfc4360#section-4";
-            default route-target-extended-community-case;
-            case route-target-extended-community-case {
-                container route-target-extended-community {
-                    leaf global-administrator {
-                        type short-as-number;
-                    }
-                    leaf local-administrator {
-                        type uint32;
-                    }
-                }
-            }
-            case route-target-ipv4-case {
-                container route-target-ipv4 {
-                    uses route-ipv4-extended-community;
-                }
-            }
-            case route-target-extended-community-case2 {
-                container route-target-extended-community2 {
-                    leaf global-administrator {
-                        type uint32;
-                    }
-                    leaf local-administrator {
-                        type uint16;
-                    }
-                }
-            }
-        }
-    }
-
-    grouping rdrt-profile {
-        choice site-role {
-            case custom-case {
-                container custom {
-                    list import-rt {
-                        key imrt-id;
-                        leaf imrt-id {
-                          type string;
-                        }
-                        uses extended-community;
-                    }
-                    list export-rt {
-                        key exrt-id;
-                        leaf exrt-id {
-                          type string;
-                        }
-                        uses extended-community;
-                    }
-                    leaf rd {
-                        type route-distinguisher;
-                    }
-                }
-            }
-        }
-    }
-
-    augment "/l3vpn:l3vpn-svc/l3vpn:sites/l3vpn:site/l3vpn:site-network-accesses/l3vpn:site-network-access/l3vpn:vpn-attachment" {
-        uses rdrt-profile;
-    }
-}
\ No newline at end of file
