[VOL-4648] Add connection to sysrepo and subscribe to NETCONF 'get' requests with dummy callback

Change-Id: I9124d9b9430ee1358885bdb5c65dedfb3c5d3978
diff --git a/build/package/Dockerfile.bbf-adapter b/build/package/Dockerfile.bbf-adapter
index 0566d2e..0d8fadc 100644
--- a/build/package/Dockerfile.bbf-adapter
+++ b/build/package/Dockerfile.bbf-adapter
@@ -17,10 +17,7 @@
 #-------------
 # Build stage
 
-FROM --platform=linux/amd64 golang:1.16.3-alpine3.13 AS dev
-
-# Install required packages
-RUN apk add --no-cache build-base=0.5-r2
+FROM voltha/bbf-adapter-builder:local AS dev
 
 # Use Standard go build directory structure
 WORKDIR /go/src
@@ -28,7 +25,7 @@
 
 ARG EXTRA_GO_BUILD_TAGS=""
 
-ARG CGO_PARAMETER=0
+ARG CGO_PARAMETER=1
 
 ARG org_label_schema_version=unknown
 ARG org_label_schema_vcs_url=unknown
@@ -38,7 +35,7 @@
 ARG org_opencord_vcs_dirty=unknown
 
 # Build
-SHELL ["/bin/ash", "-o", "pipefail", "-c"]
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
 RUN \
       CGO_ENABLED=$CGO_PARAMETER go build $EXTRA_GO_BUILD_TAGS -mod=vendor -o /app/bbf-adapter \
       -ldflags \
@@ -55,7 +52,41 @@
 
 # -------------
 # Image creation stage
-FROM --platform=linux/amd64 gcr.io/distroless/static:nonroot as prod
+FROM ubuntu:hirsute-20220113 AS prod
+
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
+RUN \
+      apt-get update && \
+      apt-get install -y \
+            wget=1.21-1ubuntu3 ca-certificates=20210119ubuntu0.21.04.1 \
+            libpcre2-8-0=10.36-2ubuntu5 \
+            libcrypt1=1:4.4.17-1ubuntu3 \
+            libssh-4=0.9.5-1ubuntu0.1 \
+            --no-install-recommends && \
+      rm -rf /var/lib/apt/lists/*
+
+# Download and install library packages
+RUN \
+      wget https://github.com/CESNET/libyang/releases/download/v2.0.112/libyang2_2.0.112.1-1_amd64.deb -O libyang2.deb && \
+      wget https://github.com/sysrepo/sysrepo/releases/download/v2.0.53/libsysrepo6_2.0.53.1-1_amd64.deb -O libsysrepo6.deb && \
+      wget https://github.com/sysrepo/sysrepo/releases/download/v2.0.53/sysrepo-tools_2.0.53.1-1_amd64.deb -O sysrepo-tools.deb && \
+      wget https://github.com/CESNET/libnetconf2/releases/download/v2.0.24/libnetconf2-2_2.0.24.1-1_amd64.deb -O libnetconf2-2.deb && \
+      wget https://github.com/CESNET/netopeer2/releases/download/v2.0.35/netopeer2_2.0.35.2-1_amd64.deb -O netopeer2_2.deb
+
+RUN dpkg -i libyang2.deb libsysrepo6.deb sysrepo-tools.deb libnetconf2-2.deb netopeer2_2.deb
+
+RUN rm libyang2.deb libsysrepo6.deb sysrepo-tools.deb libnetconf2-2.deb netopeer2_2.deb
+
+# Copy yang files and install them to sysrepo
+COPY ./build/yang-files /yang
+RUN sysrepoctl -a -i /yang/bbf-device-aggregation.yang -s /yang -p 664 -v3
+
+# Add user for connecting to netopeer2-server through ssh
+ARG NETCONF_USER=voltha
+ARG NETCONF_PASSWORD=onf
+
+RUN useradd -rm -g netconf -u 1001 $NETCONF_USER
+RUN echo $NETCONF_USER:$NETCONF_PASSWORD | chpasswd
 
 # Set the working directory
 WORKDIR /app
@@ -81,4 +112,5 @@
 org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
 org.opencord.vcs-dirty=$org_opencord_vcs_dirty
 
-USER nonroot:nonroot
\ No newline at end of file
+# running netopeer2-server as a standard user is not supported right now
+# https://github.com/sysrepo/sysrepo/issues/2148#issuecomment-695950173
\ No newline at end of file
diff --git a/build/tools/Dockerfile.builder b/build/tools/Dockerfile.builder
new file mode 100644
index 0000000..7e7f710
--- /dev/null
+++ b/build/tools/Dockerfile.builder
@@ -0,0 +1,57 @@
+# Copyright 2022-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Dockerfile with golang and the sysrepo dependencies for voltha-northbound-bff-adapter
+# This image is used for testing, static code analysis and building
+
+FROM --platform=linux/amd64 golang:1.16.3-buster AS dev
+
+RUN mkdir -m 777 /.cache /go/pkg
+
+#Install golangci-lint
+RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.44.2
+
+RUN \
+    apt-get update && apt-get install -y libpcre2-dev=10.32-5 --no-install-recommends && \
+    rm -rf /var/lib/apt/lists/*
+
+# Download and install library packages
+RUN \
+    wget https://github.com/CESNET/libyang/releases/download/v2.0.112/libyang2_2.0.112.1-1_amd64.deb -O libyang2.deb && \
+    wget https://github.com/CESNET/libyang/releases/download/v2.0.112/libyang2-dev_2.0.112.1-1_amd64.deb -O libyang2-dev.deb && \
+    wget https://github.com/sysrepo/sysrepo/releases/download/v2.0.53/libsysrepo6_2.0.53.1-1_amd64.deb -O libsysrepo6.deb && \
+    wget https://github.com/sysrepo/sysrepo/releases/download/v2.0.53/libsysrepo-dev_2.0.53.1-1_amd64.deb -O libsysrepo-dev.deb
+
+RUN dpkg -i libyang2.deb libyang2-dev.deb libsysrepo6.deb libsysrepo-dev.deb
+
+RUN rm libyang2.deb libyang2-dev.deb libsysrepo6.deb libsysrepo-dev.deb
+
+WORKDIR /app
+
+ARG org_label_schema_version=unknown
+ARG org_label_schema_vcs_url=unknown
+ARG org_label_schema_vcs_ref=unknown
+ARG org_label_schema_build_date=unknown
+ARG org_opencord_vcs_commit_date=unknown
+ARG org_opencord_vcs_dirty=unknown
+
+LABEL \
+org.label-schema.schema-version=1.0 \
+org.label-schema.name=voltha-northbound-bbf-adapter \
+org.label-schema.version=$org_label_schema_version \
+org.label-schema.vcs-url=$org_label_schema_vcs_url \
+org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
+org.label-schema.build-date=$org_label_schema_build_date \
+org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
+org.opencord.vcs-dirty=$org_opencord_vcs_dirty
\ No newline at end of file
diff --git a/build/yang-files/bbf-device-aggregation.yang b/build/yang-files/bbf-device-aggregation.yang
new file mode 100644
index 0000000..24a5141
--- /dev/null
+++ b/build/yang-files/bbf-device-aggregation.yang
@@ -0,0 +1,154 @@
+module bbf-device-aggregation {
+  yang-version 1.1;
+  namespace "urn:bbf:yang:bbf-device-aggregation";
+  prefix bbf-dev-agg;
+
+  import bbf-yang-types {
+    prefix bbf-yang;
+  }
+  import bbf-device-types {
+    prefix bbf-dvct;
+  }
+  import ietf-yang-schema-mount {
+    prefix yangmnt;
+  }
+
+  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
+
+     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 device
+     aggregation. As such, this module is specific to access network
+     equipment (e.g., BBF-specified Access Nodes and FTTdp DPUs).
+
+     Copyright (c) 2017-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-383a5; see
+     the TR itself for full legal notices.";
+
+  revision 2022-03-01 {
+    description
+      "Amendment 5.
+       * Approval Date:    2022-03-01.
+       * Publication Date: 2022-03-01.";
+    reference
+      "TR-383a5: Common YANG Modules
+                 <https://www.broadband-forum.org/technical/download/
+                          TR-383_Amendment-5.pdf>";
+  }
+
+  container devices {
+    description
+      "Aggregation and management of multiple devices.";
+    list device {
+      key "name";
+      description
+        "An aggregated device.";
+      leaf name {
+        type bbf-yang:string-ascii64;
+        description
+          "The unique name of the device.";
+      }
+      leaf type {
+        type identityref {
+          base bbf-dvct:device-type;
+        }
+        mandatory true;
+        description
+          "The type of device.";
+      }
+      container identification {
+        presence
+          "Presence of the container indicates that data nodes that
+           identify the device exist.";
+        description
+          "Data nodes identifying the device instance.";
+        choice identification {
+          mandatory true;
+          description
+            "A choice for different methods to uniquely identify a
+             device instance.";
+          case hardware-inventory-data {
+            leaf mfg-name {
+              type string;
+              description
+                "The name of the manufacturer of the device.";
+            }
+            leaf model-name {
+              type string;
+              description
+                "The vendor-specific model name associated with the
+                 device.";
+            }
+            leaf serial-num {
+              type string;
+              description
+                "The vendor-specific serial number string for the
+                 device.";
+            }
+          }
+        }
+      }
+      container data {
+        description
+          "The data nodes of the device's schema.";
+        yangmnt:mount-point "device-yang-library" {
+          description
+            "The YANG library associated with the device.";
+        }
+      }
+    }
+  }
+}
diff --git a/build/yang-files/bbf-device-types.yang b/build/yang-files/bbf-device-types.yang
new file mode 100644
index 0000000..8448e2f
--- /dev/null
+++ b/build/yang-files/bbf-device-types.yang
@@ -0,0 +1,185 @@
+module bbf-device-types {
+  yang-version 1.1;
+  namespace "urn:bbf:yang:bbf-device-types";
+  prefix bbf-dvct;
+
+  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 managing physical
+     devices.
+
+     Specifically, this module defines common types associated with
+     device management.
+
+     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>";
+  }
+
+  // Identities
+  // Device types
+
+  identity device-type {
+    description
+      "Base identity from which specific device node types are
+       derived.";
+  }
+
+  identity access-device-type {
+    base device-type;
+    description
+      "Base identity from which specific access device node types are
+       derived.";
+  }
+
+  identity dpu {
+    base access-device-type;
+    description
+      "Distribution Point Unit (DPU).";
+  }
+
+  identity msan {
+    base access-device-type;
+    description
+      "Multiservice Access Node (MSAN).";
+  }
+
+  identity dslam {
+    base access-device-type;
+    description
+      "Digital Subscriber Line Access Multiplexer (DSLAM).";
+  }
+
+  identity olt {
+    base access-device-type;
+    description
+      "Optical Line Terminal (OLT).";
+  }
+
+  identity onu {
+    base access-device-type;
+    description
+      "Optical Network Unit (ONU).";
+  }
+
+  identity fast-cpe {
+    base access-device-type;
+    description
+      "The G.fast CPE. G.fast is a Digital Subscriber Line (DSL)
+       protocol standard.";
+  }
+
+  identity vdsl2-cpe {
+    base access-device-type;
+    description
+      "The Very High-speed Digital Subscriber Line 2 (VDSL2) CPE.";
+  }
+
+  // Device Subcategory
+
+  identity device-subcategory {
+    description
+      "Base identity from which specific subcategories of device types
+       are derived.";
+  }
+
+  identity access-device-subcategory {
+    base device-subcategory;
+    description
+      "Identity from which specific subcategories of access device
+       types are derived.";
+  }
+
+  identity multi-card {
+    base access-device-subcategory;
+    description
+      "The multi card subcategory.
+
+       An access device of this or a derived identity is a device that
+       has the capability to support multiple cards, independent of
+       the actual deployment.";
+  }
+
+  identity single-card {
+    base access-device-subcategory;
+    description
+      "The single card subcategory.
+
+       An access device of this or a derived identity is a device that
+       is a fully self-contained device that does not has the
+       capability to plug or unplug cards.";
+  }
+
+  identity pluggable-transceiver {
+    base access-device-subcategory;
+    description
+      "The pluggable transceiver subcategory.";
+  }
+}
diff --git a/build/yang-files/bbf-yang-types.yang b/build/yang-files/bbf-yang-types.yang
new file mode 100644
index 0000000..efa31d5
--- /dev/null
+++ b/build/yang-files/bbf-yang-types.yang
@@ -0,0 +1,275 @@
+module bbf-yang-types {
+  yang-version 1.1;
+  namespace "urn:bbf:yang:bbf-yang-types";
+  prefix bbf-yang;
+
+  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
+
+     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 used throughout
+     BBF data models.
+
+     Copyright (c) 2017-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-383a5; see
+     the TR itself for full legal notices.";
+
+  revision 2022-03-01 {
+    description
+      "Amendment 5.
+       * Approval Date:    2022-03-01.
+       * Publication Date: 2022-03-01.";
+    reference
+      "TR-383a5: Common YANG Modules
+                 <https://www.broadband-forum.org/technical/download/
+                          TR-383_Amendment-5.pdf>";
+  }
+  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 2019-10-21 {
+    description
+      "Amendment 2 Corrigendum 1.
+       * Approval Date:    2019-10-21.
+       * Publication Date: 2019-10-21.";
+    reference
+      "TR-383a2c1: Common YANG Modules
+                 <https://www.broadband-forum.org/technical/download/
+                          TR-383_Amendment-2.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>";
+  }
+  revision 2016-07-18 {
+    description
+      "Initial revision.
+       * Approval Date:    see revision date above.
+       * Publication Date: 2016-08-05.";
+    reference
+      "TR-355: YANG Modules for FTTdp Management
+               <https://www.broadband-forum.org/technical/download/
+                        TR-355.pdf>";
+  }
+
+  typedef name-string {
+    type string {
+      length "1..64";
+    }
+    description
+      "Used where a string is needed which has a maximum length of
+       64 characters and a minimum length of 1 character.";
+  }
+
+  typedef percent {
+    type uint8 {
+      range "0..100";
+    }
+    units "percentage";
+    description
+      "A percentage.";
+  }
+
+  typedef performance-counter32 {
+    type uint32;
+    description
+      "The 'performance-counter32' type represents a non-negative
+       integer that monotonically increases until it reaches a maximum
+       value of 2^32-1 (4294967295 decimal), but does not wrap around
+       once the maximum value is reached.";
+  }
+
+  typedef performance-counter32-or-inactive {
+    type union {
+      type uint32;
+      type enumeration {
+        enum inactive {
+          description
+            "Indicates that this counter is not active.";
+        }
+      }
+    }
+    description
+      "The 'performance-counter32-or-inactive' type represents a
+       non-negative integer that monotonically increases until it
+       reaches a maximum value of 2^32-1 (4294967295 decimal), but
+       does not wrap around once the maximum value is reached.
+
+       A special value (enum inactive) indicates that this counter
+       is not active.";
+  }
+
+  typedef performance-counter64 {
+    type uint64;
+    description
+      "The 'performance-counter64' type represents a non-negative
+       integer that monotonically increases until it reaches a maximum
+       value of 2^64-1 (18446744073709551615 decimal), but does not
+       wrap around once the maximum value is reached.";
+  }
+
+  typedef string-ascii63-or-empty {
+    type string {
+      length "0..63";
+      pattern '[ -~]*';
+      // allows the 95 printable ASCII characters
+    }
+    description
+      "Used where a string is needed which has a maximum length of
+       63 characters and also allows for a null string (length = 0).
+
+       The character set is limited to the 95 printable ASCII
+       characters.";
+  }
+
+  typedef string-ascii64 {
+    type string {
+      length "1..64";
+      pattern '[ -~]*';
+    }
+    description
+      "Used where a string is represented using at least 1 and no more
+       than 64 ASCII characters.
+
+       The character set is limited to the 95 printable ASCII
+       characters.";
+  }
+
+  typedef string-ascii64-or-empty {
+    type string {
+      length "0..64";
+      pattern '[ -~]*';
+    }
+    description
+      "Used where a string is needed which has a maximum length of
+       64 characters and also allows for a null string (length = 0).
+
+       The character set is limited to the 95 printable ASCII
+       characters.";
+  }
+
+  typedef undetermined {
+    type enumeration {
+      enum undetermined {
+        description
+          "Indicates the value is not determined.";
+      }
+    }
+    description
+      "A type which defines an enumeration representing when
+       the value for an object is not determined. Often, this is
+       combined with other data via a union acting as a special value
+       to indicate the undetermined state.";
+  }
+
+  typedef data-rate32 {
+    type uint32;
+    units "kbits/second";
+    description
+      "A type which represents the rate at which data is being
+       transferred.";
+  }
+
+  typedef data-rate32-or-undetermined {
+    type union {
+      type undetermined;
+      type data-rate32;
+    }
+    units "kbits/second";
+    description
+      "A type which represents the rate at which data is being
+       transferred. A special value, 'undetermined', is used to
+       indicate the data rate is undetermined.";
+  }
+}