Add initial support for provisioning and removing services, getting service data
Change-Id: Ie49206d788a202e70a8d64f083c3f85b92ced8fb
diff --git a/build/config/nacm.xml b/build/config/nacm.xml
index f9dad2e..cc9bcbd 100644
--- a/build/config/nacm.xml
+++ b/build/config/nacm.xml
@@ -23,4 +23,20 @@
<action>permit</action>
</rule>
</rule-list>
+ <rule-list>
+ <name>services</name>
+ <group>voltha</group>
+ <rule>
+ <name>allow-vlans</name>
+ <module-name>bbf-l2-access-attributes</module-name>
+ <access-operations>*</access-operations>
+ <action>permit</action>
+ </rule>
+ <rule>
+ <name>allow-services</name>
+ <module-name>bbf-nt-service-profile</module-name>
+ <access-operations>*</access-operations>
+ <action>permit</action>
+ </rule>
+ </rule-list>
</nacm>
\ No newline at end of file
diff --git a/build/package/Dockerfile.bbf-adapter b/build/package/Dockerfile.bbf-adapter
index 2517145..cd55303 100644
--- a/build/package/Dockerfile.bbf-adapter
+++ b/build/package/Dockerfile.bbf-adapter
@@ -104,7 +104,6 @@
# Copy yang files and install them to sysrepo
COPY ./build/yang-files /yang
-RUN for f in /yang/*.yang; do sysrepoctl -i "$f" -s /yang -o $NETCONF_USER -g netconf -p 664 -v3; done
RUN for f in /yang/*/*.yang; do sysrepoctl -i "$f" -s /yang -o $NETCONF_USER -g netconf -p 664 -v3; done
COPY ./build/config /config
diff --git a/build/yang-files/bbf-device-aggregation.yang b/build/yang-files/devices/bbf-device-aggregation.yang
similarity index 100%
rename from build/yang-files/bbf-device-aggregation.yang
rename to build/yang-files/devices/bbf-device-aggregation.yang
diff --git a/build/yang-files/bbf-device-types.yang b/build/yang-files/devices/bbf-device-types.yang
similarity index 100%
rename from build/yang-files/bbf-device-types.yang
rename to build/yang-files/devices/bbf-device-types.yang
diff --git a/build/yang-files/bbf-yang-types.yang b/build/yang-files/devices/bbf-yang-types.yang
similarity index 100%
rename from build/yang-files/bbf-yang-types.yang
rename to build/yang-files/devices/bbf-yang-types.yang
diff --git a/build/yang-files/iana-hardware@2018-03-13.yang b/build/yang-files/devices/iana-hardware@2018-03-13.yang
similarity index 100%
rename from build/yang-files/iana-hardware@2018-03-13.yang
rename to build/yang-files/devices/iana-hardware@2018-03-13.yang
diff --git a/build/yang-files/ietf-hardware@2018-03-13.yang b/build/yang-files/devices/ietf-hardware@2018-03-13.yang
similarity index 100%
rename from build/yang-files/ietf-hardware@2018-03-13.yang
rename to build/yang-files/devices/ietf-hardware@2018-03-13.yang
diff --git a/build/yang-files/iana-if-type@2021-06-21.yang b/build/yang-files/notification/iana-if-type@2021-06-21.yang
similarity index 100%
rename from build/yang-files/iana-if-type@2021-06-21.yang
rename to build/yang-files/notification/iana-if-type@2021-06-21.yang
diff --git a/build/yang-files/services/bbf-dot1q-types.yang b/build/yang-files/services/bbf-dot1q-types.yang
new file mode 100644
index 0000000..e934c43
--- /dev/null
+++ b/build/yang-files/services/bbf-dot1q-types.yang
@@ -0,0 +1,290 @@
+module bbf-dot1q-types {
+ yang-version 1.1;
+ namespace "urn:bbf:yang:bbf-dot1q-types";
+ prefix bbf-dot1qt;
+
+ organization
+ "Broadband Forum <https://www.broadband-forum.org>
+ Common YANG Work Area";
+ contact
+ "Comments or questions about this Broadband Forum YANG module
+ should be directed to <mailto:help@broadband-forum.org>.
+
+ Editor: Nick Hancock, ADTRAN
+
+ Editor: Ludwig Pauwels, Nokia
+
+ PS Leader: Joey Boyd, ADTRAN
+
+ PS Leader: Sowrirajan Padmanabhan, Nokia
+
+ WA Director: Joey Boyd, ADTRAN
+
+ WA Director: Sven Ooghe, Nokia";
+ description
+ "This module contains a collection of YANG definitions for
+ supporting the Broadband Forum requirements on reusable data
+ types as applicable to access network equipment. As such, this
+ module is specific to access network equipment (e.g.,
+ BBF-specified Access Nodes and FTTdp DPUs).
+
+ Specifically, this module defines common types for support of
+ IEEE 802.1Q.
+
+ Copyright (c) 2017-2021, Broadband Forum
+
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ The above license is used as a license under copyright only.
+ Please reference the Forum IPR Policy for patent licensing terms
+ <https://www.broadband-forum.org/ipr-policy>.
+
+ Any moral rights which are necessary to exercise under the above
+ license grant are also deemed granted under this license.
+
+ This version of this YANG module is part of TR-383a4; see
+ the TR itself for full legal notices.";
+
+ revision 2021-06-02 {
+ description
+ "Amendment 4.
+ * Approval Date: 2021-06-02.
+ * Publication Date: 2021-06-02.";
+ reference
+ "TR-383a4: Common YANG Modules
+ <https://www.broadband-forum.org/technical/download/
+ TR-383_Amendment-4.pdf>";
+ }
+ revision 2020-10-13 {
+ description
+ "Amendment 3.
+ * Approval Date: 2020-10-13.
+ * Publication Date: 2020-10-13.";
+ reference
+ "TR-383a3: Common YANG Modules
+ <https://www.broadband-forum.org/technical/download/
+ TR-383_Amendment-3.pdf>";
+ }
+ revision 2018-07-13 {
+ description
+ "Amendment 1.
+ * Approval Date: 2018-06-04.
+ * Publication Date: see revision date above.";
+ reference
+ "TR-383: Common YANG Modules
+ <https://www.broadband-forum.org/technical/download/
+ TR-383_Amendment-1.pdf>";
+ }
+ revision 2017-05-08 {
+ description
+ "Initial revision.
+ * Approval Date: see revision date above.
+ * Publication Date: 2017-06-02.";
+ reference
+ "TR-383: Common YANG Modules
+ <https://www.broadband-forum.org/technical/download/
+ TR-383.pdf>";
+ }
+
+ identity dot1q-tag-vlan-type {
+ description
+ "Base identity from which all IEEE 802.1Q VLAN tag types are
+ derived.";
+ }
+
+ identity c-vlan {
+ base dot1q-tag-vlan-type;
+ description
+ "An IEEE 802.1Q Customer VLAN tag, using the 0x8100
+ Ethertype.";
+ }
+
+ identity s-vlan {
+ base dot1q-tag-vlan-type;
+ description
+ "An IEEE 802.1Q Service VLAN tag, using a the 0x88a8 Ethertype,
+ originally introduced in IEEE 802.1ad, and incorporated into
+ IEEE 802.1Q-2014.";
+ }
+
+ typedef dot1q-tag-type {
+ type identityref {
+ base dot1q-tag-vlan-type;
+ }
+ description
+ "Identifies a specific IEEE 802.1Q tag type.";
+ reference
+ "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+ }
+
+ typedef vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ description
+ "The type uniquely identifies a VLAN. This is the
+ 12-bit VLAN ID used in the VLAN tag header.
+ The range 1..4094 is defined by the referenced
+ specification.";
+ reference
+ "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+ }
+
+ typedef vlan-id-or-0 {
+ type uint16 {
+ range "0..4094";
+ }
+ description
+ "The type uniquely identifies a VLAN. This is the
+ 12-bit VLAN ID used in the VLAN tag header.
+ The range 1..4094 is defined by the referenced specification.
+ The value 0 allows support of priority-tagged frames.";
+ reference
+ "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+ }
+
+ typedef vlan-id-range {
+ type string {
+ pattern '(([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-3][0-9][0-9]['
+ + '0-9]|40[0-8][0-9]|409[0-4])([,-]([1-9]|[1-9][0-9]|['
+ + '1-9][0-9][0-9]|[1-3][0-9][0-9][0-9]|40[0-8][0-9]|'
+ + '409[0-4]))*)?';
+ }
+ description
+ "A list of VLAN IDs, or non overlapping VLAN ranges, in
+ ascending order, between 1 and 4094.
+
+ The format of this string can be any of the following:
+
+ single value
+ Example: '23'
+ comma separated list of values
+ Example: '1,2,100'
+ range of values
+ Example: '1-1000'
+ comma separated list of ranges
+ Example: '1-1000,2001-2999'
+ comma separated list of values and ranges
+ Example: '1-1000,1500,2001-2999'";
+ }
+
+ typedef pbit {
+ type uint8 {
+ range "0..7";
+ }
+ description
+ "Priority Code Point. PCP is a 3-bit field that refers to the
+ class of service applied to a VLAN tagged frame. The
+ field specifies a priority value between 0 and 7, these values
+ can be used by quality of service (QoS) to prioritize
+ different classes of traffic.";
+ reference
+ "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+ }
+
+ typedef pbit-list {
+ type string {
+ pattern '([0-7](-[0-7])?(,[0-7](-[0-7])?)*)';
+ }
+ description
+ "A list of p-bits values, or non overlapping p-bits value
+ ranges, in ascending order. Each p-bits value shall be between
+ 0 and 7.
+
+ Example: 0,2-4,7
+ ";
+ }
+
+ typedef dei {
+ type uint8 {
+ range "0..1";
+ }
+ description
+ "Drop Eligible Indicator. DEI is a 1-bit field in the VLAN tag.
+ May be used separately or in conjunction with PCP to indicate
+ frames eligible to be dropped in the presence of congestion.";
+ reference
+ "IEEE 802.1Q-2014: Virtual Bridged Local Area Networks";
+ }
+
+ typedef ether-type {
+ type uint16;
+ description
+ "The Ethernet Type (or Length) value.";
+ reference
+ "IEEE 802.3-2012: IEEE Standard for Ethernet, clause 3.2.6";
+ }
+
+ typedef ether-type-hex {
+ type string {
+ pattern '0x[A-Fa-f0-9]{4}';
+ }
+ description
+ "The Ethernet Type (or Length) value expressed as a 4 hex digits
+ in the form 0xABCD.";
+ reference
+ "IEEE 802.3-2012: IEEE Standard for Ethernet, clause 3.2.6";
+ }
+
+ typedef ether-type-or-acronym {
+ type union {
+ type ether-type;
+ type enumeration {
+ enum any {
+ description
+ "Matches any Ethertype value.";
+ }
+ enum ipv4 {
+ description
+ "Matches the Ethertype value 0x0800 or 0x0806 or
+ 0x8035.";
+ }
+ enum pppoe {
+ description
+ "Matches the Ethertype value 0x8863 or 0x8864.";
+ }
+ enum ipv6 {
+ description
+ "Matches the Ethertype value 0x86DD.";
+ }
+ }
+ type ether-type-hex;
+ }
+ description
+ "This type allows to specify
+ - a specific integer value identifying a particular Ethertype
+ value of frames,
+ - a 'pre-defined' enumeration value identifying one or more
+ specific Ethertype values,
+ - the enumeration value 'any' that identifies all frames.";
+ }
+}
diff --git a/build/yang-files/services/bbf-l2-access-attributes.yang b/build/yang-files/services/bbf-l2-access-attributes.yang
new file mode 100644
index 0000000..85bf697
--- /dev/null
+++ b/build/yang-files/services/bbf-l2-access-attributes.yang
@@ -0,0 +1,342 @@
+module bbf-l2-access-attributes {
+ yang-version 1.1;
+ namespace "urn:bbf:yang:bbf-l2-access-attributes";
+ prefix bbf-l2access-attr;
+
+ import bbf-dot1q-types {
+ prefix bbf-dot1qt;
+ }
+ import ietf-network {
+ prefix nw;
+ }
+ import ietf-network-topology {
+ prefix nt;
+ }
+
+ organization
+ "Broadband Forum <https://www.broadband-forum.org>
+ Common YANG Work Area";
+ contact
+ "Comments or questions about this Broadband Forum YANG module
+ should be directed to <mailto:help@broadband-forum.org>.
+
+ Editor: TBD
+
+ PS Leader: TBD
+
+ WA Director: TBD";
+ description
+ "This module contains a collection of YANG definitions for
+ simplifying the Access Device Model as exposed over NBI of BAA.
+
+ Copyright (c) 2022, Broadband Forum
+
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ The above license is used as a license under copyright only.
+ Please reference the Forum IPR Policy for patent licensing terms
+ <https://www.broadband-forum.org/ipr-policy>.
+
+ Any moral rights which are necessary to exercise under the above
+ license grant are also deemed granted under this license.
+
+ This version of this YANG module is part of TR-383a4; see
+ the TR itself for full legal notices.";
+
+ revision 2021-09-30 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8944: A YANG Data Model for Layer 2 Network Topologies";
+ }
+
+ grouping access-tag {
+ leaf tag-type {
+ type union {
+ type bbf-dot1qt:dot1q-tag-type;
+ type uint16;
+ type enumeration {
+ enum any {
+ description
+ "Matches any tag type.";
+ }
+ }
+ }
+ default "any";
+ description
+ "VLAN tag type.";
+ }
+ leaf vlan-id {
+ type union {
+ type bbf-dot1qt:vlan-id-range;
+ type enumeration {
+ enum any {
+ description
+ "Matches any VLAN-ID in the range 1 to 4094, or
+ matches priority tagged frames.";
+ }
+ enum priority-tagged {
+ description
+ "Priority-tagged frames are frames with a VLAN tag
+ present and that match VLAN-ID 0.";
+ }
+ enum vlan-id-is-a-parameter {
+ description
+ "The VLAN ID is not
+ specified inside this profile but has to be
+ specified at the place where this profile
+ is referenced.";
+ }
+ }
+ }
+ mandatory true;
+ description
+ "Allowed VLAN-IDs.";
+ }
+ leaf pbit {
+ type union {
+ type bbf-dot1qt:pbit-list;
+ type enumeration {
+ enum any {
+ description
+ "Matches any pbit value in the range of 0 to 7.";
+ }
+ }
+ }
+ description
+ "Allowed PBIT values.";
+ }
+ }
+
+ grouping access-vlan-tag-match {
+ description
+ "Flexible match on the VLAN tags of Ethernet frames.";
+ choice vlan-tag-match-type {
+ description
+ "Provides a choice of how the frames may be matched.";
+ case untagged {
+ leaf untagged {
+ type empty;
+ description
+ "Untagged match. Matches all untagged traffic.";
+ }
+ }
+ case vlan-tagged {
+ container outer-tag {
+ description
+ "Classifies traffic using the outermost VLAN tag on the
+ frame.";
+ uses access-tag;
+ }
+ container second-tag {
+ description
+ "Classifies traffic using the second outermost VLAN tag
+ on the frame.";
+ uses access-tag;
+ }
+ }
+ }
+ }
+
+ grouping access-vlan-tag-rewrite {
+ description
+ "Flexible match on the VLAN tags of Ethernet frames.";
+ leaf pop-tags {
+ type uint8 {
+ range "0..2";
+ }
+ description
+ "The number of tags to pop.";
+ }
+ container push-outer-tag {
+ description
+ "The outermost VLAN tag to push onto the frame.";
+ uses access-tag;
+ }
+ container push-second-tag {
+ description
+ "The second outermost VLAN tag to push onto the frame.";
+ uses access-tag;
+ }
+ }
+
+ grouping vlan-match-and-rewrite {
+ description
+ "Configuration of frame vlan tag processing, include frame classification and vlan tag rewrite";
+ container match-criteria {
+ description
+ "This container collects match criteria for various frame fields.";
+ uses access-vlan-tag-match;
+ }
+ container ingress-rewrite {
+ description
+ "Ingress rewrite refers to the supported tag manipulations
+ before the frame is offered to a higher layer interface or
+ to a forwarder or to a destination termination-point.";
+ uses access-vlan-tag-rewrite;
+ }
+ }
+
+ grouping l2-access-attributes {
+ description
+ "Flexible match on the VLAN tags of Ethernet frames.";
+ container vlan-translation {
+ leaf translation-profile {
+ type leafref {
+ path
+ "/bbf-l2access-attr:vlan-translation-profiles/bbf-l2access-attr:"
+ + "vlan-translation-profile/bbf-l2access-attr:name";
+ }
+ description
+ "A reference to a vlan translation profile that contains
+ frame vlan classification and vlan tag rewrite.";
+ }
+ leaf outer-vlan-id {
+ when
+ '/bbf-l2access-attr:vlan-translation-profiles/'
+ + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+ + 'name = current()/../../vlan-translation-profile]/'
+ + 'match-criteria/outer-tag/vlan-id = '
+ + '"vlan-id-is-a-parameter" ' {
+ description
+ "Match criteria for the outer VLAN tag of a frame that
+ overrules the match criteria provided through the
+ referenced vlan translaton profile.";
+ }
+ type bbf-dot1qt:vlan-id;
+ }
+ leaf second-vlan-id {
+ when
+ '/bbf-l2access-attr:vlan-translation-profiles/'
+ + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+ + 'name = current()/../../vlan-translation-profile]/'
+ + 'match-criteria/second-tag/vlan-id = '
+ + '"vlan-id-is-a-parameter" ' {
+ description
+ "Match criteria for the second VLAN tag of a frame that
+ overrules the match criteria provided through the
+ referenced vlan translaton profile.";
+ }
+ type bbf-dot1qt:vlan-id;
+ }
+ leaf push-outer-vlan-id {
+ when
+ '/bbf-l2access-attr:vlan-translation-profiles/'
+ + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+ + 'name = current()/../../vlan-translation-profile]/'
+ + 'ingress-rewrite/push-outer-tag/vlan-id = '
+ + '"vlan-id-is-a-parameter" ' {
+ description
+ "Indicates the VLAN ID of the pushed outer VLAN tag,
+ which overwrites the outer VLAN tag rewritten
+ by the referenced VLAN translation profile.";
+ }
+ type bbf-dot1qt:vlan-id;
+ }
+ leaf push-second-vlan-id {
+ when
+ '/bbf-l2access-attr:vlan-translation-profiles/'
+ + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+ + 'name = current()/../../vlan-translation-profile]/'
+ + 'ingress-rewrite/push-second-tag/vlan-id = '
+ + '"vlan-id-is-a-parameter" ' {
+ description
+ "Indicates the VLAN ID of the pushed seconed VLAN tag,
+ which overwrites the seconed VLAN tag rewritten
+ by the referenced VLAN translation profile.";
+ }
+ type bbf-dot1qt:vlan-id;
+ }
+ }
+ }
+
+ container vlan-translation-profiles {
+ description
+ "Configuration of VLAN translation profiles.";
+ list vlan-translation-profile {
+ key "name";
+ description
+ "A translation profile defines the vlan match criteria and
+ vlan tag rewrite.";
+ leaf name {
+ type string;
+ description
+ "vlan translaton profile name.";
+ }
+ uses vlan-match-and-rewrite;
+ }
+ }
+ container vlan-forwarding-profiles {
+ description
+ "Configuration of VLAN forwarding profiles.";
+ list vlan-forwarding-profile {
+ key "name";
+ description
+ "A forwarding profile defines the network-side
+ forwarding of traffic in a forwarding VLAN.";
+ leaf name {
+ type string;
+ description
+ "vlan forwrding profile name.";
+ }
+ container forwarding-ports {
+ description
+ "Network-side forwarding ports in the forwarding profile.";
+ list port {
+ key "name";
+ leaf name {
+ type string;
+ description
+ "forwarding port name.";
+ }
+ leaf node-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "This leaf references a network side node.";
+ }
+ leaf tp-ref {
+ type leafref {
+ path "/nw:networks/nw:network/"
+ + "nw:node/nt:termination-point/nt:tp-id";
+ require-instance false;
+ }
+ description
+ "This leaf references a network side termination point types.";
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/build/yang-files/services/bbf-nt-line-profile.yang b/build/yang-files/services/bbf-nt-line-profile.yang
new file mode 100644
index 0000000..f17e781
--- /dev/null
+++ b/build/yang-files/services/bbf-nt-line-profile.yang
@@ -0,0 +1,197 @@
+module bbf-nt-line-profile {
+ yang-version 1.1;
+ namespace "urn:bbf:yang:bbf-nt-line-profile";
+ prefix bbf-nt-line-prof;
+
+ organization
+ "Broadband Forum <https://www.broadband-forum.org>
+ Common YANG Work Area";
+ contact
+ "Comments or questions about this Broadband Forum YANG module
+ should be directed to <mailto:help@broadband-forum.org>.
+
+ Editor: TBD
+
+ PS Leader: TBD
+
+ WA Director: TBD";
+ description
+ "This module contains a collection of YANG definitions for
+ simplifying the Access Device Model as exposed over NBI of BAA.
+
+ Copyright (c) 2022, Broadband Forum
+
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ The above license is used as a license under copyright only.
+ Please reference the Forum IPR Policy for patent licensing terms
+ <https://www.broadband-forum.org/ipr-policy>.
+
+ Any moral rights which are necessary to exercise under the above
+ license grant are also deemed granted under this license.
+
+ This version of this YANG module is part of TR-383a4; see
+ the TR itself for full legal notices.";
+
+ revision 2021-09-14 {
+ description
+ "Initial revision.";
+ reference
+ "";
+ }
+
+ typedef line-profile-ref {
+ type leafref {
+ path
+ "/bbf-nt-line-prof:line-profiles/bbf-nt-line-prof:line-profile/bbf-nt-line-prof:name";
+ }
+ description
+ "A reference to a network termination line profile.";
+ }
+
+ typedef line-bandwidth-ref {
+ type leafref {
+ path
+ "/bbf-nt-line-prof:line-bandwidth-profiles/bbf-nt-line-prof:line-bandwidth-profile/bbf-nt-line-prof:name";
+ }
+ description
+ "A reference to a network termination bandwidth profile.";
+ }
+
+ container line-bandwidth-profiles {
+ list line-bandwidth-profile {
+ key "name";
+ description
+ "List of line profiles.";
+ leaf name {
+ type string {
+ length "1..32";
+ }
+ description
+ "The line bandwidth profile name.";
+ }
+ leaf fixed-bandwidth {
+ type uint64;
+ units "bits/second";
+ default "0";
+ description
+ "Represents the reserved portion of the bandwidth capacity that
+ is allocated to the given traffic flow, regardless of its
+ traffic demand and the overall traffic load conditions.";
+ }
+ leaf assured-bandwidth {
+ type uint64;
+ units "bits/second";
+ default "0";
+ description
+ "Represents a portion of the bandwidth capacity that is allocated
+ to the given traffic flow as long as the flow has
+ unsatisfied traffic demand, regardless of the overall
+ traffic conditions.";
+ }
+ leaf maximum-bandwidth {
+ type uint64;
+ units "bits/second";
+ description
+ "Represents the upper limit on the total bandwidth that can
+ be allocated to the traffic flow under any traffic
+ conditions. The maximum bandwidth must be greater than or equal
+ to the sum of any configured fixed and assured
+ bandwidth";
+ }
+ }
+ }
+ container line-profiles {
+ description
+ "All config data for line profile.";
+ list line-profile {
+ key "name";
+ description
+ "List of line profiles.";
+ leaf name {
+ type string {
+ length "1..32";
+ }
+ description
+ "The line profile name.";
+ }
+ container virtual-ports {
+ description
+ "All config data for virtual ports of the network termination.";
+ list virtual-port {
+ key "name";
+ description
+ "List of virtual ports.";
+ leaf name {
+ type string;
+ description
+ "Name of virtual port.";
+ }
+ leaf line-bandwidth-ref {
+ type line-bandwidth-ref;
+ description
+ "A reference to a network termination line bandwidth profile.";
+ }
+ list match-criteria {
+ key "name";
+ description
+ "List of match criterias.";
+ leaf name {
+ type string;
+ description
+ "Name of match criteria.";
+ }
+ leaf uni-port {
+ type uint8;
+ description
+ "Indicates the user-side port of the network termination.";
+ }
+ leaf vlan {
+ type uint32 {
+ range "0.. 4095 | 65533";
+ }
+ description
+ "Indicates the VLAN ID of the service. The value 65533 indicates untag traffic stream.";
+ }
+ leaf priority {
+ type uint32 {
+ range "0..7";
+ }
+ description
+ "Indicates the priority of the service.";
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/build/yang-files/services/bbf-nt-service-profile-voltha.yang b/build/yang-files/services/bbf-nt-service-profile-voltha.yang
new file mode 100644
index 0000000..e63c56f
--- /dev/null
+++ b/build/yang-files/services/bbf-nt-service-profile-voltha.yang
@@ -0,0 +1,165 @@
+module bbf-nt-service-profile-voltha {
+ yang-version 1.1;
+
+ namespace "urn:bbf:yang:bbf-nt-service-profile-voltha";
+ prefix bbf-voltha-srv-prof;
+
+ import bbf-nt-service-profile {
+ prefix bbf-nt-srv-prof;
+ }
+ import bbf-nt-line-profile {
+ prefix bbf-nt-line-prof;
+ }
+ import ietf-yang-types {
+ prefix yang;
+ }
+
+ organization
+ "Broadband Forum <https://www.broadband-forum.org>
+ SDN/NFV Work Area";
+ contact
+ "Comments or questions about this Broadband Forum YANG module
+ should be directed to <mailto:help@broadband-forum.org>.
+
+ Editor: TBD
+
+ WA Director: Mengmeng Li, China Mobile
+
+ WA Director: Bruno Cornaglia, Vodafone";
+ description
+ "TBD.
+
+ Copyright (c) 2019-2022, Broadband Forum
+
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ The above license is used as a license under copyright only.
+ Please reference the Forum IPR Policy for patent licensing terms
+ <https://www.broadband-forum.org/ipr-policy>.
+
+ Any moral rights which are necessary to exercise under the above
+ license grant are also deemed granted under this license.
+
+ This version of this YANG module is part of TR-451; see
+ the TR itself for full legal notices.";
+
+ revision 2022-03-22 {
+ description
+ "Initial revision.";
+ reference
+ "TBD";
+ }
+
+ augment "/bbf-nt-srv-prof:service-profiles"
+ + "/bbf-nt-srv-prof:service-profile/bbf-nt-srv-prof:ports"
+ + "/bbf-nt-srv-prof:port" {
+ description
+ "Augmentation of the service profile to add bandwidth profiles
+ and VOLTHA specific values";
+
+ leaf technology-profile-id {
+ type uint32;
+ description
+ "ID of the technology profile, that has to be already
+ configured in VOLTHA.
+ The technology profile protobuf definitation can be found
+ here https://github.com/opencord/voltha-protos/blob/" +
+ "master/protos/voltha_protos/tech_profile.proto";
+ }
+ leaf upstream-subscriber-bp-name {
+ type leafref {
+ path
+ "/bbf-nt-line-prof:line-bandwidth-profiles"
+ + "/bbf-nt-line-prof:line-bandwidth-profile"
+ + "/bbf-nt-line-prof:name";
+ }
+ description
+ "Name of the UNI upstream bandwidth profile";
+ }
+ leaf downstream-subscriber-bp-name {
+ type leafref {
+ path
+ "/bbf-nt-line-prof:line-bandwidth-profiles"
+ + "/bbf-nt-line-prof:line-bandwidth-profile"
+ + "/bbf-nt-line-prof:name";
+ }
+ description
+ "Name of the UNI downstream bandwidth profile";
+ }
+ leaf upstream-olt-bp-name {
+ type leafref {
+ path
+ "/bbf-nt-line-prof:line-bandwidth-profiles"
+ + "/bbf-nt-line-prof:line-bandwidth-profile"
+ + "/bbf-nt-line-prof:name";
+ }
+ description
+ "Name of the OLT upstream bandwidth profile";
+ }
+ leaf downstream-olt-bp-name {
+ type leafref {
+ path
+ "/bbf-nt-line-prof:line-bandwidth-profiles"
+ + "/bbf-nt-line-prof:line-bandwidth-profile"
+ + "/bbf-nt-line-prof:name";
+ }
+ description
+ "Name of the OLT downstream bandwidth profile";
+ }
+ leaf mac-learning-enabled {
+ type boolean;
+ description
+ "Whether or not MAC learning has to be enabled for
+ this service";
+ }
+ leaf dhcp-required {
+ type boolean;
+ description
+ "Whether or not DHCP is required for this service";
+ }
+ leaf igmp-required {
+ type boolean;
+ description
+ "Whether or not IGMP is required for this service";
+ }
+ leaf pppoe-required {
+ type boolean;
+ description
+ "Whether or not PPPoE is required for this service";
+ }
+ leaf configured-mac-address {
+ type yang:mac-address;
+ description
+ "MAC address for the service";
+ }
+ }
+}
diff --git a/build/yang-files/services/bbf-nt-service-profile.yang b/build/yang-files/services/bbf-nt-service-profile.yang
new file mode 100644
index 0000000..799bc93
--- /dev/null
+++ b/build/yang-files/services/bbf-nt-service-profile.yang
@@ -0,0 +1,134 @@
+module bbf-nt-service-profile {
+ yang-version 1.1;
+ namespace "urn:bbf:yang:bbf-nt-service-profile";
+ prefix bbf-nt-srv-prof;
+
+ import bbf-l2-access-attributes {
+ prefix bbf-l2access-attr;
+ }
+
+ organization
+ "Broadband Forum <https://www.broadband-forum.org>
+ Common YANG Work Area";
+ contact
+ "Comments or questions about this Broadband Forum YANG module
+ should be directed to <mailto:help@broadband-forum.org>.
+
+ Editor: TBD
+
+ PS Leader: TBD
+
+ WA Director: TBD";
+ description
+ "This module contains a collection of YANG definitions for
+ simplifying the Access Device Model as exposed over NBI of BAA.
+
+ Copyright (c) 2022, Broadband Forum
+
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ The above license is used as a license under copyright only.
+ Please reference the Forum IPR Policy for patent licensing terms
+ <https://www.broadband-forum.org/ipr-policy>.
+
+ Any moral rights which are necessary to exercise under the above
+ license grant are also deemed granted under this license.
+
+ This version of this YANG module is part of TR-383a4; see
+ the TR itself for full legal notices.";
+
+ revision 2021-09-14 {
+ description
+ "Initial revision.";
+ reference
+ "";
+ }
+
+ typedef srv-profile-ref {
+ type leafref {
+ path
+ "/bbf-nt-srv-prof:service-profiles/bbf-nt-srv-prof:service-profile/bbf-nt-srv-prof:name";
+ }
+ description
+ "A reference to a service profile.";
+ }
+
+ container service-profiles {
+ description
+ "All config data for service profile.";
+ list service-profile {
+ key "name";
+ description
+ "List of service profiles.";
+ leaf name {
+ type string {
+ length "1..32";
+ }
+ description
+ "The service profile name.";
+ }
+ container ports {
+ description
+ "All config data for ports.";
+ list port {
+ key "name";
+ description
+ "List of the port attribute.";
+ leaf name {
+ type string {
+ length "1..64";
+ }
+ description
+ "This object indicates the name of the port.";
+ }
+ container port-vlans {
+ description
+ "All config data for port vlan.";
+ list port-vlan {
+ key "name";
+ description
+ "This is used to add a user-side port on the network termination to a VLAN";
+ leaf name {
+ type leafref {
+ path
+ "/bbf-l2access-attr:vlan-translation-profiles/bbf-l2access-attr:vlan-translation-profile/bbf-l2access-attr:name";
+ }
+ description
+ "Name of the port VLAN.";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/build/yang-files/services/bbf-voltha-vlan-translation.yang b/build/yang-files/services/bbf-voltha-vlan-translation.yang
new file mode 100644
index 0000000..4b82d2f
--- /dev/null
+++ b/build/yang-files/services/bbf-voltha-vlan-translation.yang
@@ -0,0 +1,124 @@
+module bbf-voltha-vlan-translation {
+ yang-version 1.1;
+
+ namespace "urn:bbf:yang:bbf-voltha-vlan-translation";
+ prefix bbf-voltha-vlan-tr;
+
+ import bbf-l2-access-attributes {
+ prefix bbf-l2access-attr;
+ }
+ import bbf-dot1q-types {
+ prefix bbf-dot1qt;
+ }
+
+ organization
+ "Broadband Forum <https://www.broadband-forum.org>
+ SDN/NFV Work Area";
+ contact
+ "Comments or questions about this Broadband Forum YANG module
+ should be directed to <mailto:help@broadband-forum.org>.
+
+ Editor: TBD
+
+ WA Director: Mengmeng Li, China Mobile
+
+ WA Director: Bruno Cornaglia, Vodafone";
+ description
+ "TBD.
+
+ Copyright (c) 2019-2022, Broadband Forum
+
+ Redistribution and use in source and binary forms, with or
+ without modification, are permitted provided that the following
+ conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ The above license is used as a license under copyright only.
+ Please reference the Forum IPR Policy for patent licensing terms
+ <https://www.broadband-forum.org/ipr-policy>.
+
+ Any moral rights which are necessary to exercise under the above
+ license grant are also deemed granted under this license.
+
+ This version of this YANG module is part of TR-451; see
+ the TR itself for full legal notices.";
+
+ revision 2022-03-22 {
+ description
+ "Initial revision.";
+ reference
+ "TBD";
+ }
+
+ augment "/bbf-l2access-attr:vlan-translation-profiles"
+ + "/bbf-l2access-attr:vlan-translation-profile"
+ + "/bbf-l2access-attr:ingress-rewrite"
+ + "/bbf-l2access-attr:push-outer-tag" {
+ description
+ "Augmentation of the vlan translation profile outer tag with
+ downstream pbit";
+
+ leaf d-pbit {
+ type union {
+ type bbf-dot1qt:pbit-list;
+ type enumeration {
+ enum any {
+ description
+ "Matches any pbit value in the range of 0 to 7.";
+ }
+ }
+ }
+ description
+ "Allowed downstream PBIT values.";
+ }
+ }
+
+ augment "/bbf-l2access-attr:vlan-translation-profiles"
+ + "/bbf-l2access-attr:vlan-translation-profile"
+ + "/bbf-l2access-attr:ingress-rewrite"
+ + "/bbf-l2access-attr:push-second-tag" {
+ description
+ "Augmentation of the vlan translation profile second tag with
+ downstream pbit";
+
+ leaf d-pbit {
+ type union {
+ type bbf-dot1qt:pbit-list;
+ type enumeration {
+ enum any {
+ description
+ "Matches any pbit value in the range of 0 to 7.";
+ }
+ }
+ }
+ description
+ "Allowed downstream PBIT values.";
+ }
+ }
+}
diff --git a/build/yang-files/services/ietf-network-topology@2018-02-26.yang b/build/yang-files/services/ietf-network-topology@2018-02-26.yang
new file mode 100644
index 0000000..1ec944d
--- /dev/null
+++ b/build/yang-files/services/ietf-network-topology@2018-02-26.yang
@@ -0,0 +1,294 @@
+module ietf-network-topology {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-network-topology";
+ prefix nt;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-network {
+ prefix nw;
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ organization
+ "IETF I2RS (Interface to the Routing System) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/i2rs/>
+ WG List: <mailto:i2rs@ietf.org>
+
+ Editor: Alexander Clemm
+ <mailto:ludwig@clemm.org>
+
+ Editor: Jan Medved
+ <mailto:jmedved@cisco.com>
+
+ Editor: Robert Varga
+ <mailto:robert.varga@pantheon.tech>
+
+ Editor: Nitin Bahadur
+ <mailto:nitin_bahadur@yahoo.com>
+
+ Editor: Hariharan Ananthakrishnan
+ <mailto:hari@packetdesign.com>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>";
+
+ description
+ "This module defines a common base model for a network topology,
+ augmenting the base network data model with links to connect
+ nodes, as well as termination points to terminate links
+ on nodes.
+
+ Copyright (c) 2018 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
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8345;
+ see the RFC itself for full legal notices.";
+
+ revision 2018-02-26 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ typedef link-id {
+ type inet:uri;
+ description
+ "An identifier for a link in a topology. The precise
+ structure of the link-id will be up to the implementation.
+ The identifier SHOULD be chosen such that the same link in a
+ real network topology will always be identified through the
+ same identifier, even if the data model is instantiated in
+ separate datastores. An implementation MAY choose to capture
+ semantics in the identifier -- for example, to indicate the
+ type of link and/or the type of topology of which the link is
+ a part.";
+ }
+
+ typedef tp-id {
+ type inet:uri;
+ description
+ "An identifier for termination points on a node. The precise
+ structure of the tp-id will be up to the implementation.
+ The identifier SHOULD be chosen such that the same termination
+ point in a real network topology will always be identified
+ through the same identifier, even if the data model is
+ instantiated in separate datastores. An implementation MAY
+ choose to capture semantics in the identifier -- for example,
+ to indicate the type of termination point and/or the type of
+ node that contains the termination point.";
+ }
+
+ grouping link-ref {
+ description
+ "This grouping can be used to reference a link in a specific
+ network. Although it is not used in this module, it is
+ defined here for the convenience of augmenting modules.";
+ leaf link-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/../"+
+ "network-ref]/nt:link/nt:link-id";
+ require-instance false;
+ }
+ description
+ "A type for an absolute reference to a link instance.
+ (This type should not be used for relative references.
+ In such a case, a relative path should be used instead.)";
+ }
+ uses nw:network-ref;
+ }
+
+ grouping tp-ref {
+ description
+ "This grouping can be used to reference a termination point
+ in a specific node. Although it is not used in this module,
+ it is defined here for the convenience of augmenting
+ modules.";
+ leaf tp-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/../"+
+ "network-ref]/nw:node[nw:node-id=current()/../"+
+ "node-ref]/nt:termination-point/nt:tp-id";
+ require-instance false;
+ }
+ description
+ "A type for an absolute reference to a termination point.
+ (This type should not be used for relative references.
+ In such a case, a relative path should be used instead.)";
+ }
+ uses nw:node-ref;
+ }
+
+ augment "/nw:networks/nw:network" {
+ description
+ "Add links to the network data model.";
+ list link {
+ key "link-id";
+ description
+ "A network link connects a local (source) node and
+ a remote (destination) node via a set of the respective
+ node's termination points. It is possible to have several
+ links between the same source and destination nodes.
+ Likewise, a link could potentially be re-homed between
+ termination points. Therefore, in order to ensure that we
+ would always know to distinguish between links, every link
+ is identified by a dedicated link identifier. Note that a
+ link models a point-to-point link, not a multipoint link.";
+ leaf link-id {
+ type link-id;
+ description
+ "The identifier of a link in the topology.
+ A link is specific to a topology to which it belongs.";
+ }
+ container source {
+ description
+ "This container holds the logical source of a particular
+ link.";
+ leaf source-node {
+ type leafref {
+ path "../../../nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "Source node identifier. Must be in the same topology.";
+ }
+ leaf source-tp {
+ type leafref {
+ path "../../../nw:node[nw:node-id=current()/../"+
+ "source-node]/termination-point/tp-id";
+ require-instance false;
+ }
+ description
+ "This termination point is located within the source node
+ and terminates the link.";
+ }
+ }
+
+ container destination {
+ description
+ "This container holds the logical destination of a
+ particular link.";
+ leaf dest-node {
+ type leafref {
+ path "../../../nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "Destination node identifier. Must be in the same
+ network.";
+ }
+ leaf dest-tp {
+ type leafref {
+ path "../../../nw:node[nw:node-id=current()/../"+
+ "dest-node]/termination-point/tp-id";
+ require-instance false;
+ }
+ description
+ "This termination point is located within the
+ destination node and terminates the link.";
+ }
+ }
+ list supporting-link {
+ key "network-ref link-ref";
+ description
+ "Identifies the link or links on which this link depends.";
+ leaf network-ref {
+ type leafref {
+ path "../../../nw:supporting-network/nw:network-ref";
+ require-instance false;
+ }
+ description
+ "This leaf identifies in which underlay topology
+ the supporting link is present.";
+ }
+
+ leaf link-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/"+
+ "../network-ref]/link/link-id";
+ require-instance false;
+ }
+ description
+ "This leaf identifies a link that is a part
+ of this link's underlay. Reference loops in which
+ a link identifies itself as its underlay, either
+ directly or transitively, are not allowed.";
+ }
+ }
+ }
+ }
+ augment "/nw:networks/nw:network/nw:node" {
+ description
+ "Augments termination points that terminate links.
+ Termination points can ultimately be mapped to interfaces.";
+ list termination-point {
+ key "tp-id";
+ description
+ "A termination point can terminate a link.
+ Depending on the type of topology, a termination point
+ could, for example, refer to a port or an interface.";
+ leaf tp-id {
+ type tp-id;
+ description
+ "Termination point identifier.";
+ }
+ list supporting-termination-point {
+ key "network-ref node-ref tp-ref";
+ description
+ "This list identifies any termination points on which a
+ given termination point depends or onto which it maps.
+ Those termination points will themselves be contained
+ in a supporting node. This dependency information can be
+ inferred from the dependencies between links. Therefore,
+ this item is not separately configurable. Hence, no
+ corresponding constraint needs to be articulated.
+ The corresponding information is simply provided by the
+ implementing system.";
+
+ leaf network-ref {
+ type leafref {
+ path "../../../nw:supporting-node/nw:network-ref";
+ require-instance false;
+ }
+ description
+ "This leaf identifies in which topology the
+ supporting termination point is present.";
+ }
+ leaf node-ref {
+ type leafref {
+ path "../../../nw:supporting-node/nw:node-ref";
+ require-instance false;
+ }
+ description
+ "This leaf identifies in which node the supporting
+ termination point is present.";
+ }
+ leaf tp-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/"+
+ "../network-ref]/nw:node[nw:node-id=current()/../"+
+ "node-ref]/termination-point/tp-id";
+ require-instance false;
+ }
+ description
+ "Reference to the underlay node (the underlay node must
+ be in a different topology).";
+ }
+ }
+ }
+ }
+}
diff --git a/build/yang-files/services/ietf-network@2018-02-26.yang b/build/yang-files/services/ietf-network@2018-02-26.yang
new file mode 100644
index 0000000..6a03d7e
--- /dev/null
+++ b/build/yang-files/services/ietf-network@2018-02-26.yang
@@ -0,0 +1,192 @@
+module ietf-network {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-network";
+ prefix nw;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ organization
+ "IETF I2RS (Interface to the Routing System) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/i2rs/>
+ WG List: <mailto:i2rs@ietf.org>
+
+ Editor: Alexander Clemm
+ <mailto:ludwig@clemm.org>
+
+ Editor: Jan Medved
+ <mailto:jmedved@cisco.com>
+
+ Editor: Robert Varga
+ <mailto:robert.varga@pantheon.tech>
+
+ Editor: Nitin Bahadur
+ <mailto:nitin_bahadur@yahoo.com>
+
+ Editor: Hariharan Ananthakrishnan
+ <mailto:hari@packetdesign.com>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>";
+ description
+ "This module defines a common base data model for a collection
+ of nodes in a network. Node definitions are further used
+ in network topologies and inventories.
+
+ Copyright (c) 2018 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
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8345;
+ see the RFC itself for full legal notices.";
+
+ revision 2018-02-26 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8345: A YANG Data Model for Network Topologies";
+ }
+
+ typedef node-id {
+ type inet:uri;
+ description
+ "Identifier for a node. The precise structure of the node-id
+ will be up to the implementation. For example, some
+ implementations MAY pick a URI that includes the network-id
+ as part of the path. The identifier SHOULD be chosen
+ such that the same node in a real network topology will
+ always be identified through the same identifier, even if
+ the data model is instantiated in separate datastores. An
+ implementation MAY choose to capture semantics in the
+ identifier -- for example, to indicate the type of node.";
+ }
+
+ typedef network-id {
+ type inet:uri;
+ description
+ "Identifier for a network. The precise structure of the
+ network-id will be up to the implementation. The identifier
+ SHOULD be chosen such that the same network will always be
+ identified through the same identifier, even if the data model
+ is instantiated in separate datastores. An implementation MAY
+ choose to capture semantics in the identifier -- for example,
+ to indicate the type of network.";
+ }
+
+ grouping network-ref {
+ description
+ "Contains the information necessary to reference a network --
+ for example, an underlay network.";
+ leaf network-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:network-id";
+ require-instance false;
+ }
+ description
+ "Used to reference a network -- for example, an underlay
+ network.";
+ }
+ }
+
+ grouping node-ref {
+ description
+ "Contains the information necessary to reference a node.";
+ leaf node-ref {
+ type leafref {
+ path "/nw:networks/nw:network[nw:network-id=current()/../"+
+ "network-ref]/nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "Used to reference a node.
+ Nodes are identified relative to the network that
+ contains them.";
+ }
+ uses network-ref;
+ }
+
+ container networks {
+ description
+ "Serves as a top-level container for a list of networks.";
+ list network {
+ key "network-id";
+ description
+ "Describes a network.
+ A network typically contains an inventory of nodes,
+ topological information (augmented through the
+ network-topology data model), and layering information.";
+ leaf network-id {
+ type network-id;
+ description
+ "Identifies a network.";
+ }
+ container network-types {
+ description
+ "Serves as an augmentation target.
+ The network type is indicated through corresponding
+ presence containers augmented into this container.";
+ }
+ list supporting-network {
+ key "network-ref";
+ description
+ "An underlay network, used to represent layered network
+ topologies.";
+ leaf network-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:network-id";
+ require-instance false;
+ }
+ description
+ "References the underlay network.";
+ }
+ }
+
+ list node {
+ key "node-id";
+ description
+ "The inventory of nodes of this network.";
+ leaf node-id {
+ type node-id;
+ description
+ "Uniquely identifies a node within the containing
+ network.";
+ }
+ list supporting-node {
+ key "network-ref node-ref";
+ description
+ "Represents another node that is in an underlay network
+ and that supports this node. Used to represent layering
+ structure.";
+ leaf network-ref {
+ type leafref {
+ path "../../../nw:supporting-network/nw:network-ref";
+ require-instance false;
+ }
+ description
+ "References the underlay network of which the
+ underlay node is a part.";
+ }
+ leaf node-ref {
+ type leafref {
+ path "/nw:networks/nw:network/nw:node/nw:node-id";
+ require-instance false;
+ }
+ description
+ "References the underlay node itself.";
+ }
+ }
+ }
+ }
+ }
+}