Add NETCONF notification for ONU activation and Kafka client to receive events, update dependencies

Change-Id: I5f768fa8077ef7c64e00a534744ca47492344935
diff --git a/build/yang-files/notification/submodules/bbf-xpon-base.yang b/build/yang-files/notification/submodules/bbf-xpon-base.yang
new file mode 100644
index 0000000..f330bbe
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-base.yang
@@ -0,0 +1,400 @@
+submodule bbf-xpon-base {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import ietf-interfaces {
+    prefix if;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import bbf-xpon-types {
+    prefix bbf-xpon-types;
+  }
+  import bbf-xpon-if-type {
+    prefix bbf-xponift;
+  }
+  import bbf-yang-types {
+    prefix bbf-yang;
+  }
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions and
+     augmentations to ietf-interfaces for managing the xPON
+     infrastructure.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  feature ictp-support {
+    description
+      "Indicates that the OLT supports ICTP.";
+  }
+
+  feature configurable-ictp-proxy-tcp-port {
+    if-feature "ictp-support";
+    description
+      "Indicates support for the configuration of the TCP port
+       used by an ICTP proxy.";
+  }
+
+  container xpon {
+    description
+      "Configuration associated with managing xPON in a system.";
+    container ictp {
+      if-feature "ictp-support";
+      description
+        "Configuration data for the support of
+         Inter-Channel-Termination Protocol (ICTP).";
+      reference
+        "BBF TR-352";
+      leaf activated {
+        type boolean;
+        default "false";
+        description
+          "This is to enable or disable support of ICTP.
+           When true, the OLT attempts to establish TCP
+           connections with all relevant peer ICTP proxies
+           and is ready to exchange ICTP messages with other
+           channel terminations through those ICTP proxies.
+           When false, the OLT does not process nor generate
+           any ICTP messages and will not establish nor maintain
+           any TCP connection to any ICTP proxy.";
+      }
+      container all-ictp-proxies-all-channel-groups {
+        description
+          "This container contains all configuration data related to
+           TR-352 ICTP transport infrastructure for all ICTP proxies,
+           whether they are in charge of 'inside-olt' channel
+           terminations or 'outside-olt' channel terminations, for all
+           channel groups.";
+        list proxy {
+          key "name";
+          description
+            "The list of all ICTP proxies, whether they are in charge
+             of 'inside-olt' channel terminations or 'outside-olt'
+             channel terminations, for all channel groups configured
+             in the OLT.";
+          leaf name {
+            type bbf-yang:string-ascii64;
+            description
+              "Name of the ICTP Proxy.";
+          }
+          leaf host {
+            type inet:host;
+            mandatory true;
+            description
+              "This is the IP address or the DNS domain name of the
+               ICTP proxy. TCP connections originating from this ICTP
+               proxy will use this IP address (or the one resolved
+               from the DNS domain name) as source IP address. Other
+               ICTP proxies will reach this Proxy using this IP
+               address (or the one resolved from the DNS domain name)
+               as destination address.";
+          }
+          leaf tcp-port {
+            if-feature "configurable-ictp-proxy-tcp-port";
+            type inet:port-number;
+            default "7202";
+            description
+              "The TCP port used by the ICTP proxy.";
+          }
+          container all-channel-terminations-proxied-by-this-proxy {
+            description
+              "In the context of a given ICTP proxy, this container
+               contains the list of all channel terminations 'inside'
+               and 'outside' the OLT, for all channel groups, for
+               which this ICTP proxy is playing proxy role.";
+            list channel-termination {
+              key "channel-termination-ref";
+              description
+                "The list of all channel terminations inside and
+                 outside the OLT, for all channel groups, for which
+                 this ICTP proxy is playing proxy role.";
+              leaf channel-termination-ref {
+                type if:interface-ref;
+                must "derived-from-or-self(/if:interfaces"
+                   + "/if:interface[if:name=current()]/if:type,"
+                   + "'bbf-xponift:channel-termination')" {
+                  error-message
+                    "Must reference a channel termination.";
+                }
+                description
+                  "Reference to a channel termination for which this
+                   ICTP proxy is responsible.";
+              }
+              leaf channel-termination-ictp-activated {
+                type boolean;
+                default "false";
+                description
+                  "When true, the ICTP proxy is willing to exchange
+                   ICTP messages on behalf of this
+                   channel termination. When false, the ICTP
+                   proxy ignores this channel termination.";
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+  container xpon-state {
+    config false;
+    description
+      "State data associated with managing xPON in a system.";
+    container ictp {
+      if-feature "ictp-support";
+      description
+        "State data for the support of
+         Inter-Channel-Termination Protocol (ICTP).";
+      reference
+        "BBF TR-352";
+      container all-ictp-proxies-all-channel-groups {
+        description
+          "State data related to all ICTP proxies across all channel
+           groups.";
+        list proxy {
+          key "name";
+          description
+            "The list of all ICTP proxies for all channel-groups.";
+          leaf name {
+            type bbf-yang:string-ascii64;
+            description
+              "Name of the ICTP Proxy.";
+          }
+          leaf proxy-ip-address {
+            type bbf-xpon-types:ip-address-or-unresolved;
+            description
+              "This is the IP address (v4 or v6) of this ICTP proxy
+               as derived from its configured host and as used in the
+               TCP connection when established. It is 'unresolved' if
+               for some reason the system is unable to deduce the IP
+               address from the host name of the ICTP proxy.";
+          }
+          container known-peered-proxies {
+            description
+              "In the context of an ICTP proxy, this container
+               contains state data about peering relations involving
+               this ICTP proxy. An OLT must know at least all peering
+               relations involving the ICTP proxies in charge of one
+               or several channel terminations 'inside' the OLT.
+               An OLT may or may not know peering relations between
+               ICTP proxies exclusively involving channel terminations
+               'outside' the OLT.";
+            list proxy {
+              key "name";
+              description
+                "In the context of an ICTP proxy, the list of all
+                 ICTP proxies which the OLT knows to be peered with
+                 this ICTP proxy.";
+              leaf name {
+                type bbf-yang:string-ascii64;
+                description
+                  "Name of this ICTP peer proxy.";
+              }
+              leaf ip-address {
+                type bbf-xpon-types:ip-address-or-unresolved;
+                description
+                  "This is the IP address (v4 or v6) of the peer
+                   ICTP proxy as derived from its configured
+                   host and as used in the TCP connection when
+                   established. It is 'unresolved' if for some
+                   reason the system is unable to deduce the IP
+                   address from the host name of the ICTP proxy.";
+              }
+              leaf tcp-connection-state {
+                type identityref {
+                  base bbf-xpon-types:tcp-connection-state-base;
+                }
+                description
+                  "This leaf reflects the state of the TCP connection
+                   with this peer ICTP Proxy. When 'established' the
+                   TCP connection is operational and able to transport
+                   ICTP messages. When 'not-established', the TCP
+                   connection is unable to exchange any ICTP message.
+                   When the TCP connection state is 'unknown' the OLT
+                   does not know whether the involved ICTP proxies can
+                   exchange ICTP messages or not; typically, this is
+                   because the OLT is not involved at all with either
+                   of the two related ICTP proxies.";
+              }
+              leaf source-tcp-port {
+                type inet:port-number;
+                description
+                  "This is the source port number of the TCP
+                   connection with the peer ICTP proxy, when
+                   established.";
+              }
+              leaf destination-tcp-port {
+                type inet:port-number;
+                description
+                  "This is the destination port number of the TCP
+                   connection with the peer ICTP proxy, when
+                   established.";
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+
+  augment '/if:interfaces/if:interface' {
+    when "if:type = 'bbf-xponift:channel-group'";
+    description
+      "Augment interface configuration with xPON channel group
+       configuration.";
+    container channel-group {
+      description
+        "Channel group configuration data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+
+  augment '/if:interfaces/if:interface' {
+    when "derived-from-or-self"
+       + "(if:type, 'bbf-xponift:channel-partition')";
+    description
+      "Augment interface configuration with xPON channel partition
+       configuration.";
+    container channel-partition {
+      description
+        "Channel partition configuration data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+
+  augment '/if:interfaces/if:interface' {
+    when "derived-from-or-self"
+       + "(if:type, 'bbf-xponift:channel-pair')";
+    description
+      "Augment interface configuration with xPON channel pair
+       configuration.";
+    container channel-pair {
+      description
+        "Channel pair configuration data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+
+  augment '/if:interfaces/if:interface' {
+    when "derived-from-or-self"
+       + "(if:type, 'bbf-xponift:channel-termination')";
+    description
+      "Augment interface configuration with xPON channel termination
+       configuration.";
+    container channel-termination {
+      description
+        "channel termination configuration data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+
+  augment '/if:interfaces-state/if:interface' {
+    when "derived-from-or-self"
+       + "(if:type, 'bbf-xponift:channel-group')";
+    description
+      "Augment interface state data with xPON channel group
+       state data.";
+    container channel-group {
+      description
+        "Channel group state data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+
+  augment '/if:interfaces-state/if:interface' {
+    when "derived-from-or-self"
+       + "(if:type, 'bbf-xponift:channel-pair')";
+    description
+      "Augment interface state data with xPON channel pair
+       state data.";
+    container channel-pair {
+      description
+        "Channel pair state data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+
+  augment '/if:interfaces-state/if:interface' {
+    when "derived-from-or-self"
+       + "(if:type, 'bbf-xponift:channel-termination')";
+    description
+      "Augment interface state data with xPON channel termination
+       state data.";
+    container channel-termination {
+      description
+        "Channel termination state data for all xPON variants
+         (NG-PON2, XGS-PON, XG-PON and G-PON).";
+    }
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-channel-group-body.yang b/build/yang-files/notification/submodules/bbf-xpon-channel-group-body.yang
new file mode 100644
index 0000000..2096f52
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-channel-group-body.yang
@@ -0,0 +1,468 @@
+submodule bbf-xpon-channel-group-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import bbf-xpon-types {
+    prefix bbf-xpon-types;
+  }
+  import bbf-yang-types {
+    prefix bbf-yang;
+  }
+  import ietf-interfaces {
+    prefix if;
+  }
+  import bbf-xpon-if-type {
+    prefix bbfxponift;
+  }
+  
+  include bbf-xpon-base;
+  include bbf-xpon-channel-partition-body;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing channel groups.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  typedef alloc-id-values {
+    type string {
+      pattern '((25[6-9]|2[6-9][0-9]|[3-9][0-9][0-9]|[1-9][0-9][0-'
+            + '9][0-9]|1[0-6][0-3][0-8][0-3])([,-](25[6-9]|2[6-9]['
+            + '0-9]|[3-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|1[0-6][0-'
+            + '3][0-8][0-3]))*)?';
+    }
+    description
+      "A list of non-overlapping Alloc-ID values in
+       ascending order, between 1024 to 16383 for G.9807.1
+       XGS-PON/G.989.3 NGPON2 compliant OLTs and
+       256 to 4095 for G.984.3 GPON-compliant OLTs.
+
+       The format of this string can be any of the following:
+
+         single value
+           Example: '1024'
+         comma separated list of values
+           Example: '1024,1030,16000'
+         range of values
+           Example: '1024-1300'
+         comma separated list of ranges
+           Example: '1025-1300,1301-1400,1500-1600'
+         comma separated list of values and ranges
+           Example: '1024-1300,1301,1303-1310'.";
+  }
+
+  typedef gemport-values {
+    type string {
+      pattern '((25[4-9]|2[6-9][0-9]|[3-9][0-9][0-9]|[1-9][0-9][0-'
+            + '9][0-9]|[1-6][0-5][0-5][0-3][0-4])([,-](25[4-9]|2[6-'
+            + '9][0-9]|[3-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-6]['
+            + '0-5][0-5][0-3][0-4]))*)?';
+    }
+    description
+      "A list of non-overlapping xGEM/GEM port-ID values in
+       ascending order, between 1021 to 65534  for G.9807.1
+       XGS-PON/G.989.3 NGPON2 compliant OLTs and
+       254 to 4095 for G.984.3 GPON-compliant OLTs.
+
+       The format of this string can be any of the following:
+
+         single value
+           Example: '1024'
+         comma separated list of values
+           Example: '1024,1030,16000'
+         range of values
+           Example: '1024-1300'
+         comma separated list of ranges
+           Example: '1025-1300,1301-1400,1500-1600'
+         comma separated list of values and ranges
+           Example: '1024-1300,1301,1303-1310'.";
+  }
+
+  typedef onu-id-values {
+    type string {
+      pattern '(([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|10[0-2]0)([,-](['
+            + '0-9]|[1-9][0-9]|[1-9][0-9][0-9]|10[0-2]0))*)?';
+    }
+    description
+      "A list of non-overlapping ONU-ID values in
+       ascending order, between 0 to 1020 for G.9807.1
+       XGS-PON/G.989.3 NGPON2 compliant OLTs and
+       0 to 253 for G.984.3 GPON-compliant OLTs.
+
+       The format of this string can be any of the following:
+
+         single value
+           Example: '1020'
+         comma separated list of values
+           Example: '1,30,600'
+         range of values
+           Example: '30-60'
+         comma separated list of ranges
+           Example: '30-60,80-90'
+         comma separated list of values and ranges
+           Example: '1,30-60,70,90-100'.";
+  }
+
+  feature pon-pools {
+    description
+      "Assignable PON resource (Alloc-ID, xGEM port, ONU-id)
+       into PON pool feature.";
+  }
+
+  grouping channel-group-config-data {
+    description
+      "All config data for a channel group.";
+    leaf polling-period {
+      type uint32 {
+        range "1..864000";
+      }
+      units "0.1 second";
+      default "100";
+      description
+        "The period between two consecutive times the
+         autodetection procedure on each pair in the
+         group is executed.
+         Used in NG-PON2 for quiet window control.
+         Value represents tenths of seconds.
+         (e.g. 1 = 0.1 second, 864000 = 24 hours).";
+    }
+    leaf raman-mitigation {
+      type bbf-xpon-types:raman-mitigation-type;
+      default "raman-none";
+      description
+        "NG-PON2 Raman mitigation coding schemes when using RF video
+         overlay.";
+      reference
+        "ITU-T G.989.2 Appendix IX";
+    }
+    leaf system-id {
+      type string {
+        pattern '[0-9a-fA-F]{5}';
+      }
+      description
+        "A 20-bit number that identifies a specific NG-PON2 system
+         (typically a channel group) among multiple NG-PON2 systems
+         under a common administation.
+         It is defined as NGSYS ID in G.989.3 clause 6.1.5.2 and may
+         be coded to support administration such as name, geographical
+         location, servie profile (see also G.989.3 table VIII.2).";
+      reference
+        "ITU-T G.989.3 clause 6.1.5.2;
+         ITU-T G.989.3 table VIII.2";
+    }
+    container pon-pools {
+      if-feature "pon-pools";
+      description
+        "This container describes per channel termination
+         PON resources allocation. A channel termination can only
+         be a member of a single channel group.  Within
+         a channel group, PON resources should not
+         overlap and only be assigned to a single
+         channel termination.";
+      list pon-pool {
+        key "name";
+        min-elements 1;
+        max-elements 8;
+        description
+          "This container describes the allocated PON pool of
+           Alloc-IDs, GEM port-IDs and ONU-IDs.";
+        leaf name {
+          type bbf-yang:string-ascii64;
+          description
+            "Name of the PON pool.";
+        }
+        leaf channel-termination-ref {
+          type if:interface-ref;
+          must "derived-from-or-self(/if:interfaces/"
+             + "if:interface[if:name = current()]/if:type,"
+             + "'bbfxponift:channel-termination')" {
+            error-message
+              "Referenced interface must be of type
+               'channel-termination'.";
+          }
+          description
+            "Reference to a channel termination to which PON resource
+             pools will be assigned.";
+        }
+        leaf alloc-id-values {
+          type alloc-id-values;
+          description
+            "The list of assignable alloc-IDs between 1024 to
+             16383 for G.9807.1 XGS-PON/G.989.3 NGPON2 compliant
+             OLTs and 256 to 4095 for G.984.3 GPON-compliant OLTs..
+             A single value or range of values can be specified.
+
+             The format of this string can be any of the following:
+              single value
+                Example: '1024'
+              comma separated list of values
+                Example: '1024,1030,16000'
+              range of values
+                Example: '1024-1300'
+              comma separated list of ranges
+                Example: '1025-1300,1301-1400,1500-1600'
+              comma separated list of values and ranges
+                Example: '1024-1300,1301,1303-1310'.";
+        }
+        leaf gemport-values {
+          type gemport-values;
+          description
+            "The list of assignable GEM port/xGEM port-ID between
+             1021 to 65534 for G.9807.1 XGS-PON/G.989.3 NGPON2
+             compliant OLTs and 254 to 4095 for G.984.3
+             GPON-compliant OLTs.
+
+             A single value or range of values can be specified.
+
+               single value
+                 Example: '1024'
+               comma separated list of values
+                 Example: '1024,1030,16000'
+               range of values
+                 Example: '1024-1300'
+               comma separated list of ranges
+                 Example: '1025-1300,1301-1400,1500-1600'
+               comma separated list of values and ranges
+                 Example: '1024-1300,1301,1303-1310'.";
+        }
+        leaf onu-id-values {
+          type onu-id-values;
+          description
+            "The list of assignable ONU-ID values between
+             0 to 1020 for G.9807.1 XGS-PON/G.989.3 NGPON2
+             compliant OLTs and 0 to 253 for G.984.3
+             GPON-compliant OLTs.
+
+             The format of this string can be any of the following:
+              single value
+               Example: '1020'
+             comma separated list of values
+               Example: '1,30,600'
+             range of values
+               Example: '30-60'
+             comma separated list of ranges
+               Example: '30-60,80-90'
+             comma separated list of values and ranges
+               Example: '1,30-60,70,90-100'.";
+        }
+      }
+    }
+  }
+
+  grouping channel-group-state-data {
+    description
+      "All state data for a channel group.";
+    container allocated-upstream-channel-ids {
+      description
+        "The list maintained by the system of all the upstream
+         channel-id's which are already allocated to the
+         channel group. For NG-PON2, the applicable values are
+         in [0..7], for XGS-PON a dedicated value 'xgs' is
+         applicable rather than value '0': this is not to a
+         priori forbid in yang model the coexistence of XGS-PON
+         with NG-PON2 using channel-id=0. This list is a helper
+         to avoid upstream channel-id conflicts when allocating
+         channel pairs to a channel group.";
+      leaf-list channel-id {
+        type bbf-xpon-types:composite-channel-id-type;
+        description
+          "An upstream channel-id in use on the channel group.
+           For NG-PON2, value must be in [0..7].
+           For XGS-PON, value must be 'xgs'.";
+      }
+    }
+    container allocated-downstream-channel-ids {
+      description
+        "The list maintained by the system of all the downstream
+         channel-id's which are already allocated to the
+         channel group. For NG-PON2, the applicable values are
+         in [0..7], for XGS-PON a dedicated value 'xgs' is
+         applicable rather than value '0': this is not to a
+         priori forbid in yang model the coexistence of XGS-PON
+         with NG-PON2 using channel-id=0. This list is a helper
+         to avoid downstream channel-id conflicts when allocating
+         channel pairs to a channel group.";
+      leaf-list downstream-channel-id {
+        type bbf-xpon-types:composite-channel-id-type;
+        description
+          "A downstreamchannel-id in use on the channel group.
+           For NG-PON2, value must be in [0..7].
+           For XGS-PON, value must be 'xgs'.";
+      }
+    }
+    container allocated-downstream-wavelengths {
+      description
+        "The list maintained by the system of all the downstream
+         wavelengths already allocated to the channel group
+         including all of the NG-PON2, XGS-PON, XG-PON and G-PON
+         cases.
+         This list is a helper to avoid wavelength conflicts
+         when allocating channel pairs to a channel group.";
+      leaf-list wavelength {
+        type bbf-xpon-types:composite-downstream-wavelength-type;
+        description
+          "A downstream wavelength already allocated to the
+           channel group. For NG-PON2 it must be a value in
+           [156000..161000] expressed in hundredths of nm to fit
+           ITU-T precision requirements. For the XGS-PON, XG-PON
+           and G-PON cases, it must have resp. the value 'xgs',
+           'xgpon' or 'gpon'.";
+      }
+    }
+    container pon-pools {
+      if-feature "pon-pools";
+      description
+        "This container describes the list of available and consumed
+         and unusable PON resources that a channel termination in a
+         channel group may have.";
+      list pon-pool {
+        key "name";
+        min-elements 1;
+        max-elements 8;
+        description
+          "This container describes the current characteristics of the
+           PON pool of Alloc-IDs, GEM port-IDs and ONU-IDs.";
+        leaf name {
+          type bbf-yang:string-ascii64;
+          description
+            "Name of the PON pool.";
+        }
+        leaf channel-termination-ref {
+          type if:interface-state-ref;
+          must "derived-from-or-self(/if:interfaces-state"
+             + "/if:interface[if:name = current()]/if:type,"
+             + "'bbfxponift:channel-termination')";
+          description
+            "Reference the configured channel termination
+             that is being reported against.";
+        }
+        container consumed-resources {
+          description
+            "The consumed PON resources.";
+          leaf alloc-id-values {
+            type alloc-id-values;
+            description
+              "The list of consumed Alloc-IDs.
+               For example: '1024-1300,1301,1303-1310'.";
+          }
+          leaf gemport-values {
+            type gemport-values;
+            description
+              "The list of consumed GEM port-IDs/xGEM port-IDs.
+               For example: '1024-1300,1301,1303-1310'.";
+          }
+          leaf onu-ids {
+            type onu-id-values;
+            description
+              "The list of consumed ONU-IDs.
+               For example: '1,30-60,70,90-100'.";
+          }
+        }
+        container available-resources {
+          description
+            "The available/unused PON resources.";
+          leaf alloc-id-values {
+            type alloc-id-values;
+            description
+              "The list of available Alloc-IDs.
+               For example: '1024-1300,1301,1303-1310'.";
+          }
+          leaf gemport-values {
+            type gemport-values;
+            description
+              "The list of available GEM port-IDs/xGEM port-IDs.
+               For example: '1024-1300,1301,1303-1310'.";
+          }
+          leaf onu-ids {
+            type onu-id-values;
+            description
+              "The list of available ONU-IDs.
+               For example: '1,30-60,70,90-100'.";
+          }
+        }
+      }
+    }
+  }
+
+  augment '/if:interfaces/if:interface/bbf-xpon:channel-group' {
+    description
+      "Configuration of an xPON channel group.";
+    uses channel-group-config-data;
+  }
+
+  augment '/if:interfaces-state/if:interface/bbf-xpon:channel-group' {
+    description
+      "State data of an xPON channel group.";
+    uses channel-group-state-data;
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-channel-pair-body.yang b/build/yang-files/notification/submodules/bbf-xpon-channel-pair-body.yang
new file mode 100644
index 0000000..0c5b6f6
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-channel-pair-body.yang
@@ -0,0 +1,238 @@
+submodule bbf-xpon-channel-pair-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import bbf-xpon-types {
+    prefix bbf-xpon-types;
+  }
+  import ietf-interfaces {
+    prefix if;
+  }
+  import bbf-xpon-if-type {
+    prefix bbf-xponift;
+  }
+  include bbf-xpon-base;
+  include bbf-xpon-wavelength-profile-body;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing channel pairs.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  grouping channel-pair-config-data {
+    description
+      "All configuration data for a channel pair.";
+    leaf channel-group-ref {
+      type if:interface-ref;
+      must "derived-from-or-self(/if:interfaces"
+         + "/if:interface[if:name=current()]/if:type,"
+         + "'bbf-xponift:channel-group')" {
+        error-message
+          "Must reference a channel group.";
+      }
+      description
+        "Reference to channel group. Note that it is not allowed
+         to have several channel-pairs with identical downsream
+         channel-ID or upstream channel-ID or transmit wavelength
+         simultaneously active on the same chnanel-group.
+         In particular there may be only a maximum of one XGS-PON,
+         one XG-PON and one G-PON active on the same channel group.
+         The YANG model does not enforce these constraints which are
+         assumed to be enforced or verified by the OLT network
+         element software.";
+    }
+    leaf channel-partition-ref {
+      type if:interface-ref;
+      must "derived-from-or-self(/if:interfaces"
+         + "/if:interface[if:name=current()]/if:type,"
+         + "'bbf-xponift:channel-partition') and "
+         + "/if:interfaces/if:interface[if:name=current()]"
+         + "/channel-partition/channel-group-ref="
+         + "../channel-group-ref" {
+        error-message
+          "Must reference a channel partition associated with the same
+           channel group this pair is associated with.";
+      }
+      description
+        "Reference to channel partition.";
+    }
+    leaf wavelength-prof-ref {
+      when "derived-from-or-self(../channel-pair-type,"
+         + "'bbf-xpon-types:ngpon2-twdm') or derived-from-or-self"
+         + "(../channel-pair-type, 'bbf-xpon-types:ngpon2-ptp') or "
+         + "derived-from-or-self(../channel-pair-type,"
+         + "'bbf-xpon-types:xgs')";
+      type wavelength-prof-ref;
+      description
+        "An NG-PON2 channel pair needs to point to an existing
+         wavelength profile. Similar for XGS-PON (ref: ITU-T G.9807.1
+         A.8.2: Basic Wavelength and Optional Wavelength sets). The
+         wavelength for XG-PON and G-PON is fixed per ITU-T standards
+         and needs not be configured via a wavelength profile.";
+    }
+    leaf channel-pair-type {
+      type identityref {
+        base bbf-xpon-types:channel-pair-type-base;
+      }
+      mandatory true;
+      description
+        "Represents the type of channel pair
+         (e.g. TWDM NG-PON2, PtP NG-PON2, XGS-PON, XG-PON,
+         G-PON).";
+    }
+    leaf channel-pair-line-rate {
+      when "derived-from-or-self(../channel-pair-type,"
+         + "'bbf-xpon-types:ngpon2-twdm') or derived-from-or-self"
+         + "(../channel-pair-type, 'bbf-xpon-types:ngpon2-ptp')";
+      type identityref {
+        base bbf-xpon-types:channel-pair-line-rate-profile-base;
+      }
+      default "bbf-xpon-types:unplanned-cp-line-rate";
+      description
+        "Represents the planned downstream/upstream channel pair
+         speed for NG-PON2. The line rates for
+             XGS-PON (downstream 10Gbps/upstream 10Gbps),
+             XG-PON(downstream 10Gbps/upstream 2.5Gbps) and
+             G-PON (downstream 2.5Gbps/upstream 1.2Gbps)
+         are fixed per ITU-T standards and need not be configured.";
+    }
+    leaf gpon-pon-id-interval {
+      when "derived-from-or-self"
+         + "(../channel-pair-type, 'bbf-xpon-types:gpon')";
+      type uint16 {
+        range "0..60";
+      }
+      units "seconds";
+      default "0";
+      description
+        "This attribute is used to specify the frequency of
+         transmission of the periodic downstream PON-ID PLOAM
+         message for this G-PON. See ITU-T G.984.3 C1. The default
+         value '0' allows not to generate this PLOAM message,
+         fulfilling ITU-T G.984.3 C2 requirement.
+         This is only applicable to G-PON.";
+      reference
+        "ITU-T G.984.3 C1
+         ITU-T G.984.3 C2";
+    }
+  }
+
+  grouping channel-pair-state-data {
+    description
+      "All state data for a channel pair.";
+    leaf actual-downstream-wavelength {
+      type uint32 {
+        range "0 | 148000..162000";
+      }
+      units "0.01nm";
+      default "0";
+      description
+        "Represents the Actual Downstream wavelength for the
+         channel pair for any of the NG-PON2, XGS-PON, XG-PON or
+         G-PON case. It is expressed in hundredths of nm to fit
+         ITU-T precision requirements.";
+    }
+    leaf primary-ct-assigned {
+      type boolean;
+      default "false";
+      description
+        "When true this means that a channel termination with
+         Primary type B role has been assigned to this channel pair.";
+      reference
+        "ITU-T G.989.3 clause 18.2";
+    }
+    leaf secondary-ct-assigned {
+      type boolean;
+      default "false";
+      description
+        "When true this means that a channel termination with
+         Secondary type B role has been assigned to this
+         channel pair.";
+      reference
+        "ITU-T G.989.3 clause 18.2";
+    }
+  }
+
+  augment '/if:interfaces/if:interface/bbf-xpon:channel-pair' {
+    description
+      "Configuration of an xPON channel pair.";
+    uses channel-pair-config-data;
+  }
+
+  augment '/if:interfaces-state/if:interface/bbf-xpon:channel-pair' {
+    description
+      "State data of an xPON channel pair.";
+    uses channel-pair-state-data;
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-channel-partition-body.yang b/build/yang-files/notification/submodules/bbf-xpon-channel-partition-body.yang
new file mode 100644
index 0000000..422c8db
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-channel-partition-body.yang
@@ -0,0 +1,182 @@
+submodule bbf-xpon-channel-partition-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import ietf-interfaces {
+    prefix if;
+  }
+  import bbf-xpon-if-type {
+    prefix bbf-xponift;
+  }
+  import bbf-xpon-types {
+    prefix bbf-xpon-types;
+  }
+  include bbf-xpon-base;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing channel partitions.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  grouping channel-partition-config-data {
+    description
+      "All config data for a channel partition";
+    leaf channel-group-ref {
+      type if:interface-ref;
+      must "derived-from-or-self(/if:interfaces"
+         + "/if:interface[if:name=current()]/if:type,"
+         + "'bbf-xponift:channel-group')" {
+        error-message
+          "Must reference a channel group.";
+      }
+      mandatory true;
+      description
+        "Reference to a channel group.";
+    }
+    leaf channel-partition-index {
+      type uint8 {
+        range "0..15";
+      }
+      description
+        "This attribute identifies the partition inside the
+         channel group.";
+      reference
+        "ITU-T G.989.3 clause 6.1.5.9 and clause 11.3.3.14.";
+    }
+    leaf downstream-fec {
+      type boolean;
+      default "true";
+      description
+        "Enable/Disable downstream FEC.
+         Note that downstream FEC is always enabled for XG-PON and
+         XGS-PON and thus a value of 'false' is ignored.";
+      reference
+        "ITU-T G.984.3 clause 13.1.2.1
+         ITU-T G.987.3 clause 10.1
+         ITU-T G.9807.1 clause C.10.1.1.1.3
+         ITU-T G.989.3 clause 10.1.1.1.3";
+    }
+    leaf closest-onu-distance {
+      type uint16 {
+        range "0..40";
+      }
+      units "km";
+      default "0";
+      description
+        "Establishes the distance of the closest ONU.
+         Used to determine how to equalize delay
+         between the ONUs.";
+    }
+    leaf maximum-differential-xpon-distance {
+      type uint16 {
+        range "20 | 40";
+      }
+      units "km";
+      default "20";
+      description
+        "This attribute provides the ability to set the maximum
+         differential logical reach for a channel partition.";
+      reference
+        "ITU-T G.989.1 clause 8.2
+         ITU-T G.989.3 clause 13.1.";
+    }
+    leaf authentication-method {
+      type bbf-xpon-types:auth-method-type;
+      default "serial-number";
+      description
+        "ONU Authentication mode option for this
+         channel partition.";
+      reference
+        "ITU-T G.984.3, section VI.1.";
+    }
+    leaf multicast-aes-indicator {
+      type boolean;
+      default "false";
+      description
+        "Used to designate whether AES should be
+         enabled/disabled for multicast GEM ports.";
+      reference
+        "ITU-T G.984.3, section 12.2. and 9.2.3.8
+         ITU-T G.987.3, section 15.5.1 and 15.5.4
+         ITU-T G.9807.1, section C.15.5.1 and C.15.5.4
+         ITU-T G.989.3, section 15.5.1 and 5.5.4.";
+    }
+  }
+
+  augment '/if:interfaces/if:interface/bbf-xpon:channel-partition' {
+    description
+      "Configuration of an xPON channel partition.";
+    uses channel-partition-config-data;
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-channel-termination-body.yang b/build/yang-files/notification/submodules/bbf-xpon-channel-termination-body.yang
new file mode 100644
index 0000000..513cee8
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-channel-termination-body.yang
@@ -0,0 +1,285 @@
+submodule bbf-xpon-channel-termination-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import ietf-interfaces {
+    prefix if;
+  }
+  import bbf-xpon-types {
+    prefix bbf-xpon-types;
+  }
+  import bbf-xpon-if-type {
+    prefix bbf-xponift;
+  }
+  include bbf-xpon-base;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing channel terminations.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  grouping channel-termination-config-data {
+    description
+      "All configuration data for a channel termination.";
+    leaf channel-pair-ref {
+      type if:interface-ref;
+      must "derived-from-or-self(/if:interfaces"
+         + "/if:interface[if:name=current()]/if:type,"
+         + "'bbf-xponift:channel-pair') and "
+         + "/if:interfaces/if:interface[if:name=current()]/"
+         + "bbf-xpon:channel-pair/bbf-xpon:channel-pair-type = "
+         + "../bbf-xpon:channel-termination-type" {
+        error-message
+          "Must reference a channel pair with the same xPON type as 
+           the channel termination.";
+      }
+      description
+        "Reference to a channel pair.";
+    }
+    leaf channel-termination-type {
+      type identityref {
+        base bbf-xpon-types:channel-pair-type-base;
+      }
+      mandatory true;
+      description
+        "Represents the type of channel termination (e.g.
+         TWDM NG-PON2, PtP NG-PON2, XGS-PON, XG-PON, G-PON).";
+    }
+    leaf meant-for-type-b-primary-role {
+      type boolean;
+      description
+        "When true, the channel termination is meant to play type B
+         protection Primary role when it refers to a channel pair.
+         When false, the channel termination is meant to play
+         type B protection Secondary role when it refers to a
+         channel pair.";
+      reference
+        "ITU-T G.898.3 Amendment 1 (11/2016), section 18.1.";
+    }
+    leaf ngpon2-twdm-admin-label {
+      when "derived-from-or-self"
+         + "(../bbf-xpon:channel-termination-type,"
+         + "'bbf-xpon-types:ngpon2-twdm')";
+      type uint32 {
+        range "0..268435455" {
+          description
+            "0 to 2^28-1.";
+        }
+      }
+      description
+        "For TWDM NG-PON2, the admin-label is configurable and is
+         28 bits long. It is the configurable part of the PON-ID
+         which is available as state data.";
+      reference
+        "ITU-T G.989.3 section 6.1.5.3";
+    }
+    leaf ngpon2-ptp-admin-label {
+      when "derived-from-or-self"
+         + "(../bbf-xpon:channel-termination-type,"
+         + "'bbf-xpon-types:ngpon2-ptp')";
+      type uint32 {
+        range "0..4194303" {
+          description
+            "0 to 2^22-1.";
+        }
+      }
+      description
+        "For PtP NG-PON2, the admin-label is configurable and is
+         22 bits long. It is the configurable part of the PON-ID
+         which is available as state data.";
+      reference
+        "ITU-T G.989.3 section 6.1.5.3";
+    }
+    leaf xgs-pon-id {
+      when "derived-from-or-self"
+         + "(../bbf-xpon:channel-termination-type,"
+         + "'bbf-xpon-types:xgs')";
+      type uint32;
+      description
+        "For XGS-PON, the PON-ID is entirely configurable and is
+         32 bits long. The PON-ID is also available as state
+         data.";
+      reference
+        "ITU-T G.9807.1 section C.10.1.1.1.3";
+    }
+    leaf xgpon-pon-id {
+      when "derived-from-or-self"
+         + "(../bbf-xpon:channel-termination-type,"
+         + "'bbf-xpon-types:xgpon')";
+      type uint32;
+      description
+        "For XG-PON, the PON-ID is entirely configurable and is
+         32 bits long. The PON-ID is also available as state
+         data.";
+      reference
+        "ITU-T G.987.3 section E.2";
+    }
+    leaf gpon-pon-id {
+      when "derived-from-or-self"
+         + "(../bbf-xpon:channel-termination-type,"
+         + "'bbf-xpon-types:gpon')";
+      type bbf-xpon-types:string-hex14;
+      description
+        "For G-PON, the PON-ID is entirely configurable with
+         any binary value over 7 bytes. The PON-ID is also
+         available as state data.";
+      reference
+        "ITU-T G.984.3 section C.2.2";
+    }
+    leaf pon-tag {
+      when "not(derived-from-or-self"
+         + "(../bbf-xpon:channel-termination-type,"
+         + "'bbf-xpon-types:gpon'))";
+      type string {
+        pattern '[0-9a-fA-F]{16}';
+      }
+      description
+        "8 bytes. Each octet is represented by two hex values.
+         Used to specify channel-pair-TAG attribute in NG-PON2,
+         XGS-PON and XG-PON downstream PLOAM messages.
+         The PON-TAG is not relevant for G-PON.";
+    }
+    leaf ber-calc-period {
+      type uint32 {
+        range "1..864000";
+      }
+      units "0.1s";
+      default "10";
+      description
+        "Measurement period used to determine if an SDi alarm
+         has occurred for an ONU.";
+      reference
+        "ITU-T G.984.3 section 11.1.3";
+    }
+    leaf location {
+      type identityref {
+        base bbf-xpon-types:location-base;
+      }
+      description
+        "Indicates whether the CT is physically inside the OLT i.e.
+         can be related to a port in the OLT hardware model or
+         physically part of another OLT.";
+    }
+  }
+
+  grouping channel-termination-oper-data {
+    description
+      "All oper data for a channel termination";
+    leaf pon-id-display {
+      type bbf-xpon-types:pon-id-display-type;
+      description
+        "The PON-ID of the channel termination.
+         Per ITU-T G.989.3, ITU-T G.9807.1, ITU-T G.987.3 and
+         ITU-T G.984.3, depending of the xPON type some part
+         of this object is configured by the operator and the
+         other part is genuine operational data determined by
+         the system.";
+    }
+    leaf type-b-state {
+      type identityref {
+        base bbf-xpon-types:type-b-state-base;
+      }
+      description
+        "The type B protection state of the CT; it will typically
+         be active/standby. When the channel termination is not yet
+         referring to a channel pair, it is not part of any type B
+         protection scheme (and not usable either, btw); in that
+         case its type-b-state has the value 'not-part-of-type-b.";
+      reference
+        "ITU-T G.989.3 Amendment 1 clause 18.2";
+    }
+    leaf location {
+      type identityref {
+        base bbf-xpon-types:location-base;
+      }
+      description
+        "Indicates whether the CT is physically inside the OLT i.e.
+         can be related to a port in the OLT hardware model or
+         physically part of another OLT.";
+    }
+  }
+
+  augment '/if:interfaces/if:interface/bbf-xpon:channel-termination' {
+    description
+      "Configuration of an xPON channel termination.";
+    uses channel-termination-config-data;
+  }
+
+  augment '/if:interfaces-state/if:interface/bbf-xpon:channel-'
+        + 'termination' {
+    description
+      "State data of an xPON channel termination.";
+    uses channel-termination-oper-data;
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-multicast-distribution-set-body.yang b/build/yang-files/notification/submodules/bbf-xpon-multicast-distribution-set-body.yang
new file mode 100644
index 0000000..a2c1326
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-multicast-distribution-set-body.yang
@@ -0,0 +1,148 @@
+submodule bbf-xpon-multicast-distribution-set-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import bbf-yang-types {
+    prefix bbf-yang;
+  }
+  include bbf-xpon-base;
+  include bbf-xpon-multicast-gemport-body;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing multicast distribution sets.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  augment '/bbf-xpon:xpon' {
+    description
+      "Augment system level xPON configuration with multicase
+       distribution set configuration.";
+    container multicast-distribution-set {
+      description
+        "Configuration data for a multicast distribution set.";
+      uses multicast-distribution-set-data;
+    }
+  }
+
+  grouping multicast-distribution-set-data {
+    description
+      "All configuration data for a multicast distribution set.";
+    list multicast-set {
+      key "name";
+      leaf name {
+        type bbf-yang:string-ascii64;
+        description
+          "Name of the multicast distribution set.";
+      }
+      leaf multicast-gemport-ref {
+        type multicast-gemport-ref;
+        description
+          "Points to a multicast GEM port.";
+      }
+      choice multicast-vlans {
+        description
+          "Multicast VLAN list or all. All means all multicast
+           vlans are carried on the same GEM port.";
+        case vlan-list {
+          description
+            "Multicast VLAN list.";
+          list vlan-list {
+            key "multicast-vlan-id";
+            leaf multicast-vlan-id {
+              type uint16 {
+                range "0..4095";
+              }
+              description
+                "Multicast VLAN-ID.";
+            }
+            description
+              "List of vlans.";
+          }
+        }
+        case all-multicast-vlans {
+          description
+            "All multicast VLANs are carried on the same
+             GEM port.";
+          leaf all-multicast-vlans {
+            type empty;
+            description
+              "All multicast VLANs.";
+          }
+        }
+      }
+      description
+        "List of multicast sets.";
+    }
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-multicast-gemport-body.yang b/build/yang-files/notification/submodules/bbf-xpon-multicast-gemport-body.yang
new file mode 100644
index 0000000..e5ce9e6
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-multicast-gemport-body.yang
@@ -0,0 +1,158 @@
+submodule bbf-xpon-multicast-gemport-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import ietf-interfaces {
+    prefix if;
+  }
+  import bbf-xpon-if-type {
+    prefix bbf-xponift;
+  }
+  import bbf-yang-types {
+    prefix bbf-yang;
+  }
+  include bbf-xpon-base;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing multicast GEM ports.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  typedef multicast-gemport-ref {
+    type leafref {
+      path '/bbf-xpon:xpon/bbf-xpon:multicast-gemports/bbf-xpon:'
+         + 'multicast-gemport/bbf-xpon:name';
+    }
+    description
+      "Points to multicast GEM port.";
+  }
+
+  augment '/bbf-xpon:xpon' {
+    description
+      "Augment system level xPON configuration with multicase GEM
+       port configuration.";
+    container multicast-gemports {
+      description
+        "Multicast GEM ports configuration data.";
+      uses multicast-gemports-config-data;
+    }
+  }
+
+  grouping multicast-gemports-config-data {
+    description
+      "The config data of multicast GEM ports. Multicast GEM ports
+       can be used for multicast or broadcast.";
+    list multicast-gemport {
+      key "name";
+      leaf name {
+        type bbf-yang:string-ascii64;
+        description
+          "The name of the multicast GEM port.";
+      }
+      leaf gemport-id {
+        type uint32;
+        description
+          "The ID of the multicast GEM port.";
+      }
+      leaf interface {
+        type if:interface-ref;
+        must
+          "/if:interfaces/if:interface[if:name=current()]
+           /if:type='bbf-xponift:channel-pair'" {
+          error-message
+            "Must reference a channel pair.";
+        }
+        description
+          "Each channel pair has in general one or several multicast
+           GEM ports.";
+      }
+      leaf traffic-class {
+        type uint8 {
+          range "0..7";
+        }
+        description
+          "Traffic class value.";
+      }
+      leaf is-broadcast {
+        type boolean;
+        default "false";
+        description
+          "If true, this multicast GEM port is used for broadcast
+           traffic.";
+      }
+      description
+        "List of multicast GEM ports.";
+    }
+  }
+}
diff --git a/build/yang-files/notification/submodules/bbf-xpon-wavelength-profile-body.yang b/build/yang-files/notification/submodules/bbf-xpon-wavelength-profile-body.yang
new file mode 100644
index 0000000..14e6b69
--- /dev/null
+++ b/build/yang-files/notification/submodules/bbf-xpon-wavelength-profile-body.yang
@@ -0,0 +1,151 @@
+submodule bbf-xpon-wavelength-profile-body {
+  yang-version 1.1;
+  belongs-to bbf-xpon {
+    prefix bbf-xpon;
+  }
+
+  import bbf-yang-types {
+    prefix bbf-yang;
+  }
+  include bbf-xpon-base;
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Fiber Access Networks Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      Joey Boyd, ADTRAN
+
+     Editor:      Samuel Chen, Broadcom
+
+     Editor:      Robert Peschi, Nokia
+
+     WA Director: Marta Seda, Calix
+
+     WA Director: Lin Wei, Huawei";
+  description
+    "This submodule contains a collection of YANG definitions for
+     managing wavelength profiles.
+
+     Copyright (c) 2018, 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-385; see
+     the TR itself for full legal notices.";
+
+  revision 2019-02-25 {
+    description
+      "Initial revision.
+       * Approval Date:    2019-02-25.
+       * Publication Date: 2019-02-25.";
+    reference
+      "TR-385: ITU-T PON YANG Modules
+               <https://www.broadband-forum.org/technical/download/
+                        TR-385.pdf>";
+  }
+
+  typedef wavelength-prof-ref {
+    type leafref {
+      path '/bbf-xpon:xpon/bbf-xpon:wavelength-profiles/bbf-xpon:'
+         + 'wavelength-profile/bbf-xpon:name';
+    }
+    description
+      "A reference to a wavelength profile.";
+  }
+
+  augment '/bbf-xpon:xpon' {
+    description
+      "Augment system level xPON configuration with wavelength
+       profile configuration.";
+    container wavelength-profiles {
+      description
+        "Wavelength profile configuration.";
+      uses wavelength-profile-data;
+    }
+  }
+
+  grouping wavelength-profile-data {
+    description
+      "All config data for wavelength profile.";
+    list wavelength-profile {
+      key "name";
+      description
+        "The list of wavelength profiles.";
+      leaf name {
+        type bbf-yang:string-ascii64;
+        description
+          "Wavelength profile name.";
+      }
+      leaf upstream-channel-id {
+        type uint8 {
+          range "0..15";
+        }
+        default "0";
+        description
+          "Upstream channel ID.";
+        reference
+          "ITU-T G.989.3 clause 6.1.5.5.";
+      }
+      leaf downstream-channel-id {
+        type uint8 {
+          range "0..15";
+        }
+        default "0";
+        description
+          "Downstream channel ID.";
+        reference
+          "ITU-T G.989.3 clause 6.1.5.4.";
+      }
+      leaf downstream-wavelength {
+        type uint32 {
+          range "0 | 156000..161000";
+        }
+        units "0.01nm";
+        default "0";
+        description
+          "Downstream wavelength.";
+        reference
+          "ITU-T G.989.2";
+      }
+    }
+  }
+}