[Hummingbird - ONOS4647] Check for the standard l3vpn yang
Change-Id: I3008b9da2ed61c8902789abd064b8f77dfa73245
diff --git a/utils/yangutils/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java b/utils/yangutils/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
new file mode 100644
index 0000000..0f0a514
--- /dev/null
+++ b/utils/yangutils/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2016-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.
+ */
+
+package org.onosproject.yangutils.ietfyang;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yangutils.linker.impl.YangLinkerManager;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
+import org.onosproject.yangutils.plugin.manager.YangUtilManager;
+import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
+import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
+
+import java.io.IOException;
+
+import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
+
+/**
+ * Test cases for testing IETF YANG files.
+ */
+public class IetfYangFileTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ * Reference: https://datatracker.ietf.org/doc/draft-zha-l3sm-l3vpn-onos-deployment
+ */
+ @Test
+ public void l3vpnserviceyang()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/ietfyang/l3vpnservice";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ String userDir = System.getProperty("user.dir");
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/ietfyang/l3vpnservice/");
+
+ utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
+
+ deleteDirectory(userDir + "/target/ietfyang/");
+ }
+
+}
diff --git a/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang
new file mode 100644
index 0000000..851a4d7
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang
@@ -0,0 +1,454 @@
+ 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)";
+
+ }
+ } // module ietf-inet-types
diff --git a/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang
new file mode 100644
index 0000000..7cde2ec
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang
@@ -0,0 +1,141 @@
+ module ietf-sd-onos-common-types {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-sd-onos-common-types";
+ prefix types ;
+ /*
+ import ietf-inet-types{
+ prefix inet;
+ }
+ import ietf-yang-types {
+ prefix yang-types;
+ }
+ */
+ organization "";
+ contact "";
+
+ description
+ "Defines common basic types of L3VPN.";
+
+ revision "2015-12-16" {
+ reference "";
+ }
+
+ typedef admin-status {
+ type enumeration {
+ enum admin-up {
+ value 0 ;
+ description "admin up, the operate-status is depend on the real
+ running status ." ;
+ }
+ enum admin-down {
+ value 1 ;
+ description "admin down,the operate-status is forced to down no
+ matter what the real status is" ;
+ }
+ enum config-up {
+ value 2 ;
+ description "the operate-status is forced to up no matter what
+ the real status is." ;
+ }
+ }
+ default admin-up;
+ description
+ "The administration status of the service.";
+ }
+
+ typedef notification-status {
+ type enumeration {
+ enum up {
+ value 0 ;
+ description "up." ;
+ }
+ enum down {
+ value 1 ;
+ description "down." ;
+ }
+ }
+ default up;
+ description
+ "The notification status of the service.";
+ }
+
+ typedef notification-type {
+ type enumeration {
+ enum ne{
+ value 0 ;
+ description "ncd change." ;
+ }
+ enum link{
+ value 1 ;
+ description "link change." ;
+ }
+ enum ltp{
+ value 2 ;
+ description "ltp change." ;
+ }
+ }
+ default ltp;
+ description
+ "The notification-type of the service.";
+ }
+
+ typedef operate-status {
+ type enumeration {
+ enum operate-up {
+ value 0 ;
+ description "operate up." ;
+ }
+ enum operate-down {
+ value 1 ;
+ description "operate down." ;
+ }
+ }
+ default operate-up;
+ description
+ "The operation status of the service.";
+ }
+
+ grouping command-result {
+ description
+ "Reusable container of the result of the command.";
+ container command-result {
+ description
+ "The result of the command.";
+ leaf result {
+ type int8;
+ description
+ "1 : success, 2 : failed, 3 : partly failed" ;
+ }
+ container success-resources {
+ description
+ "The resources those are available." ;
+ list success-resource-list {
+ description
+ "The resource list shows those are available." ;
+ leaf resource-id {
+ type string;
+ description
+ "The available resource id." ;
+ }
+ }
+ }
+ container failed-resources {
+ description
+ "The resources those are failed." ;
+ list failed-resource-list {
+ description
+ "The resources list shows those are failed." ;
+ leaf resource-id {
+ type string;
+ description
+ "The failed resources ids." ;
+ }
+ leaf error-code {
+ type string;
+ description
+ "The error code." ;
+ }
+ }
+ }
+ }
+ }
+ }
diff --git a/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
new file mode 100644
index 0000000..7b55f71
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
@@ -0,0 +1,316 @@
+ module ietf-sd-onos-service-l3vpn {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-sd-onos-service-l3vpn";
+ prefix l3vpn ;
+ /*
+ import ietf-inet-types{
+ prefix inet;
+ }
+ import ietf-yang-types {
+ prefix yang-types;
+ }
+ */
+ import ietf-sd-onos-service-types {
+ prefix service-types;
+ }
+ import ietf-sd-onos-common-types {
+ prefix types;
+ }
+ organization "";
+ contact "";
+
+ description
+ "L3vpn configuration model in ONOS.";
+
+ revision "2015-12-16" {
+ reference "";
+ }
+
+ grouping l3vpn {
+ description
+ "The configuration module of l3 vpn.";
+ leaf name {
+ type string ;
+ mandatory true;
+ description "name of snc eline." ;
+ }
+ leaf id {
+ type uint32 ;
+ mandatory true;
+ description "ID of snc eline." ;
+ }
+ leaf user-label {
+ type string ;
+ description "user label of snc eline." ;
+ }
+ leaf parent-ncd-id {
+ type string ;
+ description "parent ncd id." ;
+ }
+
+ leaf admin-status {
+ type types:admin-status;
+ description "administration status." ;
+ }
+ leaf operate-status {
+ type types:operate-status;
+ description "operation status." ;
+ }
+
+ uses service-type-grouping;
+ container acess-information {
+ description "access information of the l3 vpn." ;
+
+ uses service-types:l3-ac; }
+
+ container protect-policy{
+ description "L3VPN Service protect policy." ;
+ uses service-types:protect-policy;
+ }
+ container tunnel-service {
+ description "tunnel service." ;
+ uses service-types:tunnel-service;
+ }
+
+ }
+
+ grouping service-type-grouping {
+ description "Basic service type" ;
+ leaf service-topology {
+ type enumeration {
+ enum full-mesh {
+ value 1 ;
+ description "full-mesh." ;
+ }
+ enum hub-spoke {
+ value 2 ;
+ description "hub-spoke." ;
+ }
+ }
+ default full-mesh;
+ description "service topology type." ;
+ }
+ }
+
+ container service {
+ description
+ "Root level of L3vpn service module.";
+ container l3vpn-cfg {
+ description
+ "L3vpn configuration model in ONOS.";
+ list vpn-cfg {
+ key name;
+ description
+ "vpn configuration parameter list.";
+ uses l3vpn;
+ }
+ }
+ container service-paths {
+ description
+ "The service path of the l3 vpn.";
+ }
+ }
+
+
+
+ rpc create-l3vpn-instance {
+ description "Create l3vpn instance." ;
+ input {
+ container l3vpn-instance {
+ description "Create l3vpn instance." ;
+ uses l3vpn;
+ }
+ }
+ }
+
+ rpc delete-l3vpn-instance {
+ description "Delete l3vpn instance." ;
+ input {
+ leaf l3vpn-id {
+ type string;
+ description "vpn id." ;
+ }
+ }
+ }
+
+ rpc close-l3vpn {
+ description "Close l3vpn." ;
+ input {
+ leaf l3vpn-id {
+ type string;
+ description "vpn id." ;
+ }
+ container ac-status {
+ description "Access status of the vpn." ;
+ list acs{
+ key "id";
+ description "Access information." ;
+ leaf id {
+ type string;
+ description "Access id." ;
+ }
+ leaf admin-status {
+ type types:admin-status;
+ description "Administration status." ;
+ }
+ }
+ }
+ }
+ }
+
+ rpc modify-l3vpn-instance-basic {
+ description "Modify l3vpn instance basic information." ;
+ input {
+ leaf l3vpn-id {
+ type string;
+ description "vpn id." ;
+ }
+ leaf user-label {
+ type string ;
+ description "user label." ;
+ }
+ }
+ }
+
+ rpc modify-l3vpn-instance-ac-qos {
+ description "Modify l3vpn instance ac qos information." ;
+ input {
+ leaf l3vpn-id {
+ type string;
+ description "L3vpn ID." ;
+ }
+ container ac-qos {
+ description "ac qos information." ;
+ list acs{
+ key "id";
+ description "acs list." ;
+ leaf id {
+ type string;
+ description "acs ID." ;
+ }
+ container qos-policy {
+ description "qos policy." ;
+ container qos-if-cars {
+ description "cars qos policy." ;
+ uses service-types:qos-if-car;
+
+ }
+ }
+ }
+ }
+ }
+ }
+ rpc modify-l3vpn-instance-connection {
+ description "Modify a l3vpn connection." ;
+ input {
+ leaf l3vpn-id {
+ type string;
+ description "L3vpn ID." ;
+ }
+ container ac-connection {
+ description "ac connection." ;
+ list acs{
+ key "id";
+ description "acs ID." ;
+ leaf id {
+ type string ;
+ description "acs ID." ;
+ }
+ container connection {
+ description "CE to PE connection." ;
+ uses service-types:connection;
+ }
+ }
+ }
+ }
+ }
+ rpc inquire-l3vpn-instance-work-path {
+ description "Inquire a L3VPN instance work path." ;
+ input {
+ leaf service-id {
+ type string;
+ description "service ID." ;
+ }
+ leaf ingress-ne-id {
+ type string ;
+ description "ingress network element ID." ;
+ }
+ leaf destination-ne-id {
+ type string ;
+ description "destination network element ID." ;
+ }
+ leaf ingress-ac-id {
+ type string ;
+ description "ingress ac ID." ;
+ }
+ leaf destination-ac-id {
+ type string ;
+ description "destination ac ID." ;
+ }
+ leaf path-layer {
+ type string ;
+ description "path layer." ;
+ }
+ leaf path-role {
+ type string ;
+ description "path role." ;
+ }
+ }
+ output {
+ container service-path {
+ description "service path." ;
+ leaf service-id {
+ type string;
+ description "service ID." ;
+ }
+ leaf ingress-ne-id {
+ type string ;
+ description "ingress network element ID." ;
+ }
+ leaf destination-ne-id {
+ type string ;
+ description "destination network element ID." ;
+ }
+ leaf ingress-ac-id {
+ type string ;
+ description "ingress access circuit ID." ;
+ }
+ leaf destination-ac-id {
+ type string ;
+ description "destination access circuit ID." ;
+ }
+ leaf path-layer {
+ type string ;
+ description "path layer." ;
+ }
+ leaf path-role {
+ type string ;
+ description "path role." ;
+ }
+ list path-list {
+ key "ne-id";
+ description "path list." ;
+ leaf ne-id {
+ type string;
+ description "network element ID." ;
+ }
+ leaf ingress-ltp-id {
+ type string;
+ description "LTP ID." ;
+ }
+ leaf backward-peer-id {
+ type string;
+ description "backward peer ID." ;
+ }
+ leaf egress-ltp-id {
+ type string;
+ description "egress ltp ID." ;
+ }
+ leaf forward-peer-id {
+ type string;
+ description "forward peer ID." ;
+ }
+ }
+ }
+ }
+ }
+ }
diff --git a/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang
new file mode 100644
index 0000000..7fd7700
--- /dev/null
+++ b/utils/yangutils/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang
@@ -0,0 +1,816 @@
+ module ietf-sd-onos-service-types {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-sd-onos-service-types";
+ prefix service-types ;
+
+ import ietf-inet-types {prefix inet; }
+ import ietf-sd-onos-common-types {prefix types;}
+
+ organization "";
+ contact "";
+
+ description
+ "Defines basic service types for L3VPN service.";
+
+ revision "2015-12-16" {
+ reference "";
+ }
+
+ typedef exp {
+ type enumeration {
+ enum BE {
+ value 0 ;
+ description "BE." ;
+ }
+ enum AF1 {
+ value 1 ;
+ description "AF1." ;
+ }
+ enum AF2 {
+ value 2 ;
+ description "AF2." ;
+ }
+ enum AF3 {
+ value 3 ;
+ description "AF3." ;
+ }
+ enum AF4 {
+ value 4 ;
+ description "AF4." ;
+ }
+ enum EF {
+ value 5 ;
+ description "EF." ;
+ }
+ enum CS6 {
+ value 6 ;
+ description "CS6." ;
+ }
+ enum CS7 {
+ value 7 ;
+ description "CS7." ;
+ }
+ }
+ default CS7;
+ description
+ "exp parameter.";
+ }
+
+ typedef pw-role{
+ type enumeration {
+ enum normal{
+ value 0 ;
+ description "normal." ;
+ }
+ enum master {
+ value 1 ;
+ description "master." ;
+ }
+ enum slave {
+ value 2 ;
+ description "slave." ;
+ }
+ enum DNI-PW {
+ value 3 ;
+ description "DNI PW." ;
+ }
+ }
+ default normal;
+ description
+ "The role of the PW.";
+ }
+
+ grouping qos-if-car {
+ description "qos parameter." ;
+ list qos-if-car {
+ key "direction";
+ description "cars qos policy." ;
+ leaf direction {
+ type enumeration {
+ enum inbound{
+ value 0 ;
+ description "inbound." ;
+ }
+ enum outbound {
+ value 1 ;
+ description "outbound." ;
+ }
+ }
+ description "qos for interface car" ;
+ }
+
+ leaf cir {
+ type int32;
+ description "forward CIR. unit:Kbps" ;
+ }
+ leaf pir {
+ type int32;
+ description "forward PIR. unit:Kbps" ;
+ }
+ leaf cbs {
+ type int32;
+ description "forward CBS. unit:Kbps" ;
+ }
+ leaf pbs {
+ type int32;
+ description "forward PBS. unit:Kbps" ;
+ }
+ }
+ }
+
+ grouping protect-policy {
+ description "The protect policy of the VPN" ;
+ leaf protect-type {
+ type enumeration {
+ enum unprotected {
+ value 0 ;
+ description "unprotected." ;
+ }
+ enum protected {
+ value 1 ;
+ description "protection." ;
+ }
+ }
+ default unprotected ;
+ description "protection type" ;
+ }
+
+ leaf revertive-type {
+ type enumeration {
+ enum no-revertive {
+ value 0 ;
+ description "unprotected." ;
+ }
+ enum revertive {
+ value 1 ;
+ description "protection." ;
+ }
+ }
+ description "revertive mode" ;
+ }
+ leaf wtr {
+ type uint32;
+ default 300;
+ description "WTR.unit:s" ;
+ }
+ }
+ grouping oam-policy {
+ description "The oam policy of the vpn service." ;
+ leaf detect-type {
+ type enumeration {
+ enum undetect {
+ value 0 ;
+ description "unprotected." ;
+ }
+ enum APS {
+ value 1 ;
+ description "protection." ;
+ }
+ enum BFD {
+ value 2 ;
+ description "unprotected." ;
+ }
+ }
+ description "detect type" ;
+ }
+ container bfd-detect-para {
+ description "bfd detect parameters." ;
+ leaf ingress-discriminator {
+ type int32;
+ description "ingress-discriminator" ;
+ }
+ leaf egress-discriminator {
+ type int32;
+ description "egress-discriminator" ;
+ }
+ leaf tx-interval {
+ type int32;
+ description "tx-interval" ;
+ }
+ leaf rx-interval {
+ type int32;
+ description "rx-interval" ;
+ }
+ leaf detect-interval {
+ type int32;
+ description "detect-interval" ;
+ }
+ }
+ }
+ grouping ac {
+ description "Access information." ;
+ leaf id{
+ type string;
+ mandatory true;
+ description "ac id." ;
+ }
+ leaf name{
+ type string;
+ config false;
+ description "ac name." ;
+ }
+
+ leaf ne-id {
+ type string ;
+ mandatory true;
+ description "ne id." ;
+ }
+
+ leaf ltp-id {
+ type string ;
+ mandatory true;
+ description "ltp id." ;
+ }
+ leaf admin-status {
+ type types:admin-status;
+ description "Administration status." ;
+ }
+ leaf operate-status {
+ type types:operate-status;
+ description "Operation status." ;
+ }
+ container l2-access {
+ description "link layer access information of ac." ;
+ uses l2-access;
+ }
+
+ leaf role {
+ type enumeration {
+ enum master {
+ value 0 ;
+ description "master." ;
+ }
+ enum slave {
+ value 1 ;
+ description "slave." ;
+ }
+ enum hub {
+ value 2 ;
+ description "slave." ;
+ }
+ enum spoke {
+ value 3 ;
+ description "slave." ;
+ }
+ }
+ default master;
+ description "role of snc lsp." ;
+ }
+ container qos-policy {
+ description "The qos policy of the vpn service." ;
+ container qos-if-cars {
+ description "qos policy if car." ;
+ list qos-if-car {
+ //key "direction";
+ uses qos-if-car;
+ description "List of qos parameters." ;
+ }
+ }
+ }
+ }
+ grouping l3-ac {
+ description "Access information of l3vpn." ;
+ list access-circuit {
+ key "id";
+ description "list of access circuit." ;
+ uses ac;
+ container connection {
+ description "connection information of ac." ;
+ uses connection;
+ }
+ }
+ }
+ grouping l2-access {
+ description "Access information of l2vpn." ;
+ leaf access-type{
+ type enumeration {
+ enum Port {
+ value 0 ;
+ description "master." ;
+ }
+ enum Dot1Q {
+ value 1 ;
+ description "slave." ;
+ }
+ enum QinQ {
+ value 2 ;
+ description "master." ;
+ }
+ }
+ mandatory true;
+ description "The access type of the vpn service." ;
+ }
+ leaf dot1q-vlan-bitmap {
+ type string;
+ mandatory true;
+ description "Dot1Q Vlan Bitmap." ;
+ }
+
+ leaf qinq-svlan-bitmap {
+ type string;
+ mandatory true;
+ description "QinQ svlan Bitmap." ;
+ }
+
+ leaf qinq-cvlan-bitmap {
+ type string;
+ mandatory true;
+ description "QinQ cvlan Bitmap." ;
+ }
+ leaf access-action {
+ type enumeration {
+ enum Keep {
+ value 0 ;
+ description "keep." ;
+ }
+ enum Push {
+ value 1 ;
+ description "push." ;
+ }
+ enum Pop {
+ value 2 ;
+ description "pop." ;
+ }
+ enum Swap {
+ value 3 ;
+ description "swap." ;
+ }
+ }
+ mandatory true;
+ description "access type." ;
+ }
+
+ leaf action-vlan-id {
+ type int32 {
+ range "1..4094";
+ }
+ description "action vlan id." ;
+ }
+ }
+ grouping connection {
+ description "Describe the connection of the vpn service." ;
+ leaf ip-address {
+ type inet:ip-address ;
+ description "ip address of access circuit's connection." ;
+ }
+ leaf mask-length {
+ type int32 {
+ range "1..32";
+ }
+ description "mask length of ip address." ;
+ }
+ leaf protocols {
+ type enumeration {
+ enum static {
+ value 0 ;
+ description "static." ;
+ }
+ enum ospf {
+ value 1 ;
+ description "ospf." ;
+ }
+ enum isis {
+ value 2 ;
+ description "bgp" ;
+ }
+ enum bgp {
+ value 3 ;
+ description "bgp" ;
+ }
+ }
+ description "protocols between PE and CE." ;
+ }
+ container static-routes {
+ description "Defines the static routes." ;
+ list static-route {
+ key "ip-prefix mask-length";
+ description "List of static route." ;
+ leaf ip-prefix {
+ type inet:ipv4-address;
+ description "ip prefix" ;
+ }
+ leaf mask-length {
+ type uint32 {
+ range "1..32";
+ }
+ description "mast length" ;
+ }
+ leaf next-hop {
+ type inet:ipv4-address ;
+ description "next hop" ;
+ }
+ leaf preference {
+ type uint32 {
+ range "1..65535";
+ }
+ description "preference of the route." ;
+ }
+ }
+ }
+ }
+
+ grouping pw{
+ description "PW definition ";
+ leaf id {
+ type string ;
+ description "ID of pw." ;
+ }
+ uses encaplate-type-grouping;
+
+ leaf ingress-ne-id {
+ type string ;
+ description "ingress ne id." ;
+ }
+
+ leaf egress-ne-id {
+ type string ;
+ description "egress ne id." ;
+ }
+
+ leaf ctrl-word-support {
+ type enumeration {
+ enum not-support {
+ value 0 ;
+ description "pw doesn't support control word" ;
+ }
+ enum support {
+ value 1 ;
+ description "pw supports control word" ;
+ }
+ }
+ default support;
+ description "ctrl word support. 0 : not support, 1 : support" ;
+ }
+
+ leaf sn-support {
+ type enumeration {
+ enum not-support {
+ value 0 ;
+ description "pw doesn't support control word" ;
+ }
+ enum support {
+ value 1 ;
+ description "pw supports control word" ;
+ }
+ }
+ default not-support;
+ description "serial number support. 0 : not support, 1 : support" ;
+ }
+
+ leaf vccv-type {
+ type enumeration {
+ enum not-support {
+ value 0 ;
+ description "pw doesn't support vccv" ;
+ }
+ enum CWD {
+ value 1 ;
+ description "pw supports vccv" ;
+ }
+ enum Label-alert {
+ value 2 ;
+ description "pw supports vccv" ;
+ }
+ enum TTL {
+ value 3 ;
+ description "pw supports vccv" ;
+ }
+ enum CWD&Label-alert {
+ value 4 ;
+ description "pw supports vccv" ;
+ }
+ enum CWD&TTL {
+ value 5 ;
+ description "pw supports vccv" ;
+ }
+ enum Label-alert&TTL {
+ value 6 ;
+ description "pw supports vccv" ;
+ }
+ enum CWD&Label-alert&TTL {
+ value 7 ;
+ description "pw supports vccv" ;
+ }
+ }
+ default not-support;
+ description "vccv type" ;
+ }
+
+ leaf conn-ack-type {
+ type enumeration {
+ enum not-support {
+ value 0 ;
+ description "pw doesn't support connection ack" ;
+ }
+ enum support {
+ value 1 ;
+ description "pw supports connection ack" ;
+ }
+ }
+ default not-support;
+ description "Connectivity test type" ;
+ }
+ container tunnels {
+ description "Define tunnels." ;
+ list tunnel{
+ key "tunnel-id";
+ description "The list of tunnel id." ;
+ uses tunnel;
+ }
+ }
+ }
+ grouping tunnel {
+ description "Reusable entity of tunnel." ;
+ leaf tunnel-id {
+ type string ;
+ description "ID of tunnel." ;
+ }
+ }
+ grouping encaplate-type-grouping {
+ description "encaplate type" ;
+ leaf encaplate-type {
+ type enumeration {
+ enum NONE {
+ value 0 ;
+ description "none." ;
+ }
+ enum fr-dlci-martini {
+ value 1 ;
+ description "fr-dlci-martini." ;
+ }
+ enum atm-aal5-sdu {
+ value 2 ;
+ description "atm-aal5-sdu." ;
+ }
+ enum atm-transparent {
+ value 3 ;
+ description "atm-transparent." ;
+ }
+ enum ethernet-vlan {
+ value 4 ;
+ description "ethernet-vlan." ;
+ }
+ enum ethernet {
+ value 5 ;
+ description "ethernet ." ;
+ }
+ enum hdlc {
+ value 6 ;
+ description " hdlc." ;
+ }
+ enum ppp {
+ value 7 ;
+ description "ppp." ;
+ }
+ enum cep-mpls {
+ value 8 ;
+ description " cep-mpls." ;
+ }
+ enum atm-ntol {
+ value 9 ;
+ description "atm-ntol." ;
+ }
+ enum atm-nto1-vpc {
+ value 10 ;
+ description "atm-nto1-vpc." ;
+ }
+ enum ip-layer2 {
+ value 11 ;
+ description " ip-layer2." ;
+ }
+ enum atm-1to1-vcc {
+ value 12 ;
+ description "atm-1to1-vcc." ;
+ }
+ enum atm-1to1-vpc {
+ value 13 ;
+ description "atm-1to1-vpc." ;
+ }
+ enum atm-aal5-pdu {
+ value 14 ;
+ description "atm-aal5-pdu." ;
+ }
+ enum fr-port {
+ value 15 ;
+ description "fr-port." ;
+ }
+ enum cep-packet {
+ value 16 ;
+ description "cep-packet." ;
+ }
+ enum e1 {
+ value 17 ;
+ description "e1." ;
+ }
+ enum t1 {
+ value 18 ;
+ description "t1." ;
+ }
+ enum e3 {
+ value 19 ;
+ description "e3." ;
+ }
+ enum t3 {
+ value 20 ;
+ description " t3." ;
+ }
+ enum cesopsn-basic {
+ value 21 ;
+ description "cesopsn-basic." ;
+ }
+ enum tdmoip-aal1 {
+ value 22 ;
+ description "tdmoip-aal1." ;
+ }
+ enum cesopsn-tdm {
+ value 23 ;
+ description "cesopsn-tdm." ;
+ }
+ enum tdmoip-aal2 {
+ value 24 ;
+ description "tdmoip-aal2." ;
+ }
+ enum fr-dlci {
+ value 25 ;
+ description "fr-dlci." ;
+ }
+ }
+ description "encaplate type." ;
+ }
+ }
+
+ grouping pw-trail{
+ description "pw trail information." ;
+ leaf id {
+ type string ;
+ description "ID of pw-trail." ;
+ }
+
+ leaf role {
+ type pw-role;
+ description "role of pw-trail." ;
+ }
+ container pw-lists {
+ description "List of pw information." ;
+ list pw-list {
+ key id;
+ description "List of pw information." ;
+ uses pw ;
+ }
+ }
+ }
+ grouping tunnel-service {
+ description "Reusable entity of tunnel service." ;
+ leaf signaling-type {
+ type enumeration {
+ enum RSVP-TE {
+ value 0 ;
+ description "RSVP-TE" ;
+ }
+ enum LDP {
+ value 1 ;
+ description "LDP" ;
+ }
+ enum GRE {
+ value 2 ;
+ description "GRE" ;
+ }
+ enum SR-BE {
+ value 3 ;
+ description "SR-BE" ;
+ }
+ enum SR-TE {
+ value 4 ;
+ description "SR-TE" ;
+ }
+ }
+ default RSVP-TE;
+ description "signaling type." ;
+ }
+ leaf tunnel-mode {
+ type enumeration {
+ enum Nto1 {
+ value 0 ;
+ description "multi service one tunnel" ;
+ }
+ enum 1to1 {
+ value 1 ;
+ description "oner service one tunnel" ;
+ }
+ }
+ default Nto1;
+ description "service to tunnel mode." ;
+ }
+ container protect-policy {
+ description "Protect policy." ;
+ uses protect-policy;
+ }
+ container oam-policy {
+ description "oam policy." ;
+ uses oam-policy;
+ }
+ leaf latency {
+ type int32;
+ description "tunnel latency requirement." ;
+ }
+ }
+ grouping service-path {
+ description "Service path of l3vpn." ;
+ list service-path{
+ key "service-id source-ne-id source-ac-id destination-ne-id destination-ac-id";
+ description
+ "The list of service path.";
+ leaf service-id {
+ type string ;
+ description "l2vpn or l3vpn service id." ;
+ }
+ leaf source-ne-id {
+ type string ;
+ description "source ne id." ;
+ }
+
+ leaf source-ac-id {
+ type string ;
+ description "source ltp id." ;
+ }
+ leaf destination-ne-id {
+ type string ;
+ description "destination ne id." ;
+ }
+
+ leaf destination-ac-id {
+ type string ;
+ description "destination ltp id." ;
+ }
+ container path-lists{
+ description "The path list of service path." ;
+ list path-list {
+ key "path-layer path-role";
+ description "The path list of service path." ;
+ leaf path-layer {
+ type enumeration {
+ enum PW {
+ value 0 ;
+ description "pw path." ;
+ }
+ enum BGP-LSP {
+ value 1 ;
+ description "BGP-LSP Path." ;
+ }
+ enum LSP {
+ value 2 ;
+ description "LSP Path." ;
+ }
+ }
+ description "path type. 0 : PW, 1 : BGP-LSP, 2 : PW" ;
+ }
+ leaf path-role {
+ type enumeration {
+ enum Primary {
+ value 0 ;
+ description "master path." ;
+ }
+ enum Backup {
+ value 1 ;
+ description "backup path." ;
+ }
+ enum Active {
+ value 2 ;
+ description "active path." ;
+ }
+ }
+ description "path role.. 0 : master, 1 : backup, 2 :
+ Bypass." ;
+ }
+ container paths {
+ description "path definition." ;
+ list path {
+ key "ne-id";
+ description "Network element id list." ;
+ leaf ne-id {
+ type string;
+ description "Network element id." ;
+ }
+ leaf ingress-ltp-id {
+ type string;
+ description "ingress ltd id." ;
+ }
+ leaf backward-peer-id {
+ type string;
+ description "backward peer id." ;
+ }
+ leaf egress-ltp-id {
+ type string;
+ description "egress ltd id." ;
+ }
+ leaf forward-peer-id {
+ type string;
+ description "forward peer id." ;
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+ }