Add initial support for provisioning and removing services, getting service data

Change-Id: Ie49206d788a202e70a8d64f083c3f85b92ced8fb
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.";
+          }
+        }
+      }
+    }
+  }
+}