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-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;
+  }
+}