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

Change-Id: Ie49206d788a202e70a8d64f083c3f85b92ced8fb
diff --git a/build/yang-files/services/bbf-l2-access-attributes.yang b/build/yang-files/services/bbf-l2-access-attributes.yang
new file mode 100644
index 0000000..85bf697
--- /dev/null
+++ b/build/yang-files/services/bbf-l2-access-attributes.yang
@@ -0,0 +1,342 @@
+module bbf-l2-access-attributes {
+  yang-version 1.1;
+  namespace "urn:bbf:yang:bbf-l2-access-attributes";
+  prefix bbf-l2access-attr;
+
+  import bbf-dot1q-types {
+    prefix bbf-dot1qt;
+  }
+  import ietf-network {
+    prefix nw;
+  }
+  import ietf-network-topology {
+    prefix nt;
+  }
+
+  organization
+    "Broadband Forum <https://www.broadband-forum.org>
+     Common YANG Work Area";
+  contact
+    "Comments or questions about this Broadband Forum YANG module
+     should be directed to <mailto:help@broadband-forum.org>.
+
+     Editor:      TBD
+
+     PS Leader:   TBD
+
+     WA Director: TBD";
+  description
+    "This module contains a collection of YANG definitions for
+     simplifying the Access Device Model as exposed over NBI of BAA.
+
+     Copyright (c) 2022, Broadband Forum
+
+     Redistribution and use in source and binary forms, with or
+     without modification, are permitted provided that the following
+     conditions are met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above
+        copyright notice, this list of conditions and the following
+        disclaimer in the documentation and/or other materials
+        provided with the distribution.
+
+     3. Neither the name of the copyright holder nor the names of its
+        contributors may be used to endorse or promote products
+        derived from this software without specific prior written
+        permission.
+
+     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+     CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+     STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+     ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+     The above license is used as a license under copyright only.
+     Please reference the Forum IPR Policy for patent licensing terms
+     <https://www.broadband-forum.org/ipr-policy>.
+
+     Any moral rights which are necessary to exercise under the above
+     license grant are also deemed granted under this license.
+
+     This version of this YANG module is part of TR-383a4; see
+     the TR itself for full legal notices.";
+
+  revision 2021-09-30 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 8944: A YANG Data Model for Layer 2 Network Topologies";
+  }
+
+  grouping access-tag {
+    leaf tag-type {
+      type union {
+        type bbf-dot1qt:dot1q-tag-type;
+        type uint16;
+        type enumeration {
+          enum any {
+            description
+              "Matches any tag type.";
+          }
+        }
+      }
+      default "any";
+      description
+        "VLAN tag type.";
+    }
+    leaf vlan-id {
+      type union {
+        type bbf-dot1qt:vlan-id-range;
+        type enumeration {
+          enum any {
+            description
+              "Matches any VLAN-ID in the range 1 to 4094, or
+               matches priority tagged frames.";
+          }
+          enum priority-tagged {
+            description
+              "Priority-tagged frames are frames with a VLAN tag
+               present and that match VLAN-ID 0.";
+          }
+          enum vlan-id-is-a-parameter {
+            description
+              "The VLAN ID is not
+               specified inside this profile but has to be
+               specified at the place where this profile
+               is referenced.";
+          }
+        }
+      }
+      mandatory true;
+      description
+        "Allowed VLAN-IDs.";
+    }
+    leaf pbit {
+      type union {
+        type bbf-dot1qt:pbit-list;
+        type enumeration {
+          enum any {
+            description
+              "Matches any pbit value in the range of 0 to 7.";
+          }
+        }
+      }
+      description
+        "Allowed PBIT values.";
+    }
+  }
+
+  grouping access-vlan-tag-match {
+    description
+      "Flexible match on the VLAN tags of Ethernet frames.";
+    choice vlan-tag-match-type {
+      description
+        "Provides a choice of how the frames may be matched.";
+      case untagged {
+        leaf untagged {
+          type empty;
+          description
+            "Untagged match. Matches all untagged traffic.";
+        }
+      }
+      case vlan-tagged {
+        container outer-tag {
+          description
+            "Classifies traffic using the outermost VLAN tag on the
+             frame.";
+          uses access-tag;
+        }
+        container second-tag {
+          description
+            "Classifies traffic using the second outermost VLAN tag
+             on the frame.";
+          uses access-tag;
+        }
+      }
+    }
+  }
+
+  grouping access-vlan-tag-rewrite {
+    description
+      "Flexible match on the VLAN tags of Ethernet frames.";
+    leaf pop-tags {
+      type uint8 {
+        range "0..2";
+      }
+      description
+        "The number of tags to pop.";
+    }
+    container push-outer-tag {
+      description
+        "The outermost VLAN tag to push onto the frame.";
+      uses access-tag;
+    }
+    container push-second-tag {
+      description
+        "The second outermost VLAN tag to push onto the frame.";
+      uses access-tag;
+    }
+  }
+
+  grouping vlan-match-and-rewrite {
+    description
+      "Configuration of frame vlan tag processing, include frame classification and vlan tag rewrite";
+    container match-criteria {
+      description
+        "This container collects match criteria for various frame fields.";
+      uses access-vlan-tag-match;
+    }
+    container ingress-rewrite {
+      description
+        "Ingress rewrite refers to the supported tag manipulations
+         before the frame is offered to a higher layer interface or
+         to a forwarder or to a destination termination-point.";
+      uses access-vlan-tag-rewrite;
+    }
+  }
+
+  grouping l2-access-attributes {
+    description
+      "Flexible match on the VLAN tags of Ethernet frames.";
+    container vlan-translation {
+      leaf translation-profile {
+        type leafref {
+          path
+            "/bbf-l2access-attr:vlan-translation-profiles/bbf-l2access-attr:"
+          + "vlan-translation-profile/bbf-l2access-attr:name";
+        }
+        description
+          "A reference to a vlan translation profile that contains
+           frame vlan classification and vlan tag rewrite.";
+      }
+      leaf outer-vlan-id {
+        when
+          '/bbf-l2access-attr:vlan-translation-profiles/'
+        + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+        + 'name = current()/../../vlan-translation-profile]/'
+        + 'match-criteria/outer-tag/vlan-id = '
+        + '"vlan-id-is-a-parameter" ' {
+          description
+            "Match criteria for the outer VLAN tag of a frame that
+             overrules the match criteria provided through the
+             referenced vlan translaton profile.";
+        }
+        type bbf-dot1qt:vlan-id;
+      }
+      leaf second-vlan-id {
+        when
+          '/bbf-l2access-attr:vlan-translation-profiles/'
+        + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+        + 'name = current()/../../vlan-translation-profile]/'
+        + 'match-criteria/second-tag/vlan-id = '
+        + '"vlan-id-is-a-parameter" ' {
+          description
+            "Match criteria for the second VLAN tag of a frame that
+             overrules the match criteria provided through the
+             referenced vlan translaton profile.";
+        }
+        type bbf-dot1qt:vlan-id;
+      }
+      leaf push-outer-vlan-id {
+        when
+          '/bbf-l2access-attr:vlan-translation-profiles/'
+        + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+        + 'name = current()/../../vlan-translation-profile]/'
+        + 'ingress-rewrite/push-outer-tag/vlan-id = '
+        + '"vlan-id-is-a-parameter" ' {
+          description
+            "Indicates the VLAN ID of the pushed outer VLAN tag,
+             which overwrites the outer VLAN tag rewritten
+             by the referenced VLAN translation profile.";
+        }
+        type bbf-dot1qt:vlan-id;
+      }
+      leaf push-second-vlan-id {
+        when
+          '/bbf-l2access-attr:vlan-translation-profiles/'
+        + 'bbf-l2access-attr:vlan-translation-profile[bbf-l2access-attr:'
+        + 'name = current()/../../vlan-translation-profile]/'
+        + 'ingress-rewrite/push-second-tag/vlan-id = '
+        + '"vlan-id-is-a-parameter" ' {
+          description
+            "Indicates the VLAN ID of the pushed seconed VLAN tag,
+             which overwrites the seconed VLAN tag rewritten
+             by the referenced VLAN translation profile.";
+        }
+        type bbf-dot1qt:vlan-id;
+      }
+    }
+  }
+
+  container vlan-translation-profiles {
+    description
+      "Configuration of VLAN translation profiles.";
+    list vlan-translation-profile {
+      key "name";
+      description
+        "A translation profile defines the vlan match criteria and
+             vlan tag rewrite.";
+      leaf name {
+        type string;
+        description
+          "vlan translaton profile name.";
+      }
+      uses vlan-match-and-rewrite;
+    }
+  }
+  container vlan-forwarding-profiles {
+    description
+      "Configuration of VLAN forwarding profiles.";
+    list vlan-forwarding-profile {
+      key "name";
+      description
+        "A forwarding profile defines the network-side
+         forwarding of traffic in a forwarding VLAN.";
+      leaf name {
+        type string;
+        description
+          "vlan forwrding profile name.";
+      }
+      container forwarding-ports {
+        description
+          "Network-side forwarding ports in the forwarding profile.";
+        list port {
+          key "name";
+          leaf name {
+            type string;
+            description
+              "forwarding port name.";
+          }
+          leaf node-ref {
+            type leafref {
+              path "/nw:networks/nw:network/nw:node/nw:node-id";
+              require-instance false;
+            }
+            description
+              "This leaf references a network side node.";
+          }
+          leaf tp-ref {
+            type leafref {
+              path "/nw:networks/nw:network/"
+                 + "nw:node/nt:termination-point/nt:tp-id";
+              require-instance false;
+            }
+            description
+              "This leaf references a network side termination point types.";
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file