new legato models from Mahesh
[unimgr.git] / legato-api / src / main / yang / mef-legato-services@2017-12-15.yang
diff --git a/legato-api/src/main/yang/mef-legato-services@2017-12-15.yang b/legato-api/src/main/yang/mef-legato-services@2017-12-15.yang
new file mode 100644 (file)
index 0000000..8c9d54c
--- /dev/null
@@ -0,0 +1,2973 @@
+module mef-legato-services {
+  namespace "urn:mef:yang:mef-legato-services";
+  prefix mef-services;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import mef-types {
+    prefix mef-types;
+    revision-date 2017-12-15;
+  }
+  import mef-global {
+    prefix mef-global;
+    revision-date 2017-12-15;
+  }
+  import mef-legato-interfaces {
+    prefix mef-interfaces;
+    revision-date 2017-12-15;
+  }
+
+  organization "MEF Forum";
+  contact
+    "Web URL: http://mef.net/
+     E-mail:  namespace@mef.net
+     Postal:  MEFForum
+              6033 W. Century Boulevard, Suite 1107
+              Los Angeles, CA 90045
+              U.S.A.
+     Phone:   +1 310-642-2800
+     Fax:     +1 310-642-2808";
+  description
+    "This module implements the Carrier Ethernet Services as
+     defined in MEF 10.3 and MEF 6.2.
+
+     Reference Overview:
+      A number of base documents have been used to create the
+      MEF Services YANG Module. The
+      following are the abbreviations for the baseline documents:
+
+      [MEF10.3] refers to MEF 10.3
+      'Ethernet Services Attributes Phase 3', October 2013
+      [MEF6.2] refers to MEF 6.2
+      'EVC Ethernet Services Defintions Phase 3', August 2014
+      [MEF7.3] refers to MEF 7.3
+      'Carrier Ethernet Management Information Model',
+      February 2017
+      [MEF10.3.1] refers to MEF 10.3.1
+      'Composite Performance Metric (CPM) Amendment to MEF 10.3',
+      February 2015";
+
+  revision 2017-12-15 {
+    description
+      "Initial Version.";
+    reference
+      "Legato - Services YANG SCA (MEF XX)";
+  }
+
+  container mef-services {
+    description
+      "Container for all MEF Services (including configuration
+       and status)";
+    container carrier-ethernet {
+      description
+        "MEF Services for Carrier Ethernet Configuration
+         and Status";
+      container subscriber-services {
+        description
+          "MEF Subscriber Services Configuration and Status";
+        list evc {
+          key "evc-id";
+          description
+            "List of Ethernet Virtual Connection services (EVCs).";
+          leaf evc-id {
+            type mef-types:evc-id-type;
+            description
+              "An identifier for the EVC, that is unique across all
+               the EVCs in the Service Provider's CEN";
+            reference
+              "[MEF10.3] Section 8.2. [MEF7.3] Section 7.2.";
+          }
+          container cos-names {
+            description
+              "CoS Names for use by this EVC.";
+            list cos-name {
+              key "name";
+              min-elements 1;
+              description
+                "List of CoS Names used in this EVC.";
+              reference
+                "[MEF7.3] Section 7.1";
+              leaf name {
+                type leafref {
+                  path "/mef-global:mef-global/" +
+                        "mef-global:cos-names-profiles/" +
+                        "mef-global:profile/mef-global:name";
+                }
+                description
+                  "CoS Name from the global list, that is used in this
+                   EVC.";
+              }
+            }
+          }
+          container end-points {
+            description
+              "EVC End Point configuration and status. Note that
+               EVC End Points contain the EVC per UNI attributes
+               from MEF 10.3.";
+            reference
+              "[MEF10.3] Section 10, [MEF7.3] Section 7.4 and 7.5";
+            list end-point {
+              must "not(ce-vlans/ce-vlan[2]) or " +
+                   "../../ce-vlan-id-preservation = 'true'" {
+                error-message
+                  "When more than one CE-VLAN-ID is mapped to an
+                   EVC at a UNI, the EVC must have CE-VLAN ID
+                   Preservation Enabled.";
+                description
+                  "When more than one CE-VLAN-ID is mapped to an
+                   EVC at a UNI, the EVC must have CE-VLAN ID
+                   Preservation Enabled.";
+                reference
+                  "[MEF10.3] [R25].";
+              }
+              must "(/mef-interfaces:mef-interfaces/" +
+                    "mef-interfaces:carrier-ethernet/" +
+                    "mef-interfaces:subscriber-interfaces/" +
+                    "mef-interfaces:uni" +
+                      "[mef-interfaces:uni-id = current()/uni-id]" +
+                      "[mef-interfaces:uni-id/../" +
+                       "mef-interfaces:bundling-enabled = " +
+                           "'true']) or " +
+                   "(/mef-interfaces:mef-interfaces/" +
+                    "mef-interfaces:carrier-ethernet/" +
+                    "mef-interfaces:subscriber-interfaces/" +
+                    "mef-interfaces:uni" +
+                      "[mef-interfaces:uni-id = current()/uni-id]" +
+                      "[mef-interfaces:uni-id/../" +
+                       "mef-interfaces:all-to-one-bundling-enabled = " +
+                           "'true']) or " +
+                   "not(ce-vlans/ce-vlan[2])" {
+                error-message
+                  "If both Bundling and All-to-One
+                   Bundling are disabled for a UNI, only one
+                   CE VLAN ID can be configured for a specific
+                   EVC on that UNI.";
+                description
+                  "If both Bundling and All-to-One Bundling
+                   are disabled for a UNI, only one CE VLAN ID
+                   can be configured for a specific EVC on that UNI.";
+                reference
+                  "[MEF10.3] [R77].";
+              }
+              must "(/mef-interfaces:mef-interfaces/" +
+                     "mef-interfaces:carrier-ethernet/" +
+                     "mef-interfaces:subscriber-interfaces/" +
+                     "mef-interfaces:uni" +
+                       "[mef-interfaces:uni-id = current()/uni-id]" +
+                       "[mef-interfaces:uni-id/../" +
+                        "mef-interfaces:all-to-one-bundling-enabled = " +
+                                                       "'false']) or " +
+                   "(count(ce-vlans/ce-vlan) = 4094)" {
+                error-message
+                  "If All-to-One Bundling is enabled for any UNI in an
+                   EVC, all CE-VLAN IDs for that UNI must map to a
+                   single EVC.";
+                description
+                  "If All-to-One Bundling is enabled for any UNI in an
+                   EVC, all CE-VLAN IDs for that UNI must map to a
+                   single EVC.";
+                reference
+                  "[MEF10.3] [R82].";
+              }
+
+              must "(count(ingress-bwp-per-cos/" +
+                          "bwp-flow-per-cos) = 0 and " +
+                    "not(ingress-bwp-per-evc/" +
+                        "bw-profile-flow-parameters) and "+
+                    "not(ingress-bwp-per-evc/envelope-id)) or " +
+                   "(not(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:ingress-bwp-per-uni/" +
+                         "mef-interfaces:bw-profile-flow-parameters) " +
+                    "and " +
+                    "not(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:ingress-bwp-per-uni/" +
+                         "mef-interfaces:envelope-id))" {
+                error-message
+                  "If there is an Ingress Bandwidth Profile per CoS Name
+                   or an Ingress Bandwidth Profile per EVC, there must
+                   not be an Ingress Bandwidth Profile per UNI.";
+                description
+                  "If there is an Ingress Bandwidth Profile per CoS Name
+                   or an Ingress Bandwidth Profile per EVC, there must
+                   not be an Ingress Bandwidth Profile per UNI.";
+                reference
+                  "[MEF10.3] [R137]";
+              }
+
+              must "(count(egress-bwp-per-eec/" +
+                          "bwp-flow-per-eec) = 0 and " +
+                    "not(egress-bwp-per-evc/" +
+                        "bw-profile-flow-parameters) and "+
+                    "not(egress-bwp-per-evc/envelope-id)) or " +
+                   "(not(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:egress-bw-profile-per-uni/" +
+                         "mef-interfaces:bw-profile-flow-parameters) " +
+                    "and " +
+                    "not(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:egress-bw-profile-per-uni/" +
+                         "mef-interfaces:envelope-id))" {
+                error-message
+                  "If there is an Egress Bandwidth Profile per EEC Name
+                   or an Egress Bandwidth Profile per EVC, there must
+                   not be an Egress Bandwidth Profile per UNI.";
+                description
+                  "If there is an Egress Bandwidth Profile per EEC Name
+                   or an Egress Bandwidth Profile per EVC, there must
+                   not be an Egress Bandwidth Profile per UNI.";
+                reference
+                  "[MEF10.3] [R137]";
+              }
+
+              must "count(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:ingress-envelopes/" +
+                         "mef-interfaces:envelope[" +
+                           "mef-interfaces:type = 'per-evc']/" +
+                         "mef-interfaces:bwp-flows/" +
+                         "mef-interfaces:bwp-flow) = " +
+                   "count(/mef-services/carrier-ethernet/" +
+                          "subscriber-services/evc/end-points/" +
+                          "end-point" +
+                            "[uni-id = current()/uni-id]" +
+                            "[ingress-bwp-per-evc/envelope-id])" {
+                error-message
+                  "For an Ingress Bandwidth Profile Envelope with type
+                   'per-evc' every flow must be referenced by an
+                   Ingress Bandwidth Profile per EVC";
+                description
+                  "This must statement, in combination with others,
+                   ensures that every BWP flow in an Ingress Bandwidth
+                   Profile Envelope with type 'per-evc' is referenced
+                   from an EVC End Point.  This is done by checking that
+                   the number of BWP flows in envelopes of this type is
+                   equal to the number of EVC EPs on the UNI that have
+                   an ingress bandwidth profile per EVC that refers to
+                   an envelope.  Note that there are other must
+                   statements that ensure each BWP flow is refered to at
+                   most once, so from this it can be deduced that each
+                   BWP flow is also refered to at least once.  This is
+                   part of enforcing MEF 10.3 R134, and also enforces
+                   MEF 6.2 R4.";
+                 reference
+                   "[MEF10.3] [R134], [MEF6.2] [R4]";
+              }
+
+              must "count(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:ingress-envelopes/" +
+                         "mef-interfaces:envelope[" +
+                           "mef-interfaces:type = 'per-cos-or-eec']/" +
+                         "mef-interfaces:bwp-flows/" +
+                         "mef-interfaces:bwp-flow) = " +
+                   "count(/mef-services/carrier-ethernet/" +
+                          "subscriber-services/evc/end-points/" +
+                          "end-point[uni-id = current()/uni-id]/" +
+                          "ingress-bwp-per-cos/" +
+                            "bwp-flow-per-cos[envelope-id])" {
+                error-message
+                  "For an Ingress Bandwidth Profile Envelope with type
+                   'per-cos-or-eec' every flow must be referenced by an
+                   Ingress Bandwidth Profile per CoS Name";
+                description
+                  "This must statement, in combination with others,
+                   ensures that every BWP flow in an Ingress Bandwidth
+                   Profile Envelope with type 'per-cos-or-eec' is
+                   referenced from a Bandwidth Profile per CoS Name on
+                   an EVC End Point.  This is done by checking that the
+                   number of BWP flows in envelopes of this type is
+                   equal to the number of BWPs per CoS Name on EVC EPs
+                   on the UNI that refers to an envelope.  Note that
+                   there are other must statements that ensure each BWP
+                   flow is refered to at most once, so from this it can
+                   be deduced that each BWP flow is also refered to at
+                   least once.  This is part of enforcing MEF 10.3 R134,
+                   and also enforces MEF 6.2 R4.";
+                 reference
+                   "[MEF10.3] [R134], [MEF6.2] [R4]";
+              }
+
+              must "count(/mef-interfaces:mef-interfaces/" +
+                         "mef-interfaces:carrier-ethernet/" +
+                         "mef-interfaces:subscriber-interfaces/" +
+                         "mef-interfaces:uni[" +
+                           "mef-interfaces:uni-id = " +
+                             "current()/uni-id]/" +
+                         "mef-interfaces:egress-envelopes/" +
+                         "mef-interfaces:envelope[" +
+                           "mef-interfaces:type = 'per-evc']/" +
+                         "mef-interfaces:bwp-flows/" +
+                         "mef-interfaces:bwp-flow) = " +
+                   "count(/mef-services/carrier-ethernet/" +
+                          "subscriber-services/evc/end-points/" +
+                          "end-point" +
+                            "[uni-id = current()/uni-id]" +
+                            "[egress-bwp-per-evc/envelope-id])" {
+                error-message
+                  "For an Egress Bandwidth Profile Envelope with type
+                   'per-evc' every flow must be referenced by an
+                   Egress Bandwidth Profile per EVC";
+                description
+                  "This must statement, in combination with others,
+                   ensures that every BWP flow in an Egress Bandwidth
+                   Profile Envelope with type 'per-evc' is referenced
+                   from an EVC End Point.  This is done by checking that
+                   the number of BWP flows in envelopes of this type is
+                   equal to the number of EVC EPs on the UNI that have
+                   an egress bandwidth profile per EVC that refers to an
+                   envelope.  Note that there are other must statements
+                   that ensure each BWP flow is refered to at most once,
+                   so from this it can be deduced that each BWP flow is
+                   also refered to at least once.  This is part of
+                   enforcing MEF 10.3 R134, and also enforces MEF 6.2
+                   R4.";
+                reference
+                  "[MEF10.3] [R134], [MEF6.2] [R4]";
+              }
+
+              must "count(/mef-interfaces:mef-interfaces/" +
+                          "mef-interfaces:carrier-ethernet/" +
+                          "mef-interfaces:subscriber-interfaces/" +
+                          "mef-interfaces:uni[" +
+                            "mef-interfaces:uni-id = " +
+                              "current()/uni-id]/" +
+                          "mef-interfaces:egress-envelopes/" +
+                          "mef-interfaces:envelope[" +
+                            "mef-interfaces:type = 'per-cos-or-eec']/" +
+                          "mef-interfaces:bwp-flows/" +
+                          "mef-interfaces:bwp-flow) = " +
+                   "count(/mef-services/carrier-ethernet/" +
+                          "subscriber-services/evc/end-points/" +
+                          "end-point[uni-id = current()/uni-id]/" +
+                          "egress-bwp-per-eec/" +
+                          "bwp-flow-per-eec[envelope-id])" {
+                error-message
+                  "For an Egress Bandwidth Profile Envelope with type
+                   'per-cos-or-eec' every flow must be referenced by an
+                   Egress Bandwidth Profile per EEC Name";
+                description
+                  "This must statement, in combination with others,
+                   ensures that every BWP flow in an Egress Bandwidth
+                   Profile Envelope with type 'per-cos-or-eec' is
+                   referenced from a Bandwidth Profile per EEC Name on
+                   an EVC End Point.  This is done by checking that the
+                   number of BWP flows in envelopes of this type is
+                   equal to the number of BWPs per EEC Name on EVC EPs
+                   on the UNI that refers to an envelope.  Note that
+                   there are other must statements that ensure each BWP
+                   flow is refered to at most once, so from this it can
+                   be deduced that each BWP flow is also refered to at
+                   least once.  This is part of enforcing MEF 10.3 R134,
+                   and also enforces MEF 6.2 R4.";
+                reference
+                  "[MEF10.3] [R134], [MEF6.2] [R4]";
+              }
+
+              key "uni-id";
+              description
+                "List of EVC End Points for the EVC. Each EVC End Point
+                 in the EVC is associated with a distinct UNI, and
+                 contains the EVC per UNI attributes described in MEF
+                 10.3.";
+              reference
+                "[MEF10.3] Section 10,
+                 [MEF7.3] Section 7.4 and Section 7.5.";
+              leaf uni-id {
+                type leafref {
+                  path "/mef-interfaces:mef-interfaces/" +
+                       "mef-interfaces:carrier-ethernet/" +
+                       "mef-interfaces:subscriber-interfaces/" +
+                       "mef-interfaces:uni/mef-interfaces:uni-id";
+                }
+                description
+                  "UNI ID of the UNI where this EVC End
+                   Point is located.";
+                reference
+                  "[MEF10.3] Section 8.3, Section 10.1.
+                   [MEF7.3] Section 7.5.";
+              }
+              leaf role {
+                type mef-types:evc-uni-role-type;
+                default "root";
+                description
+                  "The role of the EVC End Point in the EVC.  For
+                   point-to-point and multipoint-to-multipoint EVCs, the
+                   role is always root.  In a rooted-multipoint EVC, the
+                   role may be root or leaf, to indicate which other EVC
+                   End Points this one may communicate with.";
+                reference
+                  "[MEF10.3] Section 8.3. [MEF7.3] Section 7.5.";
+              }
+              leaf admin-state {
+                type boolean;
+                default "true";
+                description
+                  "Indicates whether the EVC End Point is
+                   adminstratively locked (if the value is false) or
+                   unlocked (if the value if true).";
+                reference
+                  "[MEF7.3] Section 7.4.";
+              }
+              leaf color-identifier {
+                type leafref {
+                  path "/mef-global:mef-global/" +
+                        "mef-global:color-mapping-profiles/" +
+                        "mef-global:profile/mef-global:id";
+                }
+                mandatory true;
+                description
+                  "The Color Identifier for Service Frames.";
+                reference
+                  "[MEF10.3] Section 10.3.
+                   [MEF7.3] Section 7.4 and Section 7.13.";
+              }
+              leaf cos-identifier {
+                type leafref {
+                  path "/mef-global:mef-global/" +
+                        "mef-global:cos-profiles/" +
+                        "mef-global:profile/mef-global:id";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-pcp) or " +
+                     "count(/mef-global:mef-global/" +
+                            "mef-global:cos-profiles/" +
+                            "mef-global:profile[mef-global:id = " +
+                                                        "current()]/" +
+                            "mef-global:cos-pcp/mef-global:pcp[" +
+                               "not(mef-global:cos-name = " +
+                                      "current()/../../../cos-names/" +
+                                      "cos-name/name)]) = 0" {
+                  error-message
+                    "When the Class of Service Identifier is
+                     based on PCP for a given EVC at a given UNI, all
+                     cos-pcp CoS Names must be in the the EVC Cos
+                     Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     PCP for a given EVC at a given UNI, all cos-pcp
+                     CoS Names must be in the the EVC Cos Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-dscp) or " +
+                     "count(/mef-global:mef-global/" +
+                            "mef-global:cos-profiles/" +
+                            "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                            "mef-global:cos-dscp/" +
+                            "mef-global:ipv4-dscp[" +
+                               "not(mef-global:cos-name = " +
+                                      "current()/../../../cos-names/" +
+                                      "cos-name/name)]) = 0" {
+                  error-message
+                    "When the Class of Service Identifier is
+                     based on DSCP for a given EVC at a given UNI, all
+                     IPv4 cos-dscp CoS Names must be in the the EVC
+                     Cos Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     DSCP for a given EVC at a given UNI, all IPv4
+                     cos-dscp CoS Names must be in the the EVC Cos Names
+                     List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-dscp) or " +
+                     "count(/mef-global:mef-global/" +
+                            "mef-global:cos-profiles/" +
+                            "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                            "mef-global:cos-dscp/" +
+                            "mef-global:ipv6-dscp[" +
+                               "not(mef-global:cos-name = " +
+                                      "current()/../../../cos-names/" +
+                                      "cos-name/name)]) = 0" {
+                  error-message
+                    "When the Class of Service Identifier is
+                     based on DSCP for a given EVC at a given UNI, all
+                     IPv6 cos-dscp CoS Names must be in the the EVC
+                     Cos Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     DSCP for a given EVC at a given UNI, all IPv6
+                     cos-dscp CoS Names must be in the the EVC
+                     Cos Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-pcp) or " +
+                     "(../../../cos-names/cos-name[" +
+                          "name = /mef-global:mef-global/" +
+                                  "mef-global:cos-profiles/" +
+                                  "mef-global:profile[" +
+                                    "mef-global:id = current()]/" +
+                                  "mef-global:cos-pcp/" +
+                                  "mef-global:default-pcp-cos-name])" {
+                  error-message
+                    "When the Class of Service Identifier is based on
+                     PCP for a given EVC at a given UNI, the
+                     default-pcp-cos-name must be in the the
+                     EVC Cos Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     PCP for a given EVC at a given UNI, the
+                     default-pcp-cos-name must be in the the EVC Cos
+                     Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-evc) or " +
+                     "(../../../cos-names/cos-name[" +
+                          "name = /mef-global:mef-global/" +
+                                  "mef-global:cos-profiles/" +
+                                  "mef-global:profile[" +
+                                    "mef-global:id = current()]/" +
+                                  "mef-global:cos-evc/" +
+                                  "mef-global:evc-cos-name])" {
+                  error-message
+                    "When the Class of Service Identifier is based on
+                     EVC for a given EVC at a given UNI, the EVC CoS
+                     Name must be in the the EVC Cos Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     EVC for a given EVC at a given UNI, the EVC CoS
+                     Name must be in the the EVC Cos Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-dscp) or " +
+                     "(../../../cos-names/cos-name[" +
+                          "name = /mef-global:mef-global/" +
+                                  "mef-global:cos-profiles/" +
+                                  "mef-global:profile[" +
+                                    "mef-global:id = current()]/" +
+                                  "mef-global:cos-dscp/" +
+                                  "mef-global:default-ipv4-cos-name])" {
+                  error-message
+                    "When the Class of Service Identifier is
+                     based on DSCP for a given EVC at a given UNI,
+                     the default-ipv4-cos-name must be in the the
+                     EVC Cos Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     DSCP for a given EVC at a given UNI, the
+                     default-ipv4-cos-name must be in the the EVC Cos
+                     Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-dscp) or " +
+                     "(../../../cos-names/cos-name[" +
+                          "name = /mef-global:mef-global/" +
+                                  "mef-global:cos-profiles/" +
+                                  "mef-global:profile[" +
+                                    "mef-global:id = current()]/" +
+                                  "mef-global:cos-dscp/" +
+                                  "mef-global:default-ipv6-cos-name])" {
+                  error-message
+                    "When the Class of Service Identifier is based
+                     on DSCP for a given EVC at a given UNI, the
+                     default-ipv6-cos-name must be in the the EVC Cos
+                     Names List.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     DSCP for a given EVC at a given UNI, the
+                     default-ipv6-cos-name must be in the the EVC Cos
+                     Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:l2cp-cos-id) or " +
+                     "count(/mef-global:mef-global/" +
+                            "mef-global:l2cp-cos-map-profiles/" +
+                            "mef-global:profile[mef-global:id = " +
+                               "/mef-global:mef-global/" +
+                                "mef-global:cos-profiles/" +
+                                "mef-global:profile[" +
+                                    "mef-global:id = current()]/" +
+                                "mef-global:l2cp-cos-id]/" +
+                                "mef-global:map-entries/" +
+                                "mef-global:map-entry" +
+                                 "[mef-global:cos-name]" +
+                                  "[not(mef-global:cos-name = " +
+                                        "current()/../../../" +
+                                        "cos-names/cos-name/" +
+                                        "name)]) = 0" {
+                  error-message
+                    "When the Class of Service Identifier includes an
+                     L2CP CoS map, the CoS Names used in the L2CP CoS
+                     map must be in the the EVC Cos Names List.";
+                  description
+                    "When the Class of Service Identifier includes an
+                     L2CP CoS map, the CoS Names used in the L2CP CoS
+                     map must be in the the EVC Cos Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:l2cp-cos-id) or " +
+                     "count(/mef-global:mef-global/" +
+                            "mef-global:l2cp-cos-map-profiles/" +
+                            "mef-global:profile[mef-global:id = " +
+                               "/mef-global:mef-global/" +
+                                "mef-global:cos-profiles/" +
+                                "mef-global:profile[" +
+                                    "mef-global:id = current()]/" +
+                                "mef-global:l2cp-cos-id]/" +
+                                "mef-global:map-entries/" +
+                                "mef-global:map-entry" +
+                                 "[mef-global:subtypes]/" +
+                                "mef-global:subtypes/" +
+                                 "mef-global:subtype" +
+                                  "[not(mef-global:cos-name = " +
+                                        "current()/../../../" +
+                                        "cos-names/cos-name/" +
+                                        "name)]) = 0" {
+                  error-message
+                    "When the Class of Service Identifier includes an
+                     L2CP CoS map, the CoS Names used in the L2CP CoS
+                     map must be in the the EVC Cos Names List.";
+                  description
+                    "When the Class of Service Identifier includes an
+                     L2CP CoS map, the CoS Names used in the L2CP CoS
+                     map must be in the the EVC Cos Names List.";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-pcp) or " +
+                     "/mef-global:mef-global/" +
+                      "mef-global:color-mapping-profiles/" +
+                      "mef-global:profile[" +
+                        "mef-global:id = " +
+                            "current()/../color-identifier]/" +
+                      "mef-global:color-pcp/" +
+                      "mef-global:default-pcp-color-name or " +
+                     "/mef-global:mef-global/" +
+                      "mef-global:color-mapping-profiles/" +
+                      "mef-global:profile[" +
+                           "mef-global:id = " +
+                               "current()/../color-identifier]/" +
+                      "mef-global:color-pcp/" +
+                      "mef-global:pcps/mef-global:pcp[0] or " +
+                     "/mef-global:mef-global/" +
+                      "mef-global:color-mapping-profiles/" +
+                      "mef-global:profile[" +
+                           "mef-global:id = " +
+                               "current()/../color-identifier]/" +
+                      "mef-global:color-dei/mef-global:dei" {
+                  error-message
+                    "When the Class of Service Identifier is
+                     based on PCP for a given EVC at a given UNI, the
+                     Color Identifier must be based on either DEI or
+                     PCP.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     PCP for a given EVC at a given UNI, the Color
+                     Identifier must be based on either DEI or PCP.";
+                  reference
+                    "[MEF10.3] [R111].";
+                }
+                must "not(/mef-global:mef-global/" +
+                          "mef-global:cos-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                                                         "current()]/" +
+                          "mef-global:cos-dscp) or " +
+                     "/mef-global:mef-global/" +
+                      "mef-global:color-mapping-profiles/" +
+                      "mef-global:profile[" +
+                        "mef-global:id = " +
+                           "current()/../color-identifier]/" +
+                      "mef-global:color-dscp/" +
+                      "mef-global:default-dscp-color-name or " +
+                     "/mef-global:mef-global/" +
+                      "mef-global:color-mapping-profiles/" +
+                      "mef-global:profile[" +
+                        "mef-global:id = " +
+                            "current()/../color-identifier]/" +
+                      "mef-global:color-dscp/mef-global:ipv4-dscps/" +
+                      "mef-global:ipv4-dscp[0] or " +
+                     "/mef-global:mef-global/" +
+                      "mef-global:color-mapping-profiles/" +
+                      "mef-global:profile[" +
+                        "mef-global:id = " +
+                            "current()/../color-identifier]/" +
+                      "mef-global:color-dscp/mef-global:ipv6-dscps/" +
+                      "mef-global:ipv6-dscp[0]" {
+                  error-message
+                    "When the Class of Service Identifier is
+                     based on DSCP for a given EVC at a given UNI,
+                     the Color Identifier must be based DSCP.";
+                  description
+                    "When the Class of Service Identifier is based on
+                     DSCP for a given EVC at a given UNI, the Color
+                     Identifier must be based DSCP.";
+                  reference
+                    "[MEF10.3] [R112].";
+                }
+                mandatory true;
+                description
+                  "Reference to a global CoS Profile that
+                   specifies how to assign CoS Names to ingress frames
+                   at this EVC End Point based on fields in the frame.";
+                reference
+                  "[MEF10.3] Section 10.2. [MEF7.3] Section 7.11.";
+              }
+              leaf eec-identifier {
+                type leafref {
+                  path "/mef-global:mef-global/" +
+                        "mef-global:eec-profiles/" +
+                        "mef-global:profile/mef-global:id";
+                }
+                mandatory true;
+                description
+                  "Reference to a global EEC Profile that specifies how
+                   to assign EEC Names to egress frames at this EVC End
+                   Point, based on fields in the frame.";
+                reference
+                  "[MEF10.3] Section 10.4. [MEF7.3] Section 7.12.";
+              }
+              leaf source-mac-address-limit {
+                type uint32 {
+                  range "1..max";
+                }
+                description
+                  "Source MAC Address Limit.";
+                reference
+                  "[MEF10.3] Section 10.9. [MEF7.3] Section 7.4.";
+              }
+              leaf source-mac-address-limit-time-interval {
+                when "../source-mac-address-limit";
+                type yang:timeticks {
+                  range "1..241920000";
+                }
+                mandatory true;
+                description
+                  "Source MAC Address Limit Interval. This
+                   value is used when the Source MAC Address Limit has
+                   been configured.";
+                reference
+                  "[MEF10.3] Section 10.9. [MEF7.3] Section 8.1.13.";
+              }
+              leaf test-meg-enabled {
+                type boolean;
+                default "false";
+                description
+                  "Test MEG Enabled / Disabled.";
+                reference
+                  "[MEF10.3] Section 10.10. [MEF7.3] Section 7.5.";
+              }
+              leaf user-label {
+                type mef-types:identifier1024;
+                description
+                  "User Label.";
+                reference
+                  "[MEF7.3] Section 7.5.";
+              }
+              leaf subscriber-meg-mip-enabled {
+                type boolean;
+                default "false";
+                description
+                  "Subscriber MEG MIP Enabled / Disabled.";
+                reference
+                  "[MEF10.3] Section 10.11. [MEF7.3] Section 7.5";
+              }
+              container ce-vlans {
+                description
+                  "Container for the list of CE-VLAN IDs that map to
+                   this EVC End Point.";
+                reference
+                  "[MEF10.3] Section 9.10, [MEF7.3] Section 7.5";
+                leaf-list ce-vlan {
+                  type mef-types:vlan-id-type;
+
+                  must "not(current()/../../ce-vlans/ce-vlan[2]) or " +
+                       "count(../../../../end-points/end-point/" +
+                             "ce-vlans/ce-vlan[. = current()]) = " +
+                       "count(../../../../end-points/end-point)" {
+                    error-message
+                      "If more than one CE-VLAN ID is configured for a
+                       UNI as part of an EVC, every CE VLAN-ID mapped to
+                       that EVC must be configured for all UNIs within
+                       that EVC.";
+                     description
+                      "If more than one CE-VLAN ID is configured for a
+                       UNI as part of an EVC, every CE VLAN-ID mapped to
+                       that EVC must be configured for all UNIs within
+                       that EVC.";
+                    reference
+                      "[MEF10.3] [R81].";
+                  }
+
+                  must "count(/mef-services/carrier-ethernet/" +
+                              "subscriber-services/evc/end-points/" +
+                              "end-point[uni-id = " +
+                                  "current()/../../uni-id]/" +
+                              "ce-vlans/ce-vlan[. = current()]) = 1" {
+                    error-message
+                      "At each UNI there MUST be a mapping of each
+                       CE-VLAN ID to at most one EVC.";
+                    description
+                      "At each UNI there MUST be a mapping of each
+                       CE-VLAN ID to at most one EVC.";
+                    reference
+                      "[MEF10.3] [R76].";
+                  }
+
+                  min-elements 1;
+                  description
+                    "The leaf-list of CE-VLAN IDs that map to this EVC
+                     End Point - that is, that map to this EVC at the
+                     associated UNI.";
+                  reference
+                    "[MEF10.3] Section 9.10. [MEF7.3] Section 7.5.";
+                }
+              }
+
+              choice ingress-bwp-choices {
+                description
+                  "Choice to ensure one cannot configure BWP per-cos and
+                   per-evc at the same time.";
+                case ingress-bwp-per-cos-option {
+                  container ingress-bwp-per-cos {
+                    description
+                      "EVC Ingress Bandwidth Profiles per Class of
+                       Service Name";
+                    reference
+                      "[MEF10.3] Section 10.6,
+                       [MEF7.3] Section 7.4, 7.11";
+                    list bwp-flow-per-cos {
+                      must "(../../../../svc-type = 'other') or " +
+                           "not(envelope-id) or " +
+                           "count(/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                     "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                        "current()/../../uni-id]/" +
+                                  "mef-interfaces:ingress-envelopes/" +
+                                  "mef-interfaces:envelope[" +
+                                    "mef-interfaces:id = " +
+                                        "current()/envelope-id]/" +
+                                  "mef-interfaces:bwp-flows/" +
+                                  "mef-interfaces:bwp-flow) >= 2" {
+                        error-message
+                          "For a MEF 6.2 service, every Envelope must
+                           contain at least 2 Bandwidth Profile Flows.";
+                        description
+                          "For a MEF 6.2 service, every Envelope must
+                           contain at least 2 Bandwidth Profile Flows.";
+                        reference
+                          "[MEF6.2] [R5]";
+                      }
+                      key "cos-name";
+                      description
+                        "The list of Ingress Bandwidth Profile Flows per
+                         CoS Name for this EVC End Point";
+                      reference
+                        "[MEF10.3] Section 10.6,
+                         [MEF7.3] Section 7.4, 7.11";
+                      leaf cos-name {
+                        type leafref {
+                          path "/mef-services/carrier-ethernet/" +
+                              "subscriber-services/evc/cos-names/" +
+                               "cos-name/name";
+                        }
+                        description
+                          "Class of Service Name for this Bandwidth
+                           Profile Flow.";
+                        reference
+                          "[MEF10.3] Section 10.6,
+                           [MEF7.3] Section 7.4, 7.11";
+                      }
+
+                      choice ingress-bw-profile-per-cos {
+                        mandatory true;
+                        description
+                          "This choice can be used to specify either a
+                           standalone Bandwidth Profile Flow, or a
+                           Bandwidth Profile Flow within a specified
+                           Bandwidth Profile Envelope.  Note that in the
+                           former case, the Bandwidth Profile Flow can
+                           be thought of as being in an Envelope that
+                           contains no other Bandwidth Profile Flows,
+                           has no Envelope ID and does not appear in the
+                           list of Bandwidth Profile Envelopes for the
+                           UNI (/mef-interfaces/carrier-ethernet/
+                           subscriber-interfaces/uni/ingress-envelopes/
+                           envelope).";
+                        reference
+                          "[MEF10.3] sections 10.6 and 12.
+                           [MEF7.3] sections 7.4, 7.11, 7.16.";
+                        case standalone {
+                          description
+                            "A standalone Bandwidth Profile Flow is
+                             being specified. Note that this case allows
+                             for backwards compatibility with MEF 10.2
+                             (see MEF 10.3 section 12.2)";
+                          leaf bw-profile-flow-parameters {
+                            type leafref {
+                              path "/mef-global:mef-global/" +
+                                    "mef-global:" +
+                                      "bwp-flow-parameter-profiles/" +
+                                    "mef-global:profile/" +
+                                    "mef-global:id";
+                            }
+                            mandatory true;
+                            description
+                              "Reference to a global set of Bandwidth
+                               Profile Flow parameters for this
+                               Bandwidth Profile Flow.";
+                          }
+                        }
+                        case envelope {
+                          description
+                            "An Ingress Bandwidth Profile per CoS Name
+                             is being specified with reference to a
+                             Bandwidth Profile Envelope in the UNI List
+                             of Ingress Bandwidth Profile Envelopes.";
+                          leaf envelope-id {
+                            type leafref {
+                              path "/mef-interfaces:mef-interfaces/" +
+                                    "mef-interfaces:carrier-ethernet/" +
+                                    "mef-interfaces:" +
+                                      "subscriber-interfaces/" +
+                                    "mef-interfaces:uni[" +
+                                      "mef-interfaces:uni-id = " +
+                                         "current()/../../../uni-id]/" +
+                                    "mef-interfaces:" +
+                                      "ingress-envelopes/" +
+                                    "mef-interfaces:envelope/" +
+                                    "mef-interfaces:id";
+                            }
+
+                            must "/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                        "current()/../../../uni-id]/" +
+                                  "mef-interfaces:ingress-envelopes/" +
+                                  "mef-interfaces:envelope[" +
+                                    "mef-interfaces:id = current()]/" +
+                                  "mef-interfaces:type = " +
+                                      "'per-cos-or-eec'" {
+                              error-message
+                                "A bandwidth profile per CoS Name can
+                                 only refer to an Envelope with type
+                                 per-cos-or-eec.";
+                              description
+                                "A bandwidth profile per CoS Name can
+                                 only refer to an Envelope with type
+                                 per-cos-or-eec.  This is used to
+                                 enforce MEF 10.3 R135.";
+                              reference
+                                "[MEF10.3] [R135]";
+                            }
+
+                            must "count(/mef-services/" +
+                                        "carrier-ethernet/" +
+                                        "subscriber-services/" +
+                                        "evc/end-points/" +
+                                        "end-point[uni-id = " +
+                                            "current()/../../../" +
+                                            "uni-id]/" +
+                                        "ingress-bwp-per-cos/" +
+                                        "bwp-flow-per-cos" +
+                                          "[envelope-id = current()]" +
+                                          "[rank = " +
+                                             "current()/../rank]) = 1" {
+                              error-message
+                                "For an ingress envelope with type
+                                 per-cos-or-eec, there must be exactly
+                                 one Ingress Bandwidth Profile per CoS
+                                 Name that refers to each Bandwidth
+                                 Profile Flow in the Envelope.";
+                              description
+                                "This must statement enforces MEF 10.3
+                                 R134 by ensuring that the
+                                 number of ingress Bandwidth Profiles
+                                 per CoS Name, across all the EVC End
+                                 Points on this UNI, that refer to the
+                                 same envelope and rank as this one is
+                                 one, i.e. this one is the only one.";
+                              reference
+                                "[MEF10.3] [R134]";
+                            }
+                            mandatory true;
+                            description
+                              "Reference to an ingress Bandwidth Profile
+                               Envelope on the UNI.";
+                          }
+
+                          leaf rank {
+                            type leafref {
+                              path "/mef-interfaces:mef-interfaces/" +
+                                    "mef-interfaces:carrier-ethernet/" +
+                                    "mef-interfaces:" +
+                                      "subscriber-interfaces/" +
+                                    "mef-interfaces:uni[" +
+                                      "mef-interfaces:uni-id = " +
+                                      "current()/../../../uni-id]/" +
+                                    "mef-interfaces:" +
+                                      "ingress-envelopes/" +
+                                    "mef-interfaces:envelope[" +
+                                       "mef-interfaces:id = " +
+                                       "current()/../envelope-id]/" +
+                                    "mef-interfaces:bwp-flows/" +
+                                    "mef-interfaces:bwp-flow/" +
+                                    "mef-interfaces:rank";
+                            }
+                            mandatory true;
+                            description
+                              "Reference to a Bandwidth Profile Flow in
+                               the given Envelope.";
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+                case ingress-bwp-per-evc-option{
+                  container ingress-bwp-per-evc {
+                    description
+                      "Ingress Bandwidth Profile per EVC.";
+                    reference
+                      "[MEF10.3] Section 10.5, [MEF7.3] Section 7.4";
+                    choice ingress-bw-profile-per-evc {
+                      description
+                        "This choice can be used to specify either a
+                         standalone Bandwidth Profile Flow, or a
+                         Bandwidth Profile Flow within a specified
+                         Bandwidth Profile Envelope.  Note that in the
+                         former case, the Bandwidth Profile Flow can be
+                         thought of as being in an Envelope that
+                         contains no other Bandwidth Profile Flows, has
+                         no Envelope ID and does not appear in the list
+                         of Bandwidth Profile Envelopes for the UNI
+                         (/mef-interfaces/carrier-ethernet/
+                         subscriber-interfaces/uni/ingress-envelopes/
+                         envelope).";
+                      reference
+                        "[MEF10.3] sections 10.5 and 12.
+                         [MEF7.3] sections 7.4 and 7.16.";
+                      case standalone {
+                        description
+                          "A standalone Bandwidth Profile Flow is
+                           being specified. Note that this case allows
+                           for backwards compatibility with MEF 10.2
+                           (see MEF 10.3 section 12.2)";
+                        leaf bw-profile-flow-parameters {
+                          type leafref {
+                            path "/mef-global:mef-global/" +
+                                 "mef-global:" +
+                                   "bwp-flow-parameter-profiles/" +
+                                 "mef-global:profile/" +
+                                 "mef-global:id";
+                          }
+                          mandatory true;
+                          description
+                            "Reference to a global set of Bandwidth
+                             Profile Flow parameters for this Bandwidth
+                             Profile Flow.";
+                        }
+                      }
+                      case envelope {
+                        description
+                          "An Ingress Bandwidth Profile per EVC is being
+                           specified with reference to a Bandwidth
+                           Profile Envelope in the UNI List of Ingress
+                           Bandwidth Profile Envelopes.";
+                         leaf envelope-id {
+                          type leafref {
+                            path "/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                    "current()/../../uni-id]/" +
+                                  "mef-interfaces:ingress-envelopes/" +
+                                  "mef-interfaces:envelope/" +
+                                  "mef-interfaces:id";
+                          }
+
+                          must "/mef-interfaces:mef-interfaces/" +
+                                "mef-interfaces:carrier-ethernet/" +
+                                "mef-interfaces:" +
+                                  "subscriber-interfaces/" +
+                                "mef-interfaces:uni[" +
+                                  "mef-interfaces:uni-id = " +
+                                      "current()/../../uni-id]/" +
+                                "mef-interfaces:ingress-envelopes/" +
+                                "mef-interfaces:envelope[" +
+                                  "mef-interfaces:id = current()]/" +
+                                "mef-interfaces:type = 'per-evc'" {
+                            error-message
+                              "A bandwidth profile per EVC can
+                               only refer to an Envelope with type
+                               per-evc.";
+                            description
+                              "A bandwidth profile per EVC can
+                               only refer to an Envelope with type
+                               per-evc.  This is used to
+                               enforce MEF 10.3 R135.";
+                            reference
+                              "[MEF10.3] [R135]";
+                          }
+                          must "count(/mef-services/carrier-ethernet/" +
+                                      "subscriber-services/evc/" +
+                                      "end-points/end-point" +
+                                        "[uni-id = " +
+                                            "current()/../../uni-id]" +
+                                        "[ingress-bwp-per-evc/" +
+                                         "envelope-id = current()]" +
+                                        "[ingress-bwp-per-evc/rank = " +
+                                            "current()/../rank]) = 1" {
+                            error-message
+                              "For an ingress envelope with type
+                               per-evc, there must be exactly
+                               one Ingress Bandwidth Profile per EVC
+                               that refers to each Bandwidth
+                               Profile Flow in the Envelope.";
+                            description
+                              "This must statement enforces MEF 10.3
+                               R134 by ensuring that the
+                               number of ingress Bandwidth Profiles
+                               per EVC, across all the EVC End
+                               Points on this UNI, that refer to the
+                               same envelope and rank as this one is
+                               one, i.e. this one is the only one.";
+                            reference
+                              "[MEF10.3] [R134]";
+                          }
+                          mandatory true;
+                          description
+                            "Reference to an ingress Bandwidth Profile
+                             Envelope on the UNI.";
+                        }
+                        leaf rank {
+                          type leafref {
+                            path "/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                     "mef-interfaces:uni-id = " +
+                                     "current()/../../uni-id]/" +
+                                  "mef-interfaces:ingress-envelopes/" +
+                                  "mef-interfaces:envelope[" +
+                                     "mef-interfaces:id = " +
+                                     "current()/../envelope-id]/" +
+                                  "mef-interfaces:bwp-flows/" +
+                                  "mef-interfaces:bwp-flow/" +
+                                  "mef-interfaces:rank";
+                          }
+                          mandatory true;
+                          description
+                            "Reference to a Bandwidth Profile Flow in
+                             the given Envelope.";
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+
+              choice egress-bwp-choices {
+                description
+                  "Choice to ensure one cannot configure BWP per-EEC and
+                   per-EVC at the same time.";
+                case egress-bwp-per-eec-option {
+                  container egress-bwp-per-eec {
+                    description
+                      "EVC Egress Bandwidth Profiles per Egress
+                       Equivalence Class Name";
+                    reference
+                      "[MEF10.3] Section 10.8,
+                       [MEF7.3] Section 7.4, 7.12";
+                    list bwp-flow-per-eec {
+                      must "(../../../../svc-type = 'other') or " +
+                           "not(envelope-id) or " +
+                           "count(/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                        "current()/../../uni-id]/" +
+                                  "mef-interfaces:egress-envelopes/" +
+                                  "mef-interfaces:envelope[" +
+                                    "mef-interfaces:id = " +
+                                        "current()/envelope-id]/" +
+                                  "mef-interfaces:bwp-flows/" +
+                                  "mef-interfaces:bwp-flow) >= 2" {
+                        error-message
+                          "For a MEF 6.2 service, every Envelope must
+                           contain at least 2 Bandwidth Profile Flows.";
+                        description
+                          "For a MEF 6.2 service, every Envelope must
+                           contain at least 2 Bandwidth Profile Flows.";
+                        reference
+                          "[MEF6.2] [R5]";
+                      }
+                      key "eec-name";
+                      description
+                        "The list of Egress Bandwidth Profile Flows per
+                         EEC Name for this EVC End Point";
+                      reference
+                        "[MEF10.3] Section 10.8,
+                         [MEF7.3] Section 7.4, 7.12";
+                      leaf eec-name {
+                        type string;
+                        description
+                          "Egress Equivalence Class Name for this
+                           Bandwidth Profile Flow.";
+                        reference
+                          "[MEF10.3] Section 10.8,
+                           [MEF7.3] Section 7.4, 7.12";
+                      }
+
+                      choice egress-bw-profile-per-eec {
+                        mandatory true;
+                        description
+                          "This choice can be used to specify either a
+                           standalone Bandwidth Profile Flow, or a
+                           Bandwidth Profile Flow within a specified
+                           Bandwidth Profile Envelope.  Note that in the
+                           former case, the Bandwidth Profile Flow can
+                           be thought of as being in an Envelope that
+                           contains no other Bandwidth Profile Flows,
+                           has no Envelope ID and does not appear in the
+                           list of Bandwidth Profile Envelopes for the
+                           UNI (/mef-interfaces/carrier-ethernet/
+                           subscriber-interfaces/uni/egress-envelopes/
+                           envelope).";
+                        reference
+                          "[MEF10.3] sections 10.8 and 12.
+                           [MEF7.3] sections 7.4, 7.12, 7.16.";
+                        case standalone {
+                          description
+                            "A standalone Bandwidth Profile Flow is
+                             being specified. Note that this case allows
+                             for backwards compatibility with MEF 10.2
+                             (see MEF 10.3 section 12.2)";
+                          leaf bw-profile-flow-parameters {
+                            type leafref {
+                              path "/mef-global:mef-global/" +
+                                    "mef-global:" +
+                                      "bwp-flow-parameter-profiles/" +
+                                    "mef-global:profile/" +
+                                    "mef-global:id";
+                            }
+                            mandatory true;
+                            description
+                              "Reference to a global set of Bandwidth
+                               Profile Flow parameters for this
+                               Bandwidth Profile Flow.";
+                          }
+                        }
+                        case envelope {
+                          description
+                            "An Egress Bandwidth Profile per EEC Name is
+                             being specified with reference to a
+                             Bandwidth Profile Envelope in the UNI List
+                             of Egress Bandwidth Profile Envelopes.";
+                          leaf envelope-id {
+                            type leafref {
+                              path "/mef-interfaces:mef-interfaces/" +
+                                    "mef-interfaces:carrier-ethernet/" +
+                                    "mef-interfaces:" +
+                                      "subscriber-interfaces/" +
+                                    "mef-interfaces:uni[" +
+                                      "mef-interfaces:uni-id = " +
+                                      "current()/../../../uni-id]/" +
+                                    "mef-interfaces:egress-envelopes/" +
+                                    "mef-interfaces:envelope/" +
+                                    "mef-interfaces:id";
+                            }
+
+                            must "/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                        "current()/../../../uni-id]/" +
+                                  "mef-interfaces:egress-envelopes/" +
+                                  "mef-interfaces:envelope[" +
+                                    "mef-interfaces:id = current()]/" +
+                                  "mef-interfaces:type = " +
+                                      "'per-cos-or-eec'" {
+                              error-message
+                                "A bandwidth profile per EEC Name can
+                                 only refer to an Envelope with type
+                                 per-cos-or-eec.";
+                              description
+                                "A bandwidth profile per EEC Name can
+                                 only refer to an Envelope with type
+                                 per-cos-or-eec.  This is used to
+                                 enforce MEF 10.3 R135.";
+                              reference
+                                "[MEF10.3] [R135]";
+                            }
+                            must "count(/mef-services/" +
+                                        "carrier-ethernet/" +
+                                        "subscriber-services/evc/" +
+                                        "end-points/end-point[" +
+                                          "uni-id = " +
+                                              "current()/../../../" +
+                                              "uni-id]/" +
+                                        "egress-bwp-per-eec/" +
+                                        "bwp-flow-per-eec" +
+                                          "[envelope-id = current()]" +
+                                          "[rank = " +
+                                             "current()/../rank]) = 1" {
+                              error-message
+                                "For an egress envelope with type
+                                 per-cos-or-eec, there must be exactly
+                                 one Egress Bandwidth Profile per EEC
+                                 Name that refers to each Bandwidth
+                                 Profile Flow in the Envelope.";
+                              description
+                                "This must statement enforces MEF 10.3
+                                 R134 by ensuring that the
+                                 number of egress Bandwidth Profiles
+                                 per EEC Name, across all the EVC End
+                                 Points on this UNI, that refer to the
+                                 same envelope and rank as this one is
+                                 one, i.e. this one is the only one.";
+                              reference
+                                "[MEF10.3] [R134]";
+                            }
+                            mandatory true;
+                            description
+                              "Reference to an egress Bandwidth Profile
+                               Envelope on the UNI.";
+                          }
+                          leaf rank {
+                            type leafref {
+                              path "/mef-interfaces:mef-interfaces/" +
+                                    "mef-interfaces:carrier-ethernet/" +
+                                    "mef-interfaces:" +
+                                      "subscriber-interfaces/" +
+                                    "mef-interfaces:uni[" +
+                                      "mef-interfaces:uni-id = " +
+                                          "current()/../../../" +
+                                          "uni-id]/" +
+                                    "mef-interfaces:egress-envelopes/" +
+                                    "mef-interfaces:envelope[" +
+                                      "mef-interfaces:id = " +
+                                          "current()/../envelope-id]/" +
+                                    "mef-interfaces:bwp-flows/" +
+                                    "mef-interfaces:bwp-flow/" +
+                                    "mef-interfaces:rank";
+                            }
+                            mandatory true;
+                            description
+                              "Reference to a Bandwidth Profile Flow in
+                               the given Envelope.";
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+                case egress-bwp-per-evc-option{
+                  container egress-bwp-per-evc {
+                    description
+                      "Egress Bandwidth Profile per EVC.";
+                    reference
+                      "[MEF10.3] Section 10.7, [MEF7.3] Section 7.4";
+                    choice egress-bw-profile-per-evc {
+                      description
+                        "This choice can be used to specify either a
+                         standalone Bandwidth Profile Flow, or a
+                         Bandwidth Profile Flow within a specified
+                         Bandwidth Profile Envelope.  Note that in the
+                         former case, the Bandwidth Profile Flow can be
+                         thought of as being in an Envelope that
+                         contains no other Bandwidth Profile Flows, has
+                         no Envelope ID and does not appear in the list
+                         of Bandwidth Profile Envelopes for the UNI
+                         (/mef-interfaces/carrier-ethernet/
+                         subscriber-interfaces/uni/egress-envelopes/
+                         envelope).";
+                      reference
+                        "[MEF10.3] sections 10.7 and 12.
+                         [MEF7.3] sections 7.4 and 7.16.";
+                      case standalone {
+                        description
+                          "A standalone Bandwidth Profile Flow is
+                           being specified. Note that this case allows
+                           for backwards compatibility with MEF 10.2
+                           (see MEF 10.3 section 12.2)";
+                        leaf bw-profile-flow-parameters {
+                          type leafref {
+                            path "/mef-global:mef-global/" +
+                                  "mef-global:" +
+                                    "bwp-flow-parameter-profiles/" +
+                                  "mef-global:profile/" +
+                                  "mef-global:id";
+                          }
+                          mandatory true;
+                          description
+                            "Reference to a global set of Bandwidth
+                             Profile Flow parameters for this Bandwidth
+                             Profile Flow.";
+                        }
+                      }
+                      case envelope {
+                        description
+                          "An Egress Bandwidth Profile per EVC is being
+                           specified with reference to a Bandwidth
+                           Profile Envelope in the UNI List of Egress
+                           Bandwidth Profile Envelopes.";
+                        leaf envelope-id {
+                          type leafref {
+                            path "/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                        "current()/../../uni-id]/" +
+                                  "mef-interfaces:egress-envelopes/" +
+                                  "mef-interfaces:envelope/" +
+                                  "mef-interfaces:id";
+                          }
+
+                          must "/mef-interfaces:mef-interfaces/" +
+                                "mef-interfaces:carrier-ethernet/" +
+                                "mef-interfaces:" +
+                                  "subscriber-interfaces/" +
+                                "mef-interfaces:uni[" +
+                                  "mef-interfaces:uni-id = " +
+                                      "current()/../../uni-id]/" +
+                                "mef-interfaces:egress-envelopes/" +
+                                "mef-interfaces:envelope[" +
+                                  "mef-interfaces:id = current()]/" +
+                                "mef-interfaces:type = 'per-evc'" {
+                            error-message
+                              "A bandwidth profile per EVC can
+                               only refer to an Envelope with type
+                               per-evc.";
+                            description
+                              "A bandwidth profile per EVC can
+                               only refer to an Envelope with type
+                               per-evc.  This is used to
+                               enforce MEF 10.3 R135.";
+                            reference
+                              "[MEF10.3] [R135]";
+                          }
+                          must "count(/mef-services/carrier-ethernet/" +
+                                      "subscriber-services/evc/" +
+                                      "end-points/end-point" +
+                                        "[uni-id = " +
+                                            "current()/../../uni-id]" +
+                                        "[egress-bwp-per-evc/" +
+                                         "envelope-id = current()]" +
+                                        "[egress-bwp-per-evc/rank = " +
+                                            "current()/../rank]) = 1" {
+                            error-message
+                              "For an egress envelope with type
+                               per-evc, there must be exactly
+                               one Egress Bandwidth Profile per EVC
+                               that refers to each Bandwidth
+                               Profile Flow in the Envelope.";
+                            description
+                              "This must statement enforces MEF 10.3
+                               R134 by ensuring that the
+                               number of egress Bandwidth Profiles
+                               per EVC, across all the EVC End
+                               Points on this UNI, that refer to the
+                               same envelope and rank as this one is
+                               one, i.e. this one is the only one.";
+                            reference
+                              "[MEF10.3] [R134]";
+                          }
+                          mandatory true;
+                          description
+                            "Reference to an egress Bandwidth Profile
+                             Envelope on the UNI.";
+                        }
+
+                        leaf rank {
+                          type leafref {
+                            path "/mef-interfaces:mef-interfaces/" +
+                                  "mef-interfaces:carrier-ethernet/" +
+                                  "mef-interfaces:" +
+                                    "subscriber-interfaces/" +
+                                  "mef-interfaces:uni[" +
+                                    "mef-interfaces:uni-id = " +
+                                        "current()/../../uni-id]/" +
+                                  "mef-interfaces:egress-envelopes/" +
+                                  "mef-interfaces:envelope[" +
+                                    "mef-interfaces:id = " +
+                                        "current()/../envelope-id]/" +
+                                  "mef-interfaces:bwp-flows/" +
+                                  "mef-interfaces:bwp-flow/" +
+                                  "mef-interfaces:rank";
+                          }
+                          mandatory true;
+                          description
+                            "Reference to a Bandwidth Profile Flow in
+                             the given Envelope.";
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+
+              container status {
+                config false;
+                description
+                  "This container reflects the operational state of the
+                   EVC End Point.";
+                leaf operational-state {
+                  type boolean;
+                  default "false";
+                  description
+                    "Operational Status of the EVC End Point, which
+                     is either Enabled (if the value is true) or
+                     Disabled (if the value is false).";
+                  reference
+                    "[MEF7.3] Section 7.4.";
+                }
+                leaf evc-end-point-id {
+                  type mef-types:identifier90;
+                  description
+                    "This string contains the concatenation of the
+                     evc-id and uni-id keys for this EVC end-point";
+                  reference
+                    "[MEF10.3] Section 10.1, [MEF7.3] Section 7.5";
+                }
+              }
+            }
+          }
+          container status {
+            config false;
+            description
+              "This container reflects the operational state of the
+               EVC.";
+            leaf operational-state {
+              type boolean;
+              default "false";
+              description
+                "Operational Status of the EVC: either Enabled
+                 (if the value is 'true') or Disabled
+                 (if the value is 'false').";
+              reference
+                "[MEF7.3] Section 7.1.";
+            }
+            leaf service-state {
+              type mef-types:service-state-type;
+              default "pending";
+              description
+                "EVC Service State.";
+              reference
+                "[MEF7.3] Section 7.1.";
+            }
+          }
+          container carrier-ethernet-sls {
+            description
+              "Carrier Ethernet Service Level Specification";
+            leaf sls-id {
+              type leafref {
+                path "/mef-global:mef-global/" +
+                     "mef-global:sls-profiles/mef-global:profile/" +
+                     "mef-global:id";
+              }
+              description
+                "The ID for an SLS profile in the global list of SLS
+                 profiles. The CoS Entries and corresponding SLS
+                 objectives in the specified profile are applied to this
+                 EVC if (and only if) they are further referenced below.
+                 In each case, a set of ordered End Point pairs (which
+                 are specific to this EVC) must be specified.  If this
+                 leaf is not set, the EVC does not have any SLS
+                 objectives.";
+            }
+            leaf start-time {
+              when "../sls-id";
+              type yang:date-and-time;
+              mandatory true;
+              description
+                "The start time on which intervals over which the SLS
+                 objectives are evaluated is based. This leaf is used
+                 in conjunction with the time-interval leaf in the given
+                 SLS profile, to specify an infinite series of time
+                 intervals starting at the start time and each
+                 having duration equal to the time interval. The SLS
+                 objectives are evaluated and reported independently for
+                 each such time interval.";
+              reference
+                "[MEF7.3] Section 7.17.1.";
+            }
+            container cos-entries {
+              when "../sls-id";
+              description
+                "Container for the list of SLS CoS Entries that apply to
+                 this EVC.";
+              reference
+                "[MEF7.3] Section 7.17.";
+              list cos-entry {
+                key "cos-name";
+                min-elements 1;
+                description
+                  "The list of SLS CoS entries that apply to this EVC.";
+                reference
+                  "[MEF7.3] Section 7.17.2.";
+                leaf cos-name {
+                  type leafref {
+                    path "/mef-global:mef-global/" +
+                          "mef-global:sls-profiles/" +
+                          "mef-global:profile[mef-global:id = " +
+                              "current()/../../../sls-id]/" +
+                          "mef-global:pm-cos-name-entries/" +
+                          "mef-global:pm-cos-name-entry/" +
+                          "mef-global:cos-name";
+                  }
+                  must "../../../../cos-names/" +
+                       "cos-name[name = current()]" {
+                    error-message
+                      "A CoS Name refer to in the SLS must exist in the
+                       EVC List of CoS Names.";
+                    description
+                      "A CoS Name refer to in the SLS must exist in the
+                       EVC List of CoS Names.";
+                  }
+                  description
+                    "This leaf specifies an SLS CoS Entry in the SLS
+                     Profile identified by the sls-id leaf above.  SLS
+                     Objectives specified within the CoS Entry may be
+                     applied to this EVC if they are referenced below
+                     and associated with a set of ordered end point
+                     pairs.";
+                  reference
+                    "[MEF7.3] Section 7.17.2.";
+                }
+                container pm-entries {
+                  description
+                    "Container for a list of SLS objectives and
+                     associated parameters, that will apply to this
+                     EVC.";
+                  reference
+                    "[MEF7.3] Section 7.17.3, [MEF10.3] Section 8.8,
+                     [MEF10.3.1].";
+                  list pm-entry {
+                    key "pm-entry-id";
+                    min-elements 1;
+                    description
+                      "List of SLS objectives and associated parameters,
+                       that will apply to this EVC.";
+                    reference
+                      "[MEF7.3] Section 7.17.3, [MEF10.3] Section 8.8,
+                       [MEF10.3.1].";
+                    leaf pm-entry-id {
+                      type leafref {
+                        path "/mef-global:mef-global/" +
+                              "mef-global:sls-profiles/" +
+                              "mef-global:profile[mef-global:id = " +
+                                  "current()/../../../../../sls-id]/" +
+                              "mef-global:pm-cos-name-entries/" +
+                              "mef-global:pm-cos-name-entry[" +
+                                "mef-global:cos-name = " +
+                                    "current()/../../../cos-name]/" +
+                              "mef-global:pm-entries/" +
+                              "mef-global:pm-entry/mef-global:id";
+                      }
+                      description
+                        "This leaf identifies a specific SLS performance
+                         objective and associated parameters, within the
+                         SLS Profile and CoS entry specified above. The
+                         objective and parameters are applied to the set
+                         of ordered end point pairs (or the set of sets
+                         of ordered end point pairs in the case of group
+                         availability) specified below.";
+                    }
+                    container sets-of-end-point-pairs {
+                      when "/mef-global:mef-global/" +
+                            "mef-global:sls-profiles/" +
+                            "mef-global:profile[" +
+                              "mef-global:id = " +
+                                  "current()/../../../../../sls-id]/" +
+                            "mef-global:pm-cos-name-entries/" +
+                            "mef-global:pm-cos-name-entry[" +
+                              "mef-global:cos-name = " +
+                                  "current()/../../../cos-name]/" +
+                            "mef-global:pm-entries/" +
+                            "mef-global:pm-entry[" +
+                              "mef-global:id = " +
+                                  "current()/../pm-entry-id]/" +
+                            "mef-global:one-way-group-availability-pm" {
+                        description
+                          "Only visible when
+                           one-way-group-availability-pm is being
+                           configured.";
+                      }
+                      description
+                        "Set of sets of end point pairs.";
+                      reference
+                        "[MEF7.3] Section 7.17.5.12,
+                         [MEF10.3] Section 8.8.6.";
+                      list set-of-end-point-pairs {
+                        must "(../../../../../../../" +
+                              "connection-type != " +
+                                            "'rooted-multipoint') or " +
+                             "not(sls-uni-exclusions)" {
+                          error-message
+                            "If EVC Type is Rooted-Multipoint,
+                             sls-uni-inclusions must be used instead of
+                             sls-uni-exclusions.";
+                          description
+                            "If EVC Type is Rooted-Multipoint,
+                             sls-uni-inclusions must be used instead of
+                             sls-uni-exclusions.";
+                          reference
+                            "[MEF10.3] Section 8.8.";
+                        }
+                        key "index";
+                        min-elements 1;
+                        description
+                          "This list contains sets of end point pairs.
+                           Each set is described either by listing
+                           ordered pairs of end points that are included
+                           in the set, or by considering the set of all
+                           possible ordered end point pairs in the EVC
+                           and listing ordered end point pairs that are
+                           excluded from this set.";
+                        leaf index {
+                          type uint32;
+                          description
+                            "An index value to identify this set of
+                             end-point pairs";
+                        }
+                        choice sls-uni {
+                          mandatory true;
+                          description
+                            "The set of ordered end point pairs can be
+                             specified either by listing the ordered end
+                             point pairs to include, or by considering
+                             the set or all ordered end point pairs, and
+                             listing those to exclude (if any).";
+                          case inclusions {
+                            container sls-uni-inclusions {
+                              description
+                                "Container for a list of ordered end
+                                 point pairs.  This list is used to
+                                 specify all of the end point pairs that
+                                 are included in one of the sets over
+                                 which the Group Availability metric is
+                                 calculated.";
+                              list end-point-pair {
+                                must "end-point1 != end-point2" {
+                                  error-message
+                                    "The two UNI IDs for a given
+                                     inclusion cannot be the same.";
+                                  description
+                                    "The two UNI IDs for a given
+                                     inclusion cannot be the same.";
+                                }
+                                must "(../../../../../../../../../" +
+                                      "connection-type != " +
+                                            "'rooted-multipoint') or " +
+                                     "not((../../../../../../../../" +
+                                          "../end-points/end-point[" +
+                                            "uni-id = " +
+                                              "current()/end-point1]/" +
+                                          "role = 'leaf') and " +
+                                         "(../../../../../../../../" +
+                                          "../end-points/end-point[" +
+                                            "uni-id = " +
+                                              "current()/end-point2]/" +
+                                          "role = 'leaf'))" {
+                                  error-message
+                                    "If EVC Type is Rooted-Multipoint,
+                                     sls-uni-inclusion UNI Pairs cannot
+                                     both be role 'leaf'.";
+                                  description
+                                    "If EVC Type is Rooted-Multipoint,
+                                     sls-uni-inclusion UNI Pairs cannot
+                                     both be role 'leaf'.";
+                                  reference
+                                    "[MEF10.3] [R54].";
+                                }
+                                key "end-point1 end-point2";
+                                min-elements 1;
+                                description
+                                  "List of ordered end point pairs. This
+                                   list is used to specify all of the
+                                   end point pairs that are included in
+                                   one of the sets over which the Group
+                                   Availability metric is calculated.";
+                                leaf end-point1 {
+                                  type leafref {
+                                    path "/mef-services/carrier-ethernet/" +
+                                         "subscriber-services/evc/" +
+                                         "end-points/end-point/uni-id";
+                                  }
+                                  description
+                                    "The first end point in an ordered
+                                     end point pair.";
+                                  reference
+                                    "[MEF10.3] Section 8.8.6,
+                                     [MEF7.3] Section 7.17.5.11 and
+                                     7.17.5.12.";
+                                }
+                                leaf end-point2 {
+                                  type leafref {
+                                    path "/mef-services/carrier-ethernet/" +
+                                         "subscriber-services/evc/" +
+                                         "end-points/end-point/uni-id";
+                                  }
+                                  description
+                                    "The second end point in an ordered
+                                     end point pair.";
+                                  reference
+                                    "[MEF10.3] Section 8.8.6,
+                                     [MEF7.3] Section 7.17.5.11 and
+                                     7.17.5.12.";
+                                }
+                              }
+                            }
+                          }
+                          case exclusions {
+                            container sls-uni-exclusions {
+                              presence
+                                "The presence of this container
+                                 indicates that all possible ordered end
+                                 point pairs in the EVC are included in
+                                 this set of end point pairs, other than
+                                 the ordered end point pairs in the list
+                                 within this container (see below).  If
+                                 the list is empty, then all ordered end
+                                 point pairs are included in the set.
+                                 Note that in an EVC with n end points,
+                                 there are n * (n - 1) possible ordered
+                                 end point pairs.";
+                              description
+                                "Container for a list of ordered end
+                                 point pairs that are excluded from this
+                                 set of ordered end point pairs.  The
+                                 set that is described by taking all the
+                                 possible ordered end point pairs and
+                                 removing those contained in the list
+                                 below is used as one of the sets over
+                                 which One-way Group Availability is
+                                 calculated.";
+                              list end-point-pair {
+                                must "end-point1 != end-point2" {
+                                  error-message
+                                    "The two UNI IDs for a given
+                                     exclusion cannot be the same.";
+                                  description
+                                    "The two end points for a given
+                                     exclusion cannot be the same.";
+                                  reference
+                                    "[MEF10.3] [R32].";
+                                }
+                                key "end-point1 end-point2";
+                                description
+                                  "List of ordered end point pairs. This
+                                   list is used to specify all of the
+                                   end point pairs that are excluded
+                                   from the set of all possible ordered
+                                   end point pairs for the EVC.  The
+                                   result is used as one of the sets
+                                   over which the Group Availability
+                                   metric is calculated.";
+                                leaf end-point1 {
+                                  type leafref {
+                                    path "/mef-services/carrier-ethernet/" +
+                                         "subscriber-services/evc/" +
+                                         "end-points/end-point/uni-id";
+                                  }
+                                  description
+                                    "The first end point in an ordered
+                                     end point pair.";
+                                  reference
+                                    "[MEF10.3] Section 8.8.6,
+                                     [MEF7.3] Sections 7.17.5.11 and
+                                     7.17.5.12.";
+                                }
+                                leaf end-point2 {
+                                  type leafref {
+                                    path "/mef-services/carrier-ethernet/" +
+                                         "subscriber-services/evc/" +
+                                         "end-points/end-point/uni-id";
+                                  }
+                                  description
+                                    "The second end point in an ordered
+                                     end point pair.";
+                                  reference
+                                    "[MEF10.3] Section 8.8.6,
+                                     [MEF7.3] Sections 7.17.5.11 and
+                                     7.17.5.12.";
+                                }
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                    container end-point-pairs {
+                      when "not(/mef-global:mef-global/" +
+                                "mef-global:sls-profiles/" +
+                                "mef-global:profile[" +
+                                  "mef-global:id = " +
+                                      "current()/../../../../../" +
+                                      "sls-id]/" +
+                                "mef-global:pm-cos-name-entries/" +
+                                "mef-global:pm-cos-name-entry[" +
+                                  "mef-global:cos-name = " +
+                                      "current()/../../../cos-name]/" +
+                                "mef-global:pm-entries/" +
+                                "mef-global:pm-entry[" +
+                                  "mef-global:id = " +
+                                      "current()/../pm-entry-id]/" +
+                                "mef-global:" +
+                                  "one-way-group-availability-pm)" {
+                        description
+                          "Only visible when
+                           one-way-group-availability-pm is not
+                           being configured.";
+                      }
+                      must "(../../../../../../connection-type != " +
+                                            "'rooted-multipoint') or " +
+                           "(not(sls-uni-exclusions))" {
+                        error-message
+                          "If EVC Type is Rooted-Multipoint,
+                           sls-uni-inclusions must be used instead of
+                           sls-uni-exclusions.";
+                        description
+                          "If EVC Type is Rooted-Multipoint,
+                           sls-uni-inclusions must be used instead of
+                           sls-uni-exclusions.";
+                      }
+                      description
+                        "Set of end point pairs. The set is described
+                         either by listing ordered pairs of end points
+                         that are included in the set, or by considering
+                         the set of all possible ordered end point pairs
+                         in the EVC and listing ordered end point pairs
+                         that are excluded from this set.";
+                      reference
+                        "[MEF7.3] Section 7.17.5.11,
+                         [MEF10.3] Section 8.8.";
+                      choice sls-uni {
+                        mandatory true;
+                        description
+                          "The set of ordered end point pairs can be
+                           specified either by listing the ordered end
+                           point pairs to include, or by considering the
+                           set or all ordered end point pairs, and
+                           listing those to exclude (if any).";
+                        case inclusions {
+                          container sls-uni-inclusions {
+                            description
+                              "Container for a list of ordered end point
+                               pairs.  This list is used to specify all
+                               of the end point pairs that are included
+                               in the set over which the performance
+                               metric is calculated.";
+                            list end-point-pair {
+                              must "end-point1 != end-point2" {
+                                error-message
+                                  "The two UNI IDs for a given inclusion
+                                   cannot be the same.";
+                                description
+                                  "The two UNI IDs for a given inclusion
+                                   cannot be the same.";
+                                reference
+                                  "[MEF10.3] Section 8.8.";
+                              }
+                              must "(../../../../../../../../" +
+                                    "connection-type != " +
+                                        "'rooted-multipoint') or " +
+                                   "not((/mef-services/carrier-ethernet/" +
+                                         "subscriber-services/evc/" +
+                                         "end-points/end-point[" +
+                                          "uni-id = " +
+                                              "current()/end-point1]/" +
+                                        "role = 'leaf') and " +
+                                       "(/mef-services/carrier-etherent/" +
+                                         "subscriber-services/evc/" +
+                                          "end-points/end-point[" +
+                                          "uni-id = " +
+                                              "current()/end-point2]/" +
+                                        "role = 'leaf'))" {
+                                error-message
+                                  "If EVC Type is Rooted-Multipoint,
+                                   sls-uni-inclusion UNI Pairs cannot
+                                   both be role 'leaf'.";
+                                description
+                                  "If EVC Type is Rooted-Multipoint,
+                                   sls-uni-inclusion UNI Pairs cannot
+                                   both be role 'leaf'.";
+                                reference
+                                  "[MEF10.3] R37, R40, R43, R46 and R51,
+                                   [MEF10.3.1] R4A.";
+                              }
+                              key "end-point1 end-point2";
+                              min-elements 1;
+                              description
+                                "List of ordered end point pairs.  This
+                                 list is used to specify all of the end
+                                 point pairs that are included in the
+                                 set over which the performance metric
+                                 is calculated.";
+                              leaf end-point1 {
+                                type leafref {
+                                  path "/mef-services/carrier-ethernet/" +
+                                       "subscriber-services/evc/" +
+                                       "end-points/end-point/uni-id";
+                                }
+                                description
+                                  "The first end point in an ordered end
+                                   point pair.";
+                                reference
+                                  "[MEF10.3] Section 8.8 and
+                                   [MEF7.3] Section 7.17.5.11.";
+                              }
+                              leaf end-point2 {
+                                type leafref {
+                                  path "/mef-services/carrier-ethernet/" +
+                                       "subscriber-services/evc/" +
+                                       "end-points/end-point/uni-id";
+                                }
+                                description
+                                  "The second end point in an ordered
+                                   end point pair.";
+                                reference
+                                  "[MEF10.3] Section 8.8,
+                                   [MEF7.3] Section 7.17.5.11.";
+                              }
+                            }
+                          }
+                        }
+                        case exclusions {
+                          container sls-uni-exclusions {
+                            presence
+                              "The presence of this container indicates
+                               that all possible ordered end point pairs
+                               in the EVC are included in this set of
+                               end point pairs, other than the ordered
+                               end point pairs in the list within this
+                               container (see below).  If the list is
+                               empty, then all ordered end point pairs
+                               are included in the set.  Note that in an
+                               EVC with n end points, there are n * (n -
+                               1) possible ordered end point pairs.";
+                            description
+                              "Container for a list of ordered end point
+                               pairs that are excluded from this set of
+                               ordered end point pairs.  The set that is
+                               described by taking all the possible
+                               ordered end point pairs and removing
+                               those contained in the list below is used
+                               as the set over which the performance
+                               metric is calculated.";
+                            list end-point-pair {
+                              must "end-point1 != end-point2" {
+                                error-message
+                                  "The two UNI IDs for a given exclusion
+                                   cannot be the same.";
+                                description
+                                  "The two end points for a given
+                                   exclusion cannot be the same.";
+                                reference
+                                  "[MEF10.3] Section 8.8.";
+                              }
+                              key "end-point1 end-point2";
+                              description
+                                "List of ordered end point pairs.  This
+                                 list is used to specify all of the end
+                                 point pairs that are excluded from the
+                                 set of all possible ordered end point
+                                 pairs for the EVC.  The result is used
+                                 as the set over which the performance
+                                 metric is calculated.";
+                              leaf end-point1 {
+                                type leafref {
+                                  path "/mef-services/carrier-ethernet/" +
+                                       "subscriber-services/evc/" +
+                                       "end-points/end-point/uni-id";
+                                }
+                                description
+                                  "The first end point in an ordered end
+                                   point pair.";
+                                reference
+                                  "[MEF10.3] Section 8.8,
+                                   [MEF7.3] Section 7.17.5.11.";
+                              }
+                              leaf end-point2 {
+                                type leafref {
+                                  path "/mef-services/carrier-ethernet/" +
+                                       "subscriber-services/evc/" +
+                                       "end-points/end-point/uni-id";
+                                }
+                                description
+                                  "The second end point in an ordered
+                                   end point pair.";
+                                reference
+                                  "[MEF10.3] Section 8.8,
+                                   [MEF7.3] Section 7.17.5.11.";
+                              }
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+          leaf connection-type {
+            type mef-types:connection-type;
+            must ". = 'rooted-multipoint' or " +
+                 "count(../end-points/end-point[role != 'root']) = 0" {
+              error-message
+                "If EVC Type is not Rooted Multipoint, all UNI Roles
+                 must be root.";
+              description
+                "If EVC Type is not Rooted Multipoint, all UNI Roles
+                 must be root.";
+              reference
+                "[MEF10.3] [R12].";
+            }
+            must ". != 'rooted-multipoint' or " +
+                 "count(../end-points/end-point[role = 'root']) > 0" {
+              error-message
+                "If EVC Type is Rooted-Multipoint, one or more UNI Roles
+                 must be root.";
+              description
+                "If EVC Type is Rooted-Multipoint, one or more UNI Roles
+                 must be root.";
+              reference
+                "[MEF10.3] [R4].";
+            }
+            must ". != 'point-to-point' or " +
+                 "count(../end-points/end-point) = 2" {
+              error-message
+                "If EVC Type is Point-to-Point, there must be
+                 exactly 2 UNI configured for the EVC.";
+              description
+                "If EVC Type is Point-to-Point, there must be exactly
+                 2 UNI configured for the EVC.";
+              reference
+                "[MEF10.3] Section 8.1.1.";
+            }
+            must ". != 'multipoint-to-multipoint' or " +
+                 "(count(../end-points/end-point) > 1 and " +
+                  "count(../end-points/end-point) <= " +
+                                    "../max-num-of-evc-end-point)" {
+              error-message
+                "If EVC Type is Multipoint-to-Multipoint, there must be
+                 2 or more End Points configured for the EVC, up to the
+                 maximum specified by the max-num-of-evc-end-points
+                 leaf.";
+              description
+                "If EVC Type is Multipoint-to-Multipoint, there must be
+                 2 or more UNI configured for the EVC.";
+              reference
+                "[MEF10.3] Section 8.1.2.2 and 8.4.";
+            }
+            must ". != 'rooted-multipoint' or " +
+                 "(count(../end-points/end-point) > 1 and " +
+                  "count(../end-points/end-point) <= " +
+                                       "../max-num-of-evc-end-point)" {
+              error-message
+                "If EVC Type is Rooted-Multipoint, there must be 2 or
+                 more End Points configured for the EVC, up to the
+                 maximum specified by the max-num-of-evc-end-points
+                 leaf.";
+              description
+                "If EVC Type is Rooted-Multipoint, there must be 2
+                 or more UNI configured for the EVC.";
+              reference
+                "[MEF10.3] Section 8.1.2.1 and 8.4.";
+            }
+            must ". != 'point-to-point' or " +
+                 "../max-num-of-evc-end-point = 2" {
+              error-message
+                "If EVC Type is Point-to-Point,
+                 the value of max-num-of-evc-end-point must be 2.";
+              description
+                "If EVC Type is Point-to-Point, the value of
+                 max-num-of-evc-end-point must be 2.";
+              reference
+                "[MEF10.3] [R13].";
+            }
+            must ". != 'multipoint-to-multipoint' or " +
+                 "../max-num-of-evc-end-point > 2" {
+              error-message
+                "If EVC Type is Multipoint-to-Multipoint,
+                 the value of max-num-of-evc-end-point must be at least
+                 3.";
+              description
+                "If EVC Type is Multipoint-to-Multipoint,
+                 the value of max-num-of-evc-end-point must be at least
+                 3.";
+              reference
+                "[MEF10.3] [R14].";
+            }
+            must ". != 'rooted-multipoint' or " +
+                 "../max-num-of-evc-end-point > 2" {
+              error-message
+                "If EVC Type is Rooted-Multipoint, the value of
+                 max-num-of-evc-end-point must be at least 3.";
+              description
+                "If EVC Type is Rooted-Multipoint,
+                 the value of max-num-of-evc-end-point must be at least
+                 3.";
+              reference
+                "[MEF10.3] [R14], [MEF6.2] [R54]";
+            }
+            mandatory true;
+            description
+              "This EVC attribute describes the EVC as either
+               Multipoint-To-Multipoint, Point-To-Point, or
+               Rooted-Multipoint.";
+            reference
+              "[MEF10.3] Section 8.1, [MEF7.3] Section 7.1.";
+          }
+          leaf admin-state {
+            type boolean;
+            default "true";
+            description
+              "Indicates whether the EVC is administratively locked (if
+               the value is false) or unlocked (if the value is true).";
+            reference
+              "[MEF7.3] Section 7.1.";
+          }
+          leaf user-label {
+            type mef-types:identifier1024;
+            description
+              "User Label.";
+            reference
+              "[MEF7.3] Section 7.1.";
+          }
+          leaf max-frame-size {
+            type mef-types:max-frame-size-type;
+            must "current() <= " +
+                      "/mef-interfaces:mef-interfaces/" +
+                       "mef-interfaces:carrier-ethernet/" +
+                       "mef-interfaces:subscriber-interfaces/" +
+                       "mef-interfaces:uni[mef-interfaces:uni-id = " +
+                           "current()/../end-points/end-point/" +
+                           "uni-id]/" +
+                       "mef-interfaces:max-frame-size" {
+              error-message
+                "The EVC Maximum Frame Size must be less than or equal
+                 to the UNI Maximum Frame Size for every UNI where this
+                 EVC has an EVC End Point.";
+              description
+                "The EVC Maximum Frame Size must be less than or equal
+                 to the UNI Maximum Frame Size for every UNI where this
+                 EVC has an EVC End Point.";
+              reference
+                "[MEF10.3] [R56]";
+            }
+            mandatory true;
+            description
+              "EVC Maximum Frame Size in bytes.";
+            reference
+              "[MEF10.3] Section 8.9. [MEF7.3] Section 7.1.";
+          }
+          leaf max-num-of-evc-end-point {
+            type uint32 {
+              range "2..max";
+            }
+            mandatory true;
+            description
+              "The Maximum Number of UNIs this EVC can be configured
+               for. If EVC Type is Multipoint-to-Multipoint or
+               Rooted-Multipoint, the max-num-of-evc-end-point value
+               must be at least 3. This value must be 2 for
+               point-to-point mode.";
+            reference
+              "[MEF10.3] Section 8.4, [MEF7.3] Section 7.2.";
+          }
+          leaf ce-vlan-id-preservation {
+            type boolean;
+            default "false";
+            description
+              "Preserve CE-VLAN ID.";
+            reference
+              "[MEF10.3] Section 8.6.1, [MEF7.3] Section 7.2.";
+          }
+          leaf ce-vlan-pcp-preservation {
+            type boolean;
+            default "false";
+            description
+              "Enables CE-VLAN PCP (CoS) preservation for the EVC.";
+            reference
+              "[MEF10.3] Section 8.6.2, [MEF7.3] Section 7.1.";
+          }
+          leaf ce-vlan-dei-preservation {
+            type boolean;
+            default "false";
+            description
+              "Enables CE-VLAN DEI preservation for the EVC.
+               When this is enabled, if a C-tagged ingress Service frame
+               results in a C-tagged egress Service frame, the DEI bit
+               in the egress frame has the same value as the DEI bit in
+               the ingress frame.";
+            reference
+              "[MEF7.3] Section 7.1.";
+          }
+          leaf unicast-frame-delivery {
+            type mef-types:data-svc-frame-delivery-type;
+            default "unconditional";
+            description
+              "Unicast Data Service Frame Delivery Mode
+               (unconditional[default], conditional, or discard).";
+            reference
+              "[MEF10.3] Section 8.5.2, [MEF7.3] Section 7.1.";
+          }
+          leaf multicast-frame-delivery {
+            type mef-types:data-svc-frame-delivery-type;
+            default "unconditional";
+            description
+              "Multicast Data Service Frame Delivery Mode
+               (unconditional[default], conditional, or discard).";
+            reference
+              "[MEF10.3] Section 8.5.2, [MEF7.3] Section 7.1.";
+          }
+          leaf broadcast-frame-delivery {
+            type mef-types:data-svc-frame-delivery-type;
+            default "unconditional";
+            description
+              "Broadcast Data Service Frame Delivery Mode
+               (unconditional[default], conditional, or discard).";
+            reference
+              "[MEF10.3] Section 8.5.2, [MEF7.3] Section 7.1.";
+          }
+          leaf svc-type {
+            type mef-types:mef-service-type;
+
+            must "(. = 'other') or " +
+                 "(not(/mef-interfaces:mef-interfaces/" +
+                       "mef-interfaces:carrier-ethernet/" +
+                       "mef-interfaces:subscriber-interfaces/" +
+                       "mef-interfaces:uni[mef-interfaces:uni-id = " +
+                         "current()/../end-points/end-point/uni-id]/" +
+                       "mef-interfaces:ingress-bwp-per-uni/" +
+                       "mef-interfaces:bw-profile-flow-parameters) " +
+                  "and " +
+                  "not(/mef-interfaces:mef-interfaces/" +
+                       "mef-interfaces:carrier-ethernet/" +
+                       "mef-interfaces:subscriber-interfaces/" +
+                       "mef-interfaces:uni[mef-interfaces:uni-id = " +
+                         "current()/../end-points/end-point/uni-id]/" +
+                       "mef-interfaces:ingress-bwp-per-uni/" +
+                       "mef-interfaces:envelope-id) and " +
+                  "not(/mef-interfaces:mef-interfaces/" +
+                       "mef-interfaces:carrier-ethernet/" +
+                       "mef-interfaces:subscriber-interfaces/" +
+                       "mef-interfaces:uni[mef-interfaces:uni-id = " +
+                         "current()/../end-points/end-point/uni-id]/" +
+                       "mef-interfaces:egress-bw-profile-per-uni/" +
+                       "mef-interfaces:bw-profile-flow-parameters) " +
+                  "and " +
+                  "not(/mef-interfaces:mef-interfaces/" +
+                       "mef-interfaces:carrier-ethernet/" +
+                       "mef-interfaces:subscriber-interfaces/" +
+                       "mef-interfaces:uni[mef-interfaces:uni-id = " +
+                         "current()/../end-points/end-point/uni-id]/" +
+                       "mef-interfaces:egress-bw-profile-per-uni/" +
+                       "mef-interfaces:envelope-id))" {
+              error-message
+                "Ingress or Egress BWP per UNI must not be specified
+                 when there is a MEF 6.2 service associated with the
+                 UNI.";
+              description
+                "Ingress or Egress BWP per UNI must not be specified
+                 when there is a MEF 6.2 service associated with the
+                 UNI.";
+              reference
+                "[MEF6.2] [R6] and [R7]";
+            }
+
+            must "(. = 'other') or " +
+                 "(not(../end-points/end-point/ingress-bwp-per-evc/" +
+                       "bw-profile-flow-parameters) and " +
+                  "not(../end-points/end-point/ingress-bwp-per-evc/" +
+                       "envelope-id) and " +
+                  "not(../end-points/end-point/egress-bwp-per-evc/" +
+                       "bw-profile-flow-parameters) and " +
+                  "not(../end-points/end-point/egress-bwp-per-evc/" +
+                       "envelope-id))" {
+              error-message
+                "Ingress or Egress BWP per EVC must not be specified
+                 when there is a MEF 6.2 service associated with the
+                 UNI.";
+              description
+                "Ingress or Egress BWP per EVC must not be specified
+                 when there is a MEF 6.2 service associated with the
+                 UNI.";
+              reference
+                "[MEF6.2] [R8] and [R9]";
+            }
+
+            must ". != 'epl' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                               "current()/../end-points/end-point/" +
+                               "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "service-multiplexing-enabled = " +
+                                 "'true']) = 0" {
+              error-message
+                "For EPL, Service Multiplexing must be
+                 disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EPL, Service Multiplexing must
+                 be disabled for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R19].";
+            }
+            must ". != 'epl' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                               "current()/../end-points/end-point/" +
+                               "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:bundling-enabled = " +
+                               "'true']) = 0" {
+              error-message
+                "For EPL, Bundling must be disabled for
+                 all UNIs in the EVC UNI List.";
+              description
+                "For EPL, Bundling must be disabled for all UNIs
+                 in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R20].";
+            }
+            must ". != 'epl' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                              "all-to-one-bundling-enabled = " +
+                                  "'false']) = 0" {
+              error-message
+                "For EPL, All-to-One Bundling must
+                 be enabled for all UNIs in the EVC UNI List.";
+              description
+                "For EPL, All-to-One Bundling must be enabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R21].";
+            }
+            must ". != 'epl' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:max-num-of-evcs != 1]) = 0" {
+              error-message
+                "For EPL, Max EVC Count must be 1
+                 for all UNIs in the EVC UNI List.";
+              description
+                "For EPL, Max EVC Count must be 1 for all
+                 UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R22].";
+            }
+            must ". != 'epl' or " +
+                 "count(../end-points/end-point/egress-bwp-per-eec/" +
+                       "bwp-flow-per-eec) = 0" {
+              error-message
+                "For EPL, Egress Bandwidth Profile per Egress
+                 Equivalence Class cannot be set for any UNIs in the EVC
+                 per UNI List.";
+              description
+                "For EPL, Egress Bandwidth Profile per Egress
+                 Equivalence Class cannot be set for any UNIs in the EVC
+                 per UNI List.";
+              reference
+                "[MEF6.2] [R23].";
+            }
+            must ". != 'epl' or " +
+                 "count(../end-points/" +
+                       "end-point[source-mac-address-limit]) = 0" {
+              error-message
+                "For EPL, Source MAC Address Limit must be disabled.";
+              description
+                "For EPL, Source MAC Address Limit must be disabled.";
+              reference
+                "[MEF6.2] [R24].";
+            }
+            must ". != 'epl' or " +
+                 "../connection-type = 'point-to-point'" {
+              error-message
+                "For EPL, EVC Type must be Point-to-Point.";
+              description
+                "For EPL, EVC Type must be Point-to-Point.";
+              reference
+                "[MEF6.2] [R25].";
+            }
+            must ". != 'epl' or " +
+                 "../unicast-frame-delivery = 'unconditional'" {
+              error-message
+                "For EPL, unicast-frame-delivery must be
+                 unconditional.";
+              description
+                "For EPL, unicast-frame-delivery must be
+                 unconditional.";
+              reference
+                "[MEF6.2] [R26].";
+            }
+            must ". != 'epl' or " +
+                 "../multicast-frame-delivery = 'unconditional'" {
+              error-message
+                "For EPL, multicast-frame-delivery must be
+                 unconditional.";
+              description
+                "For EPL, multicast-frame-delivery must be
+                 unconditional.";
+              reference
+                "[MEF6.2] [R27].";
+            }
+            must ". != 'epl' or " +
+                 "../broadcast-frame-delivery = 'unconditional'" {
+              error-message
+                "For EPL, broadcast-frame-delivery
+                 must be unconditional.";
+              description
+                "For EPL, broadcast-frame-delivery must be
+                 unconditional.";
+              reference
+                "[MEF6.2] [R28].";
+            }
+            must ". != 'epl' or " +
+                 "../ce-vlan-id-preservation = 'true'" {
+              error-message
+                "For EPL, CE-VLAN ID Preservation must be enabled.";
+              description
+                "For EPL, CE-VLAN ID Preservation must be enabled.";
+              reference
+                "[MEF6.2] [R29]";
+            }
+            must ". != 'epl' or " +
+                 "../ce-vlan-pcp-preservation = 'true'" {
+              error-message
+                "For EPL, CE-VLAN ID CoS Preservation must be enabled.";
+              description
+                "For EPL, CE-VLAN ID CoS Preservation must be enabled.";
+              reference
+                "[MEF6.2] [R30].";
+            }
+            must ". != 'evpl' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "all-to-one-bundling-enabled = " +
+                                "'true']) = 0" {
+              error-message
+                "For EVPL, All-to-One Bundling must be
+                 disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EVPL, All-to-One Bundling must be disabled for
+                 all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R31].";
+            }
+            must ". != 'evpl' or " +
+                 "../unicast-frame-delivery != 'unconditional' or " +
+                 "../multicast-frame-delivery != 'unconditional' or " +
+                 "../broadcast-frame-delivery != 'unconditional' or " +
+                 "count(../end-points/" +
+                       "end-point[source-mac-address-limit]) = 0" {
+              error-message
+                "For EVPL, Source MAC Address Limit must
+                 be disabled for all UNIs in the EVC per UNI List if
+                 all 3 -svc-frm-delivery values are unconditional.";
+              description
+                "For EVPL, Source MAC Address Limit must be disabled
+                 for all UNIs in the EVC per UNI List if all
+                 3 -svc-frm-delivery values are unconditional.";
+              reference
+                "[MEF6.2] [R32].";
+            }
+            must ". != 'evpl' or " +
+                 "../connection-type = 'point-to-point'" {
+              error-message
+                "For EVPL, EVC Type must be Point-to-Point.";
+              description
+                "For EVPL, EVC Type must be Point-to-Point.";
+              reference
+                "[MEF6.2] [R33].";
+            }
+            must ". != 'eplan' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "service-multiplexing-enabled = " +
+                                "'true']) = 0" {
+              error-message
+                "For EP-LAN, Service Multiplexing must
+                 be disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EP-LAN, Service Multiplexing must be disabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R34].";
+            }
+            must ". != 'eplan' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                               "current()/../end-points/end-point/" +
+                               "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:bundling-enabled = " +
+                               "'true']) = 0" {
+              error-message
+                "For EP-LAN, Bundling must be disabled
+                 for all UNIs in the EVC UNI List.";
+              description
+                "For EP-LAN, Bundling must be disabled for all
+                 UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R35].";
+            }
+            must ". != 'eplan' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                               "current()/../end-points/end-point/" +
+                               "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "all-to-one-bundling-enabled = " +
+                                 "'false']) = 0" {
+              error-message
+                "For EP-LAN, All-to-One Bundling must
+                 be enabled for all UNIs in the EVC UNI List.";
+              description
+                "For EP-LAN, All-to-One Bundling must be enabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R36].";
+            }
+            must ". != 'eplan' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:max-num-of-evcs != 1]) = 0" {
+              error-message
+                "For EP-LAN, Max EVC Count must be 1
+                 for all UNIs in the EVC UNI List.";
+              description
+                "For EP-LAN, Max EVC Count must be 1 for all
+                 UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R37].";
+            }
+            must ". != 'eplan' or " +
+                 "../connection-type = 'multipoint-to-multipoint'" {
+              error-message
+                "For EP-LAN, EVC Type must be
+                 Multipoint-to-Multipoint.";
+              description
+                "For EP-LAN, EVC Type must be
+                 Multipoint-to-Multipoint.";
+              reference
+                "[MEF6.2] [R38].";
+            }
+            must ". != 'eplan' or " +
+                 "../ce-vlan-id-preservation = 'true'" {
+              error-message
+                "For EP-LAN, CE-VLAN ID Preservation must be enabled.";
+              description
+                "For EP-LAN, CE-VLAN ID Preservation must be enabled.";
+              reference
+                "[MEF6.2] [R39].";
+            }
+            must ". != 'eplan' or " +
+                 "../ce-vlan-pcp-preservation = 'true'" {
+              error-message
+                "For EP-LAN, CE-VLAN ID CoS Preservation must be
+                 enabled.";
+              description
+                "For EP-LAN, CE-VLAN ID CoS Preservation must be
+                 enabled.";
+              reference
+                "[MEF6.2] [R40].";
+            }
+            must ". != 'evplan' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "all-to-one-bundling-enabled = " +
+                                 "'true']) = 0" {
+              error-message
+                "For EVP-LAN, All-to-One Bundling must
+                 be disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EVP-LAN, All-to-One Bundling must be disabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R41].";
+            }
+            must ". != 'evplan' or " +
+                 "../connection-type = 'multipoint-to-multipoint'" {
+              error-message
+                "For EVP-LAN, EVC Type must be
+                 Multipoint-to-Multipoint.";
+              description
+                "For EVP-LAN, EVC Type must be
+                 Multipoint-to-Multipoint.";
+              reference
+                "[MEF6.2] [R42].";
+            }
+            must ". != 'eptree' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "service-multiplexing-enabled = " +
+                                 "'true']) = 0" {
+              error-message
+                "For EP-TREE, Service Multiplexing must be
+                 disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EP-TREE, Service Multiplexing must be disabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R43].";
+            }
+            must ". != 'eptree' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:bundling-enabled = " +
+                               "'true']) = 0" {
+              error-message
+                "For EP-TREE, Bundling must be
+                 disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EP-TREE, Bundling must be disabled for all UNIs in
+                 the EVC UNI List.";
+              reference
+                "[MEF6.2] [R44].";
+            }
+            must ". != 'eptree' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "all-to-one-bundling-enabled = " +
+                                 "'false']) = 0" {
+              error-message
+                "For EP-TREE, All-to-One Bundling must
+                 be enabled for all UNIs in the EVC UNI List.";
+              description
+                "For EP-TREE, All-to-One Bundling must be enabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R45].";
+            }
+            must ". != 'eptree' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:max-num-of-evcs != 1]) = 0" {
+              error-message
+                "For EP-TREE, Max EVC Count must be 1
+                 for all UNIs in the EVC UNI List.";
+              description
+                "For EP-TREE, Max EVC Count must be 1 for all
+                 UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R46].";
+            }
+            must ". != 'eptree' or " +
+                 "../connection-type = 'rooted-multipoint'" {
+              error-message
+                "For EP-TREE, EVC Type must be Rooted-Multipoint.";
+              description
+                "For EP-TREE, EVC Type must be Rooted-Multipoint.";
+              reference
+                "[MEF6.2] [R47].";
+            }
+            must ". != 'eptree' or " +
+                 "../ce-vlan-id-preservation = 'true'" {
+              error-message
+                "For EP-TREE, CE-VLAN ID Preservation must be enabled.";
+              description
+                "For EP-TREE, CE-VLAN ID Preservation must be enabled.";
+              reference
+                "[MEF6.2] [R49].";
+            }
+            must ". != 'eptree' or " +
+                 "../ce-vlan-pcp-preservation = 'true'" {
+              error-message
+                "For EP-TREE, CE-VLAN ID CoS Preservation must be
+                 enabled.";
+              description
+                "For EP-TREE, CE-VLAN ID CoS Preservation must be
+                 enabled.";
+              reference
+                "[MEF6.2] [R50].";
+            }
+            must ". != 'evptree' or " +
+                 "count(/mef-interfaces:mef-interfaces/" +
+                        "mef-interfaces:carrier-ethernet/" +
+                        "mef-interfaces:subscriber-interfaces/" +
+                        "mef-interfaces:uni" +
+                          "[mef-interfaces:uni-id = " +
+                              "current()/../end-points/end-point/" +
+                              "uni-id]" +
+                          "[mef-interfaces:uni-id/../" +
+                           "mef-interfaces:" +
+                             "all-to-one-bundling-enabled = " +
+                                 "'true']) = 0" {
+              error-message
+                "For EVP-TREE, All-to-One Bundling must
+                 be disabled for all UNIs in the EVC UNI List.";
+              description
+                "For EVP-TREE, All-to-One Bundling must be disabled
+                 for all UNIs in the EVC UNI List.";
+              reference
+                "[MEF6.2] [R51].";
+            }
+            must ". != 'evptree' or " +
+                 "../connection-type = 'rooted-multipoint'" {
+              error-message
+                "For EVP-TREE, EVC Type must be Rooted-Multipoint.";
+              description
+                "For EVP-TREE, EVC Type must be Rooted-Multipoint.";
+              reference
+                "[MEF6.2] [R52].";
+            }
+            default "other";
+            description
+              "The MEF Service Type. This is one of the types of service
+               defined in MEF 6.2, or the value 'other' to indicate that
+               this service does not conform to any of the types defined
+               in MEF 6.2.  The six types defined in MEF 6.2 are EPL,
+               EVPL, EP-LAN, EVP-LAN, EP-Tree and EVP-Tree.";
+          }
+        }
+      }
+    }
+  }
+}