Add l3vpn support 03/46703/7
authorYakir Dorani <yakir.dorani@hpe.com>
Sun, 9 Oct 2016 15:19:11 +0000 (17:19 +0200)
committerYakir Dorani <yakir.dorani@hpe.com>
Sun, 6 Nov 2016 17:25:43 +0000 (19:25 +0200)
Change-Id: Iad8cc507646c1e8b8daa39c340da429dc7da6879
Signed-off-by: Yakir Dorani <yakir.dorani@hpe.com>
19 files changed:
legato-api/src/main/yang/mef-global.yang
legato-api/src/main/yang/mef-interfaces.yang
legato-api/src/main/yang/mef-services.yang
legato-api/src/main/yang/mef-topology.yang
legato-api/src/main/yang/mef-types.yang
netvirt/pom.xml
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/ElanInterfaceListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/EvcUniUtils.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java [new file with mode: 0644]
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcUniUtils.java [new file with mode: 0644]
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/MefUtils.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtUtils.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java [new file with mode: 0644]
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NodeConnectorListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/TenantEnhancerUtils.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/TenantUniListener.java
netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/TenantlessEvcListener.java
netvirt/src/main/resources/org/opendaylight/blueprint/netvirt-driver.xml

index 92e3ce9ba371c07242930e257b2738568bf19433..68af42954b61e4106a120bfe4227eb43a1f3bbca 100644 (file)
 module mef-global {\r
   namespace "http://metroethernetforum.org/ns/yang/mef-global";\r
   prefix mef-global;\r
-  import ietf-yang-types {\r
-    prefix yang;\r
-  }\r
-  import ietf-inet-types {\r
-    prefix inet;\r
-  }\r
-  import mef-types {\r
-    prefix mef-types;\r
-  }\r
+  import ietf-yang-types { prefix yang; }\r
+  import ietf-inet-types { prefix inet; }\r
+  import mef-types { prefix mef-types; }\r
   organization "Metro Ethernet Forum";\r
   contact\r
-    "Web URL: http://metroethernetforum.org/\r
-     E-mail:  mibs@metroethernetforum.org\r
-     Postal:  Metro Ethernet Forum\r
-              6033 W. Century Boulevard, Suite 1107\r
-              Los Angeles, CA 90045\r
-              U.S.A.\r
-     Phone:   +1 310-642-2800\r
-     Fax:     +1 310-642-2808";\r
+    "Web URL: http://metroethernetforum.org/ E-mail: mibs@metroethernetforum.org\r
+    Postal: Metro Ethernet Forum 6033 W. Century Boulevard, Suite\r
+    1107 Los Angeles, CA 90045 U.S.A. Phone: +1 310-642-2800 Fax:\r
+    +1 310-642-2808";\r
   description\r
-    "This module defines the shared profiles and related lists\r
-     to be referenced when configuring MEF Services. Service\r
-     Providers are expected to define a set of profiles for\r
-     Service Attributes associated with Bandwidth, L2CP, CoS,\r
-     and so on. These are expected to be slowly changing as\r
-     they reflect the Products offered by the Service Providers\r
-     to their Subscribers.\r
-      \r
-     Reference Overview:\r
-     A number of base documents have been used to create\r
-     the MEF Global YANG Module. The following are the\r
-     abbreviations for the baseline documents:\r
-     [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types',\r
-     2013-07-15 \r
-     [RFC 6643] refers to IETF RFC 6643 'Translation of Structure\r
-     of Management Information\r
-     Version 2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25 \r
-     [802.1AB] refers to 'Station and Media Access Control\r
-     Connectivity Discovery', IEEE 802.1AB-2009, September 2009\r
-     [802.1q] refers to IEEE 802.1Q-2011 'IEEE Standard for Local\r
-     and metropolitan area networks --Media Access Control (MAC)\r
-     Bridges and Virtual Bridged Local Area Networks, August 2011\r
-     [802-2001] refers to 'IEEE Standard for Local and Metropolitan\r
-     Area Networks: Overview and Architecture', IEEE 802-2001,\r
-     February 2002\r
-     [MEF10.3] refers to MEF 10.3\r
-     'Ethernet Services Attributes Phase 3', October 2013\r
-     [MEF6.2] refers to MEF 6.2\r
-     'EVC Ethernet Services Defintions Phase 3', August 2014\r
-     [MEF40] refers to MEF 40\r
-     'UNI and EVC Definition of Managed Objects', April 2013\r
-     [MEF45] refers to MEF 45 'Multi-CEN L2CP', August 2014\r
-     [MEF7.2] refers to MEF 7.2\r
-     'Carrier Ethernet Management Information Model', April 2013\r
-     [MEF7.3] refers to MEF 7.3\r
-     'Carrier Ethernet Management Information Model',\r
-     Working Draft #1 2015\r
-     [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version 2)',\r
-     December 1999\r
-     [RFC 2863] refers to IETF RFC 2863 'The Interfaces Group MIB',\r
-     June 2000\r
-     [RFC 3419] refers to IETF RFC 3419\r
-     'Textual Conventions for Transport Addresses', December 2002\r
-     [Y.1731] refers to ITU-T Y.1731\r
-     'OAM functions and mechanisms for Ethernet based networks',\r
-     July 2011\r
-     [Q.840.1] refers to ITU-T Q.840.1\r
-     'Requirements and analysis for NMS-EMS management interface\r
-     of Ethernet over Transport and Metro Ethernet\r
-     Network(EoT/MEN)' March 2007";\r
+    "This module defines the shared profiles and related lists to\r
+    be referenced when configuring MEF Services. Service Providers\r
+    are expected to define a set of profiles for Service Attributes\r
+    associated with Bandwidth, L2CP, CoS, and so on. These are expected\r
+    to be slowly changing as they reflect the Products offered by\r
+    the Service Providers to their Subscribers. Reference Overview:\r
+    A number of base documents have been used to create the MEF Global\r
+    YANG Module. The following are the abbreviations for the baseline\r
+    documents: [RFC 6991] refers to IETF RFC 6991 'Common YANG Data\r
+    Types', 2013-07-15 [RFC 6643] refers to IETF RFC 6643 'Translation\r
+    of Structure of Management Information Version 2 (SMIv2) MIB Modules\r
+    to YANG Modules', 2011-11-25 [802.1AB] refers to 'Station and\r
+    Media Access Control Connectivity Discovery', IEEE 802.1AB-2009,\r
+    September 2009 [802.1q] refers to IEEE 802.1Q-2011 'IEEE Standard\r
+    for Local and metropolitan area networks --Media Access Control\r
+    (MAC) Bridges and Virtual Bridged Local Area Networks, August\r
+    2011 [802-2001] refers to 'IEEE Standard for Local and Metropolitan\r
+    Area Networks: Overview and Architecture', IEEE 802-2001, February\r
+    2002 [MEF10.3] refers to MEF 10.3 'Ethernet Services Attributes\r
+    Phase 3', October 2013 [MEF6.2] refers to MEF 6.2 'EVC Ethernet\r
+    Services Defintions Phase 3', August 2014 [MEF40] refers to MEF\r
+    40 'UNI and EVC Definition of Managed Objects', April 2013 [MEF45]\r
+    refers to MEF 45 'Multi-CEN L2CP', August 2014 [MEF7.2] refers\r
+    to MEF 7.2 'Carrier Ethernet Management Information Model', April\r
+    2013 [MEF7.3] refers to MEF 7.3 'Carrier Ethernet Management Information\r
+    Model', Working Draft #1 2015 [RFC 2737] refers to IETF RFC 2737\r
+    'Entity MIB (Version 2)', December 1999 [RFC 2863] refers to IETF\r
+    RFC 2863 'The Interfaces Group MIB', June 2000 [RFC 3419] refers\r
+    to IETF RFC 3419 'Textual Conventions for Transport Addresses',\r
+    December 2002 [Y.1731] refers to ITU-T Y.1731 'OAM functions and\r
+    mechanisms for Ethernet based networks', July 2011 [Q.840.1] refers\r
+    to ITU-T Q.840.1 'Requirements and analysis for NMS-EMS management\r
+    interface of Ethernet over Transport and Metro Ethernet Network(EoT/MEN)'\r
+    March 2007";\r
   revision 2015-05-26 {\r
     description\r
-      "Formal Project Review Draft 1.";\r
-    reference "EVC Ethernet Services Definitions YANG Modules\r
-            (MEF XX), TBD";\r
+        "Formal Project Review Draft 1.";\r
+    reference "EVC Ethernet Services Definitions YANG Modules (MEF XX), TBD";\r
   }\r
   container mef-global {\r
     description\r
-      "MEF Global Profiles";\r
+        "MEF Global Profiles";\r
     grouping bwp-flows-group {\r
       description\r
-        "Bandwidth Profile Flows Group.";\r
+            "Bandwidth Profile Flows Group.";\r
       list bwp-flow {\r
         key "bw-profile";\r
         description\r
-          "Bandwidth Profiles.";\r
+                "Bandwidth Profiles.";\r
         reference "[MEF10.3] Section 9.14, 12.2.";\r
         leaf bw-profile {\r
           type mef-types:identifier45;\r
           description\r
-            "Bandwidth Profile Identifier.";\r
+                    "Bandwidth Profile Identifier.";\r
           reference "[MEF10.3] Section 9.14, 12.2.";\r
         }\r
         leaf user-label {\r
           type mef-types:identifier45;\r
           description\r
-            "This attribute is a friendly name for this specific " +\r
-            "Bandwidth Profile.";\r
+                    "This attribute is a friendly name for this specific " +\r
+                    "Bandwidth Profile.";\r
         }\r
         leaf cir {\r
           type mef-types:bwp-cir-type;\r
           units "kbits-per-sec";\r
           default "0";\r
           description\r
-            "This attribute identifies the Committed Information " +\r
-            "Rate (CIR) in Kilobits per second for one " +\r
-            "direction of an ETH EVC. If the value is 0, then " +\r
-            "no guarantee is assumed.";\r
+                    "This attribute identifies the Committed Information " +\r
+                    "Rate (CIR) in Kilobits per second for one " +\r
+                    "direction of an ETH EVC. If the value is 0, then " +\r
+                    "no guarantee is assumed.";\r
         }\r
         leaf cir-max {\r
           type mef-types:bwp-cir-type;\r
           units "kbits-per-sec";\r
           default "0";\r
           description\r
-            "This attribute identifies the Maximum Committed " +\r
-            "Information Rate (CIR). This parameter limits the " +\r
-            "rate of tokens added to the committed token bucket. " +\r
-            "If this value is 0, then no limit is assumed.";\r
+                    "This attribute identifies the Maximum Committed " +\r
+                    "Information Rate (CIR). This parameter limits the " +\r
+                    "rate of tokens added to the committed token bucket. " +\r
+                    "If this value is 0, then no limit is assumed.";\r
         }\r
         leaf cbs {\r
           type mef-types:bwp-cbs-type;\r
           units "bytes";\r
           default "0";\r
           description\r
-            "This attribute identifies the Committed Burst Size " +\r
-            "(CBS) in bytes for one direction of an ETH EVC. " +\r
-            "This parameter limits the maximum number of bytes " +\r
-            "available for a burst of Service Frames sent at " +\r
-            "the UNI line rate that will be declared Green " +\r
-            "by the Bandwidth Profile. If this value is 0, " +\r
-            "then no limit is assumed.";\r
+                    "This attribute identifies the Committed Burst Size " +\r
+                    "(CBS) in bytes for one direction of an ETH EVC. " +\r
+                    "This parameter limits the maximum number of bytes " +\r
+                    "available for a burst of Service Frames sent at " +\r
+                    "the UNI line rate that will be declared Green " +\r
+                    "by the Bandwidth Profile. If this value is 0, " +\r
+                    "then no limit is assumed.";\r
         }\r
         leaf eir {\r
           type mef-types:bwp-eir-type;\r
           units "kbits-per-sec";\r
           default "0";\r
           description\r
-            "This attribute identifies the Excess Information " +\r
-            "Rate (EIR) in Kilobits per second for one " +\r
-            "direction of an ETH EVC. This parameter limits the " +\r
-            "average rate in bits per second of Service Frames " +\r
-            "that will be declared Yellow by the Bandwidth " +\r
-            "Profile. If this value is 0, then no limit is assumed.";\r
+                    "This attribute identifies the Excess Information " +\r
+                    "Rate (EIR) in Kilobits per second for one " +\r
+                    "direction of an ETH EVC. This parameter limits the " +\r
+                    "average rate in bits per second of Service Frames " +\r
+                    "that will be declared Yellow by the Bandwidth " +\r
+                    "Profile. If this value is 0, then no limit is assumed.";\r
         }\r
         leaf eir-max {\r
           type mef-types:bwp-eir-type;\r
           units "kbits-per-sec";\r
           default "0";\r
           description\r
-            "This attribute identifies the Maximum Excess " +\r
-            "Information Rate (EIR) in Kilobits per second for " +\r
-            "one direction of an ETH EVC. This parameter " +\r
-            "limits the rate of tokens added to the excess " +\r
-            "token bucket. If this value is 0, then no " +\r
-            "limit is assumed.";\r
+                    "This attribute identifies the Maximum Excess " +\r
+                    "Information Rate (EIR) in Kilobits per second for " +\r
+                    "one direction of an ETH EVC. This parameter " +\r
+                    "limits the rate of tokens added to the excess " +\r
+                    "token bucket. If this value is 0, then no " +\r
+                    "limit is assumed.";\r
         }\r
         leaf ebs {\r
           type mef-types:bwp-ebs-type;\r
           units "bytes";\r
           default "0";\r
           description\r
-            "This attribute identifies the Excess Burst Size " +\r
-            "(EBS) in bytes for one direction of an ETH EVC. " +\r
-            "This parameter limits the maximum number of " +\r
-            "bytes available for a burst of Service Frames " +\r
-            "sent at the UNI line rate that will be " +\r
-            "declared Yellow by the Bandwidth Profile. " +\r
-            "If this value is 0, then no limit is assumed.";\r
+                    "This attribute identifies the Excess Burst Size " +\r
+                    "(EBS) in bytes for one direction of an ETH EVC. " +\r
+                    "This parameter limits the maximum number of " +\r
+                    "bytes available for a burst of Service Frames " +\r
+                    "sent at the UNI line rate that will be " +\r
+                    "declared Yellow by the Bandwidth Profile. " +\r
+                    "If this value is 0, then no limit is assumed.";\r
         }\r
         leaf coupling-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "The Per Bandwidth Profile Coupling Flag (CF) " +\r
-            "attribute. This parameter determines whether " +\r
-            "or not overflow tokens not used for Service " +\r
-            "Frames declared Green can be used as Yellow tokens.";\r
+                    "The Per Bandwidth Profile Coupling Flag (CF) " +\r
+                    "attribute. This parameter determines whether " +\r
+                    "or not overflow tokens not used for Service " +\r
+                    "Frames declared Green can be used as Yellow tokens.";\r
           reference "[MEF10.3] Section 12.1 [R149].";\r
         }\r
         leaf color-mode {\r
           type mef-types:bwp-color-mode-type;\r
           default "color-blind";\r
           description\r
-            "This attribute describes the color mode (CM) to " +\r
-            "be applied as 'color-blind mode' or " +\r
-            "'color-aware mode'.";\r
+                    "This attribute describes the color mode (CM) to " +\r
+                    "be applied as 'color-blind mode' or " +\r
+                    "'color-aware mode'.";\r
           reference "[MEF10.3] Section 10.3, [R151].";\r
         }\r
         leaf coupling-flag {\r
           type mef-types:bwp-coupling-flag-type;\r
           default "yellow-eir-only";\r
           description\r
-            "The optional coupling flag (CF) attribute, " +\r
-            "describes if yellow frames will be admitted " +\r
-            "if unused bandwidth is available. When CF is " +\r
-            "set to \"yellow-eir-only\", the volume of the " +\r
-            "yellow service frames admitted to the network " +\r
-            "cannot exceed EIR. When CF is set " +\r
-            "to \"yellow-eir-plus-cir\", the volume of the " +\r
-            "yellow service frames admitted to the network is " +\r
-            "bounded by CIR + EIR depending on volume of the " +\r
-            "offered green Service Frames. In both cases the " +\r
-            "burst size of the yellow service frames " +\r
-            "admitted to the network is bounded by EBS.";\r
+                    "The optional coupling flag (CF) attribute, " +\r
+                    "describes if yellow frames will be admitted " +\r
+                    "if unused bandwidth is available. When CF is " +\r
+                    "set to \"yellow-eir-only\", the volume of the " +\r
+                    "yellow service frames admitted to the network " +\r
+                    "cannot exceed EIR. When CF is set " +\r
+                    "to \"yellow-eir-plus-cir\", the volume of the " +\r
+                    "yellow service frames admitted to the network is " +\r
+                    "bounded by CIR + EIR depending on volume of the " +\r
+                    "offered green Service Frames. In both cases the " +\r
+                    "burst size of the yellow service frames " +\r
+                    "admitted to the network is bounded by EBS.";\r
           reference "[MEF23.1] Section 8.1.";\r
         }\r
       }\r
@@ -212,16 +185,16 @@ module mef-global {
     container svc-providers {\r
       presence "Use non-default Service Providers";\r
       description\r
-        "Global Service Providers List.";\r
+            "Global Service Providers List.";\r
       list svc-provider {\r
         key "sp-id";\r
         description\r
-          "Service Provider Identifier.";\r
+                "Service Provider Identifier.";\r
         leaf sp-id {\r
           type mef-types:svc-provider-type;\r
           description\r
-            "The Service Provider ID identifies a unique SP that " +\r
-            "contains multiple CENs.";\r
+                    "The Service Provider ID identifies a unique SP that " +\r
+                    "contains multiple CENs.";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
       }\r
@@ -229,46 +202,46 @@ module mef-global {
     container cens {\r
       presence "Use non-default CEN";\r
       description\r
-        "Global CENs List.";\r
+            "Global CENs List.";\r
       list cen {\r
         must "(not(/mef-global/svc-providers) and " +\r
                 "not(./sp-id)) or " +\r
                 "(/mef-global/svc-providers and ./sp-id)" {\r
           error-message "If the Service Providers list has been " +\r
-                "populated, a Service Provider ID must be " +\r
-                "configured for a CEN.";\r
+                    "populated, a Service Provider ID must be " +\r
+                    "configured for a CEN.";\r
           description\r
-            "A CEN sees a single Service Provider. This must " +\r
-            "statement is effectively a 'mandatory true' when " +\r
-            "the Global Service Providers list is being used.";\r
+                    "A CEN sees a single Service Provider. This must " +\r
+                    "statement is effectively a 'mandatory true' when " +\r
+                    "the Global Service Providers list is being used.";\r
         }\r
         key "cen-id";\r
         description\r
-          "List of CENs.";\r
+                "List of CENs.";\r
         leaf cen-id {\r
           type mef-types:cen-type;\r
           description\r
-            "The CEN ID identifies a specific Carrier Ethernet " +\r
-            "Network belong to a Service Provider.";\r
+                    "The CEN ID identifies a specific Carrier Ethernet " +\r
+                    "Network belong to a Service Provider.";\r
           reference "[MEF10.3] Section 7. The CEN ID must be " +\r
-                "unique for this Service Provider.";\r
+                    "unique for this Service Provider.";\r
         }\r
         leaf sp-id {\r
           when "/mef-global:mef-global/mef-global:svc-providers" {\r
             description\r
-              "Service Provider Identifier associated with " +\r
-              "this CEN.";\r
+                        "Service Provider Identifier associated with " +\r
+                        "this CEN.";\r
           }\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:" +\r
-                    "svc-providers/mef-global:svc-provider/" +\r
-                    "mef-global:sp-id";\r
+                        "svc-providers/mef-global:svc-provider/" +\r
+                        "mef-global:sp-id";\r
           }\r
           description\r
-            "The Service Provider ID must be globally unique " +\r
-            "as all CENs and Subscribers must be supported " +\r
-            "by a specific Service Provider(SP). A SP can " +\r
-            "support multiple CENs.";\r
+                    "The Service Provider ID must be globally unique " +\r
+                    "as all CENs and Subscribers must be supported " +\r
+                    "by a specific Service Provider(SP). A SP can " +\r
+                    "support multiple CENs.";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
       }\r
@@ -276,384 +249,384 @@ module mef-global {
     container slss {\r
       presence "Use non-default SLS";\r
       description\r
-        "The technical specification of the service level being " +\r
-        "offered by the Service Provider to the Subscriber is " +\r
-        "defined to be the Service Level Specification (SLS).";\r
+            "The technical specification of the service level being " +\r
+            "offered by the Service Provider to the Subscriber is " +\r
+            "defined to be the Service Level Specification (SLS).";\r
       list sls {\r
         must "(not(/mef-global/svc-providers) and " +\r
                 "not(./sp-id)) or " +\r
                 "(/mef-global/svc-providers and ./sp-id)" {\r
           error-message "If the Service Providers list has been " +\r
-                "populated, a Service Provider ID must be " +\r
-                "configured for an SLS.";\r
+                    "populated, a Service Provider ID must be " +\r
+                    "configured for an SLS.";\r
           description\r
-            "An SLS sees a single Service Provider. This must " +\r
-            "statement is effectively a 'mandatory true' when " +\r
-            "the Global Service Providers list is being used.";\r
+                    "An SLS sees a single Service Provider. This must " +\r
+                    "statement is effectively a 'mandatory true' when " +\r
+                    "the Global Service Providers list is being used.";\r
         }\r
         key "sls-id";\r
         description\r
-          "Global Service Level Specification(SLS) List.";\r
+                "Global Service Level Specification(SLS) List.";\r
         container perf-objs {\r
           description\r
-            "Performance Objectives for this SLS.";\r
+                    "Performance Objectives for this SLS.";\r
           leaf pm-time-interval {\r
             type uint64;\r
             units "seconds";\r
             mandatory true;\r
             description\r
-              "Performance Metric(PM): Time Interval.";\r
+                        "Performance Metric(PM): Time Interval.";\r
           }\r
           leaf pm-time-interval-increment {\r
             when "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-resiliency-performance-hli']) > 0) " +\r
-                    "or (count(../perf-obj" +\r
-                    "[pm-type = " +\r
-                    "'one-way-resiliency-performance-chli']) > 0)" +\r
-                    " or (count(../perf-obj" +\r
-                    "[pm-type = " +\r
-                    "'one-way-availability-performance']) > 0) " +\r
-                    "or (count(../perf-obj[pm-type = " +\r
-                    "'one-way-multiple-evc-group-availability-" +\r
-                    "performance']) > 0) or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-group-availability-" +\r
-                    "performance']) > 0)" {\r
+                        "'one-way-resiliency-performance-hli']) > 0) " +\r
+                        "or (count(../perf-obj" +\r
+                        "[pm-type = " +\r
+                        "'one-way-resiliency-performance-chli']) > 0)" +\r
+                        " or (count(../perf-obj" +\r
+                        "[pm-type = " +\r
+                        "'one-way-availability-performance']) > 0) " +\r
+                        "or (count(../perf-obj[pm-type = " +\r
+                        "'one-way-multiple-evc-group-availability-" +\r
+                        "performance']) > 0) or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-group-availability-" +\r
+                        "performance']) > 0)" {\r
               description\r
-                "This PM Metric only applies to specific " +\r
-                "Performance Objective Types.";\r
+                            "This PM Metric only applies to specific " +\r
+                            "Performance Objective Types.";\r
             }\r
             type uint64;\r
             units "ms";\r
             mandatory true;\r
             description\r
-              "A time interval much smaller than pm-time-interval.";\r
+                        "A time interval much smaller than pm-time-interval.";\r
           }\r
           leaf unavail-flr-threshold-pp {\r
             when "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-resiliency-performance-hli']) > 0) " +\r
-                    "or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-resiliency-performance-chli']) > 0) " +\r
-                    "or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-availability-performance']) > 0) " +\r
-                    "or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-multiple-evc-group-availability-" +\r
-                    "performance']) > 0) or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-group-availability-" +\r
-                    "performance']) > 0)" {\r
+                        "'one-way-resiliency-performance-hli']) > 0) " +\r
+                        "or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-resiliency-performance-chli']) > 0) " +\r
+                        "or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-availability-performance']) > 0) " +\r
+                        "or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-multiple-evc-group-availability-" +\r
+                        "performance']) > 0) or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-group-availability-" +\r
+                        "performance']) > 0)" {\r
               description\r
-                "This PM Metric only applies to specific " +\r
-                "Performance Objective Types.";\r
+                            "This PM Metric only applies to specific " +\r
+                            "Performance Objective Types.";\r
             }\r
             type mef-types:simple-percent;\r
             units "percent";\r
             mandatory true;\r
             description\r
-              "Unavailability frame loss ratio threshold " +\r
-              "expressed in percentage.";\r
+                        "Unavailability frame loss ratio threshold " +\r
+                        "expressed in percentage.";\r
           }\r
           leaf consecutive-small-time-intervals {\r
             when "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-availability-performance']) > 0) or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-multiple-evc-group-availability-" +\r
-                    "performance']) > 0) or " +\r
-                    "(count(../perf-obj[pm-type = " +\r
-                    "'one-way-group-availability-" +\r
-                    "performance']) > 0)" {\r
+                        "'one-way-availability-performance']) > 0) or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-multiple-evc-group-availability-" +\r
+                        "performance']) > 0) or " +\r
+                        "(count(../perf-obj[pm-type = " +\r
+                        "'one-way-group-availability-" +\r
+                        "performance']) > 0)" {\r
               description\r
-                "This PM Metric only applies to specific " +\r
-                "Performance Objective Types.";\r
+                            "This PM Metric only applies to specific " +\r
+                            "Performance Objective Types.";\r
             }\r
             type uint64;\r
             mandatory true;\r
             description\r
-              "Number of consecutive small time intervals " +\r
-              "to assess.";\r
+                        "Number of consecutive small time intervals " +\r
+                        "to assess.";\r
           }\r
           list perf-obj {\r
             key "pm-type pm-id";\r
             unique "pm-type cos-name fd-pp fd-range-pp " +\r
-                    "fd-perf-obj fd-range-perf-obj " +\r
-                    "fd-mean-perf-obj ifdv-pp ifdv-pair-interval " +\r
-                    "ifdv-perf-obj flr-perf-obj avail-pp " +\r
-                    "hli-perf-obj " +\r
-                    "chli-consecutive-small-time-intervals " +\r
-                    "chli-perf-obj min-uni-pairs-avail gp-avail-pp";\r
+                        "fd-perf-obj fd-range-perf-obj " +\r
+                        "fd-mean-perf-obj ifdv-pp ifdv-pair-interval " +\r
+                        "ifdv-perf-obj flr-perf-obj avail-pp " +\r
+                        "hli-perf-obj " +\r
+                        "chli-consecutive-small-time-intervals " +\r
+                        "chli-perf-obj min-uni-pairs-avail gp-avail-pp";\r
             description\r
-              "For any given SLS, performance objectives related " +\r
-              "to the Performance Metrics may or may not be " +\r
-              "specified. No functionally duplicated " +\r
-              "Performance Objectives are allowed.";\r
+                        "For any given SLS, performance objectives related " +\r
+                        "to the Performance Metrics may or may not be " +\r
+                        "specified. No functionally duplicated " +\r
+                        "Performance Objectives are allowed.";\r
             leaf pm-type {\r
               type mef-types:performance-metric-type;\r
               description\r
-                "Performance Metric Type.";\r
+                            "Performance Metric Type.";\r
               reference "[MEF10.3] Section 8.8.";\r
             }\r
             leaf pm-id {\r
               type mef-types:identifier45;\r
               description\r
-                "This is a friendly name for specific " +\r
-                "performance profile.";\r
+                            "This is a friendly name for specific " +\r
+                            "performance profile.";\r
             }\r
             leaf cos-name {\r
               type leafref {\r
                 path "/mef-global:mef-global/profiles/" +\r
-                        "cos-names/cos-name/name";\r
+                                "cos-names/cos-name/name";\r
               }\r
               mandatory true;\r
               description\r
-                "CoS Name Identifier.";\r
+                            "CoS Name Identifier.";\r
             }\r
             leaf fd-pp {\r
               when "(../pm-type = 'one-way-frame-delay-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type mef-types:simple-percent;\r
               units "percent";\r
               mandatory true;\r
               description\r
-                "Frame Delay Performance Percentile.";\r
+                            "Frame Delay Performance Percentile.";\r
             }\r
             leaf fd-range-pp {\r
               when "(../pm-type = 'one-way-frame-delay-range-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type mef-types:simple-percent;\r
               units "percent";\r
               mandatory true;\r
               description\r
-                "Frame Delay Range Performance Percentile.";\r
+                            "Frame Delay Range Performance Percentile.";\r
             }\r
             leaf fd-perf-obj {\r
               when "(../pm-type = 'one-way-frame-delay-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               units "ms";\r
               mandatory true;\r
               description\r
-                "Frame Delay Performance Objective.";\r
+                            "Frame Delay Performance Objective.";\r
             }\r
             leaf fd-range-perf-obj {\r
               when "(../pm-type = 'one-way-frame-delay-range-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               units "ms";\r
               mandatory true;\r
               description\r
-                "Frame Delay Range Performance Objective.";\r
+                            "Frame Delay Range Performance Objective.";\r
             }\r
             leaf fd-mean-perf-obj {\r
               when "(../pm-type = 'one-way-mean-frame-delay-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               units "ms";\r
               mandatory true;\r
               description\r
-                "Frame Delay Mean Performance Objective.";\r
+                            "Frame Delay Mean Performance Objective.";\r
             }\r
             leaf ifdv-pp {\r
               when "(../pm-type = 'one-way-inter-frame-delay-" +\r
-                    "variation-performance')" {\r
+                            "variation-performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type mef-types:simple-percent;\r
               units "percent";\r
               mandatory true;\r
               description\r
-                "Inter-Frame Delay Variation Performance " +\r
-                "Percentile.";\r
+                            "Inter-Frame Delay Variation Performance " +\r
+                            "Percentile.";\r
             }\r
             leaf ifdv-pair-interval {\r
               when "(../pm-type = 'one-way-inter-frame-delay-" +\r
-                    "variation-performance')" {\r
+                            "variation-performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type mef-types:simple-percent;\r
               units "ms";\r
               mandatory true;\r
               description\r
-                "Inter-Frame Delay Variation Performance " +\r
-                "Separation / Pair Interval.";\r
+                            "Inter-Frame Delay Variation Performance " +\r
+                            "Separation / Pair Interval.";\r
             }\r
             leaf ifdv-perf-obj {\r
               when "(../pm-type = 'one-way-inter-frame-delay-" +\r
-                    "variation-performance')" {\r
+                            "variation-performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               units "ms";\r
               mandatory true;\r
               description\r
-                "Inter-Frame Delay Variation Performance Objective.";\r
+                            "Inter-Frame Delay Variation Performance Objective.";\r
             }\r
             leaf flr-perf-obj {\r
               when "(../pm-type = 'one-way-frame-loss-ratio-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               units "ms";\r
               mandatory true;\r
               description\r
-                "Frame Loss Ratio Performance Objective.";\r
+                            "Frame Loss Ratio Performance Objective.";\r
             }\r
             leaf avail-pp {\r
               when "(../pm-type = 'one-way-availability-" +\r
-                    "performance')" {\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type mef-types:simple-percent;\r
               units "percent";\r
               mandatory true;\r
               description\r
-                "Availability Performance Objective expressed " +\r
-                "as a percentage.";\r
+                            "Availability Performance Objective expressed " +\r
+                            "as a percentage.";\r
             }\r
             leaf hli-perf-obj {\r
               when "(../pm-type = 'one-way-resiliency-" +\r
-                    "performance-hli')" {\r
+                            "performance-hli')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               mandatory true;\r
               description\r
-                "HLI Performance Objective expressed as an integer.";\r
+                            "HLI Performance Objective expressed as an integer.";\r
             }\r
             leaf chli-consecutive-small-time-intervals {\r
               when "(../pm-type = 'one-way-resiliency-" +\r
-                    "performance-chli')" {\r
+                            "performance-chli')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               must "not(../../consecutive-small-time-intervals) " +\r
-                    "or " +\r
-                    "(. < ../../consecutive-small-time-" +\r
-                    "intervals)" {\r
+                            "or " +\r
+                            "(. < ../../consecutive-small-time-" +\r
+                            "intervals)" {\r
                 error-message "The value of chli-consecutive-" +\r
-                        "small-time-intervals must be less " +\r
-                        "than consecutive-small-time-intervals " +\r
-                        "(where p < n) if both are defined.";\r
+                                "small-time-intervals must be less " +\r
+                                "than consecutive-small-time-intervals " +\r
+                                "(where p < n) if both are defined.";\r
                 description\r
-                  "The value of chli-consecutive-small-time-" +\r
-                  "intervals must be less than consecutive-" +\r
-                  "small-time-intervals (where p < n) if " +\r
-                  "both are defined.";\r
+                                "The value of chli-consecutive-small-time-" +\r
+                                "intervals must be less than consecutive-" +\r
+                                "small-time-intervals (where p < n) if " +\r
+                                "both are defined.";\r
               }\r
               mandatory true;\r
               description\r
-                "Number of consecutive small time intervals " +\r
-                "for assessing CHLI.";\r
+                            "Number of consecutive small time intervals " +\r
+                            "for assessing CHLI.";\r
               reference "[MEF10.3] Table 10.";\r
             }\r
             leaf chli-perf-obj {\r
               when "(../pm-type = 'one-way-resiliency-" +\r
-                    "performance-chli')" {\r
+                            "performance-chli')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               mandatory true;\r
               description\r
-                "Consecutive HLI Performance Objective " +\r
-                "expressed as an integer.";\r
+                            "Consecutive HLI Performance Objective " +\r
+                            "expressed as an integer.";\r
             }\r
             leaf min-uni-pairs-avail {\r
               when "(../pm-type = 'one-way-multiple-evc-group-" +\r
-                    "availability-performance') or " +\r
-                    "(../pm-type = 'one-way-group-availability-" +\r
-                    "performance')" {\r
+                            "availability-performance') or " +\r
+                            "(../pm-type = 'one-way-group-availability-" +\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type uint64;\r
               mandatory true;\r
               description\r
-                "Minimum number of ordered UNI pairs that are " +\r
-                "to be available in the EVC.";\r
+                            "Minimum number of ordered UNI pairs that are " +\r
+                            "to be available in the EVC.";\r
             }\r
             leaf gp-avail-pp {\r
               when "(../pm-type = 'one-way-multiple-evc-group-" +\r
-                    "availability-performance') or " +\r
-                    "(../pm-type = 'one-way-group-availability-" +\r
-                    "performance')" {\r
+                            "availability-performance') or " +\r
+                            "(../pm-type = 'one-way-group-availability-" +\r
+                            "performance')" {\r
                 description\r
-                  "This PM Metric only applies to specific " +\r
-                  "Performance Objective Types.";\r
+                                "This PM Metric only applies to specific " +\r
+                                "Performance Objective Types.";\r
               }\r
               type mef-types:simple-percent;\r
               units "percent";\r
               mandatory true;\r
               description\r
-                "Group Availability Performance Objective " +\r
-                "expressed as a percentage.";\r
+                            "Group Availability Performance Objective " +\r
+                            "expressed as a percentage.";\r
             }\r
           }\r
         }\r
         leaf sls-id {\r
           type mef-types:cen-type;\r
           description\r
-            "The SLS ID identifies a specific Service Level " +\r
-            "Specification offered by a Service Provider.";\r
+                    "The SLS ID identifies a specific Service Level " +\r
+                    "Specification offered by a Service Provider.";\r
           reference "[MEF10.3] Section 8.8. The SLS ID must " +\r
-                "be unique for this Service Provider.";\r
+                    "be unique for this Service Provider.";\r
         }\r
         leaf sp-id {\r
           when "/mef-global:mef-global/mef-global:svc-" +\r
-                "providers" {\r
+                    "providers" {\r
             description\r
-              "Service Provider Identifier associated " +\r
-              "with this SLS.";\r
+                        "Service Provider Identifier associated " +\r
+                        "with this SLS.";\r
           }\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:" +\r
-                    "svc-providers/mef-global:svc-provider/" +\r
-                    "mef-global:sp-id";\r
+                        "svc-providers/mef-global:svc-provider/" +\r
+                        "mef-global:sp-id";\r
           }\r
           description\r
-            "The Service Provider ID must be globally unique " +\r
-            "as all Subscriber SLSs must be supported by " +\r
-            "a specific Service Provider(SP). A SP can " +\r
-            "support multiple SLSs.";\r
+                    "The Service Provider ID must be globally unique " +\r
+                    "as all Subscriber SLSs must be supported by " +\r
+                    "a specific Service Provider(SP). A SP can " +\r
+                    "support multiple SLSs.";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
       }\r
@@ -661,72 +634,72 @@ module mef-global {
     container subscribers {\r
       presence "Use non-default Subscribers.";\r
       description\r
-        "Subscribers List (Global).";\r
+            "Subscribers List (Global).";\r
       list subscriber {\r
         must "(not(/mef-global/svc-providers) and not(./sp-id)) " +\r
                 "or " +\r
                 "(/mef-global/svc-providers and ./sp-id)" {\r
           error-message "If the Service Providers list has been " +\r
-                "populated, a Service Provider ID must be " +\r
-                "configured for a Subscriber.";\r
+                    "populated, a Service Provider ID must be " +\r
+                    "configured for a Subscriber.";\r
           description\r
-            "A Subscriber sees a single Service Provider. " +\r
-            "This must statement is effectively a " +\r
-            "'mandatory true' when the Global Service " +\r
-            "Providers list is being used.";\r
+                    "A Subscriber sees a single Service Provider. " +\r
+                    "This must statement is effectively a " +\r
+                    "'mandatory true' when the Global Service " +\r
+                    "Providers list is being used.";\r
         }\r
         must "(not(/mef-global/cens) and not(./cen-id)) or " +\r
                 "(/mef-global/cens and ./cen-id)" {\r
           error-message "If the CENs list has been populated, " +\r
-                "a CEN ID must be configured for a Subscriber.";\r
+                    "a CEN ID must be configured for a Subscriber.";\r
           description\r
-            "[MEF103] A Subscriber sees a single CEN from a " +\r
-            "SP. This must statement is effectively a " +\r
-            "'mandatory true' when the Global CENs list " +\r
-            "is being used.";\r
+                    "[MEF103] A Subscriber sees a single CEN from a " +\r
+                    "SP. This must statement is effectively a " +\r
+                    "'mandatory true' when the Global CENs list " +\r
+                    "is being used.";\r
         }\r
         key "sub-id";\r
         description\r
-          "Global Subscriber List.";\r
+                "Global Subscriber List.";\r
         leaf sub-id {\r
           type mef-types:subscriber-type;\r
           description\r
-            "The Subscriber ID identifies a unique Subscriber to " +\r
-            "this CEN. Note that you can have the same " +\r
-            "Subscriber as part of multiple Service Providers.";\r
+                    "The Subscriber ID identifies a unique Subscriber to " +\r
+                    "this CEN. Note that you can have the same " +\r
+                    "Subscriber as part of multiple Service Providers.";\r
           reference "[MEF10.3] Section 7";\r
         }\r
         leaf sp-id {\r
           when "/mef-global:mef-global/mef-global:svc-providers" {\r
             description\r
-              "Only configure when the Global Service Providers " +\r
-              "list has been populated.";\r
+                        "Only configure when the Global Service Providers " +\r
+                        "list has been populated.";\r
           }\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:" +\r
-                    "svc-providers/mef-global:" +\r
-                    "svc-provider/mef-global:sp-id";\r
+                        "svc-providers/mef-global:" +\r
+                        "svc-provider/mef-global:sp-id";\r
           }\r
           description\r
-            "The Service Provider ID must be globally unique " +\r
-            "as all CENs and Subscribers must be supported by " +\r
-            "a specific Service Provider(SP). A SP can " +\r
-            "support multiple CENs.";\r
+                    "The Service Provider ID must be globally unique " +\r
+                    "as all CENs and Subscribers must be supported by " +\r
+                    "a specific Service Provider(SP). A SP can " +\r
+                    "support multiple CENs.";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
         leaf cen-id {\r
           when "/mef-global:mef-global/mef-global:cens" {\r
             description\r
-              "Only configure when the Global CENs list " +\r
-              "has been populated.";\r
+                        "Only configure when the Global CENs list " +\r
+                        "has been populated.";\r
           }\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:cens/" +\r
-                    "mef-global:cen/mef-global:cen-id";\r
+                        "mef-global:cen/mef-global:cen-id";\r
           }\r
           description\r
-            "A CEN is defined as a network from a " +\r
-            "Service Provider (SP). ";\r
+                    "A CEN is defined as a network from a " +\r
+                    "Service Provider (SP). ";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
       }\r
@@ -735,425 +708,425 @@ module mef-global {
       presence "Use to confirm whether ANY profiles have " +\r
             "been configured";\r
       description\r
-        "Global Profiles.";\r
+            "Global Profiles.";\r
       container cos-names {\r
         description\r
-          "CoS Names (AKA CoS Labels) agreed to between " +\r
-          "the Service Provider and the Subscribers.";\r
+                "CoS Names (AKA CoS Labels) agreed to between " +\r
+                "the Service Provider and the Subscribers.";\r
         list cos-name {\r
           key "name";\r
           description\r
-            "List of CoS Names.";\r
+                    "List of CoS Names.";\r
           leaf name {\r
             type mef-types:identifier45;\r
             description\r
-              "CoS Name.";\r
+                        "CoS Name.";\r
           }\r
         }\r
       }\r
       container eec-names {\r
         description\r
-          "Egress Equivalance Class (EEC) Names agreed to " +\r
-          "between the Service Provider and the Subscribers.";\r
+                "Egress Equivalance Class (EEC) Names agreed to " +\r
+                "between the Service Provider and the Subscribers.";\r
         list eec-name {\r
           key "name";\r
           description\r
-            "List of EEC Names.";\r
+                    "List of EEC Names.";\r
           leaf name {\r
             type mef-types:identifier45;\r
             description\r
-              "EEC Name.";\r
+                        "EEC Name.";\r
           }\r
         }\r
       }\r
       container ingress-bwp-flows {\r
         description\r
-          "Ingress Bandwidth Profile Flows.";\r
+                "Ingress Bandwidth Profile Flows.";\r
         uses bwp-flows-group;\r
       }\r
       container egress-bwp-flows {\r
         description\r
-          "Egress Bandwidth Profile Flows.";\r
+                "Egress Bandwidth Profile Flows.";\r
         uses bwp-flows-group;\r
       }\r
       container l2cp-cos {\r
         description\r
-          "Ingress Layer 2 Control Protocol (L2CP) " +\r
-          "Configuration with CoS Names.";\r
+                "Ingress Layer 2 Control Protocol (L2CP) " +\r
+                "Configuration with CoS Names.";\r
         list l2cp-profile {\r
           key "id";\r
           description\r
-            "A list of global profiles for Layer 2 " +\r
-            "Control Processing.";\r
+                    "A list of global profiles for Layer 2 " +\r
+                    "Control Processing.";\r
           reference "[MEF10.3] Section 8.5.";\r
           container l2cps {\r
             description\r
-              "Layer 2 Control Protocol (L2CP) Profiles " +\r
-              "for Classes of Service (CoS).";\r
+                        "Layer 2 Control Protocol (L2CP) Profiles " +\r
+                        "for Classes of Service (CoS).";\r
             list l2cp {\r
               key "dest-mac-addr peering-proto-name";\r
               description\r
-                "L2CP Destination MAC Address.";\r
+                            "L2CP Destination MAC Address.";\r
               reference "[MEF10.3] Section 8.5.";\r
               leaf dest-mac-addr {\r
                 type yang:mac-address;\r
                 description\r
-                  "The Destination MAC Address for the " +\r
-                  "Layer 2 Control Protocol.";\r
+                                "The Destination MAC Address for the " +\r
+                                "Layer 2 Control Protocol.";\r
               }\r
               leaf peering-proto-name {\r
                 type mef-types:identifier45;\r
                 description\r
-                  "This attribute is a friendly name for " +\r
-                  "the Protocol to be Peered. It is optional.";\r
+                                "This attribute is a friendly name for " +\r
+                                "the Protocol to be Peered. It is optional.";\r
               }\r
               leaf protocol {\r
                 type mef-types:l2cp-peering-protocol-type;\r
                 default "ethertype";\r
                 description\r
-                  "The Protocol is one of Ethertype, LLC, or Other.";\r
+                                "The Protocol is one of Ethertype, LLC, or Other.";\r
               }\r
               leaf protocol-id {\r
                 type yang:hex-string;\r
                 description\r
-                  "The Protocol Identifier is the protocol " +\r
-                  "specific value associated with the " +\r
-                  "protocol in a colon separated list of " +\r
-                  "hex values (ie. 88:EE or 82).";\r
+                                "The Protocol Identifier is the protocol " +\r
+                                "specific value associated with the " +\r
+                                "protocol in a colon separated list of " +\r
+                                "hex values (ie. 88:EE or 82).";\r
               }\r
               leaf cos-name {\r
                 type leafref {\r
                   path "/mef-global:mef-global/profiles/" +\r
-                        "cos-names/cos-name/name";\r
+                                    "cos-names/cos-name/name";\r
                 }\r
                 description\r
-                  "This attribute identifies the name of " +\r
-                  "a class of service (CoS).";\r
+                                "This attribute identifies the name of " +\r
+                                "a class of service (CoS).";\r
               }\r
               leaf handling {\r
                 type mef-types:l2cp-handling-type;\r
                 description\r
-                  "The handling selection indicates whether " +\r
-                  "the L2CP Service Frames identified by " +\r
-                  "this list entry should be passed, " +\r
-                  "discarded, or peered.";\r
+                                "The handling selection indicates whether " +\r
+                                "the L2CP Service Frames identified by " +\r
+                                "this list entry should be passed, " +\r
+                                "discarded, or peered.";\r
                 reference "[MEF45] Section 8.5.";\r
               }\r
               leaf-list subtype {\r
                 type yang:hex-string;\r
                 max-elements "255";\r
                 description\r
-                  "L2CP Subtype for this Destination " +\r
-                  "MAC's Protocol ID.";\r
+                                "L2CP Subtype for this Destination " +\r
+                                "MAC's Protocol ID.";\r
               }\r
             }\r
           }\r
           leaf id {\r
             type mef-types:identifier45;\r
             description\r
-              "The L2CP ID identifies a specific profile for " +\r
-              "Layer 2 Control Processing.";\r
+                        "The L2CP ID identifies a specific profile for " +\r
+                        "Layer 2 Control Processing.";\r
             reference "[MEF10.3] Section 8.5.";\r
           }\r
           leaf user-label {\r
             type mef-types:identifier45;\r
             description\r
-              "This attribute is a friendly name for the " +\r
-              "specific L2CP profile.";\r
+                        "This attribute is a friendly name for the " +\r
+                        "specific L2CP profile.";\r
           }\r
         }\r
       }\r
       container l2cp-eec {\r
         description\r
-          "Egress Layer 2 Control Protocol (L2CP) Configuration " +\r
-          "with EEC Names.";\r
+                "Egress Layer 2 Control Protocol (L2CP) Configuration " +\r
+                "with EEC Names.";\r
         list l2cp-profile {\r
           key "id";\r
           description\r
-            "A list of global profiles for Layer 2 Control " +\r
-            "Processing.";\r
+                    "A list of global profiles for Layer 2 Control " +\r
+                    "Processing.";\r
           reference "[MEF10.3] Section 8.5.";\r
           container l2cps {\r
             description\r
-              "Layer 2 Control Protocol (L2CP) Profiles for " +\r
-              "Egress Equivalence Classes.";\r
+                        "Layer 2 Control Protocol (L2CP) Profiles for " +\r
+                        "Egress Equivalence Classes.";\r
             list l2cp {\r
               key "dest-mac-addr peering-proto-name";\r
               description\r
-                "L2CP Destination MAC Address.";\r
+                            "L2CP Destination MAC Address.";\r
               reference "[MEF10.3] Section 8.5.";\r
               leaf dest-mac-addr {\r
                 type yang:mac-address;\r
                 description\r
-                  "The Destination MAC Address for the " +\r
-                  "Layer 2 Control Protocol.";\r
+                                "The Destination MAC Address for the " +\r
+                                "Layer 2 Control Protocol.";\r
               }\r
               leaf peering-proto-name {\r
                 type mef-types:identifier45;\r
                 description\r
-                  "This attribute is a friendly name for the " +\r
-                  "Protocol to be Peered. It is optional.";\r
+                                "This attribute is a friendly name for the " +\r
+                                "Protocol to be Peered. It is optional.";\r
               }\r
               leaf protocol {\r
                 type mef-types:l2cp-peering-protocol-type;\r
                 default "ethertype";\r
                 description\r
-                  "The Protocol is one of Ethertype, LLC, or Other.";\r
+                                "The Protocol is one of Ethertype, LLC, or Other.";\r
               }\r
               leaf protocol-id {\r
                 type yang:hex-string;\r
                 description\r
-                  "The Protocol Identifier is the protocol " +\r
-                  "specific " +\r
-                  "value associated with the protocol in a " +\r
-                  "colon separated list of hex values " +\r
-                  "(ie. 88:EE or 82).";\r
+                                "The Protocol Identifier is the protocol " +\r
+                                "specific " +\r
+                                "value associated with the protocol in a " +\r
+                                "colon separated list of hex values " +\r
+                                "(ie. 88:EE or 82).";\r
               }\r
               leaf eec-name {\r
                 type leafref {\r
                   path "/mef-global:mef-global/profiles/" +\r
-                        "eec-names/eec-name/name";\r
+                                    "eec-names/eec-name/name";\r
                 }\r
                 description\r
-                  "This attribute identifies the name of a " +\r
-                  "Egress Equivalence Class (EEC).";\r
+                                "This attribute identifies the name of a " +\r
+                                "Egress Equivalence Class (EEC).";\r
               }\r
               leaf handling {\r
                 type mef-types:l2cp-handling-type;\r
                 description\r
-                  "The handling selection indicates whether " +\r
-                  "the L2CP Service Frames identified by this " +\r
-                  "list entry should be passed, discarded, " +\r
-                  "or peered.";\r
+                                "The handling selection indicates whether " +\r
+                                "the L2CP Service Frames identified by this " +\r
+                                "list entry should be passed, discarded, " +\r
+                                "or peered.";\r
                 reference "[MEF45] Section 8.5.";\r
               }\r
               leaf-list subtype {\r
                 type yang:hex-string;\r
                 max-elements "255";\r
                 description\r
-                  "L2CP Subtype for this Destination MAC's " +\r
-                  "Protocol ID.";\r
+                                "L2CP Subtype for this Destination MAC's " +\r
+                                "Protocol ID.";\r
               }\r
             }\r
           }\r
           leaf id {\r
             type mef-types:identifier45;\r
             description\r
-              "The L2CP ID identifies a specific profile for " +\r
-              "Layer 2 Control Processing.";\r
+                        "The L2CP ID identifies a specific profile for " +\r
+                        "Layer 2 Control Processing.";\r
             reference "[MEF10.3] Section 8.5.";\r
           }\r
           leaf user-label {\r
             type mef-types:identifier45;\r
             description\r
-              "This attribute is a friendly name for the " +\r
-              "specific L2CP profile.";\r
+                        "This attribute is a friendly name for the " +\r
+                        "specific L2CP profile.";\r
           }\r
         }\r
       }\r
       container l2cp-peering {\r
         description\r
-          "Layer 2 Control Protocol (L2CP) Configuration " +\r
-          "for Peering Lists.";\r
+                "Layer 2 Control Protocol (L2CP) Configuration " +\r
+                "for Peering Lists.";\r
         list l2cp-profile {\r
           key "id";\r
           description\r
-            "A list of global profiles for " +\r
-            "Layer 2 Control Processing.";\r
+                    "A list of global profiles for " +\r
+                    "Layer 2 Control Processing.";\r
           reference "[MEF10.3] Section 8.5.";\r
           container l2cps {\r
             description\r
-              "Layer 2 Control Protocol (L2CP) Profiles for " +\r
-              "Peering.";\r
+                        "Layer 2 Control Protocol (L2CP) Profiles for " +\r
+                        "Peering.";\r
             list l2cp {\r
               key "dest-mac-addr peering-proto-name";\r
               description\r
-                "L2CP Destination MAC Address.";\r
+                            "L2CP Destination MAC Address.";\r
               reference "[MEF10.3] Section 8.5.";\r
               leaf dest-mac-addr {\r
                 type yang:mac-address;\r
                 description\r
-                  "The Destination MAC Address for the " +\r
-                  "Layer 2 Control Protocol.";\r
+                                "The Destination MAC Address for the " +\r
+                                "Layer 2 Control Protocol.";\r
               }\r
               leaf peering-proto-name {\r
                 type mef-types:identifier45;\r
                 description\r
-                  "This attribute is a friendly name for the " +\r
-                  "Protocol to be Peered. It is optional.";\r
+                                "This attribute is a friendly name for the " +\r
+                                "Protocol to be Peered. It is optional.";\r
               }\r
               leaf protocol {\r
                 type mef-types:l2cp-peering-protocol-type;\r
                 default "ethertype";\r
                 description\r
-                  "The Protocol is one of Ethertype, LLC, or Other.";\r
+                                "The Protocol is one of Ethertype, LLC, or Other.";\r
               }\r
               leaf protocol-id {\r
                 type yang:hex-string;\r
                 description\r
-                  "The Protocol Identifier is the protocol " +\r
-                  "specific value associated with the protocol " +\r
-                  "in a colon separated list of hex values " +\r
-                  "(ie. 88:EE or 82).";\r
+                                "The Protocol Identifier is the protocol " +\r
+                                "specific value associated with the protocol " +\r
+                                "in a colon separated list of hex values " +\r
+                                "(ie. 88:EE or 82).";\r
               }\r
               leaf-list subtype {\r
                 type yang:hex-string;\r
                 max-elements "255";\r
                 description\r
-                  "L2CP Subtype for this Destination MAC's " +\r
-                  "Protocol ID.";\r
+                                "L2CP Subtype for this Destination MAC's " +\r
+                                "Protocol ID.";\r
               }\r
             }\r
           }\r
           leaf id {\r
             type mef-types:identifier45;\r
             description\r
-              "The L2CP ID identifies a specific profile for " +\r
-              "Layer 2 Control Processing.";\r
+                        "The L2CP ID identifies a specific profile for " +\r
+                        "Layer 2 Control Processing.";\r
             reference "[MEF10.3] Section 8.5.";\r
           }\r
           leaf user-label {\r
             type mef-types:identifier45;\r
             description\r
-              "This attribute is a friendly name for the " +\r
-              "specific L2CP profile.";\r
+                        "This attribute is a friendly name for the " +\r
+                        "specific L2CP profile.";\r
           }\r
         }\r
       }\r
       container elmi {\r
         description\r
-          "Ethernet Local Management Interface(ELMI).";\r
+                "Ethernet Local Management Interface(ELMI).";\r
         list elmi-profile {\r
           key "id";\r
           description\r
-            "Ethernet Local Management Interface(ELMI) Profile ID.";\r
+                    "Ethernet Local Management Interface(ELMI) Profile ID.";\r
           reference "[MEF10.3] [R88]. [MEF16].";\r
           leaf id {\r
             type mef-types:identifier45;\r
             description\r
-              "Ethernet Local Management Interface(ELMI) " +\r
-              "Profile ID.";\r
+                        "Ethernet Local Management Interface(ELMI) " +\r
+                        "Profile ID.";\r
             reference "[MEF10.3] [R88]. [MEF16].";\r
           }\r
           leaf user-label {\r
             type mef-types:identifier45;\r
             description\r
-              "This attribute is a friendly name for the " +\r
-              "specific ELMI Category described within this " +\r
-              "profile.";\r
+                        "This attribute is a friendly name for the " +\r
+                        "specific ELMI Category described within this " +\r
+                        "profile.";\r
           }\r
           leaf polling-counter {\r
             type mef-types:elmi-polling-counter-type;\r
             default "360";\r
             description\r
-              "Polling cycles between Full Status exchanges.";\r
+                        "Polling cycles between Full Status exchanges.";\r
             reference "[MEF16] Section 5.6.1.";\r
           }\r
           leaf status-error-threshold {\r
             type mef-types:elmi-status-error-threshold-type;\r
             default "4";\r
             description\r
-              "The count of consecutive ELMI status polling " +\r
-              "errors before raising an error.";\r
+                        "The count of consecutive ELMI status polling " +\r
+                        "errors before raising an error.";\r
             reference "[MEF16] Section 5.6.1.";\r
           }\r
           leaf polling-timer {\r
             type mef-types:elmi-polling-timer-type;\r
             default "10";\r
             description\r
-              "The timer started after tranmitting a Status " +\r
-              "Enquiry. If the timer expires, record the error " +\r
-              "if a STATUS message not received and resend " +\r
-              "Status Enquiry.";\r
+                        "The timer started after tranmitting a Status " +\r
+                        "Enquiry. If the timer expires, record the error " +\r
+                        "if a STATUS message not received and resend " +\r
+                        "Status Enquiry.";\r
             reference "[MEF16] Section 5.6.1.";\r
           }\r
           leaf polling-verification-timer {\r
             type mef-types:elmi-polling-verification-timer-type;\r
             default "15";\r
             description\r
-              "The type used for a timer started after " +\r
-              "tranmitting a Status Message. If a Status " +\r
-              "Enquiry is recieved before this timer " +\r
-              "expires, record the error.";\r
+                        "The type used for a timer started after " +\r
+                        "tranmitting a Status Message. If a Status " +\r
+                        "Enquiry is recieved before this timer " +\r
+                        "expires, record the error.";\r
             reference "[MEF16] Section 5.6.1.";\r
           }\r
         }\r
       }\r
       container eec {\r
         description\r
-          "Egress Equivalence Class (EEC) Profiles.";\r
+                "Egress Equivalence Class (EEC) Profiles.";\r
         list eec-profile {\r
           key "id";\r
           description\r
-            "This attribute identifies the identifier of a " +\r
-            "Egress Equivance Class (EEC) instance.";\r
+                    "This attribute identifies the identifier of a " +\r
+                    "Egress Equivance Class (EEC) instance.";\r
           reference "[MEF6.2] Appendix A.";\r
           leaf id {\r
             type mef-types:identifier45;\r
             description\r
-              "This attribute identifies the label of a " +\r
-              "Egress Equivance Class (EEC) instance.";\r
+                        "This attribute identifies the label of a " +\r
+                        "Egress Equivance Class (EEC) instance.";\r
           }\r
           choice eec-id {\r
             description\r
-              "EEC Identifier.";\r
+                        "EEC Identifier.";\r
             case pcp {\r
               container eec-pcp {\r
                 presence "EEC Mode PCP.";\r
                 description\r
-                  "EEC Mode PCP.";\r
+                                "EEC Mode PCP.";\r
                 leaf default-pcp-eec-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "eec-names/eec-name/name";\r
+                                        "eec-names/eec-name/name";\r
                   }\r
                   description\r
-                    "Default value for EEC Name for PCP " +\r
-                    "when it has not been explicitly configured.";\r
+                                    "Default value for EEC Name for PCP " +\r
+                                    "when it has not been explicitly configured.";\r
                 }\r
                 leaf default-pcp-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the EEC ID = pcp, then this value " +\r
-                    "will be used as the default Color when " +\r
-                    "the PCP value does not have an explicitly " +\r
-                    "configured Color.";\r
+                                    "If the EEC ID = pcp, then this value " +\r
+                                    "will be used as the default Color when " +\r
+                                    "the PCP value does not have an explicitly " +\r
+                                    "configured Color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
                 list pcp {\r
                   key "pcp-value";\r
                   description\r
-                    "PCP.";\r
+                                    "PCP.";\r
                   leaf pcp-value {\r
                     type mef-types:ieee8021p-priority-type;\r
                     description\r
-                      "Use the VLAN Tag IEEE 802.1p Priority " +\r
-                      "Code Point value (0..7) for CoS.";\r
+                                        "Use the VLAN Tag IEEE 802.1p Priority " +\r
+                                        "Code Point value (0..7) for CoS.";\r
                     reference "[MEF10.3] Section 10.2.1.";\r
                   }\r
                   leaf discard-value {\r
                     type boolean;\r
                     default "false";\r
                     description\r
-                      "Set to True to discard Service Frames " +\r
-                      "that match to this PCP value.";\r
+                                        "Set to True to discard Service Frames " +\r
+                                        "that match to this PCP value.";\r
                   }\r
                   leaf eec-name {\r
                     type leafref {\r
                       path "/mef-global:mef-global/profiles/" +\r
-                            "eec-names/eec-name/name";\r
+                                            "eec-names/eec-name/name";\r
                     }\r
                     description\r
-                      "This attribute identifies the name of a " +\r
-                      "Egress Equivalence Class instance.";\r
+                                        "This attribute identifies the name of a " +\r
+                                        "Egress Equivalence Class instance.";\r
                   }\r
                   leaf color {\r
                     type mef-types:cos-color-type;\r
                     default "green";\r
                     description\r
-                      "EVC Per UNI: The EEC Color for " +\r
-                      "Service Frames.";\r
+                                        "EVC Per UNI: The EEC Color for " +\r
+                                        "Service Frames.";\r
                     reference "[MEF10.3] [R102], [R103]. ";\r
                   }\r
                 }\r
@@ -1163,112 +1136,112 @@ module mef-global {
               container eec-dscp {\r
                 presence "EEC Mode DSCP.";\r
                 description\r
-                  "ECC Mode DSCP.";\r
+                                "ECC Mode DSCP.";\r
                 leaf default-ipv4-eec-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "eec-names/eec-name/name";\r
+                                        "eec-names/eec-name/name";\r
                   }\r
                   description\r
-                    "Default value for EEC Name for DSCP IPv4 " +\r
-                    "Packets when it has not been " +\r
-                    "explicitly configured.";\r
+                                    "Default value for EEC Name for DSCP IPv4 " +\r
+                                    "Packets when it has not been " +\r
+                                    "explicitly configured.";\r
                 }\r
                 leaf default-ipv4-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the EEC ID = dscp, then this value will " +\r
-                    "be used as the default Color when the " +\r
-                    "DSCP value for IPv4 does not have an " +\r
-                    "explicitly configured Color.";\r
+                                    "If the EEC ID = dscp, then this value will " +\r
+                                    "be used as the default Color when the " +\r
+                                    "DSCP value for IPv4 does not have an " +\r
+                                    "explicitly configured Color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
                 leaf default-ipv6-eec-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "eec-names/eec-name/name";\r
+                                        "eec-names/eec-name/name";\r
                   }\r
                   description\r
-                    "Default value for EEC Name for DSCP IPv6 " +\r
-                    "Packets when it has not been explicitly " +\r
-                    "configured.";\r
+                                    "Default value for EEC Name for DSCP IPv6 " +\r
+                                    "Packets when it has not been explicitly " +\r
+                                    "configured.";\r
                 }\r
                 leaf default-ipv6-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the EEC ID = dscp, then this value " +\r
-                    "will be used as the default Color " +\r
-                    "when the DSCP value for IPv6 does " +\r
-                    "not have an explicitly configured Color.";\r
+                                    "If the EEC ID = dscp, then this value " +\r
+                                    "will be used as the default Color " +\r
+                                    "when the DSCP value for IPv6 does " +\r
+                                    "not have an explicitly configured Color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
                 list ipv4-dscp {\r
                   key "dscp-value";\r
                   description\r
-                    "DSCP value for IPv4 Packets.";\r
+                                    "DSCP value for IPv4 Packets.";\r
                   leaf dscp-value {\r
                     type inet:dscp;\r
                     description\r
-                      "Map CoS to IPv4 DSCP values.";\r
+                                        "Map CoS to IPv4 DSCP values.";\r
                   }\r
                   leaf discard-value {\r
                     type boolean;\r
                     default "false";\r
                     description\r
-                      "Set to True to discard Service Frames " +\r
-                      "that match to this DSCP value.";\r
+                                        "Set to True to discard Service Frames " +\r
+                                        "that match to this DSCP value.";\r
                   }\r
                   leaf eec-name {\r
                     type leafref {\r
                       path "/mef-global:mef-global/profiles/" +\r
-                            "eec-names/eec-name/name";\r
+                                            "eec-names/eec-name/name";\r
                     }\r
                     description\r
-                      "This attribute identifies the name " +\r
-                      "of a Egress Equivalence Class instance.";\r
+                                        "This attribute identifies the name " +\r
+                                        "of a Egress Equivalence Class instance.";\r
                   }\r
                   leaf color {\r
                     type mef-types:cos-color-type;\r
                     default "green";\r
                     description\r
-                      "EVC Per UNI: The EEC Color for " +\r
-                      "Service Frames.";\r
+                                        "EVC Per UNI: The EEC Color for " +\r
+                                        "Service Frames.";\r
                     reference "[MEF10.3] [R102], [R103]. ";\r
                   }\r
                 }\r
                 list ipv6-dscp {\r
                   key "dscp-value";\r
                   description\r
-                    "DSCP value for IPv6 Packets.";\r
+                                    "DSCP value for IPv6 Packets.";\r
                   leaf dscp-value {\r
                     type inet:dscp;\r
                     description\r
-                      "Map EEC to IPv4 and IPv6 DSCP values.";\r
+                                        "Map EEC to IPv4 and IPv6 DSCP values.";\r
                   }\r
                   leaf discard-value {\r
                     type boolean;\r
                     default "false";\r
                     description\r
-                      "Set to True to discard Service Frames " +\r
-                      "that match to this DSCP value.";\r
+                                        "Set to True to discard Service Frames " +\r
+                                        "that match to this DSCP value.";\r
                   }\r
                   leaf eec-name {\r
                     type leafref {\r
                       path "/mef-global:mef-global/profiles/" +\r
-                            "eec-names/eec-name/name";\r
+                                            "eec-names/eec-name/name";\r
                     }\r
                     description\r
-                      "This attribute identifies the name of a " +\r
-                      "Egress Equivalence Class instance.";\r
+                                        "This attribute identifies the name of a " +\r
+                                        "Egress Equivalence Class instance.";\r
                   }\r
                   leaf color {\r
                     type mef-types:cos-color-type;\r
                     default "green";\r
                     description\r
-                      "EVC Per UNI: The EEC Color for " +\r
-                      "Service Frames.";\r
+                                        "EVC Per UNI: The EEC Color for " +\r
+                                        "Service Frames.";\r
                     reference "[MEF10.3] [R102], [R103]. ";\r
                   }\r
                 }\r
@@ -1279,42 +1252,42 @@ module mef-global {
       }\r
       container cos {\r
         description\r
-          "Class of Service (CoS) Profiles.";\r
+                "Class of Service (CoS) Profiles.";\r
         list cos-profile {\r
           key "id";\r
           description\r
-            "This attribute identifies the identifier of a " +\r
-            "Class of Service (CoS) instance.";\r
+                    "This attribute identifies the identifier of a " +\r
+                    "Class of Service (CoS) instance.";\r
           reference "[MEF6.2] Appendix A.";\r
           leaf id {\r
             type mef-types:identifier45;\r
             description\r
-              "This attribute identifies the label of a " +\r
-              "Class of Service (CoS) instance.";\r
+                        "This attribute identifies the label of a " +\r
+                        "Class of Service (CoS) instance.";\r
           }\r
           choice cos-id {\r
             description\r
-              "CoS identifier.";\r
+                        "CoS identifier.";\r
             case evc {\r
               container cos-evc {\r
                 presence "EVC ID PCP.";\r
                 description\r
-                  "CoS ID EVC.";\r
+                                "CoS ID EVC.";\r
                 leaf default-evc-cos-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                        "cos-names/cos-name/name";\r
                   }\r
                   description\r
-                    "This attribute identifies the name of a " +\r
-                    "Class of Service (CoS) instance.";\r
+                                    "This attribute identifies the name of a " +\r
+                                    "Class of Service (CoS) instance.";\r
                 }\r
                 leaf default-evc-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the CoS ID = evc, then all service " +\r
-                    "frames are treated with the same color.";\r
+                                    "If the CoS ID = evc, then all service " +\r
+                                    "frames are treated with the same color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
               }\r
@@ -1323,58 +1296,58 @@ module mef-global {
               container cos-pcp {\r
                 presence "CoS ID PCP.";\r
                 description\r
-                  "CoS ID PCP.";\r
+                                "CoS ID PCP.";\r
                 leaf default-pcp-cos-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                        "cos-names/cos-name/name";\r
                   }\r
                   description\r
-                    "Default value for CoS Name for PCP when it " +\r
-                    "has not been explicitly configured.";\r
+                                    "Default value for CoS Name for PCP when it " +\r
+                                    "has not been explicitly configured.";\r
                 }\r
                 leaf default-pcp-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the CoS ID = pcp, then this value will " +\r
-                    "be used as the default Color when the PCP " +\r
-                    "value does not have an explicitly " +\r
-                    "configured Color.";\r
+                                    "If the CoS ID = pcp, then this value will " +\r
+                                    "be used as the default Color when the PCP " +\r
+                                    "value does not have an explicitly " +\r
+                                    "configured Color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
                 list pcp {\r
                   key "pcp-value";\r
                   description\r
-                    "PCP.";\r
+                                    "PCP.";\r
                   leaf pcp-value {\r
                     type mef-types:ieee8021p-priority-type;\r
                     description\r
-                      "Use the VLAN Tag IEEE 802.1p Priority " +\r
-                      "Code Point value (0..7) for CoS.";\r
+                                        "Use the VLAN Tag IEEE 802.1p Priority " +\r
+                                        "Code Point value (0..7) for CoS.";\r
                   }\r
                   leaf discard-value {\r
                     type boolean;\r
                     default "false";\r
                     description\r
-                      "Set to True to discard Service Frames " +\r
-                      "that match to this PCP value.";\r
+                                        "Set to True to discard Service Frames " +\r
+                                        "that match to this PCP value.";\r
                   }\r
                   leaf cos-name {\r
                     type leafref {\r
                       path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                            "cos-names/cos-name/name";\r
                     }\r
                     description\r
-                      "This attribute identifies the name of " +\r
-                      "a class of service (CoS) instance.";\r
+                                        "This attribute identifies the name of " +\r
+                                        "a class of service (CoS) instance.";\r
                   }\r
                   leaf color {\r
                     type mef-types:cos-color-type;\r
                     default "green";\r
                     description\r
-                      "EVC Per UNI: The CoS Color for " +\r
-                      "Service Frames.";\r
+                                        "EVC Per UNI: The CoS Color for " +\r
+                                        "Service Frames.";\r
                     reference "[MEF10.3] [R102], [R103]. ";\r
                   }\r
                 }\r
@@ -1384,112 +1357,112 @@ module mef-global {
               container cos-dscp {\r
                 presence "CoS ID DSCP.";\r
                 description\r
-                  "CoS ID DSCP.";\r
+                                "CoS ID DSCP.";\r
                 leaf default-ipv4-cos-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                        "cos-names/cos-name/name";\r
                   }\r
                   description\r
-                    "Default value for CoS Name for DSCP " +\r
-                    "IPv4 Packets when it has not been " +\r
-                    "explicitly configured.";\r
+                                    "Default value for CoS Name for DSCP " +\r
+                                    "IPv4 Packets when it has not been " +\r
+                                    "explicitly configured.";\r
                 }\r
                 leaf default-ipv4-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the CoS ID = dscp, then this value " +\r
-                    "will be used as the default Color when " +\r
-                    "the DSCP value for IPv4 does not have " +\r
-                    "an explicitly configured Color.";\r
+                                    "If the CoS ID = dscp, then this value " +\r
+                                    "will be used as the default Color when " +\r
+                                    "the DSCP value for IPv4 does not have " +\r
+                                    "an explicitly configured Color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
                 leaf default-ipv6-cos-name {\r
                   type leafref {\r
                     path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                        "cos-names/cos-name/name";\r
                   }\r
                   description\r
-                    "Default value for CoS Name for DSCP " +\r
-                    "IPv6 Packets when it has not been " +\r
-                    "explicitly configured.";\r
+                                    "Default value for CoS Name for DSCP " +\r
+                                    "IPv6 Packets when it has not been " +\r
+                                    "explicitly configured.";\r
                 }\r
                 leaf default-ipv6-color {\r
                   type mef-types:cos-color-type;\r
                   default "green";\r
                   description\r
-                    "If the CoS ID = dscp, then this value will " +\r
-                    "be used as the default Color when the " +\r
-                    "DSCP value for IPv6 does not have an " +\r
-                    "explicitly configured Color.";\r
+                                    "If the CoS ID = dscp, then this value will " +\r
+                                    "be used as the default Color when the " +\r
+                                    "DSCP value for IPv6 does not have an " +\r
+                                    "explicitly configured Color.";\r
                   reference "MEF 10.3 Section 10.3";\r
                 }\r
                 list ipv4-dscp {\r
                   key "dscp-value";\r
                   description\r
-                    "DSCP value for IPv4 Packets.";\r
+                                    "DSCP value for IPv4 Packets.";\r
                   leaf dscp-value {\r
                     type inet:dscp;\r
                     description\r
-                      "Map CoS to IPv4 and IPv6 DSCP values.";\r
+                                        "Map CoS to IPv4 and IPv6 DSCP values.";\r
                   }\r
                   leaf discard-value {\r
                     type boolean;\r
                     default "false";\r
                     description\r
-                      "Set to True to discard Service Frames " +\r
-                      "that match to this DSCP value.";\r
+                                        "Set to True to discard Service Frames " +\r
+                                        "that match to this DSCP value.";\r
                   }\r
                   leaf cos-name {\r
                     type leafref {\r
                       path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                            "cos-names/cos-name/name";\r
                     }\r
                     description\r
-                      "This attribute identifies the name of a " +\r
-                      "Class of Service (CoS) instance.";\r
+                                        "This attribute identifies the name of a " +\r
+                                        "Class of Service (CoS) instance.";\r
                   }\r
                   leaf color {\r
                     type mef-types:cos-color-type;\r
                     default "green";\r
                     description\r
-                      "EVC Per UNI: The CoS Color for " +\r
-                      "Service Frames.";\r
+                                        "EVC Per UNI: The CoS Color for " +\r
+                                        "Service Frames.";\r
                     reference "[MEF10.3] [R102], [R103]. ";\r
                   }\r
                 }\r
                 list ipv6-dscp {\r
                   key "dscp-value";\r
                   description\r
-                    "DSCP value for IPv6 Packets.";\r
+                                    "DSCP value for IPv6 Packets.";\r
                   leaf dscp-value {\r
                     type inet:dscp;\r
                     description\r
-                      "Map CoS to IPv4 and IPv6 DSCP values.";\r
+                                        "Map CoS to IPv4 and IPv6 DSCP values.";\r
                   }\r
                   leaf discard-value {\r
                     type boolean;\r
                     default "false";\r
                     description\r
-                      "Set to True to discard Service Frames " +\r
-                      "that match to this DSCP value.";\r
+                                        "Set to True to discard Service Frames " +\r
+                                        "that match to this DSCP value.";\r
                   }\r
                   leaf cos-name {\r
                     type leafref {\r
                       path "/mef-global:mef-global/profiles/" +\r
-                            "cos-names/cos-name/name";\r
+                                            "cos-names/cos-name/name";\r
                     }\r
                     description\r
-                      "This attribute identifies the name of a " +\r
-                      "Class of Service (CoS) instance.";\r
+                                        "This attribute identifies the name of a " +\r
+                                        "Class of Service (CoS) instance.";\r
                   }\r
                   leaf color {\r
                     type mef-types:cos-color-type;\r
                     default "green";\r
                     description\r
-                      "EVC Per UNI: The CoS Color for " +\r
-                      "Service Frames.";\r
+                                        "EVC Per UNI: The CoS Color for " +\r
+                                        "Service Frames.";\r
                     reference "[MEF10.3] [R102], [R103]. ";\r
                   }\r
                 }\r
@@ -1499,20 +1472,20 @@ module mef-global {
         }\r
       }\r
     }\r
-    \r
+\r
     grouping tenant {\r
-        leaf name {\r
-            type string;\r
-            description "Tenant Name";\r
-        }\r
+      leaf name {\r
+        type string;\r
+        description "Tenant Name";\r
+      }\r
     }\r
-    \r
+\r
     container tenants-instances {\r
-        list tenant-list {\r
-            key name;\r
-            unique name;\r
-            uses tenant;\r
-        }\r
+      list tenant-list {\r
+        key name;\r
+        unique name;\r
+        uses tenant;\r
+      }\r
     }\r
   }\r
-}
\ No newline at end of file
+}\r
index 359f66c4d248ec4289a6dcb44b9523f2266f91e8..c096b6c8a63e9bc1bbbfcc48070af68d64c7f15b 100644 (file)
 module mef-interfaces {\r
   namespace "http://metroethernetforum.org/ns/yang/mef-interfaces";\r
   prefix mef-interfaces;\r
-  import ietf-yang-types {\r
-    prefix yang;\r
-  }\r
-  import mef-types {\r
-    prefix mef-types;\r
-  }\r
-  import mef-global {\r
-    prefix mef-global;\r
-  }\r
-  import mef-topology {\r
-    prefix mef-topology;\r
-  }\r
+  import ietf-inet-types { prefix inet; }\r
+  import ietf-yang-types { prefix yang; }\r
+  import mef-types { prefix mef-types; }\r
+  import mef-global { prefix mef-global; }\r
+  import mef-topology { prefix mef-topology; }\r
+\r
+  import opendaylight-l2-types { prefix ethertype; }\r
+  // revision-date "2013-08-27";\r
+\r
   organization "Metro Ethernet Forum";\r
   contact\r
-    "Web URL: http://metroethernetforum.org/\r
-     E-mail:  mibs@metroethernetforum.org\r
-     Postal:  Metro Ethernet Forum\r
-              6033 W. Century Boulevard, Suite 1107\r
-              Los Angeles, CA 90045\r
-              U.S.A.\r
-     Phone:   +1 310-642-2800\r
-     Fax:     +1 310-642-2808";\r
+    "Web URL: http://metroethernetforum.org/ E-mail: mibs@metroethernetforum.org\r
+    Postal: Metro Ethernet Forum 6033 W. Century Boulevard, Suite\r
+    1107 Los Angeles, CA 90045 U.S.A. Phone: +1 310-642-2800 Fax:\r
+    +1 310-642-2808";\r
   description\r
-    "This module implements the UNI functionality specified\r
-     in MEF 10.3, MEF 6.2, and MEF 7.2.\r
-      \r
-     Reference Overview:\r
-     A number of base documents have been used to create\r
-     the MEF Interfaces YANG Module. The following are the\r
-     abbreviations for the baseline documents:\r
-     [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types',\r
-     2013-07-15 \r
-     [RFC 6643] refers to IETF RFC 6643 'Translation of Structure\r
-     of Management Information\r
-     Version 2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25 \r
-     [802.1AB] refers to 'Station and Media Access Control\r
-     Connectivity Discovery', IEEE 802.1AB-2009, September 2009\r
-     [802.1q] refers to IEEE 802.1Q-2011 'IEEE Standard for Local\r
-     and metropolitan area networks --Media Access Control (MAC)\r
-     Bridges and Virtual Bridged Local Area Networks, August 2011\r
-     [802-2001] refers to 'IEEE Standard for Local and Metropolitan\r
-     Area Networks: Overview and Architecture', IEEE 802-2001,\r
-     February 2002\r
-     [MEF10.3] refers to MEF 10.3\r
-     'Ethernet Services Attributes Phase 3', October 2013\r
-     [MEF6.2] refers to MEF 6.2\r
-     'EVC Ethernet Services Defintions Phase 3', August 2014\r
-     [MEF40] refers to MEF 40\r
-     'UNI and EVC Definition of Managed Objects', April 2013\r
-     [MEF45] refers to MEF 45 'Multi-CEN L2CP', August 2014\r
-     [MEF7.2] refers to MEF 7.2\r
-     'Carrier Ethernet Management Information Model', April 2013\r
-     [MEF7.3] refers to MEF 7.3\r
-     'Carrier Ethernet Management Information Model',\r
-     Working Draft #1 2015\r
-     [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version 2)',\r
-     December 1999\r
-     [RFC 2863] refers to IETF RFC 2863 'The Interfaces Group MIB',\r
-     June 2000\r
-     [RFC 3419] refers to IETF RFC 3419\r
-     'Textual Conventions for Transport Addresses', December 2002\r
-     [Y.1731] refers to ITU-T Y.1731\r
-     'OAM functions and mechanisms for Ethernet based networks',\r
-     July 2011\r
-     [Q.840.1] refers to ITU-T Q.840.1\r
-     'Requirements and analysis for NMS-EMS management interface\r
-     of Ethernet over Transport and Metro Ethernet\r
-     Network(EoT/MEN)' March 2007";\r
+    "This module implements the UNI functionality specified in MEF\r
+    10.3, MEF 6.2, and MEF 7.2. Reference Overview: A number of base\r
+    documents have been used to create the MEF Interfaces YANG Module.\r
+    The following are the abbreviations for the baseline documents:\r
+    [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types', 2013-07-15\r
+    [RFC 6643] refers to IETF RFC 6643 'Translation of Structure of\r
+    Management Information Version 2 (SMIv2) MIB Modules to YANG Modules',\r
+    2011-11-25 [802.1AB] refers to 'Station and Media Access Control\r
+    Connectivity Discovery', IEEE 802.1AB-2009, September 2009 [802.1q]\r
+    refers to IEEE 802.1Q-2011 'IEEE Standard for Local and metropolitan\r
+    area networks --Media Access Control (MAC) Bridges and Virtual\r
+    Bridged Local Area Networks, August 2011 [802-2001] refers to\r
+    'IEEE Standard for Local and Metropolitan Area Networks: Overview\r
+    and Architecture', IEEE 802-2001, February 2002 [MEF10.3] refers\r
+    to MEF 10.3 'Ethernet Services Attributes Phase 3', October 2013\r
+    [MEF6.2] refers to MEF 6.2 'EVC Ethernet Services Defintions Phase\r
+    3', August 2014 [MEF40] refers to MEF 40 'UNI and EVC Definition\r
+    of Managed Objects', April 2013 [MEF45] refers to MEF 45 'Multi-CEN\r
+    L2CP', August 2014 [MEF7.2] refers to MEF 7.2 'Carrier Ethernet\r
+    Management Information Model', April 2013 [MEF7.3] refers to MEF\r
+    7.3 'Carrier Ethernet Management Information Model', Working Draft\r
+    #1 2015 [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version\r
+    2)', December 1999 [RFC 2863] refers to IETF RFC 2863 'The Interfaces\r
+    Group MIB', June 2000 [RFC 3419] refers to IETF RFC 3419 'Textual\r
+    Conventions for Transport Addresses', December 2002 [Y.1731] refers\r
+    to ITU-T Y.1731 'OAM functions and mechanisms for Ethernet based\r
+    networks', July 2011 [Q.840.1] refers to ITU-T Q.840.1 'Requirements\r
+    and analysis for NMS-EMS management interface of Ethernet over\r
+    Transport and Metro Ethernet Network(EoT/MEN)' March 2007";\r
   revision 2015-05-26 {\r
     description\r
-      "Formal Project Review Draft 1.";\r
+        "Formal Project Review Draft 1.";\r
     reference "EVC Ethernet Services Definitions YANG Modules " +\r
-            "(MEF XX), TBD";\r
+        "(MEF XX), TBD";\r
   }\r
   container mef-interfaces {\r
     description\r
-      "MEF Interfaces";\r
+        "MEF Interfaces";\r
     container unis {\r
       description\r
-        "User Network Interface(UNI).";\r
+            "User Network Interface(UNI).";\r
       list uni {\r
         must "not(./ingress-bw-profile-per-uni) or " +\r
                 "((./ingress-bw-profile-per-uni) and " +\r
                 "not(./ingress-envelopes))" {\r
           error-message "If there is a per UNI Ingress Bandwidth " +\r
-                "Profile, then there cannot be any other Ingress " +\r
-                "Bandwidth Profiles at that UNI.";\r
+                    "Profile, then there cannot be any other Ingress " +\r
+                    "Bandwidth Profiles at that UNI.";\r
           description\r
-            "If there is a per UNI Ingress Bandwidth Profile, " +\r
-            "then there cannot be any other Ingress Bandwidth " +\r
-            "Profiles at that UNI.";\r
+                    "If there is a per UNI Ingress Bandwidth Profile, " +\r
+                    "then there cannot be any other Ingress Bandwidth " +\r
+                    "Profiles at that UNI.";\r
         }\r
         must "not(./egress-bw-profile-per-uni) or " +\r
                 "((./egress-bw-profile-per-uni) and " +\r
                 "not(./egress-envelopes))" {\r
           error-message "If there is a per UNI Egress Bandwidth " +\r
-                "Profile, then there cannot be any other Egress " +\r
-                "Bandwidth Profiles at that UNI.";\r
+                    "Profile, then there cannot be any other Egress " +\r
+                    "Bandwidth Profiles at that UNI.";\r
           description\r
-            "If there is a per UNI Egress Bandwidth Profile, " +\r
-            "then there cannot be any other Egress Bandwidth " +\r
-            "Profiles at that UNI.";\r
+                    "If there is a per UNI Egress Bandwidth Profile, " +\r
+                    "then there cannot be any other Egress Bandwidth " +\r
+                    "Profiles at that UNI.";\r
         }\r
         must "(not(/mef-global:mef-global/mef-global:" +\r
                 "subscribers) and " +\r
@@ -111,82 +88,110 @@ module mef-interfaces {
                 "subscribers and " +\r
                 "./subscriber)" {\r
           error-message "If the Subscribers list has been " +\r
-                "populated, a UNI must be configured for " +\r
-                "a single Subscriber.";\r
+                    "populated, a UNI must be configured for " +\r
+                    "a single Subscriber.";\r
           description\r
-            "[MEF103] [R1] A UNI must be dedicated to a single " +\r
-            "Subscriber. This must statement is effectively " +\r
-            "a 'mandatory true' when the Global Subscribers " +\r
-            "list is being used.";\r
+                    "[MEF103] [R1] A UNI must be dedicated to a single " +\r
+                    "Subscriber. This must statement is effectively " +\r
+                    "a 'mandatory true' when the Global Subscribers " +\r
+                    "list is being used.";\r
         }\r
         must "(not(/mef-global:mef-global/mef-global:cens) and " +\r
                 "not(./cen-id)) or " +\r
                 "(/mef-global:mef-global/mef-global:cens and " +\r
                 "./cen-id)" {\r
           error-message "If the CENs list has been populated, " +\r
-                "a UNI must be configured for a single CEN.";\r
+                    "a UNI must be configured for a single CEN.";\r
           description\r
-            "[MEF103] [R57] A UNI must be dedicated to a " +\r
-            "single CEN. This must statement is effectively " +\r
-            "a 'mandatory true' when the Global CENs list " +\r
-            "is being used.";\r
+                    "[MEF103] [R57] A UNI must be dedicated to a " +\r
+                    "single CEN. This must statement is effectively " +\r
+                    "a 'mandatory true' when the Global CENs list " +\r
+                    "is being used.";\r
         }\r
         key "uni-id";\r
         description\r
-          "MEF UNI List.";\r
+                "MEF UNI List.";\r
         reference "[MEF6.2] Section 8.2.2.";\r
+        container ip-unis {\r
+          list ip-uni {\r
+            key "ip-uni-id";\r
+            leaf ip-uni-id {\r
+              type mef-types:identifier45;\r
+            }\r
+            leaf id {\r
+              type mef-types:identifier45;\r
+            }\r
+            leaf ip-address {\r
+              type inet:ip-prefix;\r
+            }\r
+            leaf vlan {\r
+              type ethertype:vlan-id;\r
+            }\r
+            container subnets {\r
+              list subnet {\r
+                key "subnet";\r
+                leaf subnet {\r
+                  type inet:ip-prefix;\r
+                }\r
+                leaf gateway {\r
+                  type inet:ip-address;\r
+                }\r
+              }\r
+            }\r
+          }\r
+        }\r
         container physical-layers {\r
           description\r
-            "The Physical Layer MUST operate in a full duplex " +\r
-            "mode. It is not configurable.";\r
+                    "The Physical Layer MUST operate in a full duplex " +\r
+                    "mode. It is not configurable.";\r
           reference "[MEF10.3] Section 9.2, [R61], [R62]";\r
           container links {\r
             presence "A UNI must have links.";\r
             description\r
-              "The Physical Layer for each physical link " +\r
-              "implementing the UNI MUST be one of the " +\r
-              "PHYs listed in IEEE Std 802.3–2012 but " +\r
-              "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
+                        "The Physical Layer for each physical link " +\r
+                        "implementing the UNI MUST be one of the " +\r
+                        "PHYs listed in IEEE Std 802.3–2012 but " +\r
+                        "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
             reference "[MEF10.3] Section 9.2 [R60]";\r
             list link {\r
               must "count(.) >= 1" {\r
                 error-message "A UNI must have at least one " +\r
-                        "physical link configured.";\r
+                                "physical link configured.";\r
                 description\r
-                  "A UNI must have at least one physical link " +\r
-                  "configured.";\r
+                                "A UNI must have at least one physical link " +\r
+                                "configured.";\r
               }\r
               key "device interface";\r
               description\r
-                "A list of all the physical ports associated " +\r
-                "with this Link Layer.";\r
+                            "A list of all the physical ports associated " +\r
+                            "with this Link Layer.";\r
               leaf device {\r
                 type leafref {\r
                   path "/mef-topology:mef-topology/mef-topology:" +\r
-                        "devices/mef-topology:device/" +\r
-                        "mef-topology:dev-id";\r
+                                    "devices/mef-topology:device/" +\r
+                                    "mef-topology:dev-id";\r
                 }\r
                 description\r
-                  "The Physical Layer for each physical link " +\r
-                  "implementing the UNI MUST be one of the " +\r
-                  "PHYs listed in IEEE Std 802.3–2012 but " +\r
-                  "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
+                                "The Physical Layer for each physical link " +\r
+                                "implementing the UNI MUST be one of the " +\r
+                                "PHYs listed in IEEE Std 802.3–2012 but " +\r
+                                "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
                 reference "[MEF10.3] Section 9.2 [R60]";\r
               }\r
               leaf interface {\r
                 type leafref {\r
                   path "/mef-topology:mef-topology/mef-topology:" +\r
-                        "devices/mef-topology:device" +\r
-                        "[mef-topology:dev-id = " +\r
-                        "current()/../device]" +\r
-                        "/mef-topology:interfaces/mef-topology:" +\r
-                        "interface/mef-topology:phy";\r
+                                    "devices/mef-topology:device" +\r
+                                    "[mef-topology:dev-id = " +\r
+                                    "current()/../device]" +\r
+                                    "/mef-topology:interfaces/mef-topology:" +\r
+                                    "interface/mef-topology:phy";\r
                 }\r
                 description\r
-                  "The Physical Layer for each physical link " +\r
-                  "implementing the UNI MUST be one of the " +\r
-                  "PHYs listed in IEEE Std 802.3–2012 but " +\r
-                  "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
+                                "The Physical Layer for each physical link " +\r
+                                "implementing the UNI MUST be one of the " +\r
+                                "PHYs listed in IEEE Std 802.3–2012 but " +\r
+                                "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
                 reference "[MEF10.3] Section 9.2 [R60]";\r
               }\r
               leaf ieee8023-phy {\r
@@ -194,21 +199,21 @@ module mef-interfaces {
                   base mef-types:ieee-8023-interface-type;\r
                 }\r
                 must "(. != 'mef-types:" +\r
-                        "ieee8023-1000BASE-PX-D') and " +\r
-                        "(. != 'mef-types:ieee8023-1000BASE-PX-U')" {\r
+                                "ieee8023-1000BASE-PX-D') and " +\r
+                                "(. != 'mef-types:ieee8023-1000BASE-PX-U')" {\r
                   error-message "The Physical Layer for each " +\r
-                        "physical link implementing the UNI " +\r
-                        "cannot be 1000BASE-PX-D and 1000BASE-PX-U.";\r
+                                    "physical link implementing the UNI " +\r
+                                    "cannot be 1000BASE-PX-D and 1000BASE-PX-U.";\r
                   description\r
-                    "The Physical Layer for each physical " +\r
-                    "link implementing the UNI cannot be " +\r
-                    "1000BASE-PX-D and 1000BASE-PX-U.";\r
+                                    "The Physical Layer for each physical " +\r
+                                    "link implementing the UNI cannot be " +\r
+                                    "1000BASE-PX-D and 1000BASE-PX-U.";\r
                 }\r
                 description\r
-                  "The Physical Layer for each physical link " +\r
-                  "implementing the UNI MUST be one of the " +\r
-                  "PHYs listed in IEEE Std 802.3–2012 but " +\r
-                  "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
+                                "The Physical Layer for each physical link " +\r
+                                "implementing the UNI MUST be one of the " +\r
+                                "PHYs listed in IEEE Std 802.3–2012 but " +\r
+                                "excluding 1000BASE-PX-D and 1000BASE-PX-U.";\r
                 reference "[MEF10.3] Section 9.2 [R60]";\r
               }\r
               leaf connection-speed {\r
@@ -216,35 +221,35 @@ module mef-interfaces {
                 units "bits-per-second";\r
                 default "1G";\r
                 description\r
-                  "Physical Layer Connection Speed (Max Data Rate).";\r
+                                "Physical Layer Connection Speed (Max Data Rate).";\r
                 reference "[MEF10.3] Section 9.2. [MEF6.2] " +\r
-                        "Section 8.2.2. [MEF20] [R80].";\r
+                                "Section 8.2.2. [MEF20] [R80].";\r
               }\r
               leaf phy-auto-neg {\r
                 type mef-types:auto-negotiation-type;\r
                 default "on";\r
                 description\r
-                  "Auto-Negotiation ON/OFF/Auto.";\r
+                                "Auto-Negotiation ON/OFF/Auto.";\r
                 reference "[MEF6.2] Section 8.2.2. [MEF20] [R80]. " +\r
-                        "[MEF7.3] Section 10.2.2.";\r
+                                "[MEF7.3] Section 10.2.2.";\r
               }\r
               leaf sync-mode-enabled {\r
                 type boolean;\r
                 must ".='false' or (.='true' and " +\r
-                        "../clock-accuracy)" {\r
+                                "../clock-accuracy)" {\r
                   error-message "The quality of the clock " +\r
-                        "reference must be set if Synchronous " +\r
-                        "Mode is enabled.";\r
+                                    "reference must be set if Synchronous " +\r
+                                    "Mode is enabled.";\r
                   description\r
-                    "The quality of the clock reference must " +\r
-                    "be set if Synchronous Mode is enabled.";\r
+                                    "The quality of the clock reference must " +\r
+                                    "be set if Synchronous Mode is enabled.";\r
                 }\r
                 default "false";\r
                 description\r
-                  "Enabled or Disabled for each physical link " +\r
-                  "implementing the UNI.";\r
+                                "Enabled or Disabled for each physical link " +\r
+                                "implementing the UNI.";\r
                 reference "[MEF10.3] Section 9.3. [MEF6.2] " +\r
-                        "Section 8.2.2. [MEF7.3] Section 10.2.2.";\r
+                                "Section 8.2.2. [MEF7.3] Section 10.2.2.";\r
               }\r
               leaf clock-accuracy {\r
                 type decimal64 {\r
@@ -252,12 +257,12 @@ module mef-interfaces {
                 }\r
                 units "ppm";\r
                 description\r
-                  "ESMC:Ethernet Equipment Slave Clock Accuracy " +\r
-                  "in PPM. IEEE 802.3 standard specifies " +\r
-                  "that Ethernet clock accuracy is to be less " +\r
-                  "than or equal to +- 4.6 PPM.";\r
+                                "ESMC:Ethernet Equipment Slave Clock Accuracy " +\r
+                                "in PPM. IEEE 802.3 standard specifies " +\r
+                                "that Ethernet clock accuracy is to be less " +\r
+                                "than or equal to +- 4.6 PPM.";\r
                 reference "[MEF10.3] Section 9.3, [R62]. " +\r
-                        "[MEF22.1], [IEEE802.3].";\r
+                                "[MEF22.1], [IEEE802.3].";\r
               }\r
             }\r
           }\r
@@ -267,158 +272,158 @@ module mef-interfaces {
             }\r
             must ". = count(../links/link)" {\r
               error-message "The UNI Number of Links value " +\r
-                    "must match to the number of interfaces " +\r
-                    "in the link list.";\r
+                            "must match to the number of interfaces " +\r
+                            "in the link list.";\r
               description\r
-                "The UNI Number of Links value must match " +\r
-                "to the number of interfaces in the link list.";\r
+                            "The UNI Number of Links value must match " +\r
+                            "to the number of interfaces in the link list.";\r
             }\r
             default "1";\r
             description\r
-              "The number of links configured in the links list.";\r
+                        "The number of links configured in the links list.";\r
             reference "[MEF10.3] [R63]. [MEF7.3] Section 10.2.2.";\r
           }\r
         }\r
         container ce-vlans {\r
           description\r
-            "Each Device (and by extension UNIs) MUST have list " +\r
-            "of the CE-VLAN ID including mappings to configured " +\r
-            "EVCs if assigned. This list of ce-vlans is a " +\r
-            "complete list of all VLANs associated with this " +\r
-            "UNI. At the Service Module level, there are two " +\r
-            "lists: This one and the list of CE-VLAN IDs " +\r
-            "associated with the EVC's UNI List as part of " +\r
-            "the MEF Service Definition. ";\r
+                    "Each Device (and by extension UNIs) MUST have list " +\r
+                    "of the CE-VLAN ID including mappings to configured " +\r
+                    "EVCs if assigned. This list of ce-vlans is a " +\r
+                    "complete list of all VLANs associated with this " +\r
+                    "UNI. At the Service Module level, there are two " +\r
+                    "lists: This one and the list of CE-VLAN IDs " +\r
+                    "associated with the EVC's UNI List as part of " +\r
+                    "the MEF Service Definition. ";\r
           reference "[MEF10.3] Section 9.10, [R77], [R78]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF7.3] Section 10.2.2.";\r
           list ce-vlan {\r
             key "vid";\r
             description\r
-              "A list of all EC-VLANs allowed ingres or egress " +\r
-              "on the UNI. This is the UNI-specific CE-VLAN ID " +\r
-              "listing as part of the Service Level " +\r
-              "CE-VLAN ID / EVC Map.";\r
+                        "A list of all EC-VLANs allowed ingres or egress " +\r
+                        "on the UNI. This is the UNI-specific CE-VLAN ID " +\r
+                        "listing as part of the Service Level " +\r
+                        "CE-VLAN ID / EVC Map.";\r
             reference "[MEF10.3] Section 9.10.1.";\r
             leaf vid {\r
               type mef-types:vlan-id-type;\r
               description\r
-                "The Customer Edge VLAN ID is equivalent " +\r
-                "to a Static VLAN allowed on that port " +\r
-                "(ie. Port is not Forbidden). The " +\r
-                "association with the EVC is part of " +\r
-                "the EVC configuration.";\r
+                            "The Customer Edge VLAN ID is equivalent " +\r
+                            "to a Static VLAN allowed on that port " +\r
+                            "(ie. Port is not Forbidden). The " +\r
+                            "association with the EVC is part of " +\r
+                            "the EVC configuration.";\r
               reference "[MEF10.3] Section 9.10.";\r
             }\r
           }\r
         }\r
         container ingress-envelopes {\r
           presence "Ingress Bandwidth Profile Envelopes " +\r
-                "configured.";\r
+                    "configured.";\r
           description\r
-            "UNI Bandwidth Profile Flow Envelopes.";\r
+                    "UNI Bandwidth Profile Flow Envelopes.";\r
           reference "[MEF10.3] Section 9.15, Section 12.1. " +\r
-                "[MEF6.2] Section 8.2.1: [R3]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF6.2] Section 8.2.1: [R3]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
           list envelope {\r
             key "env-id";\r
             description\r
-              "UNI Bandwidth Profile Flow Envelope List.";\r
+                        "UNI Bandwidth Profile Flow Envelope List.";\r
             reference "[MEF10.3] Section 9.15, Section 12.1. " +\r
-                    "[MEF6.2] Section 8.2.1, [R3], " +\r
-                    "Section 8.2.2, [R4]. [MEF7.3] " +\r
-                    "Section 10.2.2.";\r
+                        "[MEF6.2] Section 8.2.1, [R3], " +\r
+                        "Section 8.2.2, [R4]. [MEF7.3] " +\r
+                        "Section 10.2.2.";\r
             container bwp-flows {\r
               presence "Bandwidth Profile configured for " +\r
-                    "this envelope.";\r
+                            "this envelope.";\r
               description\r
-                "UNI Bandwidth Profile Flows per Envelope.";\r
+                            "UNI Bandwidth Profile Flows per Envelope.";\r
               reference "[MEF10.3] Section 12.1. " +\r
-                    "[MEF6.2] Section 10.1.";\r
+                            "[MEF6.2] Section 10.1.";\r
               list bwp-flow {\r
                 key "bw-profile";\r
                 ordered-by user;\r
                 description\r
-                  "UNI Bandwidth Profile Flow List per Envelope. " +\r
-                  "The order of entries in the list is user " +\r
-                  "controlled. The first element of the list " +\r
-                  "has the lowest priority and the last " +\r
-                  "element will have the highest priority.";\r
+                                "UNI Bandwidth Profile Flow List per Envelope. " +\r
+                                "The order of entries in the list is user " +\r
+                                "controlled. The first element of the list " +\r
+                                "has the lowest priority and the last " +\r
+                                "element will have the highest priority.";\r
                 reference "[MEF10.3] Section 12.1. " +\r
-                        "[MEF6.2] Section 10.1. " +\r
-                        "[MEF6.2] Section 8.2.1, [R3]. ";\r
+                                "[MEF6.2] Section 10.1. " +\r
+                                "[MEF6.2] Section 8.2.1, [R3]. ";\r
                 leaf bw-profile {\r
                   type leafref {\r
                     path "/mef-global:mef-global/mef-global:" +\r
-                            "profiles/mef-global:" +\r
-                            "ingress-bwp-flows/mef-global:" +\r
-                            "bwp-flow/mef-global:bw-profile";\r
+                                        "profiles/mef-global:" +\r
+                                        "ingress-bwp-flows/mef-global:" +\r
+                                        "bwp-flow/mef-global:bw-profile";\r
                   }\r
                   must "(../../../../../token-share-enabled = " +\r
-                        "'true') or " +\r
-                        "((../../../../../token-share-enabled = " +\r
-                        "'false') and " +\r
-                        "(count(../../bwp-flow) = 1))" {\r
+                                    "'true') or " +\r
+                                    "((../../../../../token-share-enabled = " +\r
+                                    "'false') and " +\r
+                                    "(count(../../bwp-flow) = 1))" {\r
                     error-message "A UNI with Token Share " +\r
-                            "Disabled MUST have exactly one " +\r
-                            "Bandwidth Profile Flow per envelope.";\r
+                                        "Disabled MUST have exactly one " +\r
+                                        "Bandwidth Profile Flow per envelope.";\r
                     description\r
-                      "A UNI with Token Share Disabled MUST " +\r
-                      "have exactly one Bandwidth Profile Flow " +\r
-                      "per envelope.";\r
+                                        "A UNI with Token Share Disabled MUST " +\r
+                                        "have exactly one Bandwidth Profile Flow " +\r
+                                        "per envelope.";\r
                   }\r
                   must "(../../../coupling-enabled = 'false') or " +\r
-                        "(/mef-global:mef-global/mef-global:" +\r
-                        "profiles/mef-global:" +\r
-                        "ingress-bwp-flows/mef-global:bwp-flow" +\r
-                        "[mef-global:bw-profile = current()]/" +\r
-                        "mef-global:coupling-enabled = 'false')" {\r
+                                    "(/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:" +\r
+                                    "ingress-bwp-flows/mef-global:bwp-flow" +\r
+                                    "[mef-global:bw-profile = current()]/" +\r
+                                    "mef-global:coupling-enabled = 'false')" {\r
                     error-message "If an Ingress Envelope's " +\r
-                            "Coupling Flag is Enabled, then " +\r
-                            "the Coupling Flags must be disabled " +\r
-                            "for all Bandwidth Profile Flows " +\r
-                            "mapped to the Envelope.";\r
+                                        "Coupling Flag is Enabled, then " +\r
+                                        "the Coupling Flags must be disabled " +\r
+                                        "for all Bandwidth Profile Flows " +\r
+                                        "mapped to the Envelope.";\r
                     description\r
-                      "If an Ingress Envelope's Coupling Flag is " +\r
-                      "Enabled, then the Coupling Flags must " +\r
-                      "be disabled for all Bandwidth Profile " +\r
-                      "Flows mapped to the Envelope.";\r
+                                        "If an Ingress Envelope's Coupling Flag is " +\r
+                                        "Enabled, then the Coupling Flags must " +\r
+                                        "be disabled for all Bandwidth Profile " +\r
+                                        "Flows mapped to the Envelope.";\r
                   }\r
                   description\r
-                    "If no Ingress Bandwidth Profile per UNI " +\r
-                    "has been defined (ie. 'No'), then the " +\r
-                    "behavior has been defined at the Service " +\r
-                    "Level of the configuration.";\r
+                                    "If no Ingress Bandwidth Profile per UNI " +\r
+                                    "has been defined (ie. 'No'), then the " +\r
+                                    "behavior has been defined at the Service " +\r
+                                    "Level of the configuration.";\r
                   reference "[MEF10.3] Section 9.14, " +\r
-                        "Section 12.1, [R84], [R134]. " +\r
-                        "[MEF6.2] Section 8.2.1,[R3],[R136]. " +\r
-                        "Section 8.2.2, 10.1, [R6]. [MEF7.3] " +\r
-                        "Section 10.2.2.";\r
+                                    "Section 12.1, [R84], [R134]. " +\r
+                                    "[MEF6.2] Section 8.2.1,[R3],[R136]. " +\r
+                                    "Section 8.2.2, 10.1, [R6]. [MEF7.3] " +\r
+                                    "Section 10.2.2.";\r
                 }\r
               }\r
             }\r
             leaf env-id {\r
               type mef-types:identifier45;\r
               description\r
-                "This attribute identifies the Envelope of " +\r
-                "Bandwidth Profile Parameters.";\r
+                            "This attribute identifies the Envelope of " +\r
+                            "Bandwidth Profile Parameters.";\r
               reference "[MEF10.3] Section 12.1.";\r
             }\r
             leaf coupling-enabled {\r
               type boolean;\r
               must "not(../bwp-flows) or " +\r
-                    "(../bwp-flows/bwp-flow[2]) or " +\r
-                    "(. = 'false')" {\r
+                            "(../bwp-flows/bwp-flow[2]) or " +\r
+                            "(. = 'false')" {\r
                 error-message "When only one Bandwidth Profile " +\r
-                        "Flow is mapped to an envelope, Envelope " +\r
-                        "Coupling must be Disabled.";\r
+                                "Flow is mapped to an envelope, Envelope " +\r
+                                "Coupling must be Disabled.";\r
                 description\r
-                  "When only one Bandwidth Profile Flow is " +\r
-                  "mapped to an envelope, Envelope " +\r
-                  "Coupling must be Disabled.";\r
+                                "When only one Bandwidth Profile Flow is " +\r
+                                "mapped to an envelope, Envelope " +\r
+                                "Coupling must be Disabled.";\r
               }\r
               default "false";\r
               description\r
-                "The Envelope Coupling Flag (CF) attribute.";\r
+                            "The Envelope Coupling Flag (CF) attribute.";\r
               reference "[MEF10.3] Section 12.1.";\r
             }\r
           }\r
@@ -426,120 +431,120 @@ module mef-interfaces {
         container egress-envelopes {\r
           presence "Egress Bandwidth Profile Envelopes configured.";\r
           description\r
-            "UNI Bandwidth Profile Flow Envelopes.";\r
+                    "UNI Bandwidth Profile Flow Envelopes.";\r
           reference "[MEF10.3] Section 9.15, Section 12.1. " +\r
-                "[MEF6.2] Section 8.2.1: [R3]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF6.2] Section 8.2.1: [R3]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
           list envelope {\r
             key "env-id";\r
             description\r
-              "UNI Bandwidth Profile Flow Envelope List.";\r
+                        "UNI Bandwidth Profile Flow Envelope List.";\r
             reference "[MEF10.3] Section 9.15, Section 12.1. " +\r
-                    "[MEF6.2] Section 8.2.1, [R3], " +\r
-                    "Section 8.2.2, [R4]. [MEF7.3] " +\r
-                    "Section 10.2.2.";\r
+                        "[MEF6.2] Section 8.2.1, [R3], " +\r
+                        "Section 8.2.2, [R4]. [MEF7.3] " +\r
+                        "Section 10.2.2.";\r
             container bwp-flows {\r
               presence "Bandwidth Profile configured for " +\r
-                    "this envelope.";\r
+                            "this envelope.";\r
               description\r
-                "UNI Bandwidth Profile Flows per Envelope.";\r
+                            "UNI Bandwidth Profile Flows per Envelope.";\r
               reference "[MEF10.3] Section 12.1. [MEF6.2] " +\r
-                    "Section 10.1.";\r
+                            "Section 10.1.";\r
               list bwp-flow {\r
                 key "bw-profile";\r
                 ordered-by user;\r
                 description\r
-                  "UNI Bandwidth Profile Flow List per Envelope. " +\r
-                  "The order of entries in the list is user " +\r
-                  "controlled. The first element of the list " +\r
-                  "has the lowest priority and the last element " +\r
-                  "will have the highest priority.";\r
+                                "UNI Bandwidth Profile Flow List per Envelope. " +\r
+                                "The order of entries in the list is user " +\r
+                                "controlled. The first element of the list " +\r
+                                "has the lowest priority and the last element " +\r
+                                "will have the highest priority.";\r
                 reference "[MEF10.3] Section 12.1. " +\r
-                        "[MEF6.2] Section 10.1. " +\r
-                        "[MEF6.2] Section 8.2.1, [R3]. ";\r
+                                "[MEF6.2] Section 10.1. " +\r
+                                "[MEF6.2] Section 8.2.1, [R3]. ";\r
                 leaf bw-profile {\r
                   type leafref {\r
                     path "/mef-global:mef-global/mef-global:" +\r
-                            "profiles/mef-global:egress-bwp-flows" +\r
-                            "/mef-global:bwp-flow/" +\r
-                            "mef-global:bw-profile";\r
+                                        "profiles/mef-global:egress-bwp-flows" +\r
+                                        "/mef-global:bwp-flow/" +\r
+                                        "mef-global:bw-profile";\r
                   }\r
                   must "(../../../../../token-share-enabled = " +\r
-                        "'true') or " +\r
-                        "((../../../../../token-share-enabled = " +\r
-                        "'false') and " +\r
-                        "(count(../../bwp-flow) = 1))" {\r
+                                    "'true') or " +\r
+                                    "((../../../../../token-share-enabled = " +\r
+                                    "'false') and " +\r
+                                    "(count(../../bwp-flow) = 1))" {\r
                     error-message "A UNI with Token Share " +\r
-                            "Disabled must have exactly one " +\r
-                            "Bandwidth Profile Flow per envelope.";\r
+                                        "Disabled must have exactly one " +\r
+                                        "Bandwidth Profile Flow per envelope.";\r
                     description\r
-                      "A UNI with Token Share Disabled must have " +\r
-                      "exactly one Bandwidth Profile Flow per " +\r
-                      "envelope.";\r
+                                        "A UNI with Token Share Disabled must have " +\r
+                                        "exactly one Bandwidth Profile Flow per " +\r
+                                        "envelope.";\r
                   }\r
                   must "(../../../coupling-enabled = 'false') or " +\r
-                        "(/mef-global:mef-global/mef-global:" +\r
-                        "profiles/mef-global:" +\r
-                        "egress-bwp-flows/mef-global:bwp-flow" +\r
-                        "[mef-global:bw-profile = current()]/" +\r
-                        "mef-global:coupling-enabled = 'false')" {\r
+                                    "(/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:" +\r
+                                    "egress-bwp-flows/mef-global:bwp-flow" +\r
+                                    "[mef-global:bw-profile = current()]/" +\r
+                                    "mef-global:coupling-enabled = 'false')" {\r
                     error-message "If an Egress Envelope's " +\r
-                            "Coupling Flag is Enabled, then the " +\r
-                            "Coupling Flags must be disabled " +\r
-                            "for all Bandwidth Profile Flows " +\r
-                            "mapped to the Envelope.";\r
+                                        "Coupling Flag is Enabled, then the " +\r
+                                        "Coupling Flags must be disabled " +\r
+                                        "for all Bandwidth Profile Flows " +\r
+                                        "mapped to the Envelope.";\r
                     description\r
-                      "If an Egress Envelope's Coupling Flag " +\r
-                      "is Enabled, then the Coupling Flags must " +\r
-                      "be disabled for all Bandwidth Profile " +\r
-                      "Flows mapped to the Envelope.";\r
+                                        "If an Egress Envelope's Coupling Flag " +\r
+                                        "is Enabled, then the Coupling Flags must " +\r
+                                        "be disabled for all Bandwidth Profile " +\r
+                                        "Flows mapped to the Envelope.";\r
                   }\r
                   description\r
-                    "UNI Bandwidth Profile Flow per Envelope.";\r
+                                    "UNI Bandwidth Profile Flow per Envelope.";\r
                   reference "[MEF10.3] Section 12.1. " +\r
-                        "[MEF6.2] Section 10.1. " +\r
-                        "[MEF6.2] Section 8.2.1, [R3], [R136]. ";\r
+                                    "[MEF6.2] Section 10.1. " +\r
+                                    "[MEF6.2] Section 8.2.1, [R3], [R136]. ";\r
                 }\r
               }\r
             }\r
             leaf env-id {\r
               type mef-types:identifier45;\r
               description\r
-                "This attribute identifies the Envelope of " +\r
-                "Bandwidth Profile Parameters.";\r
+                            "This attribute identifies the Envelope of " +\r
+                            "Bandwidth Profile Parameters.";\r
               reference "[MEF10.3] Section 12.1.";\r
             }\r
             leaf coupling-enabled {\r
               type boolean;\r
               must "not(../bwp-flows) or " +\r
-                    "(../bwp-flows/bwp-flow[2]) or " +\r
-                    "(. = 'false')" {\r
+                            "(../bwp-flows/bwp-flow[2]) or " +\r
+                            "(. = 'false')" {\r
                 error-message "When only one Bandwidth Profile " +\r
-                        "Flow is mapped to an envelope, " +\r
-                        "Envelope Coupling must be Disabled.";\r
+                                "Flow is mapped to an envelope, " +\r
+                                "Envelope Coupling must be Disabled.";\r
                 description\r
-                  "When only one Bandwidth Profile Flow is " +\r
-                  "mapped to an envelope, Envelope Coupling " +\r
-                  "must be Disabled.";\r
+                                "When only one Bandwidth Profile Flow is " +\r
+                                "mapped to an envelope, Envelope Coupling " +\r
+                                "must be Disabled.";\r
               }\r
               default "false";\r
               description\r
-                "The Envelope Coupling Flag (CF) attribute.";\r
+                            "The Envelope Coupling Flag (CF) attribute.";\r
               reference "[MEF10.3] Section 12.1.";\r
             }\r
           }\r
         }\r
         container status {\r
           description\r
-            "This group is related to the MEF 7.3 External " +\r
-            "Network Interface";\r
+                    "This group is related to the MEF 7.3 External " +\r
+                    "Network Interface";\r
           leaf oper-state-enabled {\r
             type boolean;\r
             default "false";\r
             config false;\r
             description\r
-              "Operational Status of the Link as " +\r
-              "Enabled/Disabled.";\r
+                        "Operational Status of the Link as " +\r
+                        "Enabled/Disabled.";\r
             reference "[MEF15]. [MEF7.3] Section 10.1.1.";\r
           }\r
           leaf available-status {\r
@@ -547,7 +552,7 @@ module mef-interfaces {
             default "not-installed";\r
             config false;\r
             description\r
-              "Availability Status of the Link.";\r
+                        "Availability Status of the Link.";\r
             reference "[MEF15]. [MEF7.3] Section 10.1.1.";\r
           }\r
           leaf physical-layer {\r
@@ -555,7 +560,7 @@ module mef-interfaces {
             default "1G";\r
             config false;\r
             description\r
-              "Physical Layer Connection Speed.";\r
+                        "Physical Layer Connection Speed.";\r
             reference "[MEF15]. [MEF7.3] Section 10.1.1.";\r
           }\r
           leaf number-of-links {\r
@@ -563,8 +568,8 @@ module mef-interfaces {
             default "0";\r
             config false;\r
             description\r
-              "A count of the number of physical links in this " +\r
-              "physical layer.";\r
+                        "A count of the number of physical links in this " +\r
+                        "physical layer.";\r
             reference "[MEF15]. [MEF7.3] Section 10.1.1.";\r
           }\r
           leaf svc-frame-format {\r
@@ -572,172 +577,172 @@ module mef-interfaces {
             default "ctag";\r
             config false;\r
             description\r
-              "The format must be that of a MAC Frame specified " +\r
-              "in IEEE Std 802.3-2012 Clause 3.";\r
+                        "The format must be that of a MAC Frame specified " +\r
+                        "in IEEE Std 802.3-2012 Clause 3.";\r
             reference "[MEF10.3] Section 9.6. [MEF15]. " +\r
-                    "[MEF7.2]. [MEF7.3] Section 10.1.1.";\r
+                        "[MEF7.2]. [MEF7.3] Section 10.1.1.";\r
           }\r
         }\r
         leaf cen-id {\r
           when "/mef-global:mef-global/mef-global:cens" {\r
             description\r
-              "Only configure when the Global CENs list " +\r
-              "has been populated.";\r
+                        "Only configure when the Global CENs list " +\r
+                        "has been populated.";\r
           }\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:cens/" +\r
-                    "mef-global:cen/mef-global:cen-id";\r
+                        "mef-global:cen/mef-global:cen-id";\r
           }\r
           description\r
-            "A CEN is defined as a network from a Service " +\r
-            "Provider (SP). The CEN ID must be unique for " +\r
-            "a specific Service Provider.";\r
+                    "A CEN is defined as a network from a Service " +\r
+                    "Provider (SP). The CEN ID must be unique for " +\r
+                    "a specific Service Provider.";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
         leaf uni-id {\r
           type mef-types:identifier45;\r
           description\r
-            " The UNI IDs must be be unique within a specific CEN.";\r
+                    " The UNI IDs must be be unique within a specific CEN.";\r
           reference "[MEF10.3] Section 9.1, [R1], [R57], [R58], " +\r
-                "[R59]. [MEF7.3] Section 10.2.2.";\r
+                    "[R59]. [MEF7.3] Section 10.2.2.";\r
         }\r
         leaf uni-type {\r
           type mef-types:uni-mode-type;\r
           default "uni";\r
           description\r
-            " The UNI Type must be one of {UNI, VUNI}.";\r
+                    " The UNI Type must be one of {UNI, VUNI}.";\r
           reference "[MEF10.3] Section 9.1, [R1], [R57], [R58], " +\r
-                "[R59]. [MEF7.3] Section 10.2.2.";\r
+                    "[R59]. [MEF7.3] Section 10.2.2.";\r
         }\r
         leaf subscriber {\r
           when "/mef-global:mef-global/mef-global:subscribers" {\r
             description\r
-              "UNI Subscriber Attribute is only configurable " +\r
-              "when multiple Global Subscribers have been " +\r
-              "configured.";\r
+                        "UNI Subscriber Attribute is only configurable " +\r
+                        "when multiple Global Subscribers have been " +\r
+                        "configured.";\r
           }\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:subscribers/" +\r
-                    "mef-global:subscriber/mef-global:sub-id";\r
+                        "mef-global:subscriber/mef-global:sub-id";\r
           }\r
           description\r
-            "A UNI MUST be dedicated to a single Subscriber. " +\r
-            "This value can only be configured if the " +\r
-            "'/mef-global/subscribers/subscriber' list " +\r
-            "has been populated.";\r
+                    "A UNI MUST be dedicated to a single Subscriber. " +\r
+                    "This value can only be configured if the " +\r
+                    "'/mef-global/subscribers/subscriber' list " +\r
+                    "has been populated.";\r
           reference "[MEF10.3] Section 7.";\r
         }\r
         leaf admin-state-enabled {\r
           type boolean;\r
           default "true";\r
           description\r
-            "Locked/Unlocked is inconsistent with Oper Status " +\r
-            "and will be confusing.";\r
+                    "Locked/Unlocked is inconsistent with Oper Status " +\r
+                    "and will be confusing.";\r
           reference "MEF 15. MEF 7.3 Section 10.1.1.";\r
         }\r
         leaf mac-address {\r
           type yang:mac-address;\r
           description\r
-            "MAC Address.";\r
+                    "MAC Address.";\r
           reference "[MEF15]. [MEF7.3] Section 10.1.1.";\r
         }\r
         leaf uni-resiliency {\r
           type mef-types:uni-resiliency-type;\r
           must "(. != 'none') or ((. = 'none') and " +\r
-                "(../physical-layers/number-of-links = 1))" {\r
+                    "(../physical-layers/number-of-links = 1))" {\r
             error-message "If uni-resiliency is 'none', " +\r
-                    "number-of-links must be 1.";\r
+                        "number-of-links must be 1.";\r
             description\r
-              "If uni-resiliency is 'none', number-of-links " +\r
-              "must be 1.";\r
+                        "If uni-resiliency is 'none', number-of-links " +\r
+                        "must be 1.";\r
           }\r
           must "(. != 'dual-link-aggregation') or " +\r
-                "((. = 'dual-link-aggregation') and " +\r
-                "(../physical-layers/number-of-links = 2))" {\r
+                    "((. = 'dual-link-aggregation') and " +\r
+                    "(../physical-layers/number-of-links = 2))" {\r
             error-message "If uni-resiliency is " +\r
-                    "'dual-link-aggregation', " +\r
-                    "number-of-links must be 2.";\r
+                        "'dual-link-aggregation', " +\r
+                        "number-of-links must be 2.";\r
             description\r
-              "If uni-resiliency is 'dual-link-aggregation', " +\r
-              "number-of-links must be 2.";\r
+                        "If uni-resiliency is 'dual-link-aggregation', " +\r
+                        "number-of-links must be 2.";\r
           }\r
           must "(. != 'other') or " +\r
-                "((. = 'other') and " +\r
-                "(../physical-layers/number-of-links > 2))" {\r
+                    "((. = 'other') and " +\r
+                    "(../physical-layers/number-of-links > 2))" {\r
             error-message "If uni-resiliency is 'other', " +\r
-                    "number-of-links must be 3 or greater.";\r
+                        "number-of-links must be 3 or greater.";\r
             description\r
-              "If uni-resiliency is 'other', number-of-links " +\r
-              "must be 3 or greater.";\r
+                        "If uni-resiliency is 'other', number-of-links " +\r
+                        "must be 3 or greater.";\r
           }\r
           default "none";\r
           description\r
-            "UNI Resiliency.";\r
+                    "UNI Resiliency.";\r
           reference "[MEF10.3] Section 9.5 [R64], [R65], [R66], " +\r
-                "[R67]. [MEF6.2] Section 8.2.2.";\r
+                    "[R67]. [MEF6.2] Section 8.2.2.";\r
         }\r
         leaf max-svc-frame-size {\r
           type mef-types:max-svc-frame-size-type;\r
           default "1600";\r
           description\r
-            "This attribute describes the maximum service frame " +\r
-            "size for the UNI.";\r
+                    "This attribute describes the maximum service frame " +\r
+                    "size for the UNI.";\r
           reference "[MEF10.3] Section 9.7, [R71], MEF 6.2 " +\r
-                "Section 8.2.2 and MEF 22.1: [D2]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "Section 8.2.2 and MEF 22.1: [D2]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf svc-mux-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "Service Multiplexing Enable - Enable if to support " +\r
-            "multiple EVCs per UNI.";\r
+                    "Service Multiplexing Enable - Enable if to support " +\r
+                    "multiple EVCs per UNI.";\r
           reference "[MEF10.3] Section 9.8. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf bundling-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "When a UNI has Bundling Enabled, it MUST be able to " +\r
-            "support more than one CE-VLAN ID mapping to a " +\r
-            "particular EVC at the UNI.  When more than one " +\r
-            "CE-VLAN-ID is mapped to an EVC at a UNI, the " +\r
-            "EVC have CE-VLAN ID Preservation enabled";\r
+                    "When a UNI has Bundling Enabled, it MUST be able to " +\r
+                    "support more than one CE-VLAN ID mapping to a " +\r
+                    "particular EVC at the UNI.  When more than one " +\r
+                    "CE-VLAN-ID is mapped to an EVC at a UNI, the " +\r
+                    "EVC have CE-VLAN ID Preservation enabled";\r
           reference "[MEF10.3] Section 9.12, [R25], [R77], " +\r
-                "[R78], [R80]. [MEF7.3] Section 10.2.2.";\r
+                    "[R78], [R80]. [MEF7.3] Section 10.2.2.";\r
         }\r
         leaf all-to-one-bundling-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "When all-to-one-bundling-enabled = true, all " +\r
-            "CE-VLAN IDs MUST map to a single EVC at the " +\r
-            "UNI. This also means that the UNI cannot " +\r
-            "have svc-mux-enabled = true. When " +\r
-            "all-to-one-bundling-enabled = true, " +\r
-            "all other UNIs in the EVC associating this UNI " +\r
-            "must have all-to-one-bundling-enabled = true. " +\r
-            "If this values is true, the value of " +\r
-            "ce-vlan-id-for-untagged-and-priority is not " +\r
-            "applicable.";\r
+                    "When all-to-one-bundling-enabled = true, all " +\r
+                    "CE-VLAN IDs MUST map to a single EVC at the " +\r
+                    "UNI. This also means that the UNI cannot " +\r
+                    "have svc-mux-enabled = true. When " +\r
+                    "all-to-one-bundling-enabled = true, " +\r
+                    "all other UNIs in the EVC associating this UNI " +\r
+                    "must have all-to-one-bundling-enabled = true. " +\r
+                    "If this values is true, the value of " +\r
+                    "ce-vlan-id-for-untagged-and-priority is not " +\r
+                    "applicable.";\r
           reference "[MEF10.3] Section 9.13, Table 12 " +\r
-                "(5 valid combinations), [R82], [R83]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "(5 valid combinations), [R82], [R83]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf ce-vlan-id-for-untagged-and-priority {\r
           type mef-types:vlan-id-type;\r
           default "1";\r
           description\r
-            "The ce-vlan-id-for-untagged-and-priority is " +\r
-            "equivalent to the Layer 2 PVID (Port VLAN ID) " +\r
-            "with the Q-BRIDGE-MIB option for frame admitance set " +\r
-            "to admitAll. With AdmitAll set, all Untagged and " +\r
-            "Priority Tagged Service Frames are treated with " +\r
-            "the CE-VLAN-ID tag on ingress. It is not applicable " +\r
-            "if All in One Bundling is enabled.";\r
+                    "The ce-vlan-id-for-untagged-and-priority is " +\r
+                    "equivalent to the Layer 2 PVID (Port VLAN ID) " +\r
+                    "with the Q-BRIDGE-MIB option for frame admitance set " +\r
+                    "to admitAll. With AdmitAll set, all Untagged and " +\r
+                    "Priority Tagged Service Frames are treated with " +\r
+                    "the CE-VLAN-ID tag on ingress. It is not applicable " +\r
+                    "if All in One Bundling is enabled.";\r
           reference "[MEF10.3] Section 9.9, [R73], [R74], " +\r
-                "[R75]. [MEF7.3] Section 10.2.2.";\r
+                    "[R75]. [MEF7.3] Section 10.2.2.";\r
         }\r
         leaf max-evc-count {\r
           type uint32 {\r
@@ -745,135 +750,135 @@ module mef-interfaces {
           }\r
           default "1";\r
           description\r
-            "The Maximum Number of EVCs that can be supported " +\r
-            "by this UNI (Default 1).";\r
+                    "The Maximum Number of EVCs that can be supported " +\r
+                    "by this UNI (Default 1).";\r
           reference "[MEF10.3] Section 9.11, [R79]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf token-share-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "Token Share Enabled/Disabled is used to indicate " +\r
-            "whether a given UNI is capable of sharing tokens " +\r
-            "across Bandwidth Profile Flows in an envelope.";\r
+                    "Token Share Enabled/Disabled is used to indicate " +\r
+                    "whether a given UNI is capable of sharing tokens " +\r
+                    "across Bandwidth Profile Flows in an envelope.";\r
           reference "[MEF6.2] Section 8.2.1, [R2], [D1], [R3]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf ingress-bw-profile-per-uni {\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:ingress-bwp-flows/mef-global:" +\r
-                    "bwp-flow/mef-global:bw-profile";\r
+                        "mef-global:ingress-bwp-flows/mef-global:" +\r
+                        "bwp-flow/mef-global:bw-profile";\r
           }\r
           description\r
-            "Ingress Bandwidth Profile for this UNI.";\r
+                    "Ingress Bandwidth Profile for this UNI.";\r
           reference "[MEF10.3] Section 9.15, Section 12.1. " +\r
-                "[MEF6.2] Section 8.2.1: [R3]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF6.2] Section 8.2.1: [R3]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf egress-bw-profile-per-uni {\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:egress-bwp-flows/mef-global:" +\r
-                    "bwp-flow/mef-global:bw-profile";\r
+                        "mef-global:egress-bwp-flows/mef-global:" +\r
+                        "bwp-flow/mef-global:bw-profile";\r
           }\r
           description\r
-            "Egress Bandwidth Profile Flow for this UNI.";\r
+                    "Egress Bandwidth Profile Flow for this UNI.";\r
           reference "[MEF10.3] Section 9.15, Section 12.1. " +\r
-                "[MEF6.2] Section 8.2.1: [R3]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF6.2] Section 8.2.1: [R3]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf link-oam-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "Link OAM Enabled/Disabled.";\r
+                    "Link OAM Enabled/Disabled.";\r
           reference "[MEF10.3] Section 9.16, [R86]. " +\r
-                "[MEF6.2] Section 8.2.2, [D3]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF6.2] Section 8.2.2, [D3]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf uni-meg-enabled {\r
           type boolean;\r
           default "false";\r
           description\r
-            "Enables / Disables the Maintenance Entity Group (MEG).";\r
+                    "Enables / Disables the Maintenance Entity Group (MEG).";\r
           reference "[MEF10.3] Section 9.17, [R87]. " +\r
-                "[MEF30.1] Section 7.9. [MEF6.2] Section 8.2.2, " +\r
-                "[D4]. [MEF7.3] Section 10.2.2.";\r
+                    "[MEF30.1] Section 7.9. [MEF6.2] Section 8.2.2, " +\r
+                    "[D4]. [MEF7.3] Section 10.2.2.";\r
         }\r
         leaf elmi-enabled {\r
           type boolean;\r
           must "(. = 'false') or " +\r
-                "(. = 'true' and " +\r
-                "(../elmi-profile))" {\r
+                    "(. = 'true' and " +\r
+                    "(../elmi-profile))" {\r
             error-message "ELMI Profile must be set if " +\r
-                    "ELMI is Enabled.";\r
+                        "ELMI is Enabled.";\r
             description\r
-              "Ethernet Local Management Interface(ELMI) " +\r
-              "Profile ID must be set if ELMI is Enabled.";\r
+                        "Ethernet Local Management Interface(ELMI) " +\r
+                        "Profile ID must be set if ELMI is Enabled.";\r
           }\r
           default "false";\r
           description\r
-            "Ethernet Local Management Interface(ELMI) " +\r
-            "Enabled / Disabled.";\r
+                    "Ethernet Local Management Interface(ELMI) " +\r
+                    "Enabled / Disabled.";\r
           reference "[MEF10.3] Section 9.18, [R88]. " +\r
-                "[MEF16]. [MEF6.2] Section 8.2.2, [D5]. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF16]. [MEF6.2] Section 8.2.2, [D5]. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf elmi-profile {\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:elmi/mef-global:elmi-profile/" +\r
-                    "mef-global:id";\r
+                        "mef-global:elmi/mef-global:elmi-profile/" +\r
+                        "mef-global:id";\r
           }\r
           description\r
-            "The ELMI Profile is only applicable when ELMI " +\r
-            "is enabled. The E-LMI protocol is based on " +\r
-            "ITU-T Q.933, X.36 and other relevant " +\r
-            "recommendations as well as Frame Relay " +\r
-            "Local Management Interface (FR-LMI) " +\r
-            "Implementation Agreement document defined " +\r
-            "by the Frame Relay Forum and related " +\r
-            "ITU-T recommendations.";\r
+                    "The ELMI Profile is only applicable when ELMI " +\r
+                    "is enabled. The E-LMI protocol is based on " +\r
+                    "ITU-T Q.933, X.36 and other relevant " +\r
+                    "recommendations as well as Frame Relay " +\r
+                    "Local Management Interface (FR-LMI) " +\r
+                    "Implementation Agreement document defined " +\r
+                    "by the Frame Relay Forum and related " +\r
+                    "ITU-T recommendations.";\r
           reference "[MEF10.3] Section 9.18. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf l2cp-address-set {\r
           type mef-types:l2cp-address-set-type;\r
           default "aware-cta";\r
           description\r
-            "The L2CP Address Set Service Attribute specifies " +\r
-            "the subset of the Bridge Reserved Addresses " +\r
-            "that are filtered (i.e. L2CP Frames with " +\r
-            "this destination address are Peered or " +\r
-            "Discarded but not Passed) at a L2CP Decision Point.";\r
+                    "The L2CP Address Set Service Attribute specifies " +\r
+                    "the subset of the Bridge Reserved Addresses " +\r
+                    "that are filtered (i.e. L2CP Frames with " +\r
+                    "this destination address are Peered or " +\r
+                    "Discarded but not Passed) at a L2CP Decision Point.";\r
           reference "[MEF10.3] Section 9.19. " +\r
-                "[MEF45] Section 8.1, [R2] through [R9]. " +\r
-                "[MEF6.2] Section 8.2.2, [R1]. " +\r
-                "[MEF45] Section 8.1.";\r
+                    "[MEF45] Section 8.1, [R2] through [R9]. " +\r
+                    "[MEF6.2] Section 8.2.2, [R1]. " +\r
+                    "[MEF45] Section 8.1.";\r
         }\r
         leaf l2cp-peering-profile {\r
           type leafref {\r
             path "/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:l2cp-peering/mef-global:" +\r
-                    "l2cp-profile/mef-global:id";\r
+                        "mef-global:l2cp-peering/mef-global:" +\r
+                        "l2cp-profile/mef-global:id";\r
           }\r
           description\r
-            "L2CP Peering Profile for this UNI. This profile " +\r
-            "may contain groups of L2CP Destination " +\r
-            "MAC Addresses and protocols to be peered at " +\r
-            "the UNI (as opposed to being passed or discarded).";\r
+                    "L2CP Peering Profile for this UNI. This profile " +\r
+                    "may contain groups of L2CP Destination " +\r
+                    "MAC Addresses and protocols to be peered at " +\r
+                    "the UNI (as opposed to being passed or discarded).";\r
           reference "[MEF10.3] Section 9.19. " +\r
-                "[MEF45] Section 8.2. " +\r
-                "[MEF7.3] Section 10.2.2.";\r
+                    "[MEF45] Section 8.2. " +\r
+                    "[MEF7.3] Section 10.2.2.";\r
         }\r
         leaf tenant-id {\r
-            type leafref {\r
-                path "/mef-global:mef-global/mef-global:tenants-instances/mef-global:tenant-list/mef-global:name";\r
-            }\r
-        }        \r
+          type leafref {\r
+            path "/mef-global:mef-global/mef-global:tenants-instances/mef-global:tenant-list/mef-global:name";\r
+          }\r
+        }\r
       }\r
     }\r
   }\r
-}
\ No newline at end of file
+}\r
index 99c2979fdd4fe1d6b75d58f0f193e8971365d26a..d2e81221b5b2e52478c4f693e4af55c65ae6b382 100644 (file)
@@ -1,84 +1,57 @@
 module mef-services {\r
   namespace "http://metroethernetforum.org/ns/yang/mef-services";\r
   prefix mef-services;\r
-  import ietf-yang-types {\r
-    prefix yang;\r
-  }\r
-  import mef-types {\r
-    prefix mef-types;\r
-  }\r
-  import mef-global {\r
-    prefix mef-global;\r
-  }\r
-  import mef-interfaces {\r
-    prefix mef-interfaces;\r
-  }\r
+  import ietf-yang-types { prefix yang; }\r
+  import ietf-inet-types { prefix inet; }\r
+  import mef-types { prefix mef-types; }\r
+  import mef-global { prefix mef-global; }\r
+  import mef-interfaces { prefix mef-interfaces; }\r
   organization "Metro Ethernet Forum";\r
   contact\r
-    "Web URL: http://metroethernetforum.org/\r
-     E-mail:  mibs@metroethernetforum.org\r
-     Postal:  Metro Ethernet Forum\r
-              6033 W. Century Boulevard, Suite 1107\r
-              Los Angeles, CA 90045\r
-              U.S.A.\r
-     Phone:   +1 310-642-2800\r
-     Fax:     +1 310-642-2808";\r
+    "Web URL: http://metroethernetforum.org/ E-mail: mibs@metroethernetforum.org\r
+    Postal: Metro Ethernet Forum 6033 W. Century Boulevard, Suite\r
+    1107 Los Angeles, CA 90045 U.S.A. Phone: +1 310-642-2800 Fax:\r
+    +1 310-642-2808";\r
   description\r
-    "This module implements the Carrier Ethernet Services as\r
-     defined in MEF 10.3, MEF 6.2, and MEF 7.2.\r
-      \r
-     Reference Overview:\r
-      A number of base documents have been used to create the\r
-      MEF Services YANG Module. The\r
-      following are the abbreviations for the baseline documents:\r
-      [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types',\r
-      2013-07-15 \r
-      [RFC 6643] refers to IETF RFC 6643 'Translation of Structure\r
-      of Management Information\r
-      Version 2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25 \r
-      [802.1AB] refers to 'Station and Media Access Control\r
-      Connectivity Discovery', IEEE 802.1AB-2009, September 2009\r
-      [802.1q] refers to IEEE 802.1Q-2011 'IEEE Standard for Local\r
-      and metropolitan area networks --Media Access Control (MAC)\r
-      Bridges and Virtual Bridged Local Area Networks, August 2011\r
-      [802-2001] refers to 'IEEE Standard for Local and Metropolitan\r
-      Area Networks: Overview and Architecture', IEEE 802-2001,\r
-      February 2002\r
-      [MEF10.3] refers to MEF 10.3\r
-      'Ethernet Services Attributes Phase 3', October 2013\r
-      [MEF6.2] refers to MEF 6.2\r
-      'EVC Ethernet Services Defintions Phase 3', August 2014\r
-      [MEF40] refers to MEF 40\r
-      'UNI and EVC Definition of Managed Objects', April 2013\r
-      [MEF45] refers to MEF 45 'Multi-CEN L2CP', August 2014\r
-      [MEF7.2] refers to MEF 7.2\r
-      'Carrier Ethernet Management Information Model', April 2013\r
-      [MEF7.3] refers to MEF 7.3\r
-      'Carrier Ethernet Management Information Model',\r
-      Working Draft #1 2015\r
-      [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version 2)',\r
-      December 1999\r
-      [RFC 2863] refers to IETF RFC 2863 'The Interfaces Group MIB',\r
-      June 2000\r
-      [RFC 3419] refers to IETF RFC 3419\r
-      'Textual Conventions for Transport Addresses', December 2002\r
-      [Y.1731] refers to ITU-T Y.1731\r
-      'OAM functions and mechanisms for Ethernet based networks',\r
-      July 2011\r
-      [Q.840.1] refers to ITU-T Q.840.1\r
-      'Requirements and analysis for NMS-EMS management interface\r
-      of Ethernet over Transport and Metro Ethernet\r
-      Network(EoT/MEN)' March 2007";\r
+    "This module implements the Carrier Ethernet Services as defined\r
+    in MEF 10.3, MEF 6.2, and MEF 7.2. Reference Overview: A number\r
+    of base documents have been used to create the MEF Services YANG\r
+    Module. The following are the abbreviations for the baseline documents:\r
+    [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types', 2013-07-15\r
+    [RFC 6643] refers to IETF RFC 6643 'Translation of Structure of\r
+    Management Information Version 2 (SMIv2) MIB Modules to YANG Modules',\r
+    2011-11-25 [802.1AB] refers to 'Station and Media Access Control\r
+    Connectivity Discovery', IEEE 802.1AB-2009, September 2009 [802.1q]\r
+    refers to IEEE 802.1Q-2011 'IEEE Standard for Local and metropolitan\r
+    area networks --Media Access Control (MAC) Bridges and Virtual\r
+    Bridged Local Area Networks, August 2011 [802-2001] refers to\r
+    'IEEE Standard for Local and Metropolitan Area Networks: Overview\r
+    and Architecture', IEEE 802-2001, February 2002 [MEF10.3] refers\r
+    to MEF 10.3 'Ethernet Services Attributes Phase 3', October 2013\r
+    [MEF6.2] refers to MEF 6.2 'EVC Ethernet Services Defintions Phase\r
+    3', August 2014 [MEF40] refers to MEF 40 'UNI and EVC Definition\r
+    of Managed Objects', April 2013 [MEF45] refers to MEF 45 'Multi-CEN\r
+    L2CP', August 2014 [MEF7.2] refers to MEF 7.2 'Carrier Ethernet\r
+    Management Information Model', April 2013 [MEF7.3] refers to MEF\r
+    7.3 'Carrier Ethernet Management Information Model', Working Draft\r
+    #1 2015 [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version\r
+    2)', December 1999 [RFC 2863] refers to IETF RFC 2863 'The Interfaces\r
+    Group MIB', June 2000 [RFC 3419] refers to IETF RFC 3419 'Textual\r
+    Conventions for Transport Addresses', December 2002 [Y.1731] refers\r
+    to ITU-T Y.1731 'OAM functions and mechanisms for Ethernet based\r
+    networks', July 2011 [Q.840.1] refers to ITU-T Q.840.1 'Requirements\r
+    and analysis for NMS-EMS management interface of Ethernet over\r
+    Transport and Metro Ethernet Network(EoT/MEN)' March 2007";\r
   revision 2015-05-26 {\r
     description\r
-      "Formal Project Review Draft 1.";\r
+        "Formal Project Review Draft 1.";\r
     reference "EVC Ethernet Services Definitions YANG Modules " +\r
-            "(MEF XX), TBD";\r
+        "(MEF XX), TBD";\r
   }\r
-   \r
+\r
   container mef-services {\r
     description\r
-      "MEF Services";\r
+        "MEF Services";\r
     list mef-service {\r
       must "(not(/mef-global:mef-global/mef-global:svc-providers)" +\r
             " and " +\r
@@ -89,1488 +62,1554 @@ module mef-services {
                 "populated, a Service Provider ID must be " +\r
                 "configured for a Service.";\r
         description\r
-          "A Service sees a single Service Provider. This must " +\r
-          "statement is effectively a 'mandatory true' when " +\r
-          "the Global Service Providers list is being used.";\r
+                "A Service sees a single Service Provider. This must " +\r
+                "statement is effectively a 'mandatory true' when " +\r
+                "the Global Service Providers list is being used.";\r
       }\r
       key "svc-id";\r
       unique "evc/evc-id";\r
+      unique "ipvc/ipvc-id";\r
       description\r
-        "Metro Ethernet Forum's Ethernet Services.";\r
-      container evc {\r
-        must "not(sls-uni-inclusions) or " +\r
-                "(sls-uni-inclusions and not(sls-uni-exclusions))" {\r
-          error-message "The EVC Performance SLS Exclusions and " +\r
-                "Inclusions List cannot both be configured for " +\r
-                "an EVC.";\r
-          description\r
-            "The EVC Performance SLS Exclusions and Inclusions " +\r
-            "List cannot both be configured for an EVC.";\r
-        }\r
-        must "(evc-type != 'rooted-multipoint') or " +\r
-                "((evc-type = 'rooted-multipoint') and " +\r
-                "not(sls-uni-exclusions) )" {\r
-          error-message "If EVC Type is Rooted-Multipoint, " +\r
-                "sls-uni-inclusions must be used instead of " +\r
-                "sls-uni-exclusions.";\r
-          description\r
-            "If EVC Type is Rooted-Multipoint, " +\r
-            "sls-uni-inclusions must be used instead of " +\r
-            "sls-uni-exclusions.";\r
-        }\r
-        description\r
-          "Ethernet Virtual Circuit(EVC) Configuration and Status.";\r
-        container unis {\r
-          description\r
-            "EVC Per Universal Network Interface(UNI) " +\r
-            "Configuration and Status.";\r
-          list uni {\r
-            must "not(evc-uni-ce-vlans/evc-uni-ce-vlan[2]) or " +\r
-                    "../../preserve-ce-vlan-id = 'true'" {\r
-              error-message "When more than one CE-VLAN-ID is " +\r
-                    "mapped to an EVC at a UNI, the EVC must have " +\r
-                    "CE-VLAN ID Preservation Enabled.";\r
-              description\r
-                "When more than one CE-VLAN-ID is mapped to " +\r
-                "an EVC at a UNI, the EVC must have CE-VLAN ID " +\r
-                "Preservation Enabled.";\r
-            }\r
-            must "/mef-interfaces:mef-interfaces/mef-interfaces:" +\r
-                    "unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "[mef-interfaces:uni-id/../mef-interfaces:" +\r
-                    "max-svc-frame-size >= current()/../../" +\r
-                    "mef-services:max-svc-frame-size]" {\r
-              error-message "The value of the EVC Maximum " +\r
-                    "Service Frame Size must be less than " +\r
-                    "or equal to all the UNI Maximum Service " +\r
-                    "Frame Sizes.";\r
-              description\r
-                "The value of the EVC Maximum Service Frame " +\r
-                "Size must be less than or equal to all the " +\r
-                "UNI Maximum Service Frame Sizes.";\r
-            }\r
-            must "(/mef-interfaces:mef-interfaces/mef-interfaces:" +\r
-                    "unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "[mef-interfaces:uni-id/../mef-interfaces:" +\r
-                    "bundling-enabled = 'true']) or " +\r
-                    "(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "[mef-interfaces:uni-id/../mef-interfaces:" +\r
-                    "all-to-one-bundling-enabled = 'true']) or " +\r
-                    "not(evc-uni-ce-vlans/evc-uni-ce-vlan[2])" {\r
-              error-message "If both Bundling and All-to-One " +\r
-                    "Bundling are disabled for a UNI, only one " +\r
-                    "CE VLAN ID can be configured for a specific " +\r
-                    "EVC on that UNI.";\r
-              description\r
-                "If both Bundling and All-to-One Bundling are " +\r
-                "disabled for a UNI, only one CE VLAN ID can be " +\r
-                "configured for a specific EVC on that UNI.";\r
-            }\r
-            must "(/mef-interfaces:mef-interfaces/mef-interfaces:" +\r
-                    "unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "[mef-interfaces:uni-id/../mef-interfaces:" +\r
-                    "all-to-one-bundling-enabled = 'false']) or " +\r
-                    "(count(/mef-services:mef-services/" +\r
-                    "mef-service/evc/unis/uni[uni-id = " +\r
-                    "current()/uni-id]) = 1)" {\r
-              error-message "If All-to-One Bundling is enabled " +\r
-                    "for any UNI in an EVC, all CE-VLAN IDs " +\r
-                    "mapped to any EVC for that UNI must map " +\r
-                    "to the same EVC ID.";\r
-              description\r
-                "If All-to-One Bundling is enabled for any UNI " +\r
-                "in an EVC, all CE-VLAN IDs mapped to any EVC " +\r
-                "for that UNI must map to the same EVC ID.";\r
-            }\r
-            must "((/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "[mef-interfaces:uni-id/../mef-interfaces:" +\r
-                    "ingress-bw-profile-per-uni]) or " +\r
-                    "(/mef-services:mef-services/mef-service/" +\r
-                    "evc/unis/uni" +\r
-                    "[uni-id = current()/mef-services:uni-id]" +\r
-                    "/ingress-bwp-flows-per-cos) or " +\r
-                    "(/mef-services:mef-services/mef-service/" +\r
-                    "evc/unis/uni" +\r
-                    "[uni-id = current()/mef-services:uni-id]" +\r
-                    "/ingress-bw-profile-per-evc)) or " +\r
-                    "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes)" {\r
-              error-message "If no Ingress Bandwidth Profiles " +\r
-                    "are specied for this UNI (BW Profile " +\r
-                    "Per UNI, BWP Flows Per CoS, nor BW Profile " +\r
-                    "Per EVC), then the UNI Ingress Envelopes " +\r
-                    "list must be empty.";\r
-              description\r
-                "If no Ingress Bandwidth Profiles are specied " +\r
-                "for this UNI (BW Profile Per UNI, BWP Flows " +\r
-                "Per CoS, nor BW Profile Per EVC), then the " +\r
-                "UNI Ingress Envelopes list must be empty.";\r
-            }\r
-            must "((/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "[mef-interfaces:uni-id/../mef-interfaces:" +\r
-                    "egress-bw-profile-per-uni]) or " +\r
-                    "(/mef-services:mef-services/mef-service/" +\r
-                    "evc/unis/uni" +\r
-                    "[uni-id = current()/mef-services:uni-id]" +\r
-                    "/egress-bwp-flows-per-eec) or " +\r
-                    "(/mef-services:mef-services/mef-service/" +\r
-                    "evc/unis/uni" +\r
-                    "[uni-id = current()/mef-services:uni-id]" +\r
-                    "/egress-bw-profile-per-evc)) or " +\r
-                    "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes)" {\r
-              error-message "If no Egress Bandwidth Profiles are " +\r
-                    "specied for this UNI (BW Profile Per UNI, " +\r
-                    "BWP Flows Per EEC, nor BW Profile Per EVC), " +\r
-                    "then the UNI Egress Envelopes list must be " +\r
-                    "empty.";\r
-              description\r
-                "If no Egress Bandwidth Profiles are specied " +\r
-                "for this UNI (BW Profile Per UNI, BWP Flows " +\r
-                "Per EEC, nor BW Profile Per EVC), then the UNI " +\r
-                "Egress Envelopes list must be empty.";\r
-            }\r
-            must "not(./ingress-bw-profile-per-evc) or " +\r
-                    "((./ingress-bw-profile-per-evc) and " +\r
-                    "not(./ingress-bwp-flows-per-cos))" {\r
-              error-message "If there is a per EVC Ingress " +\r
-                    "Bandwidth Profile on an EVC, then there " +\r
-                    "cannot be any per Class of Service Ingress " +\r
-                    "Bandwidth Profiles on that EVC.";\r
-              description\r
-                "If there is a per EVC Ingress Bandwidth Profile " +\r
-                "on an EVC, then there cannot be any per " +\r
-                "Class of Service Ingress Bandwidth Profiles " +\r
-                "on that EVC.";\r
-            }\r
-            must "not(./egress-bw-profile-per-evc) or " +\r
-                    "((./egress-bw-profile-per-evc) and " +\r
-                    "not(./egress-bwp-flows-per-eec))" {\r
-              error-message "If there is a per EVC Egress " +\r
-                    "Bandwidth Profile on an EVC, then there " +\r
-                    "cannot be any per Egress Equivalence " +\r
-                    "Class Identifier Bandwidth Profiles on " +\r
-                    "that EVC.";\r
-              description\r
-                "If there is a per EVC Egress Bandwidth " +\r
-                "Profile on an EVC, then there cannot be " +\r
-                "any per Egress Equivalence Class Identifier " +\r
-                "Bandwidth Profiles on that EVC.";\r
-            }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-bw-profile-" +\r
-                    "per-uni) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:ingress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-bw-profile-per-uni]" +\r
-                    "[mef-global:cir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:ingress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-bw-profile-per-uni]" +\r
-                    "[mef-global:cbs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Ingress Bandwidth Profile Per UNI: " +\r
-                    "If CIR > 0, CBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
-              description\r
-                "Ingress Bandwidth Profile Per UNI: If CIR > 0, " +\r
-                "CBS must be greater than or equal to the " +\r
-                "EVC Max Service Frame Size for the EVC.";\r
-            }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-bw-profile-per-uni) " +\r
-                    "or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:egress-bwp-flows/mef-global:" +\r
-                    "bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-bw-profile-per-uni]" +\r
-                    "[mef-global:cir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:ingress-bwp-flows/mef-global:" +\r
-                    "bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-bw-profile-per-uni]" +\r
-                    "[mef-global:cbs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Egress Bandwidth Profile Per UNI: " +\r
-                    "If CIR > 0, CBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
-              description\r
-                "Egress Bandwidth Profile Per UNI: If CIR > 0, " +\r
-                "CBS must be greater than or equal to the " +\r
-                "EVC Max Service Frame Size for the EVC.";\r
-            }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:ingress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:cir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:ingress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:cbs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Ingress Bandwidth Profile Envelope: " +\r
-                    "If CIR > 0, CBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
-              description\r
-                "Ingress Bandwidth Profile Envelope: " +\r
-                "If CIR > 0, CBS must be greater than " +\r
-                "or equal to the EVC Max Service Frame " +\r
-                "Size for the EVC.";\r
-            }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:egress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = " +\r
-                    "/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:cir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:egress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:cbs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Egress Bandwidth Profile " +\r
-                    "Envelope: If CIR > 0, CBS must be greater " +\r
-                    "than or equal to the EVC Max Service Frame " +\r
-                    "Size for the EVC.";\r
-              description\r
-                "Egress Bandwidth Profile Envelope: If CIR > 0, " +\r
-                "CBS must be greater than or equal to the " +\r
-                "EVC Max Service Frame Size for the EVC.";\r
+            "Metro Ethernet Forum's Ethernet Services.";\r
+      choice mef-service-choice {\r
+        case ipvc-choice {\r
+          container ipvc {\r
+            container unis {\r
+              list uni {\r
+                leaf uni-id {\r
+                  type leafref {\r
+                    path "/mef-interfaces:mef-interfaces/" +\r
+                                        "mef-interfaces:unis/mef-interfaces:uni/" +\r
+                                        "mef-interfaces:uni-id";\r
+                  }\r
+                }\r
+                leaf ip-uni-id {\r
+                  type mef-types:identifier45;\r
+                }\r
+\r
+                container evc-uni-ce-vlans {\r
+                  description\r
+                                    "EVC Per UNI CE-VLAN IDs.";\r
+                  list evc-uni-ce-vlan {\r
+                    key "vid";\r
+                    description\r
+                                        "A list of the CE-VLAN IDs mapped to this UNI " +\r
+                                        "for this EVC.";\r
+                    reference "[MEF10.3] Section 8.6.1, [R24] " +\r
+                                        "[R25], Section 9.10.2, Section 9.12, " +\r
+                                        "[R76], [R81].";\r
+                    leaf vid {\r
+                      type leafref {\r
+                        path "/mef-interfaces:mef-interfaces/" +\r
+                                                "mef-interfaces:unis/" +\r
+                                                "mef-interfaces:uni" +\r
+                                                "[mef-interfaces:uni-id = " +\r
+                                                "current()/../../../uni-id]" +\r
+                                                "/mef-interfaces:ce-vlans/" +\r
+                                                "mef-interfaces:ce-vlan/" +\r
+                                                "mef-interfaces:vid";\r
+                      }\r
+                      description\r
+                                            "VLAN Identifier.";\r
+                    }\r
+                  }\r
+                }\r
+              }\r
             }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-bw-profile-per-uni) " +\r
-                    "or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:ingress-bwp-flows/mef-global:" +\r
-                    "bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]/mef-interfaces:" +\r
-                    "ingress-bw-profile-per-uni]" +\r
-                    "[mef-global:eir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:ingress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-bw-profile-per-uni]" +\r
-                    "[mef-global:ebs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Ingress Bandwidth Profile Per UNI: " +\r
-                    "If EIR > 0, EBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
-              description\r
-                "Ingress Bandwidth Profile Per UNI: If EIR > 0, " +\r
-                "EBS must be greater than or equal to the " +\r
-                "EVC Max Service Frame Size for the EVC.";\r
+\r
+            leaf ipvc-id {\r
+              type mef-types:evc-id-type;\r
+              mandatory true;\r
             }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-bw-profile-" +\r
-                    "per-uni) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:egress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]/mef-interfaces:" +\r
-                    "egress-bw-profile-per-uni]" +\r
-                    "[mef-global:eir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:ingress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]/mef-interfaces:" +\r
-                    "egress-bw-profile-per-uni]" +\r
-                    "[mef-global:ebs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Egress Bandwidth Profile Per UNI: " +\r
-                    "If EIR > 0, EBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
+            leaf ipvc-type {\r
+              type mef-types:ipvc-type;\r
+\r
+              mandatory true;\r
               description\r
-                "Egress Bandwidth Profile Per UNI: If EIR > 0, " +\r
-                "EBS must be greater than or equal to the " +\r
-                "EVC Max Service Frame Size for the EVC.";\r
+                            "This IPVC attribute describes the IPVC as either " +\r
+                            "Cloud-access, Multipoint, or " +\r
+                            "Rooted-Multipoint.";\r
             }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:" +\r
-                    "unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes) or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:ingress-bwp-flows/mef-global:" +\r
-                    "bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:eir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:ingress-bwp-flows/mef-global:" +\r
-                    "bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:ingress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:ebs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Ingress Bandwidth Profile Envelope: " +\r
-                    "If EIR > 0, EBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
+          }\r
+        }\r
+        case evc-choice {\r
+          container evc {\r
+\r
+            must "not(sls-uni-inclusions) or " +\r
+                        "(sls-uni-inclusions and not(sls-uni-exclusions))" {\r
+              error-message "The EVC Performance SLS Exclusions and " +\r
+                            "Inclusions List cannot both be configured for " +\r
+                            "an EVC.";\r
               description\r
-                "Ingress Bandwidth Profile Envelope: " +\r
-                "If EIR > 0, EBS must be greater than or equal " +\r
-                "to the EVC Max Service Frame Size for the EVC.";\r
+                            "The EVC Performance SLS Exclusions and Inclusions " +\r
+                            "List cannot both be configured for an EVC.";\r
             }\r
-            must "not(/mef-interfaces:mef-interfaces/" +\r
-                    "mef-interfaces:unis/mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes) or " +\r
-                    "(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:egress-bwp-flows/" +\r
-                    "mef-global:bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:eir = 0]) or " +\r
-                    "(/mef-global:mef-global/mef-global:profiles/" +\r
-                    "mef-global:egress-bwp-flows/mef-global:" +\r
-                    "bwp-flow" +\r
-                    "[mef-global:bw-profile = /mef-interfaces:" +\r
-                    "mef-interfaces/mef-interfaces:unis/" +\r
-                    "mef-interfaces:uni" +\r
-                    "[mef-interfaces:uni-id = current()/" +\r
-                    "mef-services:uni-id]" +\r
-                    "/mef-interfaces:egress-envelopes/" +\r
-                    "mef-interfaces:envelope/mef-interfaces:" +\r
-                    "bwp-flows/mef-interfaces:bwp-flow/" +\r
-                    "mef-interfaces:bw-profile]" +\r
-                    "[mef-global:ebs >= current()/../../" +\r
-                    "max-svc-frame-size])" {\r
-              error-message "Egress Bandwidth Profile Envelope: " +\r
-                    "If EIR > 0, EBS must be greater than or " +\r
-                    "equal to the EVC Max Service Frame Size " +\r
-                    "for the EVC.";\r
+            must "(evc-type != 'rooted-multipoint') or " +\r
+                        "((evc-type = 'rooted-multipoint') and " +\r
+                        "not(sls-uni-exclusions) )" {\r
+              error-message "If EVC Type is Rooted-Multipoint, " +\r
+                            "sls-uni-inclusions must be used instead of " +\r
+                            "sls-uni-exclusions.";\r
               description\r
-                "Egress Bandwidth Profile Envelope: " +\r
-                "If EIR > 0, EBS must be greater than or " +\r
-                "equal to the EVC Max Service Frame Size " +\r
-                "for the EVC.";\r
+                            "If EVC Type is Rooted-Multipoint, " +\r
+                            "sls-uni-inclusions must be used instead of " +\r
+                            "sls-uni-exclusions.";\r
             }\r
-            key "uni-id";\r
             description\r
-              "EVC Flow Points and EVC-UNI List defines the " +\r
-              "roles of each UNI in the Service. One UNI can " +\r
-              "be used by 0 or more EVCs.";\r
-            reference "[MEF10.3] Section 8.3. " +\r
-                    "[MEF7.3] Section 12.2.2.";\r
-            container evc-uni-ce-vlans {\r
+                        "Ethernet Virtual Circuit(EVC) Configuration and Status.";\r
+            container unis {\r
               description\r
-                "EVC Per UNI CE-VLAN IDs.";\r
-              list evc-uni-ce-vlan {\r
-                key "vid";\r
+                            "EVC Per Universal Network Interface(UNI) " +\r
+                            "Configuration and Status.";\r
+              list uni {\r
+                must "not(evc-uni-ce-vlans/evc-uni-ce-vlan[2]) or " +\r
+                                "../../preserve-ce-vlan-id = 'true'" {\r
+                  error-message "When more than one CE-VLAN-ID is " +\r
+                                    "mapped to an EVC at a UNI, the EVC must have " +\r
+                                    "CE-VLAN ID Preservation Enabled.";\r
+                  description\r
+                                    "When more than one CE-VLAN-ID is mapped to " +\r
+                                    "an EVC at a UNI, the EVC must have CE-VLAN ID " +\r
+                                    "Preservation Enabled.";\r
+                }\r
+                must "/mef-interfaces:mef-interfaces/mef-interfaces:" +\r
+                                "unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "[mef-interfaces:uni-id/../mef-interfaces:" +\r
+                                "max-svc-frame-size >= current()/../../" +\r
+                                "mef-services:max-svc-frame-size]" {\r
+                  error-message "The value of the EVC Maximum " +\r
+                                    "Service Frame Size must be less than " +\r
+                                    "or equal to all the UNI Maximum Service " +\r
+                                    "Frame Sizes.";\r
+                  description\r
+                                    "The value of the EVC Maximum Service Frame " +\r
+                                    "Size must be less than or equal to all the " +\r
+                                    "UNI Maximum Service Frame Sizes.";\r
+                }\r
+                must "(/mef-interfaces:mef-interfaces/mef-interfaces:" +\r
+                                "unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "[mef-interfaces:uni-id/../mef-interfaces:" +\r
+                                "bundling-enabled = 'true']) or " +\r
+                                "(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "[mef-interfaces:uni-id/../mef-interfaces:" +\r
+                                "all-to-one-bundling-enabled = 'true']) or " +\r
+                                "not(evc-uni-ce-vlans/evc-uni-ce-vlan[2])" {\r
+                  error-message "If both Bundling and All-to-One " +\r
+                                    "Bundling are disabled for a UNI, only one " +\r
+                                    "CE VLAN ID can be configured for a specific " +\r
+                                    "EVC on that UNI.";\r
+                  description\r
+                                    "If both Bundling and All-to-One Bundling are " +\r
+                                    "disabled for a UNI, only one CE VLAN ID can be " +\r
+                                    "configured for a specific EVC on that UNI.";\r
+                }\r
+                must "(/mef-interfaces:mef-interfaces/mef-interfaces:" +\r
+                                "unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "[mef-interfaces:uni-id/../mef-interfaces:" +\r
+                                "all-to-one-bundling-enabled = 'false']) or " +\r
+                                "(count(/mef-services:mef-services/" +\r
+                                "mef-service/evc/unis/uni[uni-id = " +\r
+                                "current()/uni-id]) = 1)" {\r
+                  error-message "If All-to-One Bundling is enabled " +\r
+                                    "for any UNI in an EVC, all CE-VLAN IDs " +\r
+                                    "mapped to any EVC for that UNI must map " +\r
+                                    "to the same EVC ID.";\r
+                  description\r
+                                    "If All-to-One Bundling is enabled for any UNI " +\r
+                                    "in an EVC, all CE-VLAN IDs mapped to any EVC " +\r
+                                    "for that UNI must map to the same EVC ID.";\r
+                }\r
+                must "((/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "[mef-interfaces:uni-id/../mef-interfaces:" +\r
+                                "ingress-bw-profile-per-uni]) or " +\r
+                                "(/mef-services:mef-services/mef-service/" +\r
+                                "evc/unis/uni" +\r
+                                "[uni-id = current()/mef-services:uni-id]" +\r
+                                "/ingress-bwp-flows-per-cos) or " +\r
+                                "(/mef-services:mef-services/mef-service/" +\r
+                                "evc/unis/uni" +\r
+                                "[uni-id = current()/mef-services:uni-id]" +\r
+                                "/ingress-bw-profile-per-evc)) or " +\r
+                                "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes)" {\r
+                  error-message "If no Ingress Bandwidth Profiles " +\r
+                                    "are specied for this UNI (BW Profile " +\r
+                                    "Per UNI, BWP Flows Per CoS, nor BW Profile " +\r
+                                    "Per EVC), then the UNI Ingress Envelopes " +\r
+                                    "list must be empty.";\r
+                  description\r
+                                    "If no Ingress Bandwidth Profiles are specied " +\r
+                                    "for this UNI (BW Profile Per UNI, BWP Flows " +\r
+                                    "Per CoS, nor BW Profile Per EVC), then the " +\r
+                                    "UNI Ingress Envelopes list must be empty.";\r
+                }\r
+                must "((/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "[mef-interfaces:uni-id/../mef-interfaces:" +\r
+                                "egress-bw-profile-per-uni]) or " +\r
+                                "(/mef-services:mef-services/mef-service/" +\r
+                                "evc/unis/uni" +\r
+                                "[uni-id = current()/mef-services:uni-id]" +\r
+                                "/egress-bwp-flows-per-eec) or " +\r
+                                "(/mef-services:mef-services/mef-service/" +\r
+                                "evc/unis/uni" +\r
+                                "[uni-id = current()/mef-services:uni-id]" +\r
+                                "/egress-bw-profile-per-evc)) or " +\r
+                                "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes)" {\r
+                  error-message "If no Egress Bandwidth Profiles are " +\r
+                                    "specied for this UNI (BW Profile Per UNI, " +\r
+                                    "BWP Flows Per EEC, nor BW Profile Per EVC), " +\r
+                                    "then the UNI Egress Envelopes list must be " +\r
+                                    "empty.";\r
+                  description\r
+                                    "If no Egress Bandwidth Profiles are specied " +\r
+                                    "for this UNI (BW Profile Per UNI, BWP Flows " +\r
+                                    "Per EEC, nor BW Profile Per EVC), then the UNI " +\r
+                                    "Egress Envelopes list must be empty.";\r
+                }\r
+                must "not(./ingress-bw-profile-per-evc) or " +\r
+                                "((./ingress-bw-profile-per-evc) and " +\r
+                                "not(./ingress-bwp-flows-per-cos))" {\r
+                  error-message "If there is a per EVC Ingress " +\r
+                                    "Bandwidth Profile on an EVC, then there " +\r
+                                    "cannot be any per Class of Service Ingress " +\r
+                                    "Bandwidth Profiles on that EVC.";\r
+                  description\r
+                                    "If there is a per EVC Ingress Bandwidth Profile " +\r
+                                    "on an EVC, then there cannot be any per " +\r
+                                    "Class of Service Ingress Bandwidth Profiles " +\r
+                                    "on that EVC.";\r
+                }\r
+                must "not(./egress-bw-profile-per-evc) or " +\r
+                                "((./egress-bw-profile-per-evc) and " +\r
+                                "not(./egress-bwp-flows-per-eec))" {\r
+                  error-message "If there is a per EVC Egress " +\r
+                                    "Bandwidth Profile on an EVC, then there " +\r
+                                    "cannot be any per Egress Equivalence " +\r
+                                    "Class Identifier Bandwidth Profiles on " +\r
+                                    "that EVC.";\r
+                  description\r
+                                    "If there is a per EVC Egress Bandwidth " +\r
+                                    "Profile on an EVC, then there cannot be " +\r
+                                    "any per Egress Equivalence Class Identifier " +\r
+                                    "Bandwidth Profiles on that EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-bw-profile-" +\r
+                                "per-uni) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:ingress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-bw-profile-per-uni]" +\r
+                                "[mef-global:cir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:ingress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-bw-profile-per-uni]" +\r
+                                "[mef-global:cbs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Ingress Bandwidth Profile Per UNI: " +\r
+                                    "If CIR > 0, CBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Ingress Bandwidth Profile Per UNI: If CIR > 0, " +\r
+                                    "CBS must be greater than or equal to the " +\r
+                                    "EVC Max Service Frame Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-bw-profile-per-uni) " +\r
+                                "or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:egress-bwp-flows/mef-global:" +\r
+                                "bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-bw-profile-per-uni]" +\r
+                                "[mef-global:cir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:ingress-bwp-flows/mef-global:" +\r
+                                "bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-bw-profile-per-uni]" +\r
+                                "[mef-global:cbs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Egress Bandwidth Profile Per UNI: " +\r
+                                    "If CIR > 0, CBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Egress Bandwidth Profile Per UNI: If CIR > 0, " +\r
+                                    "CBS must be greater than or equal to the " +\r
+                                    "EVC Max Service Frame Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:ingress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:cir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:ingress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:cbs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Ingress Bandwidth Profile Envelope: " +\r
+                                    "If CIR > 0, CBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Ingress Bandwidth Profile Envelope: " +\r
+                                    "If CIR > 0, CBS must be greater than " +\r
+                                    "or equal to the EVC Max Service Frame " +\r
+                                    "Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:egress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = " +\r
+                                "/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:cir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:egress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:cbs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Egress Bandwidth Profile " +\r
+                                    "Envelope: If CIR > 0, CBS must be greater " +\r
+                                    "than or equal to the EVC Max Service Frame " +\r
+                                    "Size for the EVC.";\r
+                  description\r
+                                    "Egress Bandwidth Profile Envelope: If CIR > 0, " +\r
+                                    "CBS must be greater than or equal to the " +\r
+                                    "EVC Max Service Frame Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-bw-profile-per-uni) " +\r
+                                "or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:ingress-bwp-flows/mef-global:" +\r
+                                "bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]/mef-interfaces:" +\r
+                                "ingress-bw-profile-per-uni]" +\r
+                                "[mef-global:eir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:ingress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-bw-profile-per-uni]" +\r
+                                "[mef-global:ebs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Ingress Bandwidth Profile Per UNI: " +\r
+                                    "If EIR > 0, EBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Ingress Bandwidth Profile Per UNI: If EIR > 0, " +\r
+                                    "EBS must be greater than or equal to the " +\r
+                                    "EVC Max Service Frame Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-bw-profile-" +\r
+                                "per-uni) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:egress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]/mef-interfaces:" +\r
+                                "egress-bw-profile-per-uni]" +\r
+                                "[mef-global:eir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:ingress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]/mef-interfaces:" +\r
+                                "egress-bw-profile-per-uni]" +\r
+                                "[mef-global:ebs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Egress Bandwidth Profile Per UNI: " +\r
+                                    "If EIR > 0, EBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Egress Bandwidth Profile Per UNI: If EIR > 0, " +\r
+                                    "EBS must be greater than or equal to the " +\r
+                                    "EVC Max Service Frame Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:" +\r
+                                "unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes) or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:ingress-bwp-flows/mef-global:" +\r
+                                "bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:eir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:ingress-bwp-flows/mef-global:" +\r
+                                "bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:ingress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:ebs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Ingress Bandwidth Profile Envelope: " +\r
+                                    "If EIR > 0, EBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Ingress Bandwidth Profile Envelope: " +\r
+                                    "If EIR > 0, EBS must be greater than or equal " +\r
+                                    "to the EVC Max Service Frame Size for the EVC.";\r
+                }\r
+                must "not(/mef-interfaces:mef-interfaces/" +\r
+                                "mef-interfaces:unis/mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes) or " +\r
+                                "(/mef-global:mef-global/mef-global:" +\r
+                                "profiles/mef-global:egress-bwp-flows/" +\r
+                                "mef-global:bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:eir = 0]) or " +\r
+                                "(/mef-global:mef-global/mef-global:profiles/" +\r
+                                "mef-global:egress-bwp-flows/mef-global:" +\r
+                                "bwp-flow" +\r
+                                "[mef-global:bw-profile = /mef-interfaces:" +\r
+                                "mef-interfaces/mef-interfaces:unis/" +\r
+                                "mef-interfaces:uni" +\r
+                                "[mef-interfaces:uni-id = current()/" +\r
+                                "mef-services:uni-id]" +\r
+                                "/mef-interfaces:egress-envelopes/" +\r
+                                "mef-interfaces:envelope/mef-interfaces:" +\r
+                                "bwp-flows/mef-interfaces:bwp-flow/" +\r
+                                "mef-interfaces:bw-profile]" +\r
+                                "[mef-global:ebs >= current()/../../" +\r
+                                "max-svc-frame-size])" {\r
+                  error-message "Egress Bandwidth Profile Envelope: " +\r
+                                    "If EIR > 0, EBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                  description\r
+                                    "Egress Bandwidth Profile Envelope: " +\r
+                                    "If EIR > 0, EBS must be greater than or " +\r
+                                    "equal to the EVC Max Service Frame Size " +\r
+                                    "for the EVC.";\r
+                }\r
+                key "uni-id";\r
                 description\r
-                  "A list of the CE-VLAN IDs mapped to this UNI " +\r
-                  "for this EVC.";\r
-                reference "[MEF10.3] Section 8.6.1, [R24] " +\r
-                        "[R25], Section 9.10.2, Section 9.12, " +\r
-                        "[R76], [R81].";\r
-                leaf vid {\r
+                                "EVC Flow Points and EVC-UNI List defines the " +\r
+                                "roles of each UNI in the Service. One UNI can " +\r
+                                "be used by 0 or more EVCs.";\r
+                reference "[MEF10.3] Section 8.3. " +\r
+                                "[MEF7.3] Section 12.2.2.";\r
+                container evc-uni-ce-vlans {\r
+                  description\r
+                                    "EVC Per UNI CE-VLAN IDs.";\r
+                  list evc-uni-ce-vlan {\r
+                    key "vid";\r
+                    description\r
+                                        "A list of the CE-VLAN IDs mapped to this UNI " +\r
+                                        "for this EVC.";\r
+                    reference "[MEF10.3] Section 8.6.1, [R24] " +\r
+                                        "[R25], Section 9.10.2, Section 9.12, " +\r
+                                        "[R76], [R81].";\r
+                    leaf vid {\r
+                      type leafref {\r
+                        path "/mef-interfaces:mef-interfaces/" +\r
+                                                "mef-interfaces:unis/" +\r
+                                                "mef-interfaces:uni" +\r
+                                                "[mef-interfaces:uni-id = " +\r
+                                                "current()/../../../uni-id]" +\r
+                                                "/mef-interfaces:ce-vlans/" +\r
+                                                "mef-interfaces:ce-vlan/" +\r
+                                                "mef-interfaces:vid";\r
+                      }\r
+                      must "not(current()/../../" +\r
+                                            "evc-uni-ce-vlan[2]) or " +\r
+                                            "(count(../../../../uni/evc-uni-ce-vlans/" +\r
+                                            "evc-uni-ce-vlan" +\r
+                                            "[vid = current()]) = " +\r
+                                            "count(../../../../uni))" {\r
+                        error-message "If more than one CE-VLAN ID " +\r
+                                                "is configured for a UNI as part of " +\r
+                                                "an EVC, every CE VLAN-ID mapped to " +\r
+                                                "that EVC must be configured for all " +\r
+                                                "UNIs within that EVC.";\r
+                        description\r
+                                                "If more than one CE-VLAN ID is configured " +\r
+                                                "for a UNI as part of an EVC, every " +\r
+                                                "CE VLAN-ID mapped to that EVC must be " +\r
+                                                "configured for all UNIs within that EVC.";\r
+                      }\r
+                      description\r
+                                            "VLAN Identifier.";\r
+                    }\r
+                  }\r
+                }\r
+                container ingress-bwp-flows-per-cos {\r
+                  presence "Use Ingress Bandwidth Profiles Per CoS";\r
+                  description\r
+                                    "EVC Per UNI Class of Service Identifiers " +\r
+                                    "corresponding to this EVC's Ingress Bandwidth " +\r
+                                    "Profile Flows.";\r
+                  leaf coupling-enabled {\r
+                    type boolean;\r
+                    default "false";\r
+                    description\r
+                                        "EVC Per UNI Envelope Coupling Flag (CF) " +\r
+                                        "attribute.";\r
+                    reference "[MEF10.3] Section 12.1.";\r
+                  }\r
+                  list bwp-flow-per-cos {\r
+                    key "cos-name";\r
+                    description\r
+                                        "EVC Per UNI: The list of Class of Service " +\r
+                                        "Identifiers corresponding to this UNI's " +\r
+                                        "Ingress Bandwidth Profile Flow.";\r
+                    leaf cos-name {\r
+                      type leafref {\r
+                        path "/mef-global:mef-global/mef-global:" +\r
+                                                "profiles/mef-global:cos-names/" +\r
+                                                "mef-global:cos-name/mef-global:name";\r
+                      }\r
+                      description\r
+                                            "EVC Per UNI: Class of Service Identifier " +\r
+                                            "for this Bandwidth Profile Flow.";\r
+                      reference "[MEF7.3] Section 12.1.2.";\r
+                    }\r
+                    leaf bw-profile {\r
+                      type leafref {\r
+                        path "/mef-interfaces:mef-interfaces/" +\r
+                                                "mef-interfaces:unis/" +\r
+                                                "mef-interfaces:uni" +\r
+                                                "[mef-interfaces:uni-id = " +\r
+                                                "current()/../../../uni-id]" +\r
+                                                "/mef-interfaces:ingress-envelopes/" +\r
+                                                "mef-interfaces:envelope/" +\r
+                                                "mef-interfaces:env-id";\r
+                      }\r
+                      mandatory true;\r
+                      description\r
+                                            "EVC Per UNI: Ingress Bandwidth Profile " +\r
+                                            "Envelope Per CoS ID. If this parameter " +\r
+                                            "is not configured (ie. 'No') this " +\r
+                                            "setting is configured else at the " +\r
+                                            "UNI Level.";\r
+                      reference "[MEF10.3] Section 10.6, Table 28. " +\r
+                                            "[MEF7.3] Section 12.1.2.";\r
+                    }\r
+                  }\r
+                }\r
+                container egress-bwp-flows-per-eec {\r
+                  presence "Using Egress Bandwidth Profiles Per " +\r
+                                    "Egress Equivalence Class";\r
+                  description\r
+                                    "EVC Per UNI: The Egress Equivalence Class " +\r
+                                    "Identifiers corresponding to this EVC's Egress " +\r
+                                    "Bandwidth Profile Flows.";\r
+                  leaf coupling-enabled {\r
+                    type boolean;\r
+                    default "false";\r
+                    description\r
+                                        "EVC Per UNI: The Envelope Coupling Flag (CF) " +\r
+                                        "attribute.";\r
+                    reference "[MEF10.3] Section 12.1.";\r
+                  }\r
+                  list bwp-flow-per-eec {\r
+                    key "eec-name";\r
+                    description\r
+                                        "EVC Per UNI: The list of Egress Equivalence " +\r
+                                        "Class Identifiers corresponding to this " +\r
+                                        "EVC's Egress Bandwidth Profile Flow.";\r
+                    leaf eec-name {\r
+                      type leafref {\r
+                        path "/mef-global:mef-global/mef-global:" +\r
+                                                "profiles/mef-global:eec-names/" +\r
+                                                "mef-global:eec-name/mef-global:name";\r
+                      }\r
+                      description\r
+                                            "EVC Per UNI: Egress Equivalence Class " +\r
+                                            "Identifier for this Bandwidth Profile Flow.";\r
+                      reference "[MEF7.3] Section 12.1.2.";\r
+                    }\r
+                    leaf bw-profile {\r
+                      type leafref {\r
+                        path "/mef-interfaces:mef-interfaces/" +\r
+                                                "mef-interfaces:unis/" +\r
+                                                "mef-interfaces:uni" +\r
+                                                "[mef-interfaces:uni-id = " +\r
+                                                "current()/../../../uni-id]" +\r
+                                                "/mef-interfaces:egress-envelopes/" +\r
+                                                "mef-interfaces:envelope/" +\r
+                                                "mef-interfaces:env-id";\r
+                      }\r
+                      mandatory true;\r
+                      description\r
+                                            "EVC Per UNI: Egress Bandwidth Profile " +\r
+                                            "Envelope Per Equivance Class. If this " +\r
+                                            "parameter is not configured (ie. 'No') " +\r
+                                            "this setting is configured else at the " +\r
+                                            "UNI Level.";\r
+                      reference "[MEF10.3] Section 10.6, Table 28. " +\r
+                                            "[MEF7.3] Section 12.1.2.";\r
+                    }\r
+                  }\r
+                }\r
+                container status {\r
+                  description\r
+                                    "EVC Per UNI: This status group is related to " +\r
+                                    "the MEF 7.3 Service Endpoint";\r
+                  leaf oper-state-enabled {\r
+                    type boolean;\r
+                    default "false";\r
+                    config false;\r
+                    description\r
+                                        "EVC Per UNI: Operational Status of the " +\r
+                                        "Virtual Connection as Enabled/Disabled.";\r
+                    reference "[MEF15]. [MEF7.3] Section 11.2.1.";\r
+                  }\r
+                  leaf available-status {\r
+                    type mef-types:svc-endpoint-availability-type;\r
+                    default "not-installed";\r
+                    config false;\r
+                    description\r
+                                        "EVC Per UNI: Availability Status of the " +\r
+                                        "Virtual Connection.";\r
+                    reference "[MEF15]. [MEF7.3] Section 11.2.1.";\r
+                  }\r
+                }\r
+                leaf uni-id {\r
                   type leafref {\r
                     path "/mef-interfaces:mef-interfaces/" +\r
-                            "mef-interfaces:unis/" +\r
-                            "mef-interfaces:uni" +\r
-                            "[mef-interfaces:uni-id = " +\r
-                            "current()/../../../uni-id]" +\r
-                            "/mef-interfaces:ce-vlans/" +\r
-                            "mef-interfaces:ce-vlan/" +\r
-                            "mef-interfaces:vid";\r
+                                        "mef-interfaces:unis/mef-interfaces:uni/" +\r
+                                        "mef-interfaces:uni-id";\r
                   }\r
-                  must "not(current()/../../" +\r
-                        "evc-uni-ce-vlan[2]) or " +\r
-                        "(count(../../../../uni/evc-uni-ce-vlans/" +\r
-                        "evc-uni-ce-vlan" +\r
-                        "[vid = current()]) = " +\r
-                        "count(../../../../uni))" {\r
-                    error-message "If more than one CE-VLAN ID " +\r
-                            "is configured for a UNI as part of " +\r
-                            "an EVC, every CE VLAN-ID mapped to " +\r
-                            "that EVC must be configured for all " +\r
-                            "UNIs within that EVC.";\r
+                  description\r
+                                    "EVC Per UNI: The UNI ID paired with the EVC ID " +\r
+                                    "in the containing list.";\r
+                  reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf role {\r
+                  type mef-types:evc-uni-role-type;\r
+                  mandatory true;\r
+                  description\r
+                                    "EVC Per UNI: The UNI Role MUST have the value " +\r
+                                    "of either 'root' or 'leaf'.";\r
+                  reference "[MEF10.3] [R4], [R5], [R10], [R11], " +\r
+                                    "[R12]. [MEF7.3] Section 12.2.2.";\r
+                }\r
+                leaf admin-state-enabled {\r
+                  type boolean;\r
+                  default "true";\r
+                  description\r
+                                    "EVC Per UNI: Locked/Unlocked is inconsistent " +\r
+                                    "with Oper Status and will be confusing.";\r
+                  reference "[MEF15]. [MEF7.3] Section 11.2.1.";\r
+                }\r
+                leaf color-id {\r
+                  type mef-types:cos-color-identifier-type;\r
+                  description\r
+                                    "EVC Per UNI: The Color Identifier for " +\r
+                                    "Service Frames.";\r
+                  reference "[MEF10.3] Section 10.3. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf data-svc-frm-cos {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:profiles/" +\r
+                                        "mef-global:cos/mef-global:cos-profile/" +\r
+                                        "mef-global:id";\r
+                  }\r
+                  must "not(/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:cos/" +\r
+                                    "mef-global:cos-profile" +\r
+                                    "[mef-global:id = current()]" +\r
+                                    "/mef-global:cos-pcp) or " +\r
+                                    "((/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:cos/" +\r
+                                    "mef-global:cos-profile" +\r
+                                    "[mef-global:id = current()]" +\r
+                                    "/mef-global:cos-pcp) and " +\r
+                                    "((../color-id = 'pcp') or " +\r
+                                    "(../color-id = 'dei')) )" {\r
+                    error-message "When the Class of Service " +\r
+                                        "Identifier is based on PCP for a " +\r
+                                        "given EVC at a given UNI, the Color " +\r
+                                        "Identifier must be based on either " +\r
+                                        "DEI or PCP.";\r
+                    description\r
+                                        "When the Class of Service Identifier is " +\r
+                                        "based on PCP for a given EVC at a given UNI, " +\r
+                                        "the Color Identifier must be based on either " +\r
+                                        "DEI or PCP.";\r
+                  }\r
+                  must "not(/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:cos/mef-global:" +\r
+                                    "cos-profile" +\r
+                                    "[mef-global:id = current()]/mef-global:" +\r
+                                    "cos-dscp) or " +\r
+                                    "((/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:cos/mef-global:" +\r
+                                    "cos-profile" +\r
+                                    "[mef-global:id = current()]/mef-global:" +\r
+                                    "cos-dscp) and " +\r
+                                    "(../color-id = 'dscp'))" {\r
+                    error-message "When the Class of Service " +\r
+                                        "Identifier is based on DSCP for a " +\r
+                                        "given EVC at a given UNI, the Color " +\r
+                                        "Identifier must be based DSCP.";\r
                     description\r
-                      "If more than one CE-VLAN ID is configured " +\r
-                      "for a UNI as part of an EVC, every " +\r
-                      "CE VLAN-ID mapped to that EVC must be " +\r
-                      "configured for all UNIs within that EVC.";\r
+                                        "When the Class of Service Identifier is based " +\r
+                                        "on DSCP for a given EVC at a given UNI, the " +\r
+                                        "Color Identifier must be based DSCP.";\r
                   }\r
                   description\r
-                    "VLAN Identifier.";\r
+                                    "EVC Per UNI: Ingress Data Service Frame " +\r
+                                    "CoS Profile.";\r
+                  reference "[MEF10.3] Section 8.8, Section 10.2. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
                 }\r
-              }\r
-            }\r
-            container ingress-bwp-flows-per-cos {\r
-              presence "Use Ingress Bandwidth Profiles Per CoS";\r
-              description\r
-                "EVC Per UNI Class of Service Identifiers " +\r
-                "corresponding to this EVC's Ingress Bandwidth " +\r
-                "Profile Flows.";\r
-              leaf coupling-enabled {\r
-                type boolean;\r
-                default "false";\r
-                description\r
-                  "EVC Per UNI Envelope Coupling Flag (CF) " +\r
-                  "attribute.";\r
-                reference "[MEF10.3] Section 12.1.";\r
-              }\r
-              list bwp-flow-per-cos {\r
-                key "cos-name";\r
-                description\r
-                  "EVC Per UNI: The list of Class of Service " +\r
-                  "Identifiers corresponding to this UNI's " +\r
-                  "Ingress Bandwidth Profile Flow.";\r
-                leaf cos-name {\r
+                leaf l2cp-svc-frm-cos {\r
                   type leafref {\r
                     path "/mef-global:mef-global/mef-global:" +\r
-                            "profiles/mef-global:cos-names/" +\r
-                            "mef-global:cos-name/mef-global:name";\r
+                                        "profiles/mef-global:l2cp-cos/mef-global:" +\r
+                                        "l2cp-profile/mef-global:id";\r
+                  }\r
+                  description\r
+                                    "EVC Per UNI: Ingress Layer 2 Control Protocol " +\r
+                                    "Processing.";\r
+                  reference "[MEF10.3] Section 8.8, Section 10.2. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf soam-svc-frm-cos {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:profiles/" +\r
+                                        "mef-global:cos/mef-global:cos-profile/" +\r
+                                        "mef-global:id";\r
+                  }\r
+                  must "(not(.) and not(../data-svc-frm-cos)) or " +\r
+                                    "(. = ../data-svc-frm-cos)" {\r
+                    error-message "For a given EVC at a given UNI, " +\r
+                                        "the basis for the Class of Service " +\r
+                                        "Identifier for ingress SOAM Service " +\r
+                                        "Frames must be the same as that for " +\r
+                                        "ingress Data Service Frames.";\r
+                    description\r
+                                        "For a given EVC at a given UNI, the basis " +\r
+                                        "for the Class of Service Identifier for " +\r
+                                        "ingress SOAM Service Frames must be the " +\r
+                                        "same as that for ingress Data Service Frames.";\r
                   }\r
                   description\r
-                    "EVC Per UNI: Class of Service Identifier " +\r
-                    "for this Bandwidth Profile Flow.";\r
+                                    "EVC Per UNI: Ingress SOAM Service Frames.";\r
                   reference "[MEF7.3] Section 12.1.2.";\r
                 }\r
-                leaf bw-profile {\r
+                leaf data-svc-frm-eec {\r
                   type leafref {\r
-                    path "/mef-interfaces:mef-interfaces/" +\r
-                            "mef-interfaces:unis/" +\r
-                            "mef-interfaces:uni" +\r
-                            "[mef-interfaces:uni-id = " +\r
-                            "current()/../../../uni-id]" +\r
-                            "/mef-interfaces:ingress-envelopes/" +\r
-                            "mef-interfaces:envelope/" +\r
-                            "mef-interfaces:env-id";\r
+                    path "/mef-global:mef-global/mef-global:profiles/" +\r
+                                        "mef-global:eec/mef-global:eec-profile/" +\r
+                                        "mef-global:id";\r
+                  }\r
+                  must "not(/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:eec/mef-global:" +\r
+                                    "eec-profile" +\r
+                                    "[mef-global:id = current()]" +\r
+                                    "/mef-global:eec-pcp) or " +\r
+                                    "((/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:eec/mef-global:" +\r
+                                    "eec-profile" +\r
+                                    "[mef-global:id = current()]" +\r
+                                    "/mef-global:eec-pcp) and " +\r
+                                    "((../color-id = 'pcp') or " +\r
+                                    "(../color-id = 'dei')) )" {\r
+                    error-message "When the Egress Equivalence " +\r
+                                        "Class Identifier is based on PCP " +\r
+                                        "for a given EVC at a given UNI, " +\r
+                                        "the Color Identifier must be based " +\r
+                                        "on either DEI or PCP.";\r
+                    description\r
+                                        "When the Egress Equivalence Class Identifier " +\r
+                                        "is based on PCP for a given EVC at a " +\r
+                                        "given UNI, the Color Identifier must " +\r
+                                        "be based on either DEI or PCP.";\r
+                  }\r
+                  must "not(/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:eec/mef-global:" +\r
+                                    "eec-profile" +\r
+                                    "[mef-global:id = current()]" +\r
+                                    "/mef-global:eec-dscp) or " +\r
+                                    "((/mef-global:mef-global/mef-global:" +\r
+                                    "profiles/mef-global:eec/mef-global:" +\r
+                                    "eec-profile" +\r
+                                    "[mef-global:id = current()]" +\r
+                                    "/mef-global:eec-dscp) and " +\r
+                                    "(../color-id = 'dscp'))" {\r
+                    error-message "When the Egress Equivalence " +\r
+                                        "Class Identifier is based on DSCP for " +\r
+                                        "a given EVC at a given UNI, the Color " +\r
+                                        "Identifier must be based DSCP.";\r
+                    description\r
+                                        "When the Egress Equivalence Class Identifier " +\r
+                                        "is based on DSCP for a given EVC at a given " +\r
+                                        "UNI, the Color Identifier must be based DSCP.";\r
                   }\r
-                  mandatory true;\r
                   description\r
-                    "EVC Per UNI: Ingress Bandwidth Profile " +\r
-                    "Envelope Per CoS ID. If this parameter " +\r
-                    "is not configured (ie. 'No') this " +\r
-                    "setting is configured else at the " +\r
-                    "UNI Level.";\r
-                  reference "[MEF10.3] Section 10.6, Table 28. " +\r
-                        "[MEF7.3] Section 12.1.2.";\r
+                                    "EVC Per UNI: Egress Data Service Frame Processing.";\r
+                  reference "[MEF10.3] Section 10.4. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
                 }\r
-              }\r
-            }\r
-            container egress-bwp-flows-per-eec {\r
-              presence "Using Egress Bandwidth Profiles Per " +\r
-                    "Egress Equivalence Class";\r
-              description\r
-                "EVC Per UNI: The Egress Equivalence Class " +\r
-                "Identifiers corresponding to this EVC's Egress " +\r
-                "Bandwidth Profile Flows.";\r
-              leaf coupling-enabled {\r
-                type boolean;\r
-                default "false";\r
-                description\r
-                  "EVC Per UNI: The Envelope Coupling Flag (CF) " +\r
-                  "attribute.";\r
-                reference "[MEF10.3] Section 12.1.";\r
-              }\r
-              list bwp-flow-per-eec {\r
-                key "eec-name";\r
-                description\r
-                  "EVC Per UNI: The list of Egress Equivalence " +\r
-                  "Class Identifiers corresponding to this " +\r
-                  "EVC's Egress Bandwidth Profile Flow.";\r
-                leaf eec-name {\r
+                leaf l2cp-svc-frm-eec {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:profiles/" +\r
+                                        "mef-global:l2cp-eec/mef-global:" +\r
+                                        "l2cp-profile/mef-global:id";\r
+                  }\r
+                  description\r
+                                    "EVC Per UNI: Egress Layer 2 Control Protocol " +\r
+                                    "Processing.";\r
+                  reference "[MEF10.3] Section 10.4. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf soam-svc-frm-eec {\r
                   type leafref {\r
                     path "/mef-global:mef-global/mef-global:" +\r
-                            "profiles/mef-global:eec-names/" +\r
-                            "mef-global:eec-name/mef-global:name";\r
+                                        "profiles/mef-global:eec/mef-global:" +\r
+                                        "eec-profile/mef-global:id";\r
+                  }\r
+                  must "(not(.) and not(../data-svc-frm-eec)) or " +\r
+                                    "(. = ../data-svc-frm-eec)" {\r
+                    error-message "For a given EVC at a given UNI, " +\r
+                                        "the basis for the Egress Equivalence " +\r
+                                        "Class Identifier for egress SOAM " +\r
+                                        "Service Frames must be the same as " +\r
+                                        "that for egress Data Service Frames.";\r
+                    description\r
+                                        "For a given EVC at a given UNI, the basis " +\r
+                                        "for the Egress Equivalence Class Identifier " +\r
+                                        "for egress SOAM Service Frames must be " +\r
+                                        "the same as that for egress Data " +\r
+                                        "Service Frames.";\r
                   }\r
                   description\r
-                    "EVC Per UNI: Egress Equivalence Class " +\r
-                    "Identifier for this Bandwidth Profile Flow.";\r
-                  reference "[MEF7.3] Section 12.1.2.";\r
+                                    "EVC Per UNI: Egress SOAM Service Frames.";\r
+                  reference "[MEF10.3] Section 10.4. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
                 }\r
-                leaf bw-profile {\r
+                leaf ingress-bw-profile-per-evc {\r
                   type leafref {\r
                     path "/mef-interfaces:mef-interfaces/" +\r
-                            "mef-interfaces:unis/" +\r
-                            "mef-interfaces:uni" +\r
-                            "[mef-interfaces:uni-id = " +\r
-                            "current()/../../../uni-id]" +\r
-                            "/mef-interfaces:egress-envelopes/" +\r
-                            "mef-interfaces:envelope/" +\r
-                            "mef-interfaces:env-id";\r
+                                        "mef-interfaces:unis/" +\r
+                                        "mef-interfaces:uni" +\r
+                                        "[mef-interfaces:uni-id = " +\r
+                                        "current()/../uni-id]" +\r
+                                        "/mef-interfaces:ingress-envelopes/" +\r
+                                        "mef-interfaces:envelope/" +\r
+                                        "mef-interfaces:env-id";\r
                   }\r
-                  mandatory true;\r
                   description\r
-                    "EVC Per UNI: Egress Bandwidth Profile " +\r
-                    "Envelope Per Equivance Class. If this " +\r
-                    "parameter is not configured (ie. 'No') " +\r
-                    "this setting is configured else at the " +\r
-                    "UNI Level.";\r
-                  reference "[MEF10.3] Section 10.6, Table 28. " +\r
-                        "[MEF7.3] Section 12.1.2.";\r
+                                    "EVC Per UNI: Ingress Bandwidth Profile " +\r
+                                    "Envelope Per EVC. If this parameter is " +\r
+                                    "not configured (ie. 'No') this setting " +\r
+                                    "is configured else at the UNI Level.";\r
+                  reference "[MEF10.3] Section 10.5. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf egress-bw-profile-per-evc {\r
+                  type leafref {\r
+                    path "/mef-interfaces:mef-interfaces/" +\r
+                                        "mef-interfaces:unis/" +\r
+                                        "mef-interfaces:uni" +\r
+                                        "[mef-interfaces:uni-id = " +\r
+                                        "current()/../uni-id]" +\r
+                                        "/mef-interfaces:egress-envelopes/" +\r
+                                        "mef-interfaces:envelope/mef-interfaces:" +\r
+                                        "env-id";\r
+                  }\r
+                  description\r
+                                    "EVC Per UNI: Egress Bandwidth Profile Envelope " +\r
+                                    "Per EVC. If this parameter is not configured " +\r
+                                    "(ie. 'No') this setting is configured else at " +\r
+                                    "the UNI Level.";\r
+                  reference "[MEF10.3] Section 10.7. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf src-mac-addr-limit-enabled {\r
+                  type boolean;\r
+                  default "false";\r
+                  description\r
+                                    "EVC Per UNI: Source MAC Address Limit " +\r
+                                    "Enable / Disable. If Enabled, the values " +\r
+                                    "for the Source MAC Address Limit and Source " +\r
+                                    "MAC Address Interval must be set.";\r
+                  reference "[MEF10.3] Section 10.9. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf src-mac-addr-limit {\r
+                  type uint32 {\r
+                    range "1..max";\r
+                  }\r
+                  description\r
+                                    "EVC Per UNI: Source MAC Address Limit. " +\r
+                                    "This value is used when the Source MAC Address " +\r
+                                    "Limit Enabled is true.";\r
+                  reference "[MEF10.3] Section 10.9.";\r
+                }\r
+                leaf src-mac-addr-limit-interval {\r
+                  type yang:timeticks;\r
+                  default "0";\r
+                  description\r
+                                    "EVC Per UNI: Source MAC Address Limit " +\r
+                                    "Interval. This value is used when the " +\r
+                                    "Source MAC Address Limit Enabled is true.";\r
+                  reference "[MEF10.3] Section 10.9.";\r
+                }\r
+                leaf test-meg-enabled {\r
+                  type boolean;\r
+                  default "false";\r
+                  description\r
+                                    "EVC Per UNI: Test MEG Enabled / Disabled.";\r
+                  reference "[MEF10.3] Section 10.10. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf test-meg {\r
+                  type mef-types:identifier45;\r
+                  description\r
+                                    "EVC Per UNI: Test MEG Identifier.";\r
+                  reference "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf subscriber-meg-mip-enabled {\r
+                  type boolean;\r
+                  default "false";\r
+                  description\r
+                                    "EVC Per UNI: Subscriber MEG MIP " +\r
+                                    "Enabled / Disabled.";\r
+                  reference "[MEF10.3] Section 10.11. " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf subscriber-meg-mip {\r
+                  type mef-types:identifier45;\r
+                  description\r
+                                    "EVC Per UNI: Subscriber MEG MIP Identifier.";\r
+                  reference "[MEF7.3] Section 12.1.2.";\r
                 }\r
               }\r
             }\r
             container status {\r
               description\r
-                "EVC Per UNI: This status group is related to " +\r
-                "the MEF 7.3 Service Endpoint";\r
+                            "This status group is related to the MEF 7.3 Virtual " +\r
+                            "Connection";\r
               leaf oper-state-enabled {\r
                 type boolean;\r
                 default "false";\r
                 config false;\r
                 description\r
-                  "EVC Per UNI: Operational Status of the " +\r
-                  "Virtual Connection as Enabled/Disabled.";\r
-                reference "[MEF15]. [MEF7.3] Section 11.2.1.";\r
+                                "EVC Operational Status of the Virtual Connection " +\r
+                                "as Enabled/Disabled.";\r
+                reference "[MEF7.3] Section 11.1.1.";\r
               }\r
               leaf available-status {\r
-                type mef-types:svc-endpoint-availability-type;\r
+                type mef-types:virt-cx-availability-type;\r
                 default "not-installed";\r
                 config false;\r
                 description\r
-                  "EVC Per UNI: Availability Status of the " +\r
-                  "Virtual Connection.";\r
-                reference "[MEF15]. [MEF7.3] Section 11.2.1.";\r
+                                "EVC Availability Status of the Virtual Connection.";\r
+                reference "[MEF7.3] Section 11.1.1.";\r
               }\r
             }\r
-            leaf uni-id {\r
-              type leafref {\r
-                path "/mef-interfaces:mef-interfaces/" +\r
-                        "mef-interfaces:unis/mef-interfaces:uni/" +\r
-                        "mef-interfaces:uni-id";\r
+            container sls-inclusions-by-cos {\r
+              description\r
+                            "SLS Inclusions by CoS: For this EVC, the following " +\r
+                            "CoS Names/Labels are applicable.";\r
+              list sls-inclusion-by-cos {\r
+                key "cos-name";\r
+                description\r
+                                "CoS Name.";\r
+                leaf cos-name {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:profiles/" +\r
+                                        "mef-global:cos-names/mef-global:" +\r
+                                        "cos-name/mef-global:name";\r
+                  }\r
+                  description\r
+                                    "EVC: This attribute identifies the name of " +\r
+                                    "a class of service (CoS) instance to be used " +\r
+                                    "for EVC Performance.";\r
+                }\r
               }\r
+            }\r
+            container sls-uni-inclusions {\r
+              presence "EVC: Defines the EVC Flow Points (UNI) Pairs " +\r
+                            "that must conform to the EVC's SLS Performance " +\r
+                            "Metrics.";\r
               description\r
-                "EVC Per UNI: The UNI ID paired with the EVC ID " +\r
-                "in the containing list.";\r
-              reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "SLS UNI Inclusions List. The following pairs of UNI " +\r
+                            "Interconnections are to required to meet the " +\r
+                            "SLS Performance Objectives. Configing both SLS " +\r
+                            "UNI Inclusions and SLS UNI Exclusions is not " +\r
+                            "permitted.";\r
+              list sls-uni-inclusion-set {\r
+                must "uni-id1 != uni-id2" {\r
+                  error-message "The two UNI IDs for a given " +\r
+                                    "inclusion cannot be the same.";\r
+                  description\r
+                                    "The two UNI IDs for a given inclusion " +\r
+                                    "cannot be the same.";\r
+                }\r
+                must "(../../evc-type != 'rooted-multipoint') or " +\r
+                                "((../../evc-type = 'rooted-multipoint') " +\r
+                                "and " +\r
+                                "not((../../unis/uni[uni-id = " +\r
+                                "current()/uni-id1]/role = 'leaf') and " +\r
+                                "(../../unis/uni[uni-id = current()/uni-id2]" +\r
+                                "/role = 'leaf')))" {\r
+                  error-message "If EVC Type is Rooted-Multipoint, " +\r
+                                    "sls-uni-inclusion UNI Pairs cannot both " +\r
+                                    "be role 'leaf'.";\r
+                  description\r
+                                    "If EVC Type is Rooted-Multipoint, " +\r
+                                    "sls-uni-inclusion UNI Pairs cannot " +\r
+                                    "both be role 'leaf'.";\r
+                }\r
+                key "pm-type pm-id uni-id1 uni-id2";\r
+                description\r
+                                "EVC: Defines the EVC Flow Points (UNI) Pairs that " +\r
+                                "must conform to the EVC's SLS Performance " +\r
+                                "Metrics. Use of this list indicates that a " +\r
+                                "complete set of UNI Pairs has been specified " +\r
+                                "for the Performance Metrics defined in the " +\r
+                                "selected SLS.";\r
+                leaf pm-type {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:slss/" +\r
+                                        "mef-global:sls" +\r
+                                        "[mef-global:sls-id = current()/../../../" +\r
+                                        "evc-performance-sls]" +\r
+                                        "/mef-global:perf-objs/mef-global:" +\r
+                                        "perf-obj/mef-global:pm-type";\r
+                  }\r
+                  description\r
+                                    "EVC: Performance Metric.";\r
+                  reference "[MEF10.3] Section 8.8.";\r
+                }\r
+                leaf pm-id {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:slss/" +\r
+                                        "mef-global:sls" +\r
+                                        "[mef-global:sls-id = current()/../../../" +\r
+                                        "evc-performance-sls]" +\r
+                                        "/mef-global:perf-objs/mef-global:perf-obj" +\r
+                                        "[mef-global:pm-type = current()/../" +\r
+                                        "pm-type]" +\r
+                                        "/mef-global:pm-id";\r
+                  }\r
+                  description\r
+                                    "EVC: This is a friendly name for specific " +\r
+                                    "performance profile.";\r
+                }\r
+                leaf uni-id1 {\r
+                  type leafref {\r
+                    path "../../../unis/uni/uni-id";\r
+                  }\r
+                  description\r
+                                    "EVC: The UNI ID paired with the EVC ID in the " +\r
+                                    "containing list.";\r
+                  reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf uni-id2 {\r
+                  type leafref {\r
+                    path "../../../unis/uni/uni-id";\r
+                  }\r
+                  description\r
+                                    "EVC: The UNI ID paired with the EVC ID in the " +\r
+                                    "containing list.";\r
+                  reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+              }\r
             }\r
-            leaf role {\r
-              type mef-types:evc-uni-role-type;\r
-              mandatory true;\r
+            container sls-uni-exclusions {\r
+              presence "Not all EVC Flow Points (UNI) must conform " +\r
+                            "to the EVC SLS Performance Metrics.";\r
               description\r
-                "EVC Per UNI: The UNI Role MUST have the value " +\r
-                "of either 'root' or 'leaf'.";\r
-              reference "[MEF10.3] [R4], [R5], [R10], [R11], " +\r
-                    "[R12]. [MEF7.3] Section 12.2.2.";\r
+                            "EVC: Not all EVC Flow Points (UNI) must conform to " +\r
+                            "the EVC SLS Performance Metrics. Use of this " +\r
+                            "list indicates that all UNI Pairs EXCEPT for " +\r
+                            "the ones indicated (per Performance Metric) must " +\r
+                            "conform to the SLS.";\r
+              list sls-uni-exclusion-set {\r
+                must "uni-id1 != uni-id2" {\r
+                  error-message "The two UNI IDs for a given " +\r
+                                    "exclusion cannot be the same.";\r
+                  description\r
+                                    "The two UNI IDs for a given exclusion cannot " +\r
+                                    "be the same as these pairs are invalid as " +\r
+                                    "defined in MEF 10.3.";\r
+                }\r
+                key "pm-type pm-id uni-id1 uni-id2";\r
+                description\r
+                                "SLS UNI Exclusions List. The following pairs " +\r
+                                "of UNI Interconnections are not required " +\r
+                                "meet the SLS Performance Objectives. " +\r
+                                "Configing both SLS UNI Inclusions and SLS " +\r
+                                "UNI Exclusions is not permitted.";\r
+                leaf pm-type {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:" +\r
+                                        "slss/mef-global:sls" +\r
+                                        "[mef-global:sls-id = current()/../../../" +\r
+                                        "evc-performance-sls]" +\r
+                                        "/mef-global:perf-objs/mef-global:" +\r
+                                        "perf-obj/mef-global:pm-type";\r
+                  }\r
+                  description\r
+                                    "EVC: Performance Metric.";\r
+                  reference "[MEF10.3] Section 8.8.";\r
+                }\r
+                leaf pm-id {\r
+                  type leafref {\r
+                    path "/mef-global:mef-global/mef-global:slss/" +\r
+                                        "mef-global:sls" +\r
+                                        "[mef-global:sls-id = current()/../../../" +\r
+                                        "evc-performance-sls]" +\r
+                                        "/mef-global:perf-objs/mef-global:perf-obj" +\r
+                                        "[mef-global:pm-type = current()/../" +\r
+                                        "pm-type]" +\r
+                                        "/mef-global:pm-id";\r
+                  }\r
+                  description\r
+                                    "EVC: This is a friendly name for specific " +\r
+                                    "performance profile.";\r
+                }\r
+                leaf uni-id1 {\r
+                  type leafref {\r
+                    path "../../../unis/uni/uni-id";\r
+                  }\r
+                  description\r
+                                    "EVC: The UNI ID paired with the EVC ID in the " +\r
+                                    "containing list.";\r
+                  reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+                leaf uni-id2 {\r
+                  type leafref {\r
+                    path "../../../unis/uni/uni-id";\r
+                  }\r
+                  description\r
+                                    "EVC: The UNI ID paired with the EVC ID in the " +\r
+                                    "containing list.";\r
+                  reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
+                                    "[MEF7.3] Section 12.1.2.";\r
+                }\r
+              }\r
             }\r
-            leaf admin-state-enabled {\r
-              type boolean;\r
-              default "true";\r
+            leaf evc-id {\r
+              type mef-types:evc-id-type;\r
+              mandatory true;\r
               description\r
-                "EVC Per UNI: Locked/Unlocked is inconsistent " +\r
-                "with Oper Status and will be confusing.";\r
-              reference "[MEF15]. [MEF7.3] Section 11.2.1.";\r
+                            "The EVC ID must be unique across all EVCs in the CEN." +\r
+                            " The EVC ID must be non-NULL.";\r
+              reference "[MEF10.3] Section 8.2 [R7]. " +\r
+                            "[MEF7.3] Section 11.1.1, Section 12.2.2.";\r
             }\r
-            leaf color-id {\r
-              type mef-types:cos-color-identifier-type;\r
+            leaf evc-status {\r
+              type mef-types:evc-status-type;\r
+              config false;\r
               description\r
-                "EVC Per UNI: The Color Identifier for " +\r
-                "Service Frames.";\r
-              reference "[MEF10.3] Section 10.3. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC Operational Status.";\r
+              reference "[MEF16] Section 5.3.";\r
             }\r
-            leaf data-svc-frm-cos {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:profiles/" +\r
-                        "mef-global:cos/mef-global:cos-profile/" +\r
-                        "mef-global:id";\r
-              }\r
-              must "not(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:cos/" +\r
-                    "mef-global:cos-profile" +\r
-                    "[mef-global:id = current()]" +\r
-                    "/mef-global:cos-pcp) or " +\r
-                    "((/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:cos/" +\r
-                    "mef-global:cos-profile" +\r
-                    "[mef-global:id = current()]" +\r
-                    "/mef-global:cos-pcp) and " +\r
-                    "((../color-id = 'pcp') or " +\r
-                    "(../color-id = 'dei')) )" {\r
-                error-message "When the Class of Service " +\r
-                        "Identifier is based on PCP for a " +\r
-                        "given EVC at a given UNI, the Color " +\r
-                        "Identifier must be based on either " +\r
-                        "DEI or PCP.";\r
+            leaf evc-type {\r
+              type mef-types:evc-type;\r
+              must "(. != 'point-to-point') or " +\r
+                            "((. = 'point-to-point') and " +\r
+                            "(count(../unis/uni[role = 'leaf']) = 0))" {\r
+                error-message "If EVC Type is Point-to-Point, all " +\r
+                                "UNI Roles must be root.";\r
                 description\r
-                  "When the Class of Service Identifier is " +\r
-                  "based on PCP for a given EVC at a given UNI, " +\r
-                  "the Color Identifier must be based on either " +\r
-                  "DEI or PCP.";\r
+                                "If EVC Type is Point-to-Point, all UNI Roles must " +\r
+                                "be root.";\r
               }\r
-              must "not(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:cos/mef-global:" +\r
-                    "cos-profile" +\r
-                    "[mef-global:id = current()]/mef-global:" +\r
-                    "cos-dscp) or " +\r
-                    "((/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:cos/mef-global:" +\r
-                    "cos-profile" +\r
-                    "[mef-global:id = current()]/mef-global:" +\r
-                    "cos-dscp) and " +\r
-                    "(../color-id = 'dscp'))" {\r
-                error-message "When the Class of Service " +\r
-                        "Identifier is based on DSCP for a " +\r
-                        "given EVC at a given UNI, the Color " +\r
-                        "Identifier must be based DSCP.";\r
+              must "(. != 'multipoint-to-multipoint') or " +\r
+                            "((. = 'multipoint-to-multipoint') and " +\r
+                            "(count(../unis/uni[role = 'leaf']) = 0))" {\r
+                error-message "If EVC Type is " +\r
+                                "Multipoint-to-Multipoint, all UNI Roles " +\r
+                                "must be root.";\r
                 description\r
-                  "When the Class of Service Identifier is based " +\r
-                  "on DSCP for a given EVC at a given UNI, the " +\r
-                  "Color Identifier must be based DSCP.";\r
-              }\r
-              description\r
-                "EVC Per UNI: Ingress Data Service Frame " +\r
-                "CoS Profile.";\r
-              reference "[MEF10.3] Section 8.8, Section 10.2. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf l2cp-svc-frm-cos {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:" +\r
-                        "profiles/mef-global:l2cp-cos/mef-global:" +\r
-                        "l2cp-profile/mef-global:id";\r
+                                "If EVC Type is Multipoint-to-Multipoint, all UNI " +\r
+                                "Roles must be root.";\r
               }\r
-              description\r
-                "EVC Per UNI: Ingress Layer 2 Control Protocol " +\r
-                "Processing.";\r
-              reference "[MEF10.3] Section 8.8, Section 10.2. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf soam-svc-frm-cos {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:profiles/" +\r
-                        "mef-global:cos/mef-global:cos-profile/" +\r
-                        "mef-global:id";\r
-              }\r
-              must "(not(.) and not(../data-svc-frm-cos)) or " +\r
-                    "(. = ../data-svc-frm-cos)" {\r
-                error-message "For a given EVC at a given UNI, " +\r
-                        "the basis for the Class of Service " +\r
-                        "Identifier for ingress SOAM Service " +\r
-                        "Frames must be the same as that for " +\r
-                        "ingress Data Service Frames.";\r
+              must "(. != 'rooted-multipoint') or " +\r
+                            "((. = 'rooted-multipoint') and " +\r
+                            "(count(../unis/uni[role = 'root']) > 0) )" {\r
+                error-message "If EVC Type is Rooted-Multipoint, one " +\r
+                                "or more UNI Roles must be root.";\r
                 description\r
-                  "For a given EVC at a given UNI, the basis " +\r
-                  "for the Class of Service Identifier for " +\r
-                  "ingress SOAM Service Frames must be the " +\r
-                  "same as that for ingress Data Service Frames.";\r
+                                "If EVC Type is Rooted-Multipoint, one or more " +\r
+                                "UNI Roles must be root.";\r
               }\r
-              description\r
-                "EVC Per UNI: Ingress SOAM Service Frames.";\r
-              reference "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf data-svc-frm-eec {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:profiles/" +\r
-                        "mef-global:eec/mef-global:eec-profile/" +\r
-                        "mef-global:id";\r
+              must "(. != 'point-to-point') or " +\r
+                            "((. = 'point-to-point') and " +\r
+                            "(count(../unis/uni) = 2))" {\r
+                error-message "If EVC Type is Point-to-Point, there " +\r
+                                "must be exactly 2 UNI configured for the EVC.";\r
+                description\r
+                                "If EVC Type is Point-to-Point, there must be " +\r
+                                "exactly 2 UNI configured for the EVC.";\r
               }\r
-              must "not(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:eec/mef-global:" +\r
-                    "eec-profile" +\r
-                    "[mef-global:id = current()]" +\r
-                    "/mef-global:eec-pcp) or " +\r
-                    "((/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:eec/mef-global:" +\r
-                    "eec-profile" +\r
-                    "[mef-global:id = current()]" +\r
-                    "/mef-global:eec-pcp) and " +\r
-                    "((../color-id = 'pcp') or " +\r
-                    "(../color-id = 'dei')) )" {\r
-                error-message "When the Egress Equivalence " +\r
-                        "Class Identifier is based on PCP " +\r
-                        "for a given EVC at a given UNI, " +\r
-                        "the Color Identifier must be based " +\r
-                        "on either DEI or PCP.";\r
+              must "(. != 'multipoint-to-multipoint') or " +\r
+                            "((. = 'multipoint-to-multipoint') and " +\r
+                            "(count(../unis/uni) > 1) and " +\r
+                            "(count(../unis/uni) <= ../max-uni-count))" {\r
+                error-message "If EVC Type is " +\r
+                                "Multipoint-to-Multipoint, " +\r
+                                "there must be 2 or more UNI configured " +\r
+                                "for the EVC.";\r
                 description\r
-                  "When the Egress Equivalence Class Identifier " +\r
-                  "is based on PCP for a given EVC at a " +\r
-                  "given UNI, the Color Identifier must " +\r
-                  "be based on either DEI or PCP.";\r
+                                "If EVC Type is Multipoint-to-Multipoint, " +\r
+                                "there must be 2 or more UNI configured for " +\r
+                                "the EVC.";\r
               }\r
-              must "not(/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:eec/mef-global:" +\r
-                    "eec-profile" +\r
-                    "[mef-global:id = current()]" +\r
-                    "/mef-global:eec-dscp) or " +\r
-                    "((/mef-global:mef-global/mef-global:" +\r
-                    "profiles/mef-global:eec/mef-global:" +\r
-                    "eec-profile" +\r
-                    "[mef-global:id = current()]" +\r
-                    "/mef-global:eec-dscp) and " +\r
-                    "(../color-id = 'dscp'))" {\r
-                error-message "When the Egress Equivalence " +\r
-                        "Class Identifier is based on DSCP for " +\r
-                        "a given EVC at a given UNI, the Color " +\r
-                        "Identifier must be based DSCP.";\r
+              must "(. != 'rooted-multipoint') or " +\r
+                            "((. = 'rooted-multipoint') and " +\r
+                            "(count(../unis/uni) > 1) and " +\r
+                            "(count(../unis/uni) <= ../max-uni-count))" {\r
+                error-message "If EVC Type is Rooted-Multipoint, " +\r
+                                "there must be 2 or more UNI configured for the EVC.";\r
                 description\r
-                  "When the Egress Equivalence Class Identifier " +\r
-                  "is based on DSCP for a given EVC at a given " +\r
-                  "UNI, the Color Identifier must be based DSCP.";\r
+                                "If EVC Type is Rooted-Multipoint, there must " +\r
+                                "be 2 or more UNI configured for the EVC.";\r
               }\r
-              description\r
-                "EVC Per UNI: Egress Data Service Frame Processing.";\r
-              reference "[MEF10.3] Section 10.4. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf l2cp-svc-frm-eec {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:profiles/" +\r
-                        "mef-global:l2cp-eec/mef-global:" +\r
-                        "l2cp-profile/mef-global:id";\r
+              must "(. != 'point-to-point') or " +\r
+                            "((. = 'point-to-point') and " +\r
+                            "(../max-uni-count = 2))" {\r
+                error-message "If EVC Type is Point-to-Point, " +\r
+                                "the value of max-uni-count must be 2.";\r
+                description\r
+                                "If EVC Type is Point-to-Point, the value of " +\r
+                                "max-uni-count must be 2.";\r
               }\r
-              description\r
-                "EVC Per UNI: Egress Layer 2 Control Protocol " +\r
-                "Processing.";\r
-              reference "[MEF10.3] Section 10.4. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf soam-svc-frm-eec {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:" +\r
-                        "profiles/mef-global:eec/mef-global:" +\r
-                        "eec-profile/mef-global:id";\r
+              must "(. != 'multipoint-to-multipoint') or " +\r
+                            "((. = 'multipoint-to-multipoint') and " +\r
+                            "(../max-uni-count > 2))" {\r
+                error-message "If EVC Type is " +\r
+                                "Multipoint-to-Multipoint, the value of " +\r
+                                "max-uni-count must be at least 3.";\r
+                description\r
+                                "If EVC Type is Multipoint-to-Multipoint, the " +\r
+                                "value of max-uni-count must be at least 3.";\r
               }\r
-              must "(not(.) and not(../data-svc-frm-eec)) or " +\r
-                    "(. = ../data-svc-frm-eec)" {\r
-                error-message "For a given EVC at a given UNI, " +\r
-                        "the basis for the Egress Equivalence " +\r
-                        "Class Identifier for egress SOAM " +\r
-                        "Service Frames must be the same as " +\r
-                        "that for egress Data Service Frames.";\r
+              must "(. != 'rooted-multipoint') or " +\r
+                            "((. = 'rooted-multipoint') and " +\r
+                            "(../max-uni-count > 2))" {\r
+                error-message "If EVC Type is Rooted-Multipoint, " +\r
+                                "the value of max-uni-count must be at " +\r
+                                "least 3.";\r
                 description\r
-                  "For a given EVC at a given UNI, the basis " +\r
-                  "for the Egress Equivalence Class Identifier " +\r
-                  "for egress SOAM Service Frames must be " +\r
-                  "the same as that for egress Data " +\r
-                  "Service Frames.";\r
+                                "If EVC Type is Rooted-Multipoint, the value " +\r
+                                "of max-uni-count must be at least 3.";\r
               }\r
+              // mandatory true;\r
               description\r
-                "EVC Per UNI: Egress SOAM Service Frames.";\r
-              reference "[MEF10.3] Section 10.4. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "This EVC attribute describes the EVC as either " +\r
+                            "Multipoint-To-Multipoint, Point-To-Point, or " +\r
+                            "Rooted-Multipoint.";\r
+              reference "[MEF10.3] Section 8.1, [R4], [R5], " +\r
+                            "[R10], [R11], [R12], [R13] and [R14]. " +\r
+                            "[MEF7.3] Section 12.2.2.";\r
             }\r
-            leaf ingress-bw-profile-per-evc {\r
-              type leafref {\r
-                path "/mef-interfaces:mef-interfaces/" +\r
-                        "mef-interfaces:unis/" +\r
-                        "mef-interfaces:uni" +\r
-                        "[mef-interfaces:uni-id = " +\r
-                        "current()/../uni-id]" +\r
-                        "/mef-interfaces:ingress-envelopes/" +\r
-                        "mef-interfaces:envelope/" +\r
-                        "mef-interfaces:env-id";\r
-              }\r
+            leaf admin-state-enabled {\r
+              type boolean;\r
+              default "true";\r
               description\r
-                "EVC Per UNI: Ingress Bandwidth Profile " +\r
-                "Envelope Per EVC. If this parameter is " +\r
-                "not configured (ie. 'No') this setting " +\r
-                "is configured else at the UNI Level.";\r
-              reference "[MEF10.3] Section 10.5. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: Locked/Unlocked is inconsistent with " +\r
+                            "Oper Status and will be confusing.";\r
+              reference "[MEF15]. [MEF7.3] Section 11.1.1.";\r
             }\r
-            leaf egress-bw-profile-per-evc {\r
-              type leafref {\r
-                path "/mef-interfaces:mef-interfaces/" +\r
-                        "mef-interfaces:unis/" +\r
-                        "mef-interfaces:uni" +\r
-                        "[mef-interfaces:uni-id = " +\r
-                        "current()/../uni-id]" +\r
-                        "/mef-interfaces:egress-envelopes/" +\r
-                        "mef-interfaces:envelope/mef-interfaces:" +\r
-                        "env-id";\r
-              }\r
+            leaf elastic-enabled {\r
+              type boolean;\r
+              default "true";\r
               description\r
-                "EVC Per UNI: Egress Bandwidth Profile Envelope " +\r
-                "Per EVC. If this parameter is not configured " +\r
-                "(ie. 'No') this setting is configured else at " +\r
-                "the UNI Level.";\r
-              reference "[MEF10.3] Section 10.7. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: Elastic Enabled/Disabled.";\r
+              reference "[MEF7.3] Section 11.1.1.";\r
             }\r
-            leaf src-mac-addr-limit-enabled {\r
-              type boolean;\r
-              default "false";\r
+            leaf elastic-service {\r
+              type mef-types:identifier45;\r
               description\r
-                "EVC Per UNI: Source MAC Address Limit " +\r
-                "Enable / Disable. If Enabled, the values " +\r
-                "for the Source MAC Address Limit and Source " +\r
-                "MAC Address Interval must be set.";\r
-              reference "[MEF10.3] Section 10.9. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: Related to CE4Cloud Information Model.";\r
+              reference "[MEF7.3] Section 11.1.1.";\r
             }\r
-            leaf src-mac-addr-limit {\r
+            leaf max-uni-count {\r
               type uint32 {\r
-                range "1..max";\r
+                range "2..max";\r
+              }\r
+              must "(. > 2) or ((. = 2) and " +\r
+                            "(../evc-type = 'point-to-point'))" {\r
+                error-message "If EVC Type is Point-to-Point, the " +\r
+                                "max-uni-count value must be 2.";\r
+                description\r
+                                "If EVC Type is Point-to-Point, the max-uni-count " +\r
+                                "value must be 2.";\r
               }\r
+              must "(. = 2) or ((. > 2) and " +\r
+                            "((../evc-type = 'multipoint-to-multipoint') or " +\r
+                            "(../evc-type = 'rooted-multipoint')))" {\r
+                error-message "If EVC Type is " +\r
+                                "Multipoint-to-Multipoint or " +\r
+                                "Rooted-Multipoint, the max-uni-count value " +\r
+                                "must be at least 3.";\r
+                description\r
+                                "If EVC Type is Multipoint-to-Multipoint or " +\r
+                                "Rooted-Multipoint, the max-uni-count value " +\r
+                                "must be at least 3.";\r
+              }\r
+              default "2";\r
               description\r
-                "EVC Per UNI: Source MAC Address Limit. " +\r
-                "This value is used when the Source MAC Address " +\r
-                "Limit Enabled is true.";\r
-              reference "[MEF10.3] Section 10.9.";\r
+                            "EVC:The Maximum Number of UNIs this EVC can be " +\r
+                            "configured for (Default 2).If EVC Type is " +\r
+                            "Multipoint-to-Multipoint or Rooted-Multipoint, " +\r
+                            "the max-uni-count value must be at least 3. " +\r
+                            "This value must be 2 for point-to-point mode.";\r
+              reference "[MEF10.3] [R14]. [MEF7.3] Section 12.2.2.";\r
             }\r
-            leaf src-mac-addr-limit-interval {\r
-              type yang:timeticks;\r
-              default "0";\r
-              description\r
-                "EVC Per UNI: Source MAC Address Limit " +\r
-                "Interval. This value is used when the " +\r
-                "Source MAC Address Limit Enabled is true.";\r
-              reference "[MEF10.3] Section 10.9.";\r
+            leaf preserved-vlan {\r
+              type uint32;\r
             }\r
-            leaf test-meg-enabled {\r
+            leaf preserve-ce-vlan-id {\r
               type boolean;\r
               default "false";\r
               description\r
-                "EVC Per UNI: Test MEG Enabled / Disabled.";\r
-              reference "[MEF10.3] Section 10.10. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC:An EVC with more than one CE-VLAN ID mapping " +\r
+                            "to it must have the same list of CE-VLAN IDs " +\r
+                            "mapping to the EVC at each UNI in the EVC.";\r
+              reference "[MEF10.3] Section 8.6.1, [R24] [R25], " +\r
+                            "Section 9.10.2, Section 9.12, [R81], Figure 20. " +\r
+                            "[MEF7.3] Section 12.2.2.";\r
             }\r
-            leaf test-meg {\r
-              type mef-types:identifier45;\r
-              description\r
-                "EVC Per UNI: Test MEG Identifier.";\r
-              reference "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf subscriber-meg-mip-enabled {\r
+            leaf cos-preserve-ce-vlan-id {\r
               type boolean;\r
               default "false";\r
               description\r
-                "EVC Per UNI: Subscriber MEG MIP " +\r
-                "Enabled / Disabled.";\r
-              reference "[MEF10.3] Section 10.11. " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
-            }\r
-            leaf subscriber-meg-mip {\r
-              type mef-types:identifier45;\r
-              description\r
-                "EVC Per UNI: Subscriber MEG MIP Identifier.";\r
-              reference "[MEF7.3] Section 12.1.2.";\r
-            }\r
-          }\r
-        }\r
-        container status {\r
-          description\r
-            "This status group is related to the MEF 7.3 Virtual " +\r
-            "Connection";\r
-          leaf oper-state-enabled {\r
-            type boolean;\r
-            default "false";\r
-            config false;\r
-            description\r
-              "EVC Operational Status of the Virtual Connection " +\r
-              "as Enabled/Disabled.";\r
-            reference "[MEF7.3] Section 11.1.1.";\r
-          }\r
-          leaf available-status {\r
-            type mef-types:virt-cx-availability-type;\r
-            default "not-installed";\r
-            config false;\r
-            description\r
-              "EVC Availability Status of the Virtual Connection.";\r
-            reference "[MEF7.3] Section 11.1.1.";\r
-          }\r
-        }\r
-        container sls-inclusions-by-cos {\r
-          description\r
-            "SLS Inclusions by CoS: For this EVC, the following " +\r
-            "CoS Names/Labels are applicable.";\r
-          list sls-inclusion-by-cos {\r
-            key "cos-name";\r
-            description\r
-              "CoS Name.";\r
-            leaf cos-name {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:profiles/" +\r
-                        "mef-global:cos-names/mef-global:" +\r
-                        "cos-name/mef-global:name";\r
-              }\r
-              description\r
-                "EVC: This attribute identifies the name of " +\r
-                "a class of service (CoS) instance to be used " +\r
-                "for EVC Performance.";\r
-            }\r
-          }\r
-        }\r
-        container sls-uni-inclusions {\r
-          presence "EVC: Defines the EVC Flow Points (UNI) Pairs " +\r
-                "that must conform to the EVC's SLS Performance " +\r
-                "Metrics.";\r
-          description\r
-            "SLS UNI Inclusions List. The following pairs of UNI " +\r
-            "Interconnections are to required to meet the " +\r
-            "SLS Performance Objectives. Configing both SLS " +\r
-            "UNI Inclusions and SLS UNI Exclusions is not " +\r
-            "permitted.";\r
-          list sls-uni-inclusion-set {\r
-            must "uni-id1 != uni-id2" {\r
-              error-message "The two UNI IDs for a given " +\r
-                    "inclusion cannot be the same.";\r
-              description\r
-                "The two UNI IDs for a given inclusion " +\r
-                "cannot be the same.";\r
+                            "EVC: Preserve CE-VLAN ID for CoS.";\r
+              reference "[MEF10.3] Section 8.6.2, [R26]. " +\r
+                            "[MEF7.3] Section 12.2.2.";\r
             }\r
-            must "(../../evc-type != 'rooted-multipoint') or " +\r
-                    "((../../evc-type = 'rooted-multipoint') " +\r
-                    "and " +\r
-                    "not((../../unis/uni[uni-id = " +\r
-                    "current()/uni-id1]/role = 'leaf') and " +\r
-                    "(../../unis/uni[uni-id = current()/uni-id2]" +\r
-                    "/role = 'leaf')))" {\r
-              error-message "If EVC Type is Rooted-Multipoint, " +\r
-                    "sls-uni-inclusion UNI Pairs cannot both " +\r
-                    "be role 'leaf'.";\r
-              description\r
-                "If EVC Type is Rooted-Multipoint, " +\r
-                "sls-uni-inclusion UNI Pairs cannot " +\r
-                "both be role 'leaf'.";\r
-            }\r
-            key "pm-type pm-id uni-id1 uni-id2";\r
-            description\r
-              "EVC: Defines the EVC Flow Points (UNI) Pairs that " +\r
-              "must conform to the EVC's SLS Performance " +\r
-              "Metrics. Use of this list indicates that a " +\r
-              "complete set of UNI Pairs has been specified " +\r
-              "for the Performance Metrics defined in the " +\r
-              "selected SLS.";\r
-            leaf pm-type {\r
+            leaf evc-performance-sls {\r
               type leafref {\r
                 path "/mef-global:mef-global/mef-global:slss/" +\r
-                        "mef-global:sls" +\r
-                        "[mef-global:sls-id = current()/../../../" +\r
-                        "evc-performance-sls]" +\r
-                        "/mef-global:perf-objs/mef-global:" +\r
-                        "perf-obj/mef-global:pm-type";\r
+                                "mef-global:sls/mef-global:sls-id";\r
               }\r
               description\r
-                "EVC: Performance Metric.";\r
-              reference "[MEF10.3] Section 8.8.";\r
+                            "EVC: EVC-specific performance objectives and " +\r
+                            "parameters. Note that an SLS can also specify " +\r
+                            "performance objectives spanning more than one EVC. " +\r
+                            "By default, all the UNI associated with the EVC " +\r
+                            "have this SLS applied for them.";\r
+              reference "[MEF10.3] Section 8.8, Section 10. " +\r
+                            "[MEF7.3] Section 12.2.2.";\r
             }\r
-            leaf pm-id {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:slss/" +\r
-                        "mef-global:sls" +\r
-                        "[mef-global:sls-id = current()/../../../" +\r
-                        "evc-performance-sls]" +\r
-                        "/mef-global:perf-objs/mef-global:perf-obj" +\r
-                        "[mef-global:pm-type = current()/../" +\r
-                        "pm-type]" +\r
-                        "/mef-global:pm-id";\r
-              }\r
-              description\r
-                "EVC: This is a friendly name for specific " +\r
-                "performance profile.";\r
-            }\r
-            leaf uni-id1 {\r
-              type leafref {\r
-                path "../../../unis/uni/uni-id";\r
-              }\r
+            leaf unicast-svc-frm-delivery {\r
+              type mef-types:data-svc-frame-delivery-type;\r
+              default "unconditional";\r
               description\r
-                "EVC: The UNI ID paired with the EVC ID in the " +\r
-                "containing list.";\r
-              reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: Unicast Data Service Frame Delivery Mode " +\r
+                            "(unconditional[default], conditional, or discard).";\r
+              reference "[MEF10.3] Section 8.5.2,[R16], [R17], " +\r
+                            "Section 8.8, Section 11. [MEF7.3] Section 12.2.2.";\r
             }\r
-            leaf uni-id2 {\r
-              type leafref {\r
-                path "../../../unis/uni/uni-id";\r
-              }\r
+            leaf multicast-svc-frm-delivery {\r
+              type mef-types:data-svc-frame-delivery-type;\r
+              default "unconditional";\r
               description\r
-                "EVC: The UNI ID paired with the EVC ID in the " +\r
-                "containing list.";\r
-              reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: Multicast Data Service Frame Delivery Mode " +\r
+                            "(unconditional[default], conditional, or discard).";\r
+              reference "[MEF10.3] Section 8.5.2, [R16], [R18], " +\r
+                            "Section 8.8, Section 11. [MEF7.3] Section 12.2.2.";\r
             }\r
-          }\r
-        }\r
-        container sls-uni-exclusions {\r
-          presence "Not all EVC Flow Points (UNI) must conform " +\r
-                "to the EVC SLS Performance Metrics.";\r
-          description\r
-            "EVC: Not all EVC Flow Points (UNI) must conform to " +\r
-            "the EVC SLS Performance Metrics. Use of this " +\r
-            "list indicates that all UNI Pairs EXCEPT for " +\r
-            "the ones indicated (per Performance Metric) must " +\r
-            "conform to the SLS.";\r
-          list sls-uni-exclusion-set {\r
-            must "uni-id1 != uni-id2" {\r
-              error-message "The two UNI IDs for a given " +\r
-                    "exclusion cannot be the same.";\r
+            leaf broadcast-svc-frm-delivery {\r
+              type mef-types:data-svc-frame-delivery-type;\r
+              default "unconditional";\r
               description\r
-                "The two UNI IDs for a given exclusion cannot " +\r
-                "be the same as these pairs are invalid as " +\r
-                "defined in MEF 10.3.";\r
+                            "EVC: Broadcast Data Service Frame Delivery Mode " +\r
+                            "(unconditional[default], conditional, or discard).";\r
+              reference "[MEF10.3] Section 8.5.2, [R16], [R19], " +\r
+                            "Section 8.8, Section 11. [MEF7.3] Section 12.2.2.";\r
             }\r
-            key "pm-type pm-id uni-id1 uni-id2";\r
-            description\r
-              "SLS UNI Exclusions List. The following pairs " +\r
-              "of UNI Interconnections are not required " +\r
-              "meet the SLS Performance Objectives. " +\r
-              "Configing both SLS UNI Inclusions and SLS " +\r
-              "UNI Exclusions is not permitted.";\r
-            leaf pm-type {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:" +\r
-                        "slss/mef-global:sls" +\r
-                        "[mef-global:sls-id = current()/../../../" +\r
-                        "evc-performance-sls]" +\r
-                        "/mef-global:perf-objs/mef-global:" +\r
-                        "perf-obj/mef-global:pm-type";\r
-              }\r
-              description\r
-                "EVC: Performance Metric.";\r
-              reference "[MEF10.3] Section 8.8.";\r
-            }\r
-            leaf pm-id {\r
-              type leafref {\r
-                path "/mef-global:mef-global/mef-global:slss/" +\r
-                        "mef-global:sls" +\r
-                        "[mef-global:sls-id = current()/../../../" +\r
-                        "evc-performance-sls]" +\r
-                        "/mef-global:perf-objs/mef-global:perf-obj" +\r
-                        "[mef-global:pm-type = current()/../" +\r
-                        "pm-type]" +\r
-                        "/mef-global:pm-id";\r
-              }\r
-              description\r
-                "EVC: This is a friendly name for specific " +\r
-                "performance profile.";\r
-            }\r
-            leaf uni-id1 {\r
-              type leafref {\r
-                path "../../../unis/uni/uni-id";\r
-              }\r
+            leaf evc-meg-id {\r
+              type mef-types:identifier45;\r
               description\r
-                "EVC: The UNI ID paired with the EVC ID in the " +\r
-                "containing list.";\r
-              reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: Identifies the Maintenance Entity Group (MEG) " +\r
+                            "for this EVC.";\r
+              reference "[MEF7.3] Section 12.2.2. MEF 35.1.";\r
             }\r
-            leaf uni-id2 {\r
-              type leafref {\r
-                path "../../../unis/uni/uni-id";\r
-              }\r
+            leaf max-svc-frame-size {\r
+              type mef-types:max-svc-frame-size-type;\r
+              default "1600";\r
               description\r
-                "EVC: The UNI ID paired with the EVC ID in the " +\r
-                "containing list.";\r
-              reference "[MEF10.3] Section 8.3, Section 10.1.  " +\r
-                    "[MEF7.3] Section 12.1.2.";\r
+                            "EVC: This attribute describes the maximum service " +\r
+                            "frame size for the EVC.";\r
+              reference "[MEF10.3] Section 8.9, Section 9.7, [R71], " +\r
+                            "[MEF6.2] Section 8.2.2 and MEF 22.1: [D2]. " +\r
+                            "[MEF7.3] Section 12.2.2.";\r
             }\r
           }\r
         }\r
-        leaf evc-id {\r
-          type mef-types:evc-id-type;\r
-          mandatory true;\r
-          description\r
-            "The EVC ID must be unique across all EVCs in the CEN." +\r
-            " The EVC ID must be non-NULL.";\r
-          reference "[MEF10.3] Section 8.2 [R7]. " +\r
-                "[MEF7.3] Section 11.1.1, Section 12.2.2.";\r
-        }\r
-        leaf evc-status {\r
-          type mef-types:evc-status-type;\r
-          config false;\r
-          description\r
-            "EVC Operational Status.";\r
-          reference "[MEF16] Section 5.3.";\r
-        }\r
-        leaf evc-type {\r
-          type mef-types:evc-type;\r
-          must "(. != 'point-to-point') or " +\r
-                "((. = 'point-to-point') and " +\r
-                "(count(../unis/uni[role = 'leaf']) = 0))" {\r
-            error-message "If EVC Type is Point-to-Point, all " +\r
-                    "UNI Roles must be root.";\r
-            description\r
-              "If EVC Type is Point-to-Point, all UNI Roles must " +\r
-              "be root.";\r
-          }\r
-          must "(. != 'multipoint-to-multipoint') or " +\r
-                "((. = 'multipoint-to-multipoint') and " +\r
-                "(count(../unis/uni[role = 'leaf']) = 0))" {\r
-            error-message "If EVC Type is " +\r
-                    "Multipoint-to-Multipoint, all UNI Roles " +\r
-                    "must be root.";\r
-            description\r
-              "If EVC Type is Multipoint-to-Multipoint, all UNI " +\r
-              "Roles must be root.";\r
-          }\r
-          must "(. != 'rooted-multipoint') or " +\r
-                "((. = 'rooted-multipoint') and " +\r
-                "(count(../unis/uni[role = 'root']) > 0) )" {\r
-            error-message "If EVC Type is Rooted-Multipoint, one " +\r
-                    "or more UNI Roles must be root.";\r
-            description\r
-              "If EVC Type is Rooted-Multipoint, one or more " +\r
-              "UNI Roles must be root.";\r
-          }\r
-          must "(. != 'point-to-point') or " +\r
-                "((. = 'point-to-point') and " +\r
-                "(count(../unis/uni) = 2))" {\r
-            error-message "If EVC Type is Point-to-Point, there " +\r
-                    "must be exactly 2 UNI configured for the EVC.";\r
-            description\r
-              "If EVC Type is Point-to-Point, there must be " +\r
-              "exactly 2 UNI configured for the EVC.";\r
-          }\r
-          must "(. != 'multipoint-to-multipoint') or " +\r
-                "((. = 'multipoint-to-multipoint') and " +\r
-                "(count(../unis/uni) > 1) and " +\r
-                "(count(../unis/uni) <= ../max-uni-count))" {\r
-            error-message "If EVC Type is " +\r
-                    "Multipoint-to-Multipoint, " +\r
-                    "there must be 2 or more UNI configured " +\r
-                    "for the EVC.";\r
-            description\r
-              "If EVC Type is Multipoint-to-Multipoint, " +\r
-              "there must be 2 or more UNI configured for " +\r
-              "the EVC.";\r
-          }\r
-          must "(. != 'rooted-multipoint') or " +\r
-                "((. = 'rooted-multipoint') and " +\r
-                "(count(../unis/uni) > 1) and " +\r
-                "(count(../unis/uni) <= ../max-uni-count))" {\r
-            error-message "If EVC Type is Rooted-Multipoint, " +\r
-                    "there must be 2 or more UNI configured for the EVC.";\r
-            description\r
-              "If EVC Type is Rooted-Multipoint, there must " +\r
-              "be 2 or more UNI configured for the EVC.";\r
-          }\r
-          must "(. != 'point-to-point') or " +\r
-                "((. = 'point-to-point') and " +\r
-                "(../max-uni-count = 2))" {\r
-            error-message "If EVC Type is Point-to-Point, " +\r
-                    "the value of max-uni-count must be 2.";\r
-            description\r
-              "If EVC Type is Point-to-Point, the value of " +\r
-              "max-uni-count must be 2.";\r
-          }\r
-          must "(. != 'multipoint-to-multipoint') or " +\r
-                "((. = 'multipoint-to-multipoint') and " +\r
-                "(../max-uni-count > 2))" {\r
-            error-message "If EVC Type is " +\r
-                    "Multipoint-to-Multipoint, the value of " +\r
-                    "max-uni-count must be at least 3.";\r
-            description\r
-              "If EVC Type is Multipoint-to-Multipoint, the " +\r
-              "value of max-uni-count must be at least 3.";\r
-          }\r
-          must "(. != 'rooted-multipoint') or " +\r
-                "((. = 'rooted-multipoint') and " +\r
-                "(../max-uni-count > 2))" {\r
-            error-message "If EVC Type is Rooted-Multipoint, " +\r
-                    "the value of max-uni-count must be at " +\r
-                    "least 3.";\r
-            description\r
-              "If EVC Type is Rooted-Multipoint, the value " +\r
-              "of max-uni-count must be at least 3.";\r
-          }\r
-          mandatory true;\r
-          description\r
-            "This EVC attribute describes the EVC as either " +\r
-            "Multipoint-To-Multipoint, Point-To-Point, or " +\r
-            "Rooted-Multipoint.";\r
-          reference "[MEF10.3] Section 8.1, [R4], [R5], " +\r
-                "[R10], [R11], [R12], [R13] and [R14]. " +\r
-                "[MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf admin-state-enabled {\r
-          type boolean;\r
-          default "true";\r
-          description\r
-            "EVC: Locked/Unlocked is inconsistent with " +\r
-            "Oper Status and will be confusing.";\r
-          reference "[MEF15]. [MEF7.3] Section 11.1.1.";\r
-        }\r
-        leaf elastic-enabled {\r
-          type boolean;\r
-          default "true";\r
-          description\r
-            "EVC: Elastic Enabled/Disabled.";\r
-          reference "[MEF7.3] Section 11.1.1.";\r
-        }\r
-        leaf elastic-service {\r
-          type mef-types:identifier45;\r
-          description\r
-            "EVC: Related to CE4Cloud Information Model.";\r
-          reference "[MEF7.3] Section 11.1.1.";\r
-        }\r
-        leaf max-uni-count {\r
-          type uint32 {\r
-            range "2..max";\r
-          }\r
-          must "(. > 2) or ((. = 2) and " +\r
-                "(../evc-type = 'point-to-point'))" {\r
-            error-message "If EVC Type is Point-to-Point, the " +\r
-                    "max-uni-count value must be 2.";\r
-            description\r
-              "If EVC Type is Point-to-Point, the max-uni-count " +\r
-              "value must be 2.";\r
-          }\r
-          must "(. = 2) or ((. > 2) and " +\r
-                "((../evc-type = 'multipoint-to-multipoint') or " +\r
-                "(../evc-type = 'rooted-multipoint')))" {\r
-            error-message "If EVC Type is " +\r
-                    "Multipoint-to-Multipoint or " +\r
-                    "Rooted-Multipoint, the max-uni-count value " +\r
-                    "must be at least 3.";\r
-            description\r
-              "If EVC Type is Multipoint-to-Multipoint or " +\r
-              "Rooted-Multipoint, the max-uni-count value " +\r
-              "must be at least 3.";\r
-          }\r
-          default "2";\r
-          description\r
-            "EVC:The Maximum Number of UNIs this EVC can be " +\r
-            "configured for (Default 2).If EVC Type is " +\r
-            "Multipoint-to-Multipoint or Rooted-Multipoint, " +\r
-            "the max-uni-count value must be at least 3. " +\r
-            "This value must be 2 for point-to-point mode.";\r
-          reference "[MEF10.3] [R14]. [MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf preserved-vlan {\r
-            type uint32;\r
-        }\r
-        leaf preserve-ce-vlan-id {\r
-          type boolean;\r
-          default "false";\r
-          description\r
-            "EVC:An EVC with more than one CE-VLAN ID mapping " +\r
-            "to it must have the same list of CE-VLAN IDs " +\r
-            "mapping to the EVC at each UNI in the EVC.";\r
-          reference "[MEF10.3] Section 8.6.1, [R24] [R25], " +\r
-                "Section 9.10.2, Section 9.12, [R81], Figure 20. " +\r
-                "[MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf cos-preserve-ce-vlan-id {\r
-          type boolean;\r
-          default "false";\r
-          description\r
-            "EVC: Preserve CE-VLAN ID for CoS.";\r
-          reference "[MEF10.3] Section 8.6.2, [R26]. " +\r
-                "[MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf evc-performance-sls {\r
-          type leafref {\r
-            path "/mef-global:mef-global/mef-global:slss/" +\r
-                    "mef-global:sls/mef-global:sls-id";\r
-          }\r
-          description\r
-            "EVC: EVC-specific performance objectives and " +\r
-            "parameters. Note that an SLS can also specify " +\r
-            "performance objectives spanning more than one EVC. " +\r
-            "By default, all the UNI associated with the EVC " +\r
-            "have this SLS applied for them.";\r
-          reference "[MEF10.3] Section 8.8, Section 10. " +\r
-                "[MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf unicast-svc-frm-delivery {\r
-          type mef-types:data-svc-frame-delivery-type;\r
-          default "unconditional";\r
-          description\r
-            "EVC: Unicast Data Service Frame Delivery Mode " +\r
-            "(unconditional[default], conditional, or discard).";\r
-          reference "[MEF10.3] Section 8.5.2,[R16], [R17], " +\r
-                "Section 8.8, Section 11. [MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf multicast-svc-frm-delivery {\r
-          type mef-types:data-svc-frame-delivery-type;\r
-          default "unconditional";\r
-          description\r
-            "EVC: Multicast Data Service Frame Delivery Mode " +\r
-            "(unconditional[default], conditional, or discard).";\r
-          reference "[MEF10.3] Section 8.5.2, [R16], [R18], " +\r
-                "Section 8.8, Section 11. [MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf broadcast-svc-frm-delivery {\r
-          type mef-types:data-svc-frame-delivery-type;\r
-          default "unconditional";\r
-          description\r
-            "EVC: Broadcast Data Service Frame Delivery Mode " +\r
-            "(unconditional[default], conditional, or discard).";\r
-          reference "[MEF10.3] Section 8.5.2, [R16], [R19], " +\r
-                "Section 8.8, Section 11. [MEF7.3] Section 12.2.2.";\r
-        }\r
-        leaf evc-meg-id {\r
-          type mef-types:identifier45;\r
-          description\r
-            "EVC: Identifies the Maintenance Entity Group (MEG) " +\r
-            "for this EVC.";\r
-          reference "[MEF7.3] Section 12.2.2. MEF 35.1.";\r
-        }\r
-        leaf max-svc-frame-size {\r
-          type mef-types:max-svc-frame-size-type;\r
-          default "1600";\r
-          description\r
-            "EVC: This attribute describes the maximum service " +\r
-            "frame size for the EVC.";\r
-          reference "[MEF10.3] Section 8.9, Section 9.7, [R71], " +\r
-                "[MEF6.2] Section 8.2.2 and MEF 22.1: [D2]. " +\r
-                "[MEF7.3] Section 12.2.2.";\r
-        }\r
       }\r
       leaf svc-id {\r
         type mef-types:retail-svc-id-type;\r
         description\r
-          "The MEF Service ID is a simple key used to " +\r
-          "distinguish MEF Service Configuration Groups.";\r
+                "The MEF Service ID is a simple key used to " +\r
+                "distinguish MEF Service Configuration Groups.";\r
         reference "[MEF10.3] Section 7.";\r
       }\r
       leaf sp-id {\r
         when "/mef-global:mef-global/mef-global:svc-providers" {\r
           description\r
-            "Only configure when the Global Service Providers " +\r
-            "list has been populated.";\r
+                    "Only configure when the Global Service Providers " +\r
+                    "list has been populated.";\r
         }\r
         type leafref {\r
           path "/mef-global:mef-global/mef-global:svc-providers/" +\r
-                "mef-global:svc-provider/mef-global:sp-id";\r
+                    "mef-global:svc-provider/mef-global:sp-id";\r
         }\r
         description\r
-          "The MEF Service Provider ID must be globally unique " +\r
-          "as all CENs and Subscribers must be supported by a " +\r
-          "specific Service Provider(SP). A SP can support " +\r
-          "multiple CENs.";\r
+                "The MEF Service Provider ID must be globally unique " +\r
+                "as all CENs and Subscribers must be supported by a " +\r
+                "specific Service Provider(SP). A SP can support " +\r
+                "multiple CENs.";\r
         reference "[MEF10.3] Section 7.";\r
       }\r
       leaf svc-type {\r
@@ -1584,10 +1623,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "svc-mux-enabled = 'true']) = 0))" {\r
           error-message "For EPL, Service Multiplexing must be " +\r
-                "disabled for all UNIs in the EVC UNI List.";\r
+                    "disabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EPL, Service Multiplexing must be disabled for " +\r
-            "all UNIs in the EVC UNI List.";\r
+                    "For EPL, Service Multiplexing must be disabled for " +\r
+                    "all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1598,10 +1637,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "bundling-enabled = 'true']) = 0))" {\r
           error-message "For EPL, Bundling must be disabled for " +\r
-                "all UNIs in the EVC UNI List.";\r
+                    "all UNIs in the EVC UNI List.";\r
           description\r
-            "For EPL, Bundling must be disabled for all UNIs in " +\r
-            "the EVC UNI List.";\r
+                    "For EPL, Bundling must be disabled for all UNIs in " +\r
+                    "the EVC UNI List.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1612,10 +1651,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "all-to-one-bundling-enabled = 'false']) = 0))" {\r
           error-message "For EPL, All-to-One Bundling must be " +\r
-                "enabled for all UNIs in the EVC UNI List.";\r
+                    "enabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EPL, All-to-One Bundling must be enabled for " +\r
-            "all UNIs in the EVC UNI List.";\r
+                    "For EPL, All-to-One Bundling must be enabled for " +\r
+                    "all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1626,76 +1665,76 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "max-evc-count != 1]) = 0))" {\r
           error-message "For EPL, Max EVC Count must be 1 for " +\r
-                "all UNIs in the EVC UNI List.";\r
+                    "all UNIs in the EVC UNI List.";\r
           description\r
-            "For EPL, Max EVC Count must be 1 for all UNIs " +\r
-            "in the EVC UNI List.";\r
+                    "For EPL, Max EVC Count must be 1 for all UNIs " +\r
+                    "in the EVC UNI List.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(count(../evc/unis/uni/egress-bwp-flows-per-eec/" +\r
                 "bwp-flow-per-eec) = 0))" {\r
           error-message "For EPL, Egress Bandwidth Profile per " +\r
-                "Egress Equivalence Class cannot be set for " +\r
-                "all UNIs in the EVC per UNI List.";\r
+                    "Egress Equivalence Class cannot be set for " +\r
+                    "all UNIs in the EVC per UNI List.";\r
           description\r
-            "For EPL, Egress Bandwidth Profile per Egress " +\r
-            "Equivalence Class cannot be set for all UNIs in the " +\r
-            "EVC per UNI List.";\r
+                    "For EPL, Egress Bandwidth Profile per Egress " +\r
+                    "Equivalence Class cannot be set for all UNIs in the " +\r
+                    "EVC per UNI List.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(count(../evc/unis/uni" +\r
                 "[src-mac-addr-limit-enabled = 'true']) = 0) )" {\r
           error-message "For EPL, Source MAC Address Limit must " +\r
-                "be disabled.";\r
+                    "be disabled.";\r
           description\r
-            "For EPL, Source MAC Address Limit must be disabled.";\r
+                    "For EPL, Source MAC Address Limit must be disabled.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(../evc/evc-type = 'point-to-point'))" {\r
           error-message "For EPL, EVC Type must be Point-to-Point.";\r
           description\r
-            "For EPL, EVC Type must be Point-to-Point.";\r
+                    "For EPL, EVC Type must be Point-to-Point.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(../evc/unicast-svc-frm-delivery = " +\r
                 "'unconditional'))" {\r
           error-message "For EPL, unicast-svc-frm-delivery " +\r
-                "must be unconditional.";\r
+                    "must be unconditional.";\r
           description\r
-            "For EPL, unicast-svc-frm-delivery must be " +\r
-            "unconditional.";\r
+                    "For EPL, unicast-svc-frm-delivery must be " +\r
+                    "unconditional.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(../evc/multicast-svc-frm-delivery = " +\r
                 "'unconditional'))" {\r
           error-message "For EPL, multicast-svc-frm-delivery " +\r
-                "must be unconditional.";\r
+                    "must be unconditional.";\r
           description\r
-            "For EPL, multicast-svc-frm-delivery must be " +\r
-            "unconditional.";\r
+                    "For EPL, multicast-svc-frm-delivery must be " +\r
+                    "unconditional.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(../evc/broadcast-svc-frm-delivery = " +\r
                 "'unconditional'))" {\r
           error-message "For EPL, broadcast-svc-frm-delivery " +\r
-                "must be unconditional.";\r
+                    "must be unconditional.";\r
           description\r
-            "For EPL, broadcast-svc-frm-delivery must be " +\r
-            "unconditional.";\r
+                    "For EPL, broadcast-svc-frm-delivery must be " +\r
+                    "unconditional.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(../evc/preserve-ce-vlan-id = 'true'))" {\r
           error-message "For EPL, CE-VLAN ID Preservation " +\r
-                "must be enabled.";\r
+                    "must be enabled.";\r
           description\r
-            "For EPL, CE-VLAN ID Preservation must be enabled.";\r
+                    "For EPL, CE-VLAN ID Preservation must be enabled.";\r
         }\r
         must "(. != 'epl') or ((. = 'epl') and " +\r
                 "(../evc/cos-preserve-ce-vlan-id = 'true'))" {\r
           error-message "For EPL, CE-VLAN ID CoS Preservation " +\r
-                "must be enabled.";\r
+                    "must be enabled.";\r
           description\r
-            "For EPL, CE-VLAN ID CoS Preservation must be enabled.";\r
+                    "For EPL, CE-VLAN ID CoS Preservation must be enabled.";\r
         }\r
         must "(. != 'evpl') or ((. = 'evpl') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1706,10 +1745,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "all-to-one-bundling-enabled = 'true']) = 0))" {\r
           error-message "For EVPL, All-to-One Bundling must be " +\r
-                "disabled for all UNIs in the EVC UNI List.";\r
+                    "disabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EVPL, All-to-One Bundling must be disabled for " +\r
-            "all UNIs in the EVC UNI List.";\r
+                    "For EVPL, All-to-One Bundling must be disabled for " +\r
+                    "all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'evpl') or ((. = 'evpl') and " +\r
                 "((../evc/unicast-svc-frm-delivery != " +\r
@@ -1721,19 +1760,19 @@ module mef-services {
                 "count(../evc/unis/uni" +\r
                 "[src-mac-addr-limit-enabled = 'true']) = 0))" {\r
           error-message "For EVPL, Source MAC Address Limit must " +\r
-                "be disabled for all UNIs in the EVC per " +\r
-                "UNI List if all 3 -svc-frm-delivery values " +\r
-                "are unconditional.";\r
+                    "be disabled for all UNIs in the EVC per " +\r
+                    "UNI List if all 3 -svc-frm-delivery values " +\r
+                    "are unconditional.";\r
           description\r
-            "For EVPL, Source MAC Address Limit must be disabled " +\r
-            "for all UNIs in the EVC per UNI List if all " +\r
-            "3 -svc-frm-delivery values are unconditional.";\r
+                    "For EVPL, Source MAC Address Limit must be disabled " +\r
+                    "for all UNIs in the EVC per UNI List if all " +\r
+                    "3 -svc-frm-delivery values are unconditional.";\r
         }\r
         must "(. != 'evpl') or ((. = 'evpl') and " +\r
                 "(../evc/evc-type = 'point-to-point'))" {\r
           error-message "For EVPL, EVC Type must be Point-to-Point.";\r
           description\r
-            "For EVPL, EVC Type must be Point-to-Point.";\r
+                    "For EVPL, EVC Type must be Point-to-Point.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1744,10 +1783,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "svc-mux-enabled = 'true']) = 0))" {\r
           error-message "For EP-LAN, Service Multiplexing must " +\r
-                "be disabled for all UNIs in the EVC UNI List.";\r
+                    "be disabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EP-LAN, Service Multiplexing must be disabled " +\r
-            "for all UNIs in the EVC UNI List.";\r
+                    "For EP-LAN, Service Multiplexing must be disabled " +\r
+                    "for all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1758,10 +1797,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "bundling-enabled = 'true']) = 0))" {\r
           error-message "For EP-LAN, Bundling must be disabled " +\r
-                "for all UNIs in the EVC UNI List.";\r
+                    "for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EP-LAN, Bundling must be disabled for all UNIs " +\r
-            "in the EVC UNI List.";\r
+                    "For EP-LAN, Bundling must be disabled for all UNIs " +\r
+                    "in the EVC UNI List.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1772,11 +1811,11 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "all-to-one-bundling-enabled = 'false']) = 0))" {\r
           error-message "For EP-LAN, All-to-One Bundling " +\r
-                "must be enabled for all UNIs in the " +\r
-                "EVC UNI List.";\r
+                    "must be enabled for all UNIs in the " +\r
+                    "EVC UNI List.";\r
           description\r
-            "For EP-LAN, All-to-One Bundling must be enabled " +\r
-            "for all UNIs in the EVC UNI List.";\r
+                    "For EP-LAN, All-to-One Bundling must be enabled " +\r
+                    "for all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1787,41 +1826,41 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "max-evc-count != 1]) = 0))" {\r
           error-message "For EP-LAN, Max EVC Count must be 1 " +\r
-                "for all UNIs in the EVC UNI List.";\r
+                    "for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EP-LAN, Max EVC Count must be 1 for all UNIs in " +\r
-            "the EVC UNI List.";\r
+                    "For EP-LAN, Max EVC Count must be 1 for all UNIs in " +\r
+                    "the EVC UNI List.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(../evc/evc-type = 'multipoint-to-multipoint'))" {\r
           error-message "For EP-LAN, EVC Type must be " +\r
-                "Multipoint-to-Multipoint.";\r
+                    "Multipoint-to-Multipoint.";\r
           description\r
-            "For EP-LAN, EVC Type must be " +\r
-            "Multipoint-to-Multipoint.";\r
+                    "For EP-LAN, EVC Type must be " +\r
+                    "Multipoint-to-Multipoint.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(../evc/preserve-ce-vlan-id = 'true'))" {\r
           error-message "For EP-LAN, CE-VLAN ID Preservation " +\r
-                "must be enabled.";\r
+                    "must be enabled.";\r
           description\r
-            "For EP-LAN, CE-VLAN ID Preservation must be enabled.";\r
+                    "For EP-LAN, CE-VLAN ID Preservation must be enabled.";\r
         }\r
         must "(. != 'eplan') or ((. = 'eplan') and " +\r
                 "(../evc/cos-preserve-ce-vlan-id = 'true'))" {\r
           error-message "For EP-LAN, CE-VLAN ID CoS Preservation " +\r
-                "must be enabled.";\r
+                    "must be enabled.";\r
           description\r
-            "For EP-LAN, CE-VLAN ID CoS Preservation must be " +\r
-            "enabled.";\r
+                    "For EP-LAN, CE-VLAN ID CoS Preservation must be " +\r
+                    "enabled.";\r
         }\r
         must "(. != 'evplan') or ((. = 'evplan') and " +\r
                 "(../evc/evc-type = 'multipoint-to-multipoint'))" {\r
           error-message "For EVP-LAN, EVC Type must be " +\r
-                "Multipoint-to-Multipoint.";\r
+                    "Multipoint-to-Multipoint.";\r
           description\r
-            "For EVP-LAN, EVC Type must be " +\r
-            "Multipoint-to-Multipoint.";\r
+                    "For EVP-LAN, EVC Type must be " +\r
+                    "Multipoint-to-Multipoint.";\r
         }\r
         must "(. != 'evplan') or ((. = 'evplan') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1832,10 +1871,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "all-to-one-bundling-enabled = 'true']) = 0))" {\r
           error-message "For EVP-LAN, All-to-One Bundling must " +\r
-                "be disabled for all UNIs in the EVC UNI List.";\r
+                    "be disabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EVP-LAN, All-to-One Bundling must be disabled " +\r
-            "for all UNIs in the EVC UNI List.";\r
+                    "For EVP-LAN, All-to-One Bundling must be disabled " +\r
+                    "for all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1846,11 +1885,11 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "svc-mux-enabled = 'true']) = 0))" {\r
           error-message "For EP-TREE, Service Multiplexing " +\r
-                "must be disabled for all UNIs in the " +\r
-                "EVC UNI List.";\r
+                    "must be disabled for all UNIs in the " +\r
+                    "EVC UNI List.";\r
           description\r
-            "For EP-TREE, Service Multiplexing must be disabled " +\r
-            "for all UNIs in the EVC UNI List.";\r
+                    "For EP-TREE, Service Multiplexing must be disabled " +\r
+                    "for all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1861,10 +1900,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "bundling-enabled = 'true']) = 0))" {\r
           error-message "For EP-TREE, Bundling must be disabled " +\r
-                "for all UNIs in the EVC UNI List.";\r
+                    "for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EP-TREE, Bundling must be disabled for all UNIs " +\r
-            "in the EVC UNI List.";\r
+                    "For EP-TREE, Bundling must be disabled for all UNIs " +\r
+                    "in the EVC UNI List.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1875,10 +1914,10 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "all-to-one-bundling-enabled = 'false']) = 0))" {\r
           error-message "For EP-TREE, All-to-One Bundling must " +\r
-                "be enabled for all UNIs in the EVC UNI List.";\r
+                    "be enabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EP-TREE, All-to-One Bundling must be enabled " +\r
-            "for all UNIs in the EVC UNI List.";\r
+                    "For EP-TREE, All-to-One Bundling must be enabled " +\r
+                    "for all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1889,32 +1928,32 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "max-evc-count != 1]) = 0))" {\r
           error-message "For EP-TREE, Max EVC Count must be 1 " +\r
-                "for all UNIs in the EVC UNI List.";\r
+                    "for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EP-TREE, Max EVC Count must be 1 for all UNIs " +\r
-            "in the EVC UNI List.";\r
+                    "For EP-TREE, Max EVC Count must be 1 for all UNIs " +\r
+                    "in the EVC UNI List.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(../evc/evc-type = 'rooted-multipoint'))" {\r
           error-message "For EP-TREE, EVC Type must be " +\r
-                "Rooted-Multipoint.";\r
+                    "Rooted-Multipoint.";\r
           description\r
-            "For EP-TREE, EVC Type must be Rooted-Multipoint.";\r
+                    "For EP-TREE, EVC Type must be Rooted-Multipoint.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(../evc/preserve-ce-vlan-id = 'true'))" {\r
           error-message "For EP-TREE, CE-VLAN ID Preservation " +\r
-                "must be enabled.";\r
+                    "must be enabled.";\r
           description\r
-            "For EP-TREE, CE-VLAN ID Preservation must be enabled.";\r
+                    "For EP-TREE, CE-VLAN ID Preservation must be enabled.";\r
         }\r
         must "(. != 'eptree') or ((. = 'eptree') and " +\r
                 "(../evc/cos-preserve-ce-vlan-id = 'true'))" {\r
           error-message "For EP-TREE, CE-VLAN ID " +\r
-                "CoS Preservation must be enabled.";\r
+                    "CoS Preservation must be enabled.";\r
           description\r
-            "For EP-TREE, CE-VLAN ID CoS Preservation must be " +\r
-            "enabled.";\r
+                    "For EP-TREE, CE-VLAN ID CoS Preservation must be " +\r
+                    "enabled.";\r
         }\r
         must "(. != 'evptree') or ((. = 'evptree') and " +\r
                 "(count(/mef-interfaces:mef-interfaces/" +\r
@@ -1925,39 +1964,39 @@ module mef-services {
                 "[mef-interfaces:uni-id/../mef-interfaces:" +\r
                 "all-to-one-bundling-enabled = 'true']) = 0))" {\r
           error-message "For EVP-TREE, All-to-One Bundling " +\r
-                "must be disabled for all UNIs in the EVC UNI List.";\r
+                    "must be disabled for all UNIs in the EVC UNI List.";\r
           description\r
-            "For EVP-TREE, All-to-One Bundling must be disabled " +\r
-            "for all UNIs in the EVC UNI List.";\r
+                    "For EVP-TREE, All-to-One Bundling must be disabled " +\r
+                    "for all UNIs in the EVC UNI List.";\r
         }\r
         must "(. != 'evptree') or ((. = 'evptree') and " +\r
                 "(../evc/evc-type = 'rooted-multipoint'))" {\r
           error-message "For EVP-TREE, EVC Type must be " +\r
-                "Rooted-Multipoint.";\r
+                    "Rooted-Multipoint.";\r
           description\r
-            "For EVP-TREE, EVC Type must be Rooted-Multipoint.";\r
+                    "For EVP-TREE, EVC Type must be Rooted-Multipoint.";\r
         }\r
         description\r
-          "The MEF Service Type.";\r
+                "The MEF Service Type.";\r
       }\r
       leaf user-label {\r
         type mef-types:identifier45;\r
         description\r
-          "This MEF user label is set by the user to a value " +\r
-          "that is easier to identify than the Service ID.";\r
+                "This MEF user label is set by the user to a value " +\r
+                "that is easier to identify than the Service ID.";\r
       }\r
       leaf svc-entity {\r
         type mef-types:service-entity-type;\r
         default "evc";\r
         description\r
-          "MEF Service Entity.";\r
+                "MEF Service Entity.";\r
         reference "[MEF12.2] Table 3.";\r
       }\r
       leaf tenant-id {\r
-          type leafref{\r
-              path "/mef-global:mef-global/mef-global:tenants-instances/mef-global:tenant-list/mef-global:name";\r
-          }\r
-      }      \r
+        type leafref {\r
+          path "/mef-global:mef-global/mef-global:tenants-instances/mef-global:tenant-list/mef-global:name";\r
+        }\r
+      }\r
     }\r
   }\r
-}
\ No newline at end of file
+}\r
index a90fcffbdf2234ab4f1f946620554acc97eefd6b..ce7cee6ee0651b338ec3919a924e8436ac8dcb85 100644 (file)
 module mef-topology {\r
   namespace "http://metroethernetforum.org/ns/yang/mef-topology";\r
   prefix mef-topology;\r
-  import mef-types {\r
-    prefix mef-types;\r
-  }\r
+  import mef-types { prefix mef-types; }\r
   organization "Metro Ethernet Forum";\r
   contact\r
-    "Web URL: http://metroethernetforum.org/ \\\r
-     E-mail:  mibs@metroethernetforum.org \\\r
-     Postal:  Metro Ethernet Forum \\\r
-              6033 W. Century Boulevard, Suite 1107 \\\r
-              Los Angeles, CA 90045 \\\r
-              U.S.A. \\\r
-     Phone:   +1 310-642-2800 \\\r
-     Fax:     +1 310-642-2808";\r
+    "Web URL: http://metroethernetforum.org/ \\ E-mail: mibs@metroethernetforum.org\r
+    \\ Postal: Metro Ethernet Forum \\ 6033 W. Century Boulevard,\r
+    Suite 1107 \\ Los Angeles, CA 90045 \\ U.S.A. \\ Phone: +1 310-642-2800\r
+    \\ Fax: +1 310-642-2808";\r
   description\r
     "This module models the NMS level view of the network devices,\r
-     their physical interfaces, and the network topology.\r
-     When the NMS discovers a network device,it is to pull the\r
-     device configuration and operational status as expected for\r
-     an NMS. Once the NMS has a network device's configuration,\r
-     it creates the /mef-topology/devices/device{} entry and\r
-     populates the list of physical interfaces. The Peers entries\r
-     are populated as configuration to reflect physical cabling\r
-     interconnections.Hints could be detected from LLDP Neighbor\r
-     information[802.1AB].\r
-      \r
-     Reference Overview:\r
-     A number of base documents have been used to create\r
-     the MEF Topology YANG Module. The following are the\r
-     abbreviations for the baseline documents:\r
-     [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types',\r
-     2013-07-15 \r
-     [RFC 6643] refers to IETF RFC 6643 'Translation of Structure\r
-     of Management Information\r
-     Version 2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25 \r
-     [802.1AB] refers to 'Station and Media Access Control\r
-     Connectivity Discovery', IEEE 802.1AB-2009, September 2009\r
-     [802.1q] refers to IEEE 802.1Q-2011 'IEEE Standard for Local\r
-     and metropolitan area networks --Media Access Control (MAC)\r
-     Bridges and Virtual Bridged Local Area Networks, August 2011\r
-     [802-2001] refers to 'IEEE Standard for Local and Metropolitan\r
-     Area Networks: Overview and Architecture', IEEE 802-2001,\r
-     February 2002\r
-     [MEF10.3] refers to MEF 10.3\r
-     'Ethernet Services Attributes Phase 3', October 2013\r
-     [MEF6.2] refers to MEF 6.2\r
-     'EVC Ethernet Services Defintions Phase 3', August 2014\r
-     [MEF40] refers to MEF 40\r
-     'UNI and EVC Definition of Managed Objects', April 2013\r
-     [MEF45] refers to MEF 45 'Multi-CEN L2CP', August 2014\r
-     [MEF7.2] refers to MEF 7.2\r
-     'Carrier Ethernet Management Information Model', April 2013\r
-     [MEF7.3] refers to MEF 7.3\r
-     'Carrier Ethernet Management Information Model',\r
-     Working Draft #1 2015\r
-     [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version 2)',\r
-     December 1999\r
-     [RFC 2863] refers to IETF RFC 2863 'The Interfaces Group MIB',\r
-     June 2000\r
-     [RFC 3419] refers to IETF RFC 3419\r
-     'Textual Conventions for Transport Addresses', December 2002\r
-     [Y.1731] refers to ITU-T Y.1731\r
-     'OAM functions and mechanisms for Ethernet based networks',\r
-     July 2011\r
-     [Q.840.1] refers to ITU-T Q.840.1\r
-     'Requirements and analysis for NMS-EMS management interface\r
-     of Ethernet over Transport and Metro Ethernet\r
-     Network(EoT/MEN)' March 2007";\r
+    their physical interfaces, and the network topology. When the\r
+    NMS discovers a network device,it is to pull the device configuration\r
+    and operational status as expected for an NMS. Once the NMS has\r
+    a network device's configuration, it creates the /mef-topology/devices/device{}\r
+    entry and populates the list of physical interfaces. The Peers\r
+    entries are populated as configuration to reflect physical cabling\r
+    interconnections.Hints could be detected from LLDP Neighbor information[802.1AB].\r
+    Reference Overview: A number of base documents have been used\r
+    to create the MEF Topology YANG Module. The following are the\r
+    abbreviations for the baseline documents: [RFC 6991] refers to\r
+    IETF RFC 6991 'Common YANG Data Types', 2013-07-15 [RFC 6643]\r
+    refers to IETF RFC 6643 'Translation of Structure of Management\r
+    Information Version 2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25\r
+    [802.1AB] refers to 'Station and Media Access Control Connectivity\r
+    Discovery', IEEE 802.1AB-2009, September 2009 [802.1q] refers\r
+    to IEEE 802.1Q-2011 'IEEE Standard for Local and metropolitan\r
+    area networks --Media Access Control (MAC) Bridges and Virtual\r
+    Bridged Local Area Networks, August 2011 [802-2001] refers to\r
+    'IEEE Standard for Local and Metropolitan Area Networks: Overview\r
+    and Architecture', IEEE 802-2001, February 2002 [MEF10.3] refers\r
+    to MEF 10.3 'Ethernet Services Attributes Phase 3', October 2013\r
+    [MEF6.2] refers to MEF 6.2 'EVC Ethernet Services Defintions Phase\r
+    3', August 2014 [MEF40] refers to MEF 40 'UNI and EVC Definition\r
+    of Managed Objects', April 2013 [MEF45] refers to MEF 45 'Multi-CEN\r
+    L2CP', August 2014 [MEF7.2] refers to MEF 7.2 'Carrier Ethernet\r
+    Management Information Model', April 2013 [MEF7.3] refers to MEF\r
+    7.3 'Carrier Ethernet Management Information Model', Working Draft\r
+    #1 2015 [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version\r
+    2)', December 1999 [RFC 2863] refers to IETF RFC 2863 'The Interfaces\r
+    Group MIB', June 2000 [RFC 3419] refers to IETF RFC 3419 'Textual\r
+    Conventions for Transport Addresses', December 2002 [Y.1731] refers\r
+    to ITU-T Y.1731 'OAM functions and mechanisms for Ethernet based\r
+    networks', July 2011 [Q.840.1] refers to ITU-T Q.840.1 'Requirements\r
+    and analysis for NMS-EMS management interface of Ethernet over\r
+    Transport and Metro Ethernet Network(EoT/MEN)' March 2007";\r
   revision 2015-05-26 {\r
     description\r
-      "Formal Project Review Draft 1.";\r
+        "Formal Project Review Draft 1.";\r
     reference "EVC Ethernet Services Definitions YANG Modules " +\r
-            "(MEF XX), TBD";\r
-  }    \r
-      \r
+        "(MEF XX), TBD";\r
+  }\r
+\r
   container mef-topology {\r
     description\r
-      "MEF Topology";\r
+        "MEF Topology";\r
     container devices {\r
       description\r
-        "Network Devices in the CEN.";\r
+            "Network Devices in the CEN.";\r
       list device {\r
         key "dev-id";\r
         description\r
-          "Network Device List.";\r
+                "Network Device List.";\r
         container interfaces {\r
           description\r
-            "Physical Ports/Interfaces associated with this " +\r
-            "Network Device.";\r
+                    "Physical Ports/Interfaces associated with this " +\r
+                    "Network Device.";\r
           list interface {\r
             key "phy";\r
             description\r
-              "External Interface for the Network Device.";\r
+                        "External Interface for the Network Device.";\r
             leaf phy {\r
               type mef-types:identifier45;\r
               description\r
-                "The Phy Name for the Physical Port.";\r
+                            "The Phy Name for the Physical Port.";\r
             }\r
             leaf ieee8023-phy {\r
               type identityref {\r
                 base mef-types:ieee-8023-interface-type;\r
               }\r
               description\r
-                "The Physical Layer for each physical link " +\r
-                "implementing the UNI MUST be one of the PHYs " +\r
-                "listed in IEEE Std 802.3–2012 but excluding " +\r
-                "1000BASE-PX-D and 1000BASE-PX-U.";\r
+                            "The Physical Layer for each physical link " +\r
+                            "implementing the UNI MUST be one of the PHYs " +\r
+                            "listed in IEEE Std 802.3–2012 but excluding " +\r
+                            "1000BASE-PX-D and 1000BASE-PX-U.";\r
               reference "[MEF10.3] Section 9.2 [R60].";\r
             }\r
           }\r
@@ -115,21 +92,21 @@ module mef-topology {
           type mef-types:device-role;\r
           default "ce";\r
           description\r
-            "The role of this device in the network.";\r
+                    "The role of this device in the network.";\r
         }\r
         leaf dev-id {\r
           type mef-types:identifier45;\r
           description\r
-            "Device Identifier.";\r
+                    "Device Identifier.";\r
         }\r
         leaf device-name {\r
-            type string;\r
+          type string;\r
         }\r
       }\r
     }\r
     container connections {\r
       description\r
-        "Physical Network Connections";      \r
+            "Physical Network Connections";\r
       list connection {\r
         key "name";\r
         leaf name {\r
@@ -137,41 +114,41 @@ module mef-topology {
         }\r
         container endpoint-1 {\r
           description\r
-            "End Point 1";\r
+                    "End Point 1";\r
           leaf device {\r
             type leafref {\r
-                path "../../../../devices/device/dev-id";\r
+              path "../../../../devices/device/dev-id";\r
             }\r
             description\r
-              "Hostname or IP Address for the End Point's Device.";\r
+                        "Hostname or IP Address for the End Point's Device.";\r
           }\r
           leaf interface {\r
             type leafref {\r
               path "../../../../devices/device[dev-id = current()/../device]/interfaces/interface/phy";\r
             }\r
             description\r
-              "The Phy Name for the End Point's Physical Port.";\r
+                        "The Phy Name for the End Point's Physical Port.";\r
           }\r
         }\r
         container endpoint-2 {\r
           description\r
-            "End Point 2";\r
+                    "End Point 2";\r
           leaf device {\r
             type leafref {\r
               path "../../../../devices/device/dev-id";\r
             }\r
             description\r
-              "Hostname or IP Address for the End Point's Device.";\r
+                        "Hostname or IP Address for the End Point's Device.";\r
           }\r
           leaf interface {\r
             type leafref {\r
               path "../../../../devices/device[dev-id = current()/../device]/interfaces/interface/phy";\r
             }\r
             description\r
-              "The Phy Name for the End Point's Physical Port.";\r
+                        "The Phy Name for the End Point's Physical Port.";\r
           }\r
         }\r
       }\r
     }\r
   }\r
-}
\ No newline at end of file
+}\r
index 258b3cbf9c03b0b7f87b965a3002b1b90e367cc0..8202505316ece5eec6405bb30093930c80b763fa 100644 (file)
@@ -3,281 +3,262 @@ module mef-types {
   prefix mef-types;\r
   organization "Metro Ethernet Forum";\r
   contact\r
-    "Web URL: http://metroethernetforum.org/\r
-     E-mail:  mibs@metroethernetforum.org\r
-     Postal:  Metro Ethernet Forum\r
-              6033 W. Century Boulevard, Suite 1107\r
-              Los Angeles, CA 90045\r
-              U.S.A.\r
-     Phone:   +1 310-642-2800\r
-     Fax:     +1 310-642-2808";\r
+    "Web URL: http://metroethernetforum.org/ E-mail: mibs@metroethernetforum.org\r
+    Postal: Metro Ethernet Forum 6033 W. Century Boulevard, Suite\r
+    1107 Los Angeles, CA 90045 U.S.A. Phone: +1 310-642-2800 Fax:\r
+    +1 310-642-2808";\r
   description\r
-    "This module defines the YANG Type Definitions and shared\r
-     (templated) groupings of data elementsused by MEF YANG Modules.\r
-      \r
-     Reference Overview:\r
-     A number of base documents have been used to create\r
-     the MEF Types YANG Module. The following are the\r
-     abbreviations for the baseline documents:\r
-     [RFC 6991] refers to IETF RFC 6991 'Common YANG Data Types',\r
-     2013-07-15 \r
-     [RFC 6643] refers to IETF RFC 6643 'Translation of Structure\r
-     of Management Information\r
-     Version 2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25 \r
-     [802.1AB] refers to 'Station and Media Access Control\r
-     Connectivity Discovery', IEEE 802.1AB-2009, September 2009\r
-     [802.1q] refers to IEEE 802.1Q-2011 'IEEE Standard for Local\r
-     and metropolitan area networks --Media Access Control (MAC)\r
-     Bridges and Virtual Bridged Local Area Networks, August 2011\r
-     [802-2001] refers to 'IEEE Standard for Local and Metropolitan\r
-     Area Networks: Overview and Architecture', IEEE 802-2001,\r
-     February 2002\r
-     [MEF10.3] refers to MEF 10.3\r
-     'Ethernet Services Attributes Phase 3', October 2013\r
-     [MEF6.2] refers to MEF 6.2\r
-     'EVC Ethernet Services Defintions Phase 3', August 2014\r
-     [MEF40] refers to MEF 40\r
-     'UNI and EVC Definition of Managed Objects', April 2013\r
-     [MEF45] refers to MEF 45 'Multi-CEN L2CP', August 2014\r
-     [MEF7.2] refers to MEF 7.2\r
-     'Carrier Ethernet Management Information Model', April 2013\r
-     [MEF7.3] refers to MEF 7.3\r
-     'Carrier Ethernet Management Information Model',\r
-     Working Draft #1 2015\r
-     [RFC 2737] refers to IETF RFC 2737 'Entity MIB (Version 2)',\r
-     December 1999\r
-     [RFC 2863] refers to IETF RFC 2863 'The Interfaces Group MIB',\r
-     June 2000\r
-     [RFC 3419] refers to IETF RFC 3419\r
-     'Textual Conventions for Transport Addresses', December 2002\r
-     [Y.1731] refers to ITU-T Y.1731\r
-     'OAM functions and mechanisms for Ethernet based networks',\r
-     July 2011\r
-     [Q.840.1] refers to ITU-T Q.840.1\r
-     'Requirements and analysis for NMS-EMS management interface\r
-     of Ethernet over Transport and Metro Ethernet\r
-     Network(EoT/MEN)' March 2007";\r
+    "This module defines the YANG Type Definitions and shared (templated)\r
+    groupings of data elementsused by MEF YANG Modules. Reference\r
+    Overview: A number of base documents have been used to create\r
+    the MEF Types YANG Module. The following are the abbreviations\r
+    for the baseline documents: [RFC 6991] refers to IETF RFC 6991\r
+    'Common YANG Data Types', 2013-07-15 [RFC 6643] refers to IETF\r
+    RFC 6643 'Translation of Structure of Management Information Version\r
+    2 (SMIv2) MIB Modules to YANG Modules', 2011-11-25 [802.1AB] refers\r
+    to 'Station and Media Access Control Connectivity Discovery',\r
+    IEEE 802.1AB-2009, September 2009 [802.1q] refers to IEEE 802.1Q-2011\r
+    'IEEE Standard for Local and metropolitan area networks --Media\r
+    Access Control (MAC) Bridges and Virtual Bridged Local Area Networks,\r
+    August 2011 [802-2001] refers to 'IEEE Standard for Local and\r
+    Metropolitan Area Networks: Overview and Architecture', IEEE 802-2001,\r
+    February 2002 [MEF10.3] refers to MEF 10.3 'Ethernet Services\r
+    Attributes Phase 3', October 2013 [MEF6.2] refers to MEF 6.2 'EVC\r
+    Ethernet Services Defintions Phase 3', August 2014 [MEF40] refers\r
+    to MEF 40 'UNI and EVC Definition of Managed Objects', April 2013\r
+    [MEF45] refers to MEF 45 'Multi-CEN L2CP', August 2014 [MEF7.2]\r
+    refers to MEF 7.2 'Carrier Ethernet Management Information Model',\r
+    April 2013 [MEF7.3] refers to MEF 7.3 'Carrier Ethernet Management\r
+    Information Model', Working Draft #1 2015 [RFC 2737] refers to\r
+    IETF RFC 2737 'Entity MIB (Version 2)', December 1999 [RFC 2863]\r
+    refers to IETF RFC 2863 'The Interfaces Group MIB', June 2000\r
+    [RFC 3419] refers to IETF RFC 3419 'Textual Conventions for Transport\r
+    Addresses', December 2002 [Y.1731] refers to ITU-T Y.1731 'OAM\r
+    functions and mechanisms for Ethernet based networks', July 2011\r
+    [Q.840.1] refers to ITU-T Q.840.1 'Requirements and analysis for\r
+    NMS-EMS management interface of Ethernet over Transport and Metro\r
+    Ethernet Network(EoT/MEN)' March 2007";\r
   revision 2015-05-26 {\r
     description\r
-      "Formal Project Review Draft 1.";\r
+        "Formal Project Review Draft 1.";\r
     reference "EVC Ethernet Services Definitions YANG Modules " +\r
-            "(MEF XX), TBD";\r
+        "(MEF XX), TBD";\r
   }\r
   identity ieee-8023-interface-type {\r
     description\r
-      "Base identity from which specific IEEE 802.3-2012 " +\r
-      "interface types are derived. This list was taken " +\r
-      "from Section 1.4 'Definitions'.";\r
+        "Base identity from which specific IEEE 802.3-2012 " +\r
+        "interface types are derived. This list was taken " +\r
+        "from Section 1.4 'Definitions'.";\r
   }\r
   identity ieee8023-10BASE2 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE2";\r
+        "10BASE2";\r
   }\r
   identity ieee8023-10BASE5 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE5";\r
+        "10BASE5";\r
   }\r
   identity ieee8023-10BASE-F {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASEF";\r
+        "10BASEF";\r
   }\r
   identity ieee8023-10BASE-FB {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE-FB";\r
+        "10BASE-FB";\r
   }\r
   identity ieee8023-1000BASE-PX-D {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-PX-D";\r
+        "1000BASE-PX-D";\r
   }\r
   identity ieee8023-1000BASE-PX-U {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-PX-U";\r
+        "1000BASE-PX-U";\r
   }\r
   identity ieee8023-10BASE-FL {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE-FL";\r
+        "10BASE-FL";\r
   }\r
   identity ieee8023-10BASE-FP {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE-FP";\r
+        "10BASE-FP";\r
   }\r
   identity ieee8023-10BASE-T {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE-T";\r
+        "10BASE-T";\r
   }\r
   identity ieee8023-10BASE-Te {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BASE-Te";\r
+        "10BASE-Te";\r
   }\r
   identity ieee8023-10BROAD36 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10BROAD36";\r
+        "10BROAD36";\r
   }\r
   identity ieee8023-10PASS-TS {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10PASS-TS";\r
+        "10PASS-TS";\r
   }\r
   identity ieee8023-100BASE-BX10 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-BX10";\r
+        "100BASE-BX10";\r
   }\r
   identity ieee8023-100BASE-FX {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-FX";\r
+        "100BASE-FX";\r
   }\r
   identity ieee8023-100BASE-LX10 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-LX10";\r
+        "100BASE-LX10";\r
   }\r
   identity ieee8023-100BASE-T {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-T";\r
+        "100BASE-T";\r
   }\r
   identity ieee8023-100BASE-T2 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-T2";\r
+        "100BASE-T2";\r
   }\r
   identity ieee8023-100BASE-T4 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-T4";\r
+        "100BASE-T4";\r
   }\r
   identity ieee8023-100BASE-TX {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-TX";\r
+        "100BASE-TX";\r
   }\r
   identity ieee8023-100BASE-X {\r
     base ieee-8023-interface-type;\r
     description\r
-      "100BASE-X";\r
+        "100BASE-X";\r
   }\r
   identity ieee8023-1000BASE-BX10 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-BX10";\r
+        "1000BASE-BX10";\r
   }\r
   identity ieee8023-1000BASE-CX {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-CX";\r
+        "1000BASE-CX";\r
   }\r
   identity ieee8023-1000BASE-KX {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-KX";\r
+        "1000BASE-KX";\r
   }\r
   identity ieee8023-1000BASE-LX {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-LX";\r
+        "1000BASE-LX";\r
   }\r
   identity ieee8023-1000BASE-LX10 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-LX10";\r
+        "1000BASE-LX10";\r
   }\r
   identity ieee8023-1000BASE-PX10 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-PX10";\r
+        "1000BASE-PX10";\r
   }\r
   identity ieee8023-1000BASE-PX20 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-PX20";\r
+        "1000BASE-PX20";\r
   }\r
   identity ieee8023-1000BASE-SX {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-SX";\r
+        "1000BASE-SX";\r
   }\r
   identity ieee8023-1000BASE-T {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-T";\r
+        "1000BASE-T";\r
   }\r
   identity ieee8023-1000BASE-X {\r
     base ieee-8023-interface-type;\r
     description\r
-      "1000BASE-X";\r
+        "1000BASE-X";\r
   }\r
   identity ieee8023-10GBASE-CX4 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-CX4";\r
+        "10GBASE-CX4";\r
   }\r
   identity ieee8023-10GBASE-E {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-E";\r
+        "10GBASE-E";\r
   }\r
   identity ieee8023-10GBASE-ER {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-ER";\r
+        "10GBASE-ER";\r
   }\r
   identity ieee8023-10GBASE-EW {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-EW";\r
+        "10GBASE-EW";\r
   }\r
   identity ieee8023-10GBASE-KR {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-KR";\r
+        "10GBASE-KR";\r
   }\r
   identity ieee8023-10GBASE-KX4 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-KX4";\r
+        "10GBASE-KX4";\r
   }\r
   identity ieee8023-10GBASE-L {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-L";\r
+        "10GBASE-L";\r
   }\r
   identity ieee8023-10GBASE-LR {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-LR";\r
+        "10GBASE-LR";\r
   }\r
   identity ieee8023-10GBASE-LRM {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-LRM";\r
+        "10GBASE-LRM";\r
   }\r
   identity ieee8023-10GBASE-LW {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-LW";\r
+        "10GBASE-LW";\r
   }\r
   identity ieee8023-10GBASE-LX4 {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-LX4";\r
+        "10GBASE-LX4";\r
   }\r
   identity ieee8023-10GBASE-PR {\r
     base ieee-8023-interface-type;\r
     description\r
-      "10GBASE-PR";\r
+        "10GBASE-PR";\r
   }\r
   typedef identifier45 {\r
     type string {\r
@@ -285,12 +266,12 @@ module mef-types {
       pattern "[ -~]+";\r
     }\r
     description\r
-      "This type definition accepts any visible ASCII character " +\r
-      "plus the <space> character.The string must be an RFC 2579 " +\r
-      "Display String (RFC 854 ASCII 0.00-0.7f) but not contain " +\r
-      "the characters 0.00 through 0.1f. It does not accept " +\r
-      "the <delete> character (0.7f) despite the current MEF " +\r
-      "specification not disallowing it.";\r
+        "This type definition accepts any visible ASCII character " +\r
+        "plus the <space> character.The string must be an RFC 2579 " +\r
+        "Display String (RFC 854 ASCII 0.00-0.7f) but not contain " +\r
+        "the characters 0.00 through 0.1f. It does not accept " +\r
+        "the <delete> character (0.7f) despite the current MEF " +\r
+        "specification not disallowing it.";\r
     reference "[MEF10.3] [R8], [R9]. [RFC2579]. [RFC854].";\r
   }\r
   typedef max-svc-frame-size-type {\r
@@ -299,40 +280,40 @@ module mef-types {
     }\r
     units "bytes";\r
     description\r
-      "Max Frame Size Type in bytes. Service Frames larger than " +\r
-      "this size will be discarded.";\r
+        "Max Frame Size Type in bytes. Service Frames larger than " +\r
+        "this size will be discarded.";\r
     reference "[MEF 10.3] Section 8.9 and Section 9.7.";\r
   }\r
   typedef retail-svc-id-type {\r
     type uint32;\r
     description\r
-      "General ID used by higher level applications that " +\r
-      "connect Subscribers information and SLA's with " +\r
-      "configured Ethernet Services.";\r
+        "General ID used by higher level applications that " +\r
+        "connect Subscribers information and SLA's with " +\r
+        "configured Ethernet Services.";\r
     reference "[MEF10.3].";\r
   }\r
   typedef svc-provider-type {\r
     type identifier45;\r
     description\r
-      "Service Provider Type";\r
+        "Service Provider Type";\r
     reference "[MEF10.3].";\r
   }\r
   typedef cen-type {\r
     type identifier45;\r
     description\r
-      "CEN Type";\r
+        "CEN Type";\r
     reference "[MEF10.3].";\r
   }\r
   typedef subscriber-type {\r
     type identifier45;\r
     description\r
-      "Subscriber Type";\r
+        "Subscriber Type";\r
     reference "[MEF10.3].";\r
   }\r
   typedef evc-id-type {\r
     type identifier45;\r
     description\r
-      "EVC ID Type";\r
+        "EVC ID Type";\r
     reference "[MEF10.3].";\r
   }\r
   typedef simple-percent {\r
@@ -347,422 +328,435 @@ module mef-types {
       range "1..4094";\r
     }\r
     description\r
-      "The VLAN-ID that uniquely identifies a VLAN.  This is the " +\r
-      "12-bit  VLAN-ID used in the VLAN Tag header. The range " +\r
-      "is defined by the REFERENCED specification. VLAN ID 0 is " +\r
-      "used for VLAN Unaware Mode.";\r
+        "The VLAN-ID that uniquely identifies a VLAN. This is the " +\r
+        "12-bit  VLAN-ID used in the VLAN Tag header. The range " +\r
+        "is defined by the REFERENCED specification. VLAN ID 0 is " +\r
+        "used for VLAN Unaware Mode.";\r
     reference "IEEE Std 802.1Q 2003 Edition, Virtual Bridged " +\r
-            "Local Area Networks.";\r
+        "Local Area Networks.";\r
   }\r
   typedef vlan-id-or-none-type {\r
     type uint32 {\r
       range "0..4094";\r
     }\r
     description\r
-      "The VLAN-ID that uniquely identifies a VLAN.  This is the " +\r
-      "12-bit VLAN-ID used in the VLAN Tag header. The range is " +\r
-      "defined by the REFERENCED specification. VLAN ID 0 is " +\r
-      "used for VLAN Unaware (ie. None) Mode";\r
+        "The VLAN-ID that uniquely identifies a VLAN. This is the " +\r
+        "12-bit VLAN-ID used in the VLAN Tag header. The range is " +\r
+        "defined by the REFERENCED specification. VLAN ID 0 is " +\r
+        "used for VLAN Unaware (ie. None) Mode";\r
     reference "IEEE Std 802.1Q 2003 Edition, Virtual Bridged " +\r
-            "Local Area Networks.";\r
+        "Local Area Networks.";\r
   }\r
   typedef vlan-id-or-all-type {\r
     type uint32 {\r
       range "1..4095";\r
     }\r
     description\r
-      "The VLAN-ID that uniquely identifies a VLAN.  This is the " +\r
-      "12-bit  VLAN-ID used in the VLAN Tag header. The range " +\r
-      "is defined by the REFERENCED specification. VLAN ID 4095 " +\r
-      "is used for VLAN Any Mode";\r
+        "The VLAN-ID that uniquely identifies a VLAN. This is the " +\r
+        "12-bit  VLAN-ID used in the VLAN Tag header. The range " +\r
+        "is defined by the REFERENCED specification. VLAN ID 4095 " +\r
+        "is used for VLAN Any Mode";\r
     reference "IEEE Std 802.1Q 2003 Edition, Virtual Bridged " +\r
-            "Local Area Networks.";\r
+        "Local Area Networks.";\r
   }\r
   typedef vlan-id-any-none-type {\r
     type uint32 {\r
       range "0..4095";\r
     }\r
     description\r
-      "The VLAN-ID that uniquely identifies a VLAN.  This is the " +\r
-      "12-bit VLAN-ID used in the VLAN Tag header. The range " +\r
-      "is defined by the REFERENCED specification. This " +\r
-      "typedef is for use with Operational Status information " +\r
-      "where VLAN ID 0 may be used for VLAN Unaware Mode and " +\r
-      "use of 4095 is Reserved / None.";\r
+        "The VLAN-ID that uniquely identifies a VLAN. This is the " +\r
+        "12-bit VLAN-ID used in the VLAN Tag header. The range " +\r
+        "is defined by the REFERENCED specification. This " +\r
+        "typedef is for use with Operational Status information " +\r
+        "where VLAN ID 0 may be used for VLAN Unaware Mode and " +\r
+        "use of 4095 is Reserved / None.";\r
     reference "IEEE Std 802.1Q 2003 Edition, Virtual Bridged " +\r
-            "Local Area Networks.";\r
+        "Local Area Networks.";\r
   }\r
   typedef ieee-8021-priority {\r
     type uint8 {\r
       range "0..7";\r
     }\r
     description\r
-      "An 802.1Q user priority value.";\r
+        "An 802.1Q user priority value.";\r
     reference "IEEE 802.1Q";\r
   }\r
   typedef entity-admin-state-type {\r
     type enumeration {\r
       enum "unknown" {\r
         description\r
-          "Unknown";\r
+                "Unknown";\r
       }\r
       enum "locked" {\r
         description\r
-          "Locked";\r
+                "Locked";\r
       }\r
       enum "shutting-down" {\r
         description\r
-          "Shutting Down";\r
+                "Shutting Down";\r
       }\r
       enum "unlocked" {\r
         description\r
-          "Unlocked";\r
+                "Unlocked";\r
       }\r
     }\r
     description\r
-      "Represents the various possible administrative states. " +\r
-      "A value of 'locked' means the resource is " +\r
-      "administratively prohibited from use.  A value of " +\r
-      "'shuttingDown' means that usage is administratively " +\r
-      "limited to current instances of use.A value of " +\r
-      "'unlocked' means the resource is not administratively " +\r
-      "prohibited from use.A value of 'unknown' means that " +\r
-      "this resource is unable to report administrative state.";\r
+        "Represents the various possible administrative states. " +\r
+        "A value of 'locked' means the resource is " +\r
+        "administratively prohibited from use.  A value of " +\r
+        "'shuttingDown' means that usage is administratively " +\r
+        "limited to current instances of use.A value of " +\r
+        "'unlocked' means the resource is not administratively " +\r
+        "prohibited from use.A value of 'unknown' means that " +\r
+        "this resource is unable to report administrative state.";\r
     reference "ENTITY-STATE-TC-MIB";\r
   }\r
   typedef performance-metric-type {\r
     type enumeration {\r
       enum "one-way-frame-delay-performance" {\r
         description\r
-          "One-way Frame Delay Performance.";\r
+                "One-way Frame Delay Performance.";\r
       }\r
       enum "one-way-frame-delay-range-performance" {\r
         description\r
-          "One-way Frame Delay Range Performance.";\r
+                "One-way Frame Delay Range Performance.";\r
       }\r
       enum "one-way-mean-frame-delay-performance" {\r
         description\r
-          "One-way Mean Frame Delay Performance.";\r
+                "One-way Mean Frame Delay Performance.";\r
       }\r
       enum "one-way-inter-frame-delay-variation-performance" {\r
         description\r
-          "One-way Inter-Frame Delay Variation Performance.";\r
+                "One-way Inter-Frame Delay Variation Performance.";\r
       }\r
       enum "one-way-frame-loss-ratio-performance" {\r
         description\r
-          "One-way Frame Loss Ratio Performance.";\r
+                "One-way Frame Loss Ratio Performance.";\r
       }\r
       enum "one-way-availability-performance" {\r
         description\r
-          "One-way Availability Performance.";\r
+                "One-way Availability Performance.";\r
       }\r
       enum "one-way-resiliency-performance-hli" {\r
         description\r
-          "One-way Resiliency Performance expressed as High " +\r
-          "Loss Intervals.";\r
+                "One-way Resiliency Performance expressed as High " +\r
+                "Loss Intervals.";\r
       }\r
       enum "one-way-resiliency-performance-chli" {\r
         description\r
-          "One-way Resiliency Performance expressed as " +\r
-          "Consecutive High Loss Intervals.";\r
+                "One-way Resiliency Performance expressed as " +\r
+                "Consecutive High Loss Intervals.";\r
       }\r
       enum "one-way-group-availability-performance" {\r
         description\r
-          "One-way Group Availability Performance.";\r
+                "One-way Group Availability Performance.";\r
       }\r
       enum "one-way-multiple-evc-group-availability-performance" {\r
         description\r
-          "One-way Multiple EVC Group Availability Performance.";\r
+                "One-way Multiple EVC Group Availability Performance.";\r
       }\r
     }\r
     description\r
-      "Performance Metrics.";\r
+        "Performance Metrics.";\r
     reference "[MEF10.3] Section 8.8 and Section 11.";\r
   }\r
   typedef evc-type {\r
     type enumeration {\r
       enum "point-to-point" {\r
         description\r
-          "Point to Point.";\r
+                "Point to Point.";\r
       }\r
       enum "multipoint-to-multipoint" {\r
         description\r
-          "Multipoint to Multipoint.";\r
+                "Multipoint to Multipoint.";\r
       }\r
       enum "rooted-multipoint" {\r
         description\r
-          "Rooted Multipoint.";\r
+                "Rooted Multipoint.";\r
       }\r
     }\r
     description\r
-      "EVC Type";\r
+        "EVC Type";\r
     reference "[MEF10.3] Section 8.1.";\r
   }\r
+  typedef ipvc-type {\r
+    type enumeration {\r
+      enum "multipoint" {\r
+        description\r
+                "Multipoint.";\r
+      }\r
+      enum "cloud-access" {\r
+        description\r
+                "Cloud-access.";\r
+      }\r
+      enum "rooted-multipoint" {\r
+        description\r
+                "Rooted Multipoint.";\r
+      }\r
+    }\r
+    description\r
+        "IPVC Type";\r
+  }\r
   typedef evc-status-type {\r
     type enumeration {\r
       enum "new" {\r
         description\r
-          "New.";\r
+                "New.";\r
       }\r
       enum "active" {\r
         description\r
-          "Active.";\r
+                "Active.";\r
       }\r
       enum "inactive" {\r
         description\r
-          "Inactive (Not Active).";\r
+                "Inactive (Not Active).";\r
       }\r
       enum "partially-active" {\r
         description\r
-          "PartiallyActive.";\r
+                "PartiallyActive.";\r
       }\r
     }\r
     description\r
-      "EVC Status Type";\r
+        "EVC Status Type";\r
     reference "[MEF16] Section 5.3.";\r
   }\r
   typedef evc-uni-role-type {\r
     type enumeration {\r
       enum "root" {\r
         description\r
-          "Root Role for UNI. Valid setting for all service " +\r
-          "types. A UNI set to this value may send frames " +\r
-          "to UNIs configured as 'root' or 'leaf'.";\r
+                "Root Role for UNI. Valid setting for all service " +\r
+                "types. A UNI set to this value may send frames " +\r
+                "to UNIs configured as 'root' or 'leaf'.";\r
       }\r
       enum "leaf" {\r
         description\r
-          "Leaf Role for UNI. Valid setting for Root-Multipoint " +\r
-          "EVCs only. A UNI set to this value may send frames " +\r
-          "to UNIs 'root'.";\r
+                "Leaf Role for UNI. Valid setting for Root-Multipoint " +\r
+                "EVCs only. A UNI set to this value may send frames " +\r
+                "to UNIs 'root'.";\r
       }\r
     }\r
     description\r
-      "This object configures UNI type on an EVC.";\r
+        "This object configures UNI type on an EVC.";\r
     reference "[MEF10.3] Section 8.1.2.1.";\r
   }\r
   typedef data-svc-frame-delivery-type {\r
     type enumeration {\r
       enum "discard" {\r
         description\r
-          "Service Frames are discarded.";\r
+                "Service Frames are discarded.";\r
       }\r
       enum "unconditional" {\r
         description\r
-          "Service Frames are unconditionally\r
-           delivered no matter the content of the\r
-           Service Frame. An example of this is\r
-           a Point-to-Point EVC";\r
+                "Service Frames are unconditionally delivered no matter the content\r
+                of the Service Frame. An example of this is a Point-to-Point EVC";\r
       }\r
       enum "conditional" {\r
         description\r
-          "Service Frame are conditionally\r
-           delivered to the destination UNI. The\r
-           condition is specified, for example via a\r
-           bandwidth profile or unicast MAC address\r
-           learning.";\r
+                "Service Frame are conditionally delivered to the destination\r
+                UNI. The condition is specified, for example via a bandwidth profile\r
+                or unicast MAC address learning.";\r
       }\r
     }\r
     description\r
-      "A MEF service can have one of three different " +\r
-      "delivery types.";\r
+        "A MEF service can have one of three different " +\r
+        "delivery types.";\r
   }\r
   typedef uni-resiliency-type {\r
     type enumeration {\r
       enum "none" {\r
         description\r
-          "No protection mechanism defined.";\r
+                "No protection mechanism defined.";\r
       }\r
       enum "dual-link-aggregation" {\r
         description\r
-          "Protection mechanism is Link Aggreg-\r
-           ation as specified in [802.3], with one link in\r
-           active mode and one link in standby mode.";\r
+                "Protection mechanism is Link Aggreg- ation as specified in [802.3],\r
+                with one link in active mode and one link in standby mode.";\r
       }\r
       enum "other" {\r
         description\r
-          "Protection method defined that is not\r
-           Link Aggregation active/standby mode.";\r
+                "Protection method defined that is not Link Aggregation active/standby\r
+                mode.";\r
       }\r
     }\r
     description\r
-      "This object type of resiliency mechanism for a " +\r
-      "specific UNI.";\r
+        "This object type of resiliency mechanism for a " +\r
+        "specific UNI.";\r
   }\r
   typedef svc-frame-format-type {\r
     type enumeration {\r
       enum "no-tag" {\r
         description\r
-          "No-tag indicates that all data on the interface is " +\r
-          "as untagged data.";\r
+                "No-tag indicates that all data on the interface is " +\r
+                "as untagged data.";\r
       }\r
       enum "ctag" {\r
         description\r
-          "Ctag indicates that tagged data is associated with " +\r
-          "CE-VLAN ID or a C-TAG.";\r
+                "Ctag indicates that tagged data is associated with " +\r
+                "CE-VLAN ID or a C-TAG.";\r
       }\r
       enum "stag" {\r
         description\r
-          "Stag indicates that tagged data is associated with " +\r
-          "a provider tag or S-TAG.";\r
+                "Stag indicates that tagged data is associated with " +\r
+                "a provider tag or S-TAG.";\r
       }\r
       enum "stag-ctag" {\r
         description\r
-          "Stag-ctag indicates that service traffic identified " +\r
-          "with both an S-TAG (outer tag) and a C-TAG (inner tag).";\r
+                "Stag-ctag indicates that service traffic identified " +\r
+                "with both an S-TAG (outer tag) and a C-TAG (inner tag).";\r
       }\r
     }\r
     description\r
-      "The format must be that of a MAC Frame specified in " +\r
-      "IEEE Std 802.3-2012 Clause 3.";\r
+        "The format must be that of a MAC Frame specified in " +\r
+        "IEEE Std 802.3-2012 Clause 3.";\r
     reference "[MEF10.3] Section 9.6. [MEF15]. [MEF7.2]. " +\r
-            "[MEF7.3] Section 10.1.1. MEF-UNI-EVC-MIB.yang.";\r
+        "[MEF7.3] Section 10.1.1. MEF-UNI-EVC-MIB.yang.";\r
   }\r
   typedef uni-mode-type {\r
     type enumeration {\r
       enum "uni" {\r
         description\r
-          "UNI Mode.";\r
+                "UNI Mode.";\r
       }\r
       enum "vuni" {\r
         description\r
-          "VUNI Mode.";\r
+                "VUNI Mode.";\r
       }\r
     }\r
     description\r
-      "This setting is used to configure a UNI as either a " +\r
-      "UNI or a VUNI";\r
+        "This setting is used to configure a UNI as either a " +\r
+        "UNI or a VUNI";\r
     reference "[MEF7.3] Section 10.2.2.";\r
   }\r
   typedef evc-cos-identifier-type {\r
     type enumeration {\r
       enum "evc" {\r
         description\r
-          "The EVC ID, depends on the CE-VLAN ID / EVC Mapping " +\r
-          "at the UNI, will be used to map Service Frames to " +\r
-          "CoS Names/Labels.";\r
+                "The EVC ID, depends on the CE-VLAN ID / EVC Mapping " +\r
+                "at the UNI, will be used to map Service Frames to " +\r
+                "CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.1 for " +\r
                 "Data Service Frames.";\r
       }\r
       enum "pcp" {\r
         description\r
-          "The Priority Code Point(PCP) value within the " +\r
-          "CE-VLAN Tag will be used to map Service Frames " +\r
-          "to CoS Names/Labels.";\r
+                "The Priority Code Point(PCP) value within the " +\r
+                "CE-VLAN Tag will be used to map Service Frames " +\r
+                "to CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.2: Priority Code " +\r
                 "Point (PCP) Field in the Customer VLAN Tag " +\r
                 "in a Tagged Service Frame. ";\r
       }\r
       enum "dscp" {\r
         description\r
-          "The Differentiated Services Code Point(DSCP) value " +\r
-          "from the IP Packet's IP Header Differentiated " +\r
-          "Services Group, associated with the Service Frame, " +\r
-          "will be used to map Service Frames to CoS Names/Labels.";\r
+                "The Differentiated Services Code Point(DSCP) value " +\r
+                "from the IP Packet's IP Header Differentiated " +\r
+                "Services Group, associated with the Service Frame, " +\r
+                "will be used to map Service Frames to CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.3: AKA Internet " +\r
                 "Protocol. For a Data Service Frame carrying an " +\r
                 "IPv4 or and IPv6 packet.";\r
       }\r
     }\r
     description\r
-      "[MEF10.3] Section 10.2.1.";\r
+        "[MEF10.3] Section 10.2.1.";\r
   }\r
   typedef evc-eec-identifier-type {\r
     type enumeration {\r
       enum "pcp" {\r
         description\r
-          "The Priority Code Point(PCP) value within the " +\r
-          "CE-VLAN Tag will be used to map Service Frames " +\r
-          "to CoS Names/Labels.";\r
+                "The Priority Code Point(PCP) value within the " +\r
+                "CE-VLAN Tag will be used to map Service Frames " +\r
+                "to CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.2: Priority Code " +\r
                 "Point (PCP) Field in the Customer VLAN Tag " +\r
                 "in a Tagged Service Frame.";\r
       }\r
       enum "dscp" {\r
         description\r
-          "The Differentiated Services Code Point(DSCP) value " +\r
-          "from the IP Packet's IP Header Differentiated " +\r
-          "Services Group, associated with the Service Frame, " +\r
-          "will be used to map Service Frames to CoS Names/Labels.";\r
+                "The Differentiated Services Code Point(DSCP) value " +\r
+                "from the IP Packet's IP Header Differentiated " +\r
+                "Services Group, associated with the Service Frame, " +\r
+                "will be used to map Service Frames to CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.3: AKA Internet " +\r
                 "Protocol. For a Data Service Frame carrying " +\r
                 "an IPv4 or and IPv6 packet.";\r
       }\r
     }\r
     description\r
-      "[MEF10.3] Section 10.2.1.";\r
+        "[MEF10.3] Section 10.2.1.";\r
   }\r
   typedef cos-color-identifier-type {\r
     type enumeration {\r
       enum "evc" {\r
         description\r
-          "The EVC ID, depends on the CE-VLAN ID / EVC Mapping " +\r
-          "at the UNI, will be used to map Service Frames to " +\r
-          "CoS Names/Labels.";\r
+                "The EVC ID, depends on the CE-VLAN ID / EVC Mapping " +\r
+                "at the UNI, will be used to map Service Frames to " +\r
+                "CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.1 for Data " +\r
                 "Service Frames.";\r
       }\r
       enum "pcp" {\r
         description\r
-          "The Priority Code Point(PCP) value within the " +\r
-          "CE-VLAN Tag will be used to map Service Frames " +\r
-          "to CoS Names/Labels.";\r
+                "The Priority Code Point(PCP) value within the " +\r
+                "CE-VLAN Tag will be used to map Service Frames " +\r
+                "to CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.2: Priority Code " +\r
                 "Point (PCP) Field in the Customer VLAN Tag " +\r
                 "in a Tagged Service Frame. ";\r
       }\r
       enum "dei" {\r
         description\r
-          "Drop Eligible Indicator(DEI) field of the CE-VLAN Tag.";\r
+                "Drop Eligible Indicator(DEI) field of the CE-VLAN Tag.";\r
       }\r
       enum "dscp" {\r
         description\r
-          "The Differentiated Services Code Point(DSCP) value " +\r
-          "from the IP Packet's IP Header Differentiated " +\r
-          "Services Group, associated with the Service " +\r
-          "Frame, will be used to map Service Frames to " +\r
-          "CoS Names/Labels.";\r
+                "The Differentiated Services Code Point(DSCP) value " +\r
+                "from the IP Packet's IP Header Differentiated " +\r
+                "Services Group, associated with the Service " +\r
+                "Frame, will be used to map Service Frames to " +\r
+                "CoS Names/Labels.";\r
         reference "MEF 10.3 Section 10.2.1.3: AKA Internet " +\r
                 "Protocol. For a Data Service Frame carrying " +\r
                 "an IPv4 or and IPv6 packet.";\r
       }\r
     }\r
     description\r
-      "CoS Color Identification Type.";\r
+        "CoS Color Identification Type.";\r
     reference "[MEF23.1].";\r
   }\r
   typedef cos-color-type {\r
     type enumeration {\r
       enum "green" {\r
         description\r
-          "Green.";\r
+                "Green.";\r
       }\r
       enum "yellow" {\r
         description\r
-          "Yellow.";\r
+                "Yellow.";\r
       }\r
     }\r
     description\r
-      "CoS Color.";\r
+        "CoS Color.";\r
     reference "[MEF23.1].";\r
   }\r
   typedef bwp-cir-type {\r
     type uint32;\r
     description\r
-      "Bandwidth Profile Committed Information Rate in " +\r
-      "Kilobits Per Second.";\r
+        "Bandwidth Profile Committed Information Rate in " +\r
+        "Kilobits Per Second.";\r
     reference "[MEF10.3] [R143], [R144].";\r
   }\r
   typedef bwp-cbs-type {\r
     type uint32;\r
     description\r
-      "Bandwidth Profile Committed Burst Size in Bytes.";\r
+        "Bandwidth Profile Committed Burst Size in Bytes.";\r
     reference "[MEF10.3] [R145].";\r
   }\r
   typedef bwp-eir-type {\r
     type uint32;\r
     description\r
-      "Bandwidth Profile Excess Information Rate in " +\r
-      "Kilobits Per Second.";\r
+        "Bandwidth Profile Excess Information Rate in " +\r
+        "Kilobits Per Second.";\r
     reference "[MEF10.3] [R146], [R147].";\r
   }\r
   typedef bwp-ebs-type {\r
@@ -770,11 +764,11 @@ module mef-types {
       range "0 .. 10000000";\r
     }\r
     description\r
-      "Excess Burst Size (EBS) in bytes: This parameter limits " +\r
-      "the maximum number of bytes available for a burst " +\r
-      "of Service Frames sent at the UNI line rate that " +\r
-      "will be declared Yellow by the Bandwidth Profile. " +\r
-      "If this value is 0, then no limit is assumed.";\r
+        "Excess Burst Size (EBS) in bytes: This parameter limits " +\r
+        "the maximum number of bytes available for a burst " +\r
+        "of Service Frames sent at the UNI line rate that " +\r
+        "will be declared Yellow by the Bandwidth Profile. " +\r
+        "If this value is 0, then no limit is assumed.";\r
     reference "[MEF10.3] [R146], [R147].";\r
   }\r
   typedef elmi-polling-counter-type {\r
@@ -782,7 +776,7 @@ module mef-types {
       range "1 .. max";\r
     }\r
     description\r
-      "ELMI Polling Counter.";\r
+        "ELMI Polling Counter.";\r
     reference "[MEF16] Section 5.6.1.";\r
   }\r
   typedef elmi-status-error-threshold-type {\r
@@ -790,8 +784,8 @@ module mef-types {
       range "2 .. 10";\r
     }\r
     description\r
-      "The count of consecutive ELMI status polling errors " +\r
-      "before raising an error.";\r
+        "The count of consecutive ELMI status polling errors " +\r
+        "before raising an error.";\r
     reference "[MEF16] Section 5.6.1.";\r
   }\r
   typedef elmi-polling-timer-type {\r
@@ -799,10 +793,10 @@ module mef-types {
       range "5 .. 30";\r
     }\r
     description\r
-      "The type used for a timer started after tranmitting " +\r
-      "a Status Enquiry. If the timer expires, record " +\r
-      "the error if a STATUS message not received and " +\r
-      "resend Status Enquiry.";\r
+        "The type used for a timer started after tranmitting " +\r
+        "a Status Enquiry. If the timer expires, record " +\r
+        "the error if a STATUS message not received and " +\r
+        "resend Status Enquiry.";\r
     reference "[MEF16] Section 5.6.1.";\r
   }\r
   typedef elmi-polling-verification-timer-type {\r
@@ -810,169 +804,169 @@ module mef-types {
       range "5 .. 30";\r
     }\r
     description\r
-      "The type used for a timer started after tranmitting " +\r
-      "a Status Message. If a Status Enquiry is recieved before " +\r
-      "this timer expires, record the error.";\r
+        "The type used for a timer started after tranmitting " +\r
+        "a Status Message. If a Status Enquiry is recieved before " +\r
+        "this timer expires, record the error.";\r
     reference "[MEF16] Section 5.6.1.";\r
   }\r
   typedef bwp-color-mode-type {\r
     type enumeration {\r
       enum "color-blind" {\r
         description\r
-          "Color Blind. Do not use CoS Color Configuration for " +\r
-          "this Bandwidth Profile.";\r
+                "Color Blind. Do not use CoS Color Configuration for " +\r
+                "this Bandwidth Profile.";\r
       }\r
       enum "color-aware" {\r
         description\r
-          "Color Aware. Use CoS Color Configuration for this " +\r
-          "Bandwidth Profile.";\r
+                "Color Aware. Use CoS Color Configuration for this " +\r
+                "Bandwidth Profile.";\r
       }\r
     }\r
     description\r
-      "This attribute describes the color mode (CM) to be " +\r
-      "applied as \"color-blind mode\" or \"color-aware mode\".";\r
+        "This attribute describes the color mode (CM) to be " +\r
+        "applied as \"color-blind mode\" or \"color-aware mode\".";\r
     reference "[MEF10.3] Section 10.3, [R151].";\r
   }\r
   typedef bwp-coupling-flag-type {\r
     type enumeration {\r
       enum "yellow-eir-only" {\r
         description\r
-          "When CF is set to \"yellow-eir-only\", the volume of " +\r
-          "the yellow service frames admitted to the network " +\r
-          "cannot exceed EIR.";\r
+                "When CF is set to \"yellow-eir-only\", the volume of " +\r
+                "the yellow service frames admitted to the network " +\r
+                "cannot exceed EIR.";\r
       }\r
       enum "yellow-eir-plus-cir" {\r
         description\r
-          "When CF is set to \"yellow-eir-plus-cir\", the " +\r
-          "volume of the yellow service frames admitted to " +\r
-          "the network is bounded by CIR + EIR depending on " +\r
-          "volume of the offered green Service Frames.";\r
+                "When CF is set to \"yellow-eir-plus-cir\", the " +\r
+                "volume of the yellow service frames admitted to " +\r
+                "the network is bounded by CIR + EIR depending on " +\r
+                "volume of the offered green Service Frames.";\r
       }\r
     }\r
     description\r
-      "The Bandwidth Profile parameter that determines whether " +\r
-      "or not overflow tokens not used for Service Frames " +\r
-      "declared Green can be used as Yellow tokens.";\r
+        "The Bandwidth Profile parameter that determines whether " +\r
+        "or not overflow tokens not used for Service Frames " +\r
+        "declared Green can be used as Yellow tokens.";\r
     reference "[MEF10.3] Section 12.1. [MEF23.1] Section 8.1.";\r
   }\r
   typedef auto-negotiation-type {\r
     type enumeration {\r
       enum "on" {\r
         description\r
-          "Phy Auto-negotiation Enabled.";\r
+                "Phy Auto-negotiation Enabled.";\r
       }\r
       enum "off" {\r
         description\r
-          "Phy Auto-negotiation Disabled.";\r
+                "Phy Auto-negotiation Disabled.";\r
       }\r
     }\r
     description\r
-      "Phy Auto-negotiation Enabled/Disabled.";\r
+        "Phy Auto-negotiation Enabled/Disabled.";\r
     reference "[MEF20].";\r
   }\r
   typedef service-entity-type {\r
     type enumeration {\r
       enum "evc" {\r
         description\r
-          "EVC.";\r
+                "EVC.";\r
       }\r
       enum "tunnel-1" {\r
         description\r
-          "Tunnel Type 1.";\r
+                "Tunnel Type 1.";\r
       }\r
       enum "tunnel-2" {\r
         description\r
-          "Tunnel Type 2.";\r
+                "Tunnel Type 2.";\r
       }\r
       enum "ovc" {\r
         description\r
-          "OVC.";\r
+                "OVC.";\r
       }\r
     }\r
     description\r
-      "MEF Service Entity Type.";\r
+        "MEF Service Entity Type.";\r
     reference "[MEF12.2] Section 7.3, Table 3.";\r
   }\r
   typedef l2cp-handling-type {\r
     type enumeration {\r
       enum "discard" {\r
         description\r
-          "Discard - An action taken at a L2CP Decision Point " +\r
-          "where a L2CP frame is neither delivered to a protocol " +\r
-          "entity, nor delivered to the External Interface " +\r
-          "where the L2CP Decision Point is located, nor " +\r
-          "propagated to L2CP Decision Points at other " +\r
-          "External Interfaces.";\r
+                "Discard - An action taken at a L2CP Decision Point " +\r
+                "where a L2CP frame is neither delivered to a protocol " +\r
+                "entity, nor delivered to the External Interface " +\r
+                "where the L2CP Decision Point is located, nor " +\r
+                "propagated to L2CP Decision Points at other " +\r
+                "External Interfaces.";\r
       }\r
       enum "pass" {\r
         description\r
-          "Pass(Tunnel) - An action taken at a L2CP Decision " +\r
-          "Point where a L2CP frame is either delivered to " +\r
-          "the External Interface where the L2CP Decision Point " +\r
-          "is located, or propagated to the L2CP Decision " +\r
-          "Points located at all other External Interfaces " +\r
-          "associated by the EVC or OVC.";\r
+                "Pass(Tunnel) - An action taken at a L2CP Decision " +\r
+                "Point where a L2CP frame is either delivered to " +\r
+                "the External Interface where the L2CP Decision Point " +\r
+                "is located, or propagated to the L2CP Decision " +\r
+                "Points located at all other External Interfaces " +\r
+                "associated by the EVC or OVC.";\r
       }\r
       enum "peer" {\r
         description\r
-          "Peer - An action taken at a L2CP Decision Point " +\r
-          "where a L2CP frame is delivered to a protocol " +\r
-          "entity determined by the Protocol Identifier " +\r
-          "in the L2CP Frame.";\r
+                "Peer - An action taken at a L2CP Decision Point " +\r
+                "where a L2CP frame is delivered to a protocol " +\r
+                "entity determined by the Protocol Identifier " +\r
+                "in the L2CP Frame.";\r
       }\r
     }\r
     description\r
-      "L2CP Service Frame handling option.";\r
+        "L2CP Service Frame handling option.";\r
     reference "[MEF45] Table 8.";\r
   }\r
   typedef l2cp-address-set-type {\r
     type enumeration {\r
       enum "aware-cta" {\r
         description\r
-          "C-VLAN Tag Aware (CTA), for VLAN-based services where" +\r
-          " the CE-VLAN ID is used to map a frame to a service.";\r
+                "C-VLAN Tag Aware (CTA), for VLAN-based services where" +\r
+                " the CE-VLAN ID is used to map a frame to a service.";\r
       }\r
       enum "blind-ctb" {\r
         description\r
-          "C-VLAN Tag Blind (CTB), for Port-based services where " +\r
-          "the CE-VLAN ID is not used to map a frame to a service.";\r
+                "C-VLAN Tag Blind (CTB), for Port-based services where " +\r
+                "the CE-VLAN ID is not used to map a frame to a service.";\r
       }\r
       enum "option2-blind-ctb2" {\r
         description\r
-          "C-VLAN Tag Blind Option 2 (CTB-2), for point-to-point " +\r
-          "Port-based services that support the EPL Option 2 " +\r
-          "L2CP processing.";\r
+                "C-VLAN Tag Blind Option 2 (CTB-2), for point-to-point " +\r
+                "Port-based services that support the EPL Option 2 " +\r
+                "L2CP processing.";\r
       }\r
     }\r
     description\r
-      "The L2CP Address Set Service Attribute specifies the " +\r
-      "subset of the Bridge Reserved Addresses that are " +\r
-      "filtered (i.e. L2CP Frames with this destination " +\r
-      "address are Peered or Discarded but not Passed) " +\r
-      "at a L2CP Decision Point.";\r
+        "The L2CP Address Set Service Attribute specifies the " +\r
+        "subset of the Bridge Reserved Addresses that are " +\r
+        "filtered (i.e. L2CP Frames with this destination " +\r
+        "address are Peered or Discarded but not Passed) " +\r
+        "at a L2CP Decision Point.";\r
     reference "[MEF10.3] Section 9.19. [MEF45] Section 8.1, " +\r
-            "[R2] through [R9]. [MEF6.2] Section 8.2.2, [R1]. " +\r
-            "[MEF45] Section 8.1.";\r
+        "[R2] through [R9]. [MEF6.2] Section 8.2.2, [R1]. " +\r
+        "[MEF45] Section 8.1.";\r
   }\r
   typedef l2cp-peering-protocol-type {\r
     type enumeration {\r
       enum "ethertype" {\r
         description\r
-          "Ethertype.";\r
+                "Ethertype.";\r
       }\r
       enum "llc" {\r
         description\r
-          "LLC.";\r
+                "LLC.";\r
       }\r
       enum "other" {\r
         description\r
-          "Other: Not using LLC nor Ethertype to specify " +\r
-          "the Protocol ID.";\r
+                "Other: Not using LLC nor Ethertype to specify " +\r
+                "the Protocol ID.";\r
       }\r
     }\r
     description\r
-      "The Peering Protocol Identifier is one of Ethertype, " +\r
-      "LLC, or Other.";\r
+        "The Peering Protocol Identifier is one of Ethertype, " +\r
+        "LLC, or Other.";\r
     reference "[MEF45] Section 7.";\r
   }\r
   typedef ieee8021p-priority-type {\r
@@ -980,180 +974,180 @@ module mef-types {
       range "0 .. 7";\r
     }\r
     description\r
-      "IEEE 802.1p VLAN Header Class of Service field. Used for " +\r
-      "Priority Code Point(PCP) configurations.";\r
+        "IEEE 802.1p VLAN Header Class of Service field. Used for " +\r
+        "Priority Code Point(PCP) configurations.";\r
     reference "[MEF10.3] Section 10.2.1.";\r
   }\r
   typedef mef-service-type {\r
     type enumeration {\r
       enum "epl" {\r
         description\r
-          "Ethernet Private Line Service (EPL) Point-to-Point " +\r
-          "EVC, all to one bundling";\r
+                "Ethernet Private Line Service (EPL) Point-to-Point " +\r
+                "EVC, all to one bundling";\r
       }\r
       enum "evpl" {\r
         description\r
-          "Ethernet Virtual Private Line (EVPL) Point-to-Point " +\r
-          "EVC, bundling and/or multiplexing";\r
+                "Ethernet Virtual Private Line (EVPL) Point-to-Point " +\r
+                "EVC, bundling and/or multiplexing";\r
       }\r
       enum "eplan" {\r
         description\r
-          "Ethernet Private LAN Service (EP-LAN) " +\r
-          "Multipoint-to-Multipoint EVC, all to one bundling";\r
+                "Ethernet Private LAN Service (EP-LAN) " +\r
+                "Multipoint-to-Multipoint EVC, all to one bundling";\r
       }\r
       enum "evplan" {\r
         description\r
-          "Ethernet Virtual Private LAN Service (EVP-LAN) " +\r
-          "Multipoint-to-Multipoint EVC, bundling and/or " +\r
-          "multiplexing";\r
+                "Ethernet Virtual Private LAN Service (EVP-LAN) " +\r
+                "Multipoint-to-Multipoint EVC, bundling and/or " +\r
+                "multiplexing";\r
       }\r
       enum "eptree" {\r
         description\r
-          "Ethernet Private Tree Service (EP-Tree) " +\r
-          "Rooted-Multipoint EVC, all to one bundling";\r
+                "Ethernet Private Tree Service (EP-Tree) " +\r
+                "Rooted-Multipoint EVC, all to one bundling";\r
       }\r
       enum "evptree" {\r
         description\r
-          "Ethernet Virtual Private Tree Service (EVP-Tree) " +\r
-          "Rooted-Multipoint EVC, bundling and/or multiplexing";\r
+                "Ethernet Virtual Private Tree Service (EVP-Tree) " +\r
+                "Rooted-Multipoint EVC, bundling and/or multiplexing";\r
       }\r
     }\r
     description\r
-      "This object indicates the specific Ethernet service type.";\r
+        "This object indicates the specific Ethernet service type.";\r
   }\r
   typedef ext-if-availability-type {\r
     type enumeration {\r
       enum "in-test" {\r
         description\r
-          "In-test is equivalent to the IETF RFC 2883 " +\r
-          "ifOperStatus 'testing' state.";\r
+                "In-test is equivalent to the IETF RFC 2883 " +\r
+                "ifOperStatus 'testing' state.";\r
       }\r
       enum "failed" {\r
         description\r
-          "Failed is to be interpretted along with " +\r
-          "Operational State.";\r
+                "Failed is to be interpretted along with " +\r
+                "Operational State.";\r
       }\r
       enum "power-off" {\r
         description\r
-          "Power-off indicates the phy is down.";\r
+                "Power-off indicates the phy is down.";\r
       }\r
       enum "degraded" {\r
         description\r
-          "Degraded is to be interpretted along with " +\r
-          "Operational State..";\r
+                "Degraded is to be interpretted along with " +\r
+                "Operational State..";\r
       }\r
       enum "not-installed" {\r
         description\r
-          "Not-installed is equivalent to the " +\r
-          "IETF RFC 2883 ifOperStatus 'notPresent' state.";\r
+                "Not-installed is equivalent to the " +\r
+                "IETF RFC 2883 ifOperStatus 'notPresent' state.";\r
       }\r
     }\r
     description\r
-      "Availability of the Physical Interface. The " +\r
-      "availability status type indicates that the Phy " +\r
-      "is functioning properly.  May  be  mapped  to  " +\r
-      "RFC  2863,  The Interfaces  Group  MIB  " +\r
-      "IfOperstatus. Values for availability status " +\r
-      "include: inTest, failed, powerOff, degraded, " +\r
-      "notInstalled.";\r
+        "Availability of the Physical Interface. The " +\r
+        "availability status type indicates that the Phy " +\r
+        "is functioning properly.  May  be  mapped  to  " +\r
+        "RFC  2863,  The Interfaces  Group  MIB  " +\r
+        "IfOperstatus. Values for availability status " +\r
+        "include: inTest, failed, powerOff, degraded, " +\r
+        "notInstalled.";\r
     reference "[ITU-T X.731]. [MEF7.3] Section 10.1.1, " +\r
-            "[MEF15], [MEF7.2] Appendix II.";\r
+        "[MEF15], [MEF7.2] Appendix II.";\r
   }\r
   typedef virt-cx-availability-type {\r
     type enumeration {\r
-        enum "in-test" {\r
-            description\r
-              "In-test is equivalent to the " +\r
-              "IETF RFC 2883 ifOperStatus 'testing' state.";\r
-          }\r
-          enum "failed" {\r
-            description\r
-              "Failed is to be interpretted along " +\r
-              "with Operational State.";\r
-          }\r
-          enum "degraded" {\r
-            description\r
-              "Degraded is to be interpretted along " +\r
-              "with Operational State..";\r
-          }\r
-          enum "not-installed" {\r
-            description\r
-              "Not-installed is equivalent to the " +\r
-              "IETF RFC 2883 ifOperStatus 'notPresent' state.";\r
-          }\r
+      enum "in-test" {\r
+        description\r
+                "In-test is equivalent to the " +\r
+                "IETF RFC 2883 ifOperStatus 'testing' state.";\r
+      }\r
+      enum "failed" {\r
+        description\r
+                "Failed is to be interpretted along " +\r
+                "with Operational State.";\r
+      }\r
+      enum "degraded" {\r
+        description\r
+                "Degraded is to be interpretted along " +\r
+                "with Operational State..";\r
+      }\r
+      enum "not-installed" {\r
+        description\r
+                "Not-installed is equivalent to the " +\r
+                "IETF RFC 2883 ifOperStatus 'notPresent' state.";\r
+      }\r
     }\r
     description\r
-    "Availability of the Virtual Connection. The " +\r
-    "availability status type indicates that the " +\r
-    "Virtual Connection is functioning properly. " +\r
-    "May be mapped to RFC 2863, The Interfaces Group MIB " +\r
-    "IfOperstatus. Values for availability status include: inTest," +\r
-    " failed, powerOff, degraded, notInstalled.";\r
+        "Availability of the Virtual Connection. The " +\r
+        "availability status type indicates that the " +\r
+        "Virtual Connection is functioning properly. " +\r
+        "May be mapped to RFC 2863, The Interfaces Group MIB " +\r
+        "IfOperstatus. Values for availability status include: inTest," +\r
+        " failed, powerOff, degraded, notInstalled.";\r
     reference "[ITU-T X.731]. [MEF7.3] Section 10.1.1, " +\r
-            "[MEF15], [MEF7.2] Appendix II.";\r
+        "[MEF15], [MEF7.2] Appendix II.";\r
   }\r
   typedef svc-endpoint-availability-type {\r
     type enumeration {\r
-        enum "in-test" {\r
-            description\r
-              "In-test is equivalent to the " +\r
-              "IETF RFC 2883 ifOperStatus 'testing' state.";\r
-          }\r
-          enum "failed" {\r
-            description\r
-              "Failed is to be interpretted along " +\r
-              "with Operational State.";\r
-          }\r
-          enum "degraded" {\r
-            description\r
-              "Degraded is to be interpretted along " +\r
-              "with Operational State..";\r
-          }\r
-          enum "not-installed" {\r
-            description\r
-              "Not-installed is equivalent to the " +\r
-              "IETF RFC 2883 ifOperStatus 'notPresent' state.";\r
-          }\r
+      enum "in-test" {\r
+        description\r
+                "In-test is equivalent to the " +\r
+                "IETF RFC 2883 ifOperStatus 'testing' state.";\r
+      }\r
+      enum "failed" {\r
+        description\r
+                "Failed is to be interpretted along " +\r
+                "with Operational State.";\r
+      }\r
+      enum "degraded" {\r
+        description\r
+                "Degraded is to be interpretted along " +\r
+                "with Operational State..";\r
+      }\r
+      enum "not-installed" {\r
+        description\r
+                "Not-installed is equivalent to the " +\r
+                "IETF RFC 2883 ifOperStatus 'notPresent' state.";\r
+      }\r
     }\r
     description\r
-    "Availability of the Service Endpoint. The " +\r
-    "availability status type indicates that the " +\r
-    "Service Endpoint is functioning properly. " +\r
-    "May be mapped to RFC 2863. The Interfaces Group MIB " +\r
-    "IfOperstatus. Values for availability status include: " +\r
-    "inTest, failed, powerOff, degraded, notInstalled.";\r
+        "Availability of the Service Endpoint. The " +\r
+        "availability status type indicates that the " +\r
+        "Service Endpoint is functioning properly. " +\r
+        "May be mapped to RFC 2863. The Interfaces Group MIB " +\r
+        "IfOperstatus. Values for availability status include: " +\r
+        "inTest, failed, powerOff, degraded, notInstalled.";\r
     reference "[ITU-T X.731]. [MEF7.3] Section 10.1.1, " +\r
-            "[MEF15], [MEF7.2] Appendix II.";\r
+        "[MEF15], [MEF7.2] Appendix II.";\r
   }\r
   typedef ext-if-physical-layer-type {\r
     type enumeration {\r
       enum "10M" {\r
         description\r
-          "10M bits-per-second.";\r
+                "10M bits-per-second.";\r
       }\r
       enum "100M" {\r
         description\r
-          "100M bits-per-second.";\r
+                "100M bits-per-second.";\r
       }\r
       enum "1G" {\r
         description\r
-          "1G bits-per-second.";\r
+                "1G bits-per-second.";\r
       }\r
       enum "10G" {\r
         description\r
-          "10G bits-per-second.";\r
+                "10G bits-per-second.";\r
       }\r
       enum "40G" {\r
         description\r
-          "40G bits-per-second.";\r
+                "40G bits-per-second.";\r
       }\r
       enum "100G" {\r
         description\r
-          "100G bits-per-second.";\r
+                "100G bits-per-second.";\r
       }\r
     }\r
     description\r
-      "The maximum theoretical bandwidth for the phy.";\r
+        "The maximum theoretical bandwidth for the phy.";\r
     reference "MEF 7.3 Section 10.1.1, MEF 6.2, MEF 10.3, MEF 26.1";\r
   }\r
   typedef device-role {\r
@@ -1167,6 +1161,6 @@ module mef-types {
       enum "p" {\r
         description "Core Router";\r
       }\r
-     } \r
-  } \r
-}
\ No newline at end of file
+    }\r
+  }\r
+}\r
index e38613a57ffd103275919df8b786a95828194f8a..a06d5af4a0edf315fddabb82719667d53624c0ef 100644 (file)
       <groupId>org.opendaylight.netvirt</groupId>
       <artifactId>elanmanager-api</artifactId>
       <version>${vpnservices.version}</version>
+    </dependency>
+     <dependency>
+      <groupId>org.opendaylight.genius</groupId>
+      <artifactId>arputil-api</artifactId>
+      <version>${genius.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.netvirt</groupId>
+      <artifactId>vpnmanager-api</artifactId>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
     <dependency>
       <groupId>org.opendaylight.mdsal.model</groupId>
       <artifactId>ietf-yang-types-20130715</artifactId>
-    </dependency>
-    <!-- dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> 
-      </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> 
-      </dependency -->
-
+    </dependency>    
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>
-
-
+    <dependency>    
+      <groupId>commons-net</groupId>
+      <artifactId>commons-net</artifactId>
+    </dependency>
   </dependencies>
 </project>
index d6951ae2c18e3d40f01c1c8d24621d11da0ec794..72e42a3fd39f0456105b89be4cd76e89a3da4a10 100644 (file)
@@ -20,15 +20,15 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.Evc;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.UnisBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.UniBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.UniKey;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlansBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlanBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlanKey;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.UnisBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.UniBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.UniKey;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.EvcUniCeVlansBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlanBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlanKey;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcUniRoleType;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
index 6ad6751444507584680accad7116c605015e0ff5..8be48f5e8baa8521d15d1d972f5a0df3c154122f 100644 (file)
@@ -18,10 +18,10 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.Evc;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlans;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.EvcUniCeVlans;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcType;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcUniRoleType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
@@ -197,86 +197,24 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
     }
 
     private void createInterface(String instanceName, Uni uni, boolean isEtree) {
-
         EvcUniUtils.addUni(dataBroker, uni);
-
-        String uniId = uni.getUniId().getValue();
-
-        Link link = EvcUniUtils.getLink(dataBroker, uni);
-        String interfaceName = uniId;
-
-        boolean result = waitForGeniusToUpdateInterface(interfaceName);
-        if (!result) {
-            log.error("State interface {} is not configured (missing ifIndex)", interfaceName);
-            return;
-        }
-
+        String interfaceName = uni.getUniId().getValue();
         EvcUniRoleType role = uni.getRole();
-
         EvcUniCeVlans evcUniCeVlans = uni.getEvcUniCeVlans();
 
         if (evcUniCeVlans != null && evcUniCeVlans.getEvcUniCeVlan() != null
                 && !evcUniCeVlans.getEvcUniCeVlan().isEmpty()) {
             for (EvcUniCeVlan x : evcUniCeVlans.getEvcUniCeVlan()) {
-
                 interfaceName = NetvirtUtils.getInterfaceNameForVlan(interfaceName, x.getVid().toString());
 
-                log.info("Adding {} interface: {}", isEtree ? "etree" : "elan", interfaceName);
-
-                if (isEtree) {
-                    NetvirtUtils.createEtreeInterface(dataBroker, instanceName, interfaceName,
-                            RoleToInterfaceType(role));
-                } else {
-                    NetvirtUtils.createElanInterface(dataBroker, instanceName, interfaceName);
-                }
+                NetvirtUtils.createInterface(dataBroker, instanceName, interfaceName, RoleToInterfaceType(role),
+                        isEtree);
             }
         } else {
-            log.info("Adding {} interface: {}", isEtree ? "etree" : "elan", interfaceName);
-            if (isEtree) {
-                NetvirtUtils.createEtreeInterface(dataBroker, instanceName, interfaceName, RoleToInterfaceType(role));
-            } else {
-                NetvirtUtils.createElanInterface(dataBroker, instanceName, interfaceName);
-            }
+            NetvirtUtils.createInterface(dataBroker, instanceName, interfaceName, RoleToInterfaceType(role), isEtree);
         }
     }
 
-    private boolean waitForGeniusToUpdateInterface(String interfaceName) {
-        int retries = 10;
-
-        while (retries > 0) {
-            Optional<Interface> optional = MdsalUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL,
-                    NetvirtUtils.getStateInterfaceIdentifier(interfaceName));
-
-            if (!optional.isPresent()) {
-                log.info("State interface {} doesn't exist", interfaceName);
-                return false;
-            }
-
-            Interface stateInterface = optional.get();
-
-            if (stateInterface.getIfIndex() != null) {
-                log.info("State interface configured with ifIndex {}", stateInterface.getIfIndex());
-
-                // Wait a bit, because if we continue too soon this will not
-                // work.
-                try {
-                    Thread.sleep(1000);
-                } catch (InterruptedException e) {
-                }
-
-                return true;
-            }
-
-            retries -= 1;
-            try {
-                Thread.sleep(1500);
-            } catch (InterruptedException e) {
-            }
-        }
-
-        return false;
-    }
-
     private static EtreeInterfaceType RoleToInterfaceType(EvcUniRoleType role) {
         if (role == EvcUniRoleType.Root) {
             return EtreeInterfaceType.Root;
@@ -290,8 +228,6 @@ public class EvcListener extends UnimgrDataTreeChangeListener<Evc> {
 
         String uniId = uni.getUniId().getValue();
         EvcUniCeVlans evcUniCeVlans = uni.getEvcUniCeVlans();
-
-        Link link = EvcUniUtils.getLink(dataBroker, uni);
         String interfaceName = uniId;
 
         if (evcUniCeVlans != null && !evcUniCeVlans.getEvcUniCeVlan().isEmpty()) {
index 68e7cf875c42d13758312c6d6530720bd69b0755..0fde190f8c78c9075b1795939b2c09403ad11a66 100644 (file)
@@ -18,9 +18,9 @@ import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayers;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.Links;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlans;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.EvcUniCeVlans;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
@@ -35,13 +35,12 @@ public class EvcUniUtils {
 
     private static final Logger logger = LoggerFactory.getLogger(EvcUniUtils.class);
 
-    public static Link getLink(DataBroker dataBroker, Uni evcUni) {
+    public static Link getLink(DataBroker dataBroker, String uniId) {
         Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni> optional = MdsalUtils
-                .read(dataBroker, LogicalDatastoreType.CONFIGURATION,
-                        MefUtils.getUniInstanceIdentifier(evcUni.getUniId().getValue()));
+                .read(dataBroker, LogicalDatastoreType.CONFIGURATION, MefUtils.getUniInstanceIdentifier(uniId));
 
         if (!optional.isPresent()) {
-            logger.error("A matching Uni doesn't exist for EvcUni {}", evcUni.getUniId());
+            logger.error("A matching Uni doesn't exist for EvcUni {}", uniId);
             return null;
         }
 
@@ -50,13 +49,13 @@ public class EvcUniUtils {
 
         PhysicalLayers physicalLayers = uni.getPhysicalLayers();
         if (physicalLayers == null) {
-            logger.warn("Uni {} is missing PhysicalLayers", evcUni.getUniId());
+            logger.warn("Uni {} is missing PhysicalLayers", uniId);
             return null;
         }
 
         Links links = physicalLayers.getLinks();
         if (links == null || links.getLink() == null) {
-            logger.warn("Uni {} is has no links", evcUni.getUniId());
+            logger.warn("Uni {} is has no links", uniId);
             return null;
         }
 
@@ -69,11 +68,9 @@ public class EvcUniUtils {
             String uniId = data.getUniId().getValue();
             WriteTransaction tx = createTransaction(dataBroker);
 
-            Link link = EvcUniUtils.getLink(dataBroker, data);
-
             logger.info("Removing trunk {}", uniId);
 
-            delete(uniId, tx);
+            NetvirtUtils.delete(uniId, tx);
 
             Optional<List<EvcUniCeVlan>> ceVlansOptional = getCeVlans(data);
             if (!ceVlansOptional.isPresent()) {
@@ -91,9 +88,9 @@ public class EvcUniUtils {
         try {
             String uniId = data.getUniId().getValue();
             WriteTransaction tx = createTransaction(dataBroker);
-            Link link = EvcUniUtils.getLink(dataBroker, data);
+            Link link = EvcUniUtils.getLink(dataBroker, uniId);
             String interfaceName = uniId;
-            addTrunkInterface(interfaceName, getTrunkParentName(link), tx);
+            addTrunkInterface(interfaceName, MefUtils.getTrunkParentName(link), tx);
 
             Optional<List<EvcUniCeVlan>> ceVlansOptional = getCeVlans(data);
             if (ceVlansOptional.isPresent()) {
@@ -109,7 +106,7 @@ public class EvcUniUtils {
     private static void addTrunkInterface(String interfaceName, String parentInterfaceName, WriteTransaction tx) {
         logger.info("Adding VLAN trunk {} ParentRef {}", interfaceName, parentInterfaceName);
         Interface trunkInterface = NetvirtUtils.createTrunkInterface(interfaceName, parentInterfaceName);
-        write(trunkInterface, tx);
+        NetvirtUtils.write(trunkInterface, tx);
     }
 
     private static void addTrunkMemberInterfaces(String parentInterfaceName, Iterable<EvcUniCeVlan> ceVlans,
@@ -127,7 +124,7 @@ public class EvcUniUtils {
             logger.info("Adding VLAN trunk-member {} ParentRef {}", interfaceName, parentInterfaceName);
             Interface trunkMemberInterface = NetvirtUtils.createTrunkMemberInterface(interfaceName, parentInterfaceName,
                     vlanId.intValue());
-            write(trunkMemberInterface, tx);
+            NetvirtUtils.write(trunkMemberInterface, tx);
         }
     }
 
@@ -144,15 +141,10 @@ public class EvcUniUtils {
             Long vlanId = (Long) vid;
             String interfaceName = NetvirtUtils.getInterfaceNameForVlan(parentInterfaceName, vlanId.toString());
             logger.info("Removing VLAN trunk-member {}", interfaceName);
-            delete(interfaceName, tx);
+            NetvirtUtils.delete(interfaceName, tx);
         }
     }
 
-    private static InstanceIdentifier<Interface> createInterfaceIdentifier(String interfaceName) {
-        return InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName))
-                .build();
-    }
-
     private static WriteTransaction createTransaction(DataBroker dataBroker) {
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
         return tx;
@@ -167,23 +159,6 @@ public class EvcUniUtils {
         }
     }
 
-    private static void write(Interface iface, WriteTransaction tx) {
-        String interfaceName = iface.getName();
-        InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
-        tx.put(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier, iface, true);
-    }
-
-    private static void delete(String interfaceName, WriteTransaction tx) {
-        InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
-        tx.delete(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier);
-    }
-
-    private static String getTrunkParentName(Link link) {
-        String deviceName = link.getDevice().getValue();
-        String interfaceName = link.getInterface().toString();
-        return interfaceName;
-    }
-
     private static Optional<List<EvcUniCeVlan>> getCeVlans(Uni uni) {
         EvcUniCeVlans ceVlans = uni.getEvcUniCeVlans();
         if (ceVlans == null) {
@@ -192,8 +167,4 @@ public class EvcUniUtils {
 
         return Optional.fromNullable(ceVlans.getEvcUniCeVlan());
     }
-
-    public static String getDeviceInterfaceName(String deviceName, String interfaceName) {
-        return deviceName + IfmConstants.OF_URI_SEPARATOR + interfaceName;
-    }
 }
diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcListener.java
new file mode 100644 (file)
index 0000000..ee8e302
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2016 Hewlett Packard Enterprise, Co. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.unimgr.mef.netvirt;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.ip.uni.subnets.Subnet;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.Ipvc;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.ipvc.unis.Uni;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.OdlArputilService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.etree.rev160614.EtreeInterface.EtreeInterfaceType;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class IpvcListener extends UnimgrDataTreeChangeListener<Ipvc> {
+    private static final Logger Log = LoggerFactory.getLogger(IpvcListener.class);
+    private ListenerRegistration<IpvcListener> ipvcListenerRegistration;
+    private final NotificationPublishService notificationPublishService;
+    private final OdlArputilService arpUtilService;
+
+    public IpvcListener(final DataBroker dataBroker, final NotificationPublishService notPublishService,
+            final OdlArputilService arputilService) {
+        super(dataBroker);
+        this.notificationPublishService = notPublishService;
+        this.arpUtilService = arputilService;
+        registerListener();
+    }
+
+    public void registerListener() {
+        try {
+            final DataTreeIdentifier<Ipvc> dataTreeIid = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
+                    MefUtils.getIpvcInstanceIdentifier());
+            ipvcListenerRegistration = dataBroker.registerDataTreeChangeListener(dataTreeIid, this);
+            Log.info("IpvcDataTreeChangeListener created and registered");
+        } catch (final Exception e) {
+            Log.error("Ipvc DataChange listener registration failed !", e);
+            throw new IllegalStateException("Ipvc registration Listener failed.", e);
+        }
+    }
+
+    @Override
+    public void close() throws Exception {
+        ipvcListenerRegistration.close();
+    }
+
+    @Override
+    public void add(DataTreeModification<Ipvc> newDataObject) {
+        if (newDataObject.getRootPath() != null && newDataObject.getRootNode() != null) {
+            Log.info("ipvc {} created", newDataObject.getRootNode().getIdentifier());
+            addIpvc(newDataObject);
+        }
+    }
+
+    @Override
+    public void remove(DataTreeModification<Ipvc> removedDataObject) {
+        if (removedDataObject.getRootPath() != null && removedDataObject.getRootNode() != null) {
+            Log.info("ipvc {} deleted", removedDataObject.getRootNode().getIdentifier());
+            removeIpvc(removedDataObject);
+        }
+    }
+
+    @Override
+    public void update(DataTreeModification<Ipvc> modifiedDataObject) {
+        if (modifiedDataObject.getRootPath() != null && modifiedDataObject.getRootNode() != null) {
+            Log.info("ipvc {} updated", modifiedDataObject.getRootNode().getIdentifier());
+            updateIpvc(modifiedDataObject);
+        }
+    }
+
+    private void addIpvc(DataTreeModification<Ipvc> newDataObject) {
+        try {
+            Ipvc data = newDataObject.getRootNode().getDataAfter();
+            String instanceName = data.getIpvcId().getValue();
+            final String vpnName = NetvirtVpnUtils.getUUidFromString(instanceName);
+
+            Log.info("Adding vpn instance: " + instanceName);
+            NetvirtVpnUtils.createVpnInstance(dataBroker, vpnName);
+
+            // Create elan interfaces
+            for (Uni uni : data.getUnis().getUni()) {
+                createInterfaces(vpnName, uni);
+            }
+        } catch (final Exception e) {
+            Log.error("Add ipvc failed !", e);
+        }
+    }
+
+    private void updateIpvc(DataTreeModification<Ipvc> modifiedDataObject) {
+        try {
+            Ipvc original = modifiedDataObject.getRootNode().getDataBefore();
+            Ipvc update = modifiedDataObject.getRootNode().getDataAfter();
+
+            String instanceName = original.getIpvcId().getValue();
+
+            Log.info("Updating elan instance: " + instanceName);
+
+            List<Uni> originalUni = original.getUnis().getUni();
+            List<Uni> updateUni = update.getUnis().getUni();
+            if (updateUni != null && !updateUni.isEmpty()) {
+                List<Uni> existingClonedUni = new ArrayList<>();
+                if (originalUni != null && !originalUni.isEmpty()) {
+                    existingClonedUni.addAll(0, originalUni);
+                    originalUni.removeAll(updateUni);
+                    updateUni.removeAll(existingClonedUni);
+                    // removing the Uni which are not presented in the updated
+                    // List
+                    for (Uni uni : originalUni) {
+                        removeElanInterface(instanceName, uni);
+                    }
+                }
+
+                // Adding the new Uni which are presented in the updated List
+                if (updateUni.size() > 0) {
+                    for (Uni uni : updateUni) {
+                        createInterfaces(original, uni);
+                    }
+                }
+            } else if (originalUni != null && !originalUni.isEmpty()) {
+                for (Uni uni : originalUni) {
+                    removeElanInterface(instanceName, uni);
+                }
+            }
+        } catch (final Exception e) {
+            Log.error("Update ipvc failed !", e);
+        }
+    }
+
+    private void removeIpvc(DataTreeModification<Ipvc> removedDataObject) {
+        try {
+            Ipvc data = removedDataObject.getRootNode().getDataBefore();
+
+            String instanceName = data.getIpvcId().getValue();
+
+            for (Uni uni : data.getUnis().getUni()) {
+                removeElanInterface(instanceName, uni);
+            }
+
+            Log.info("Removing elan instance: " + instanceName);
+            NetvirtUtils.deleteElanInstance(dataBroker, instanceName);
+        } catch (final Exception e) {
+            Log.error("Remove ipvc failed !", e);
+        }
+    }
+
+    private void createInterfaces(Ipvc ipvc, Uni uni) {
+        String instanceName = ipvc.getIpvcId().getValue();
+        createInterfaces(instanceName, uni);
+    }
+
+    private void createInterfaces(String vpnName, Uni uniInService) {
+        String uniId = uniInService.getUniId().getValue();
+        String ipUniId = uniInService.getIpUniId().getValue();
+
+        org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni uni = IpvcUniUtils
+                .getUni(dataBroker, uniId);
+        if (uni == null) {
+            Log.error("Couldn't find uni {} for ipvc-uni", uniId);
+            throw new UnsupportedOperationException();
+        }
+        IpUni ipUni = IpvcUniUtils.getIpUni(dataBroker, uniId, ipUniId);
+        Integer vlan = (ipUni.getVlan()) != null ? ipUni.getVlan().getValue() : null;
+
+        Log.info("Adding/updating elan instance: " + uniId);
+        String elanName = NetvirtVpnUtils.getElanNameForVpnPort(uniId);
+        Log.info("Adding elan instance: " + elanName);
+        NetvirtUtils.updateElanInstance(dataBroker, elanName);
+
+        String interfaceName = NetvirtVpnUtils.getInterfaceNameForVlan(ipUniId, vlan);
+        Log.info("Adding trunk interface: " + interfaceName);
+        IpvcUniUtils.addUni(dataBroker, uniInService, interfaceName, vlan);
+
+        Log.info("Adding elan interface: " + interfaceName);
+        NetvirtUtils.createInterface(dataBroker, elanName, interfaceName, EtreeInterfaceType.Root, false);
+
+        Log.info("Adding vpn interface: " + interfaceName);
+        NetvirtVpnUtils.createUpdateVpnInterface(dataBroker, vpnName, interfaceName, ipUni.getIpAddress(),
+                uni.getMacAddress(), true, null);
+        NetvirtVpnUtils.createVpnPortFixedIp(dataBroker, vpnName, interfaceName, ipUni.getIpAddress(),
+                uni.getMacAddress());
+
+        Log.info("Adding connected network for interface : " + interfaceName);
+        NetvirtVpnUtils.addDirectSubnetToVpn(dataBroker, notificationPublishService, vpnName, elanName,
+                ipUni.getIpAddress(), interfaceName);
+
+        if (ipUni.getSubnets() != null) {
+            for (Subnet subnet : ipUni.getSubnets().getSubnet()) {
+                MacAddress gwMacAddress = NetvirtVpnUtils.resolveGwMac(dataBroker, arpUtilService, vpnName,
+                        ipUni.getIpAddress(), subnet.getGateway(), interfaceName); // trunk
+                if (gwMacAddress == null) {
+                    continue;
+                }
+                NetvirtVpnUtils.createUpdateVpnInterface(dataBroker, vpnName, interfaceName, subnet.getSubnet(),
+                        gwMacAddress, false, ipUni.getIpAddress());
+            }
+        }
+    }
+
+    private void removeElanInterface(String instanceName, Uni uni) {
+        String uniId = uni.getIpUniId().getValue();
+        String interfaceName = uniId;
+        Log.info("Removing elan interface: " + uniId);
+        NetvirtUtils.deleteElanInterface(dataBroker, instanceName, interfaceName);
+    }
+}
diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcUniUtils.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/IpvcUniUtils.java
new file mode 100644 (file)
index 0000000..29357ab
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2016 Hewlett Packard Enterprise, Co. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.unimgr.mef.netvirt;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.ipvc.unis.Uni;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+
+public class IpvcUniUtils {
+
+    private static final Logger logger = LoggerFactory.getLogger(IpvcUniUtils.class);
+
+    public static void addUni(DataBroker dataBroker, Uni data, String interfaceName, Integer vlanId) {
+        try {
+            String uniId = data.getUniId().getValue();
+            WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
+            Link link = EvcUniUtils.getLink(dataBroker, uniId);
+            addTrunkInterface(interfaceName, MefUtils.getTrunkParentName(link), vlanId, tx);
+            commitTransaction(tx);
+        } catch (final Exception e) {
+            logger.error("Add uni failed !", e);
+        }
+    }
+
+    private static void addTrunkInterface(String interfaceName, String parentInterfaceName, Integer vlanId,
+            WriteTransaction tx) {
+        logger.info("Adding VLAN trunk {} ParentRef {}", interfaceName, parentInterfaceName);
+        Interface trunkInterface = null;
+        if (vlanId != null) {
+            trunkInterface = NetvirtUtils.createTrunkMemberInterface(interfaceName, parentInterfaceName, vlanId);
+        } else {
+            trunkInterface = NetvirtUtils.createTrunkInterface(interfaceName, parentInterfaceName);
+        }
+        NetvirtUtils.writeInterface(trunkInterface, tx);
+    }
+
+    public static org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni getUni(
+            DataBroker dataBroker, String uniId) {
+        Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni> optional = MdsalUtils
+                .read(dataBroker, LogicalDatastoreType.CONFIGURATION, MefUtils.getUniInstanceIdentifier(uniId));
+        if (!optional.isPresent()) {
+            logger.error("Couldn't find uni {} for ipvc-uni", uniId);
+            return null;
+        }
+        return optional.get();
+    }
+
+    public static IpUni getIpUni(DataBroker dataBroker, String uniId, String ipUniId) {
+        Optional<IpUni> optional = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                MefUtils.getIpUniInstanceIdentifier(uniId, ipUniId));
+
+        if (!optional.isPresent()) {
+            logger.error("A matching IpUni doesn't exist Uni {} IpUni {}", uniId, ipUniId);
+            return null;
+        }
+
+        return optional.get();
+    }
+
+    private static void commitTransaction(WriteTransaction tx) {
+        try {
+            CheckedFuture<Void, TransactionCommitFailedException> futures = tx.submit();
+            futures.get();
+        } catch (Exception e) {
+            logger.error("failed to commit transaction due to exception ", e);
+        }
+    }
+}
index c08da4bc8fa32b5ed794b2ed94a0d3493cbf52b8..6790051ed0ea3a09a657605adcedb0883e754a93 100644 (file)
@@ -14,18 +14,19 @@ import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.inte
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.Unis;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniKey;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.IpUnis;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayers;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUniKey;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.Links;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.LinkKey;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.MefServices;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefServiceKey;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.Evc;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.EvcBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.EvcUniCeVlans;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlan;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.uni.evc.uni.ce.vlans.EvcUniCeVlanBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.EvcBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.Ipvc;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.MefTopology;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.Devices;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.Device;
@@ -37,7 +38,8 @@ import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.type
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcType;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.RetailSvcIdType;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcStatusType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -64,20 +66,20 @@ public final class MefUtils {
         return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class).child(Uni.class).build();
     }
 
-    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis> getUnisInstanceIdentifier(
+    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis> getUnisInstanceIdentifier(
             String evcId) {
         return InstanceIdentifier.builder(MefServices.class)
                 .child(MefService.class, new MefServiceKey(RetailSvcIdType.getDefaultInstance(evcId))).child(Evc.class)
-                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis.class)
+                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis.class)
                 .build();
     }
 
-    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni> getEvcUniInstanceIdentifier(
+    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni> getEvcUniInstanceIdentifier(
             String uniId) {
         return InstanceIdentifier.builder(MefServices.class).child(MefService.class).child(Evc.class)
-                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis.class)
-                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni.class,
-                        new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.UniKey(
+                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis.class)
+                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni.class,
+                        new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.UniKey(
                                 new Identifier45(uniId)))
                 .build();
     }
@@ -89,6 +91,12 @@ public final class MefUtils {
                 .child(Link.class, new LinkKey(new Identifier45(deviceId), interfaceId)).build();
     }
 
+    public static InstanceIdentifier<IpUni> getIpUniInstanceIdentifier(String uniId, String ipUniId) {
+        return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class)
+                .child(Uni.class, new UniKey(new Identifier45(uniId))).child(IpUnis.class)
+                .child(IpUni.class, new IpUniKey(new Identifier45(ipUniId))).build();
+    }
+
     public static InstanceIdentifier<Evc> getEvcInstanceIdentifier() {
         return getMefServiceInstanceIdentifier().child(Evc.class);
     }
@@ -97,8 +105,7 @@ public final class MefUtils {
         return InstanceIdentifier.create(MefServices.class).child(MefService.class);
     }
 
-    public static InstanceIdentifier<MefService> getMefServiceInstanceIdentifier(
-            RetailSvcIdType retailSvcIdType) {
+    public static InstanceIdentifier<MefService> getMefServiceInstanceIdentifier(RetailSvcIdType retailSvcIdType) {
         return InstanceIdentifier.create(MefServices.class).child(MefService.class, new MefServiceKey(retailSvcIdType));
     }
 
@@ -119,14 +126,14 @@ public final class MefUtils {
                 .child(Evc.class).build();
     }
 
-    private static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni> getEvcUniInstanceIdentifier(
+    private static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni> getEvcUniInstanceIdentifier(
             String serviceName, String uniId) {
         return InstanceIdentifier.builder(MefServices.class)
                 .child(MefService.class, new MefServiceKey(RetailSvcIdType.getDefaultInstance(serviceName)))
                 .child(Evc.class)
-                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.Unis.class)
-                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni.class, //
-                        new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.UniKey(
+                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis.class)
+                .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni.class, //
+                        new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.UniKey(
                                 Identifier45.getDefaultInstance(uniId)))
                 .build();
     }
@@ -158,7 +165,7 @@ public final class MefUtils {
 
     public static Boolean EvcUniExists(DataBroker dataBroker, String instanceName, String uniId) {
         logger.info("searching for uni id {} in service {}", uniId, instanceName);
-        Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni> uni = MdsalUtils
+        Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni> uni = MdsalUtils
                 .read(dataBroker, LogicalDatastoreType.CONFIGURATION, getEvcUniInstanceIdentifier(instanceName, uniId));
         if (uni.isPresent()) {
             logger.info("found uni");
@@ -168,4 +175,34 @@ public final class MefUtils {
         return uni.isPresent();
     }
 
+    public static String getTrunkParentName(Link link) {
+        String interfaceName = link.getInterface().toString();
+        return interfaceName;
+    }
+
+    public static String getInterfaceName(Link link, String uniId) {
+        String device = link.getDevice().getValue();
+        return NetvirtUtils.getDeviceInterfaceName(device, uniId);
+    }
+
+    public static InstanceIdentifier<Ipvc> getIpvcInstanceIdentifier() {
+        return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Ipvc.class);
+    }
+
+    public static String ipPrefixToString(IpPrefix ipAddress) {
+        if (ipAddress.getIpv4Prefix() != null) {
+            return ipAddress.getIpv4Prefix().getValue();
+        }
+
+        return ipAddress.getIpv6Prefix().getValue();
+    }
+
+    public static String ipAddressToString(IpAddress ipAddress) {
+        if (ipAddress.getIpv4Address() != null) {
+            return ipAddress.getIpv4Address().getValue();
+        }
+
+        return ipAddress.getIpv6Address().getValue();
+    }
+
 }
index 1095a7ab495802a6c92bcf6bb5038ff9e35c2fd4..6d1a9d9fe829dfcccdab7eeff379a001288e0420 100644 (file)
@@ -9,7 +9,17 @@
 package org.opendaylight.unimgr.mef.netvirt;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
@@ -34,12 +44,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterfaceBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Optional;
 
 public class NetvirtUtils {
+    private static final Logger logger = LoggerFactory.getLogger(MdsalUtils.class);
+
     public final static String VLAN_SEPARATOR = ".";
 
     public static void createElanInstance(DataBroker dataBroker, String instanceName, boolean isEtree) {
@@ -182,4 +197,84 @@ public class NetvirtUtils {
     public static Optional<Interface> getIetfInterface(DataBroker dataBroker, String interfaceName) {
         return MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION, getInterfaceIdentifier(interfaceName));
     }
+
+    public static String getDeviceInterfaceName(String deviceName, String interfaceName) {
+        return deviceName + IfmConstants.OF_URI_SEPARATOR + interfaceName;
+    }
+
+    public static void writeInterface(Interface iface, WriteTransaction tx) {
+        String interfaceName = iface.getName();
+        InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
+        tx.put(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier, iface, true);
+    }
+
+    public static void write(Interface iface, WriteTransaction tx) {
+        String interfaceName = iface.getName();
+        InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
+        tx.put(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier, iface, true);
+    }
+
+    public static void delete(String interfaceName, WriteTransaction tx) {
+        InstanceIdentifier<Interface> interfaceIdentifier = createInterfaceIdentifier(interfaceName);
+        tx.delete(LogicalDatastoreType.CONFIGURATION, interfaceIdentifier);
+    }
+
+    public static boolean waitForGeniusToUpdateInterface(DataBroker dataBroker, String interfaceName) {
+        int retries = 10;
+
+        while (retries > 0) {
+            Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> optional = MdsalUtils
+                    .read(dataBroker, LogicalDatastoreType.OPERATIONAL, getStateInterfaceIdentifier(interfaceName));
+
+            if (!optional.isPresent()) {
+                logger.info("State interface {} doesn't exist", interfaceName);
+            } else {
+                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateInterface = optional
+                        .get();
+
+                if (stateInterface.getIfIndex() != null) {
+                    logger.info("State interface configured with ifIndex {}", stateInterface.getIfIndex());
+
+                    // Wait a bit, because if we continue too soon this will not
+                    // work.
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                    }
+
+                    return true;
+                }
+            }
+
+            retries -= 1;
+            try {
+                Thread.sleep(1500);
+            } catch (InterruptedException e) {
+            }
+        }
+
+        return false;
+    }
+
+    private static InstanceIdentifier<Interface> createInterfaceIdentifier(String interfaceName) {
+        return InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName))
+                .build();
+    }
+
+    public static void createInterface(DataBroker dataBroker, String instanceName, String interfaceName,
+            EtreeInterfaceType etreeInterfaceType, boolean isEtree) {
+        boolean result = NetvirtUtils.waitForGeniusToUpdateInterface(dataBroker, interfaceName);
+        if (!result) {
+            logger.error("State interface {} is not configured (missing ifIndex)", interfaceName);
+            return;
+        }
+
+        logger.info("Adding {} interface: {}", isEtree ? "etree" : "elan", interfaceName);
+
+        if (isEtree) {
+            NetvirtUtils.createEtreeInterface(dataBroker, instanceName, interfaceName, etreeInterfaceType);
+        } else {
+            NetvirtUtils.createElanInterface(dataBroker, instanceName, interfaceName);
+        }
+    }
 }
diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NetvirtVpnUtils.java
new file mode 100644 (file)
index 0000000..5d85535
--- /dev/null
@@ -0,0 +1,406 @@
+/*
+ * Copyright (c) 2016 Hewlett Packard Enterprise, Co. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.unimgr.mef.netvirt;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.commons.net.util.SubnetUtils;
+import org.apache.commons.net.util.SubnetUtils.SubnetInfo;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.genius.mdsalutil.MDSALUtil;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.VpnTargetsBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.vpn.instance.Ipv4FamilyBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.OdlArputilService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.SendArpRequestInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.SendArpRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.interfaces.InterfaceAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.interfaces.InterfaceAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstances;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AdjacenciesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.AdjacencyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NetworkMaps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortipPortData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.SubnetAddedToVpnBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMapKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPortBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPortKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.google.common.base.Optional;
+
+public class NetvirtVpnUtils {
+    private static final Logger logger = LoggerFactory.getLogger(NetvirtVpnUtils.class);
+    private final static String ELAN_PREFIX = "elan.";
+    private final static String TRUNK_SUFFIX = "-trunk";
+    private final static String VLAN_SEPARATOR = ".";
+    private final static String IP_ADDR_SUFFIX = "/32";
+    private final static String IP_MUSK_SEPARATOR = "/";
+    private final static int MaxRetries = 10;
+
+    public static void createVpnInstance(DataBroker dataBroker, String instanceName) {
+        VpnInstanceBuilder builder = new VpnInstanceBuilder();
+        builder.setVpnInstanceName(instanceName);
+        Ipv4FamilyBuilder ipv4FamilyBuilder = new Ipv4FamilyBuilder();
+        ipv4FamilyBuilder.setVpnTargets(new VpnTargetsBuilder().build());
+        // WA till netvirt will allow creation of VPN without RD
+        UUID vpnId = UUID.fromString(instanceName);
+        String rd = String.valueOf(Math.abs(vpnId.getLeastSignificantBits()));
+        ipv4FamilyBuilder.setRouteDistinguisher(rd);
+        builder.setIpv4Family(ipv4FamilyBuilder.build());
+
+        MdsalUtils.syncUpdate(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                getVpnInstanceInstanceIdentifier(instanceName), builder.build());
+    }
+
+    public static void createUpdateVpnInterface(DataBroker dataBroker, String vpnName, String interfaceName,
+            IpPrefix ifPrefix, MacAddress macAddress, boolean primary, IpPrefix gwIpAddress) {
+        synchronized (interfaceName.intern()) {
+            String ipAddress = null;
+            String nextHopIp = null;
+            if (primary) {
+                ipAddress = getPrefixFromSubnet(MefUtils.ipPrefixToString(ifPrefix));
+            } else {
+                ipAddress = MefUtils.ipPrefixToString(ifPrefix);
+                nextHopIp = getIpAddressFromPrefix(MefUtils.ipPrefixToString(gwIpAddress));
+            }
+
+            Adjacencies adjancencies = buildInterfaceAdjacency(ipAddress, macAddress, primary, nextHopIp);
+            VpnInterfaceBuilder einterfaceBuilder = createVpnInterface(vpnName, interfaceName, adjancencies);
+
+            MdsalUtils.syncUpdate(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                    getVpnInterfaceInstanceIdentifier(interfaceName), einterfaceBuilder.build());
+        }
+    }
+
+    private static Adjacencies buildInterfaceAdjacency(String ipAddress, MacAddress macAddress, boolean primary,
+            String nextHopIp) {
+        AdjacenciesBuilder builder = new AdjacenciesBuilder();
+        List<Adjacency> list = new ArrayList<Adjacency>();
+
+        AdjacencyBuilder aBuilder = new AdjacencyBuilder();
+        aBuilder.setIpAddress(ipAddress);
+        aBuilder.setMacAddress(macAddress.getValue());
+        aBuilder.setPrimaryAdjacency(primary);
+        if (nextHopIp != null) {
+            aBuilder.setNextHopIpList(Arrays.asList(nextHopIp));
+        }
+        list.add(aBuilder.build());
+
+        builder.setAdjacency(list);
+        return builder.build();
+    }
+
+    private static VpnInterfaceBuilder createVpnInterface(String instanceName, String interfaceName,
+            Adjacencies adjacencies) {
+        VpnInterfaceBuilder einterfaceBuilder = new VpnInterfaceBuilder();
+        einterfaceBuilder.setVpnInstanceName(instanceName);
+        einterfaceBuilder.setName(interfaceName);
+        einterfaceBuilder.addAugmentation(Adjacencies.class, adjacencies);
+        return einterfaceBuilder;
+    }
+
+    private static InstanceIdentifier<VpnInstance> getVpnInstanceInstanceIdentifier(String instanceName) {
+        return InstanceIdentifier.builder(VpnInstances.class).child(VpnInstance.class, new VpnInstanceKey(instanceName))
+                .build();
+    }
+
+    private static InstanceIdentifier<VpnInterface> getVpnInterfaceInstanceIdentifier(String interfaceName) {
+        return InstanceIdentifier.builder(VpnInterfaces.class)
+                .child(VpnInterface.class, new VpnInterfaceKey(interfaceName)).build();
+    }
+
+    public static void createVpnPortFixedIp(DataBroker dataBroker, String vpnName, String portName, IpPrefix ipAddress,
+            MacAddress macAddress) {
+        String fixedIpPrefix = MefUtils.ipPrefixToString(ipAddress);
+        String fixedIp = getIpAddressFromPrefix(fixedIpPrefix);
+        createVpnPortFixedIp(dataBroker, vpnName, portName, fixedIp, macAddress);
+    }
+
+    public static void createVpnPortFixedIp(DataBroker dataBroker, String vpnName, String portName, IpAddress ipAddress,
+            MacAddress macAddress) {
+        String fixedIp = MefUtils.ipAddressToString(ipAddress);
+        createVpnPortFixedIp(dataBroker, vpnName, portName, fixedIp, macAddress);
+    }
+
+    public static void createVpnPortFixedIp(DataBroker dataBroker, String vpnName, String portName, String fixedIp,
+            MacAddress macAddress) {
+        synchronized ((vpnName + fixedIp).intern()) {
+            InstanceIdentifier<VpnPortipToPort> id = buildVpnPortipToPortIdentifier(vpnName, fixedIp);
+            VpnPortipToPortBuilder builder = new VpnPortipToPortBuilder()
+                    .setKey(new VpnPortipToPortKey(fixedIp, vpnName)).setVpnName(vpnName).setPortFixedip(fixedIp)
+                    .setPortName(portName).setMacAddress(macAddress.getValue()).setSubnetIp(true).setConfig(true)
+                    .setLearnt(false);
+            MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.OPERATIONAL, id, builder.build());
+            logger.debug(
+                    "Interface to fixedIp added: {}, vpn {}, interface {}, mac {} added to " + "VpnPortipToPort DS",
+                    fixedIp, vpnName, portName, macAddress);
+        }
+    }
+
+    static InstanceIdentifier<NetworkMap> buildNetworkMapIdentifier(Uuid networkId) {
+        InstanceIdentifier<NetworkMap> id = InstanceIdentifier.builder(NetworkMaps.class)
+                .child(NetworkMap.class, new NetworkMapKey(networkId)).build();
+        return id;
+    }
+
+    private static void createSubnetToNetworkMapping(DataBroker dataBroker, Uuid subnetId, Uuid networkId) {
+        InstanceIdentifier<NetworkMap> networkMapIdentifier = buildNetworkMapIdentifier(networkId);
+        Optional<NetworkMap> optionalNetworkMap = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                networkMapIdentifier);
+        NetworkMapBuilder nwMapBuilder = null;
+        if (optionalNetworkMap.isPresent()) {
+            nwMapBuilder = new NetworkMapBuilder(optionalNetworkMap.get());
+        } else {
+            nwMapBuilder = new NetworkMapBuilder().setKey(new NetworkMapKey(networkId)).setNetworkId(networkId);
+            logger.debug("Adding a new network node in NetworkMaps DS for network {}", networkId.getValue());
+        }
+        List<Uuid> subnetIdList = nwMapBuilder.getSubnetIdList();
+        if (subnetIdList == null) {
+            subnetIdList = new ArrayList<>();
+        }
+        subnetIdList.add(subnetId);
+        nwMapBuilder.setSubnetIdList(subnetIdList);
+        MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, networkMapIdentifier, nwMapBuilder.build());
+        logger.debug("Created subnet-network mapping for subnet {} network {}", subnetId.getValue(),
+                networkId.getValue());
+    }
+
+    private static InstanceIdentifier<VpnPortipToPort> buildVpnPortipToPortIdentifier(String vpnName, String fixedIp) {
+        InstanceIdentifier<VpnPortipToPort> id = InstanceIdentifier.builder(NeutronVpnPortipPortData.class)
+                .child(VpnPortipToPort.class, new VpnPortipToPortKey(fixedIp, vpnName)).build();
+        return id;
+    }
+
+    public static void addDirectSubnetToVpn(DataBroker dataBroker,
+            final NotificationPublishService notificationPublishService, String vpnName, String subnetName,
+            IpPrefix subnetIpPrefix, String interfaceName) {
+        InstanceIdentifier<ElanInstance> elanIdentifierId = InstanceIdentifier.builder(ElanInstances.class)
+                .child(ElanInstance.class, new ElanInstanceKey(subnetName)).build();
+        Optional<ElanInstance> elanInstance = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
+                elanIdentifierId);
+        if (!elanInstance.isPresent()) {
+            logger.error("Trying to add invalid elan {} to vpn {}", subnetName, vpnName);
+            return;
+        }
+        Long elanTag = elanInstance.get().getElanTag();
+
+        Uuid subnetId = new Uuid(subnetName);
+        logger.info("Adding subnet {} {} to elan map", subnetId);
+        createSubnetToNetworkMapping(dataBroker, subnetId, subnetId);
+
+        String subnetIp = getSubnetFromPrefix(MefUtils.ipPrefixToString(subnetIpPrefix));
+        logger.info("Adding subnet {} {} to vpn {}", subnetName, subnetIp, vpnName);
+        updateSubnetNode(dataBroker, new Uuid(vpnName), subnetId, subnetIp);
+
+        logger.info("Adding port {} to subnet {}", interfaceName, subnetName);
+        updateSubnetmapNodeWithPorts(dataBroker, subnetId, new Uuid(interfaceName));
+
+        logger.info("Publish subnet {}", subnetName);
+        publishSubnetAddNotification(notificationPublishService, subnetId, subnetIp, vpnName, elanTag);
+
+    }
+
+    protected static void updateSubnetNode(DataBroker dataBroker, Uuid vpnId, Uuid subnetId, String subnetIp) {
+        Subnetmap subnetmap = null;
+        SubnetmapBuilder builder = null;
+        InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
+                .child(Subnetmap.class, new SubnetmapKey(subnetId)).build();
+
+        synchronized (subnetId.getValue().intern()) {
+            Optional<Subnetmap> sn = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, id);
+            if (sn.isPresent()) {
+                builder = new SubnetmapBuilder(sn.get());
+                logger.debug("updating existing subnetmap node for subnet ID {}", subnetId.getValue());
+            } else {
+                builder = new SubnetmapBuilder().setKey(new SubnetmapKey(subnetId)).setId(subnetId);
+                logger.debug("creating new subnetmap node for subnet ID {}", subnetId.getValue());
+            }
+
+            builder.setSubnetIp(subnetIp);
+            builder.setNetworkId(subnetId);
+            builder.setVpnId(vpnId);
+
+            subnetmap = builder.build();
+            logger.debug("Creating/Updating subnetMap node: {} ", subnetId.getValue());
+            MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, id, subnetmap);
+        }
+    }
+
+    private static void updateSubnetmapNodeWithPorts(DataBroker dataBroker, Uuid subnetId, Uuid portId) {
+        Subnetmap subnetmap = null;
+        InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
+                .child(Subnetmap.class, new SubnetmapKey(subnetId)).build();
+        synchronized (subnetId.getValue().intern()) {
+            Optional<Subnetmap> sn = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, id);
+            if (sn.isPresent()) {
+                SubnetmapBuilder builder = new SubnetmapBuilder(sn.get());
+                if (null != portId) {
+                    List<Uuid> portList = builder.getPortList();
+                    if (null == portList) {
+                        portList = new ArrayList<Uuid>();
+                    }
+                    portList.add(portId);
+                    builder.setPortList(portList);
+                    logger.debug("Updating subnetmap node {} with port {}", subnetId.getValue(), portId.getValue());
+                }
+                subnetmap = builder.build();
+                MDSALUtil.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION, id, subnetmap);
+            } else {
+                logger.error("Trying to update non-existing subnetmap node {} ", subnetId.getValue());
+            }
+        }
+    }
+
+    private static void publishSubnetAddNotification(final NotificationPublishService notificationPublishService,
+            Uuid subnetId, String subnetIp, String vpnName, Long elanTag) {
+        SubnetAddedToVpnBuilder builder = new SubnetAddedToVpnBuilder();
+
+        logger.info("publish notification called");
+
+        builder.setSubnetId(subnetId);
+        builder.setSubnetIp(subnetIp);
+        builder.setVpnName(vpnName);
+        builder.setExternalVpn(true);
+        builder.setElanTag(elanTag);
+
+        try {
+            notificationPublishService.putNotification(builder.build());
+        } catch (InterruptedException e) {
+            logger.error("Fail to publish notification {}", builder, e);
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+    private static String getIpAddressFromPrefix(String prefix) {
+        return prefix.split(IP_MUSK_SEPARATOR)[0];
+    }
+
+    private static String getMaskFromPrefix(String prefix) {
+        return prefix.split(IP_MUSK_SEPARATOR)[1];
+    }
+
+    private static String getSubnetFromPrefix(String prefix) {
+        SubnetInfo subnet = new SubnetUtils(prefix).getInfo();
+        return subnet.getNetworkAddress() + IP_MUSK_SEPARATOR + getMaskFromPrefix(prefix);
+    }
+
+    private static String getPrefixFromSubnet(String prefix) {
+        String myAddress = getIpAddressFromPrefix(prefix);
+        return myAddress + IP_ADDR_SUFFIX;
+    }
+
+    public static String getElanNameForVpnPort(String portName) {
+        return getUUidFromString(ELAN_PREFIX + portName);
+    }
+
+    public static String getInterfaceNameForVlan(String interfaceName, Integer vlan) {
+        final StringBuilder s = new StringBuilder();
+        s.append(interfaceName);
+        if (vlan != null) {
+            s.append(VLAN_SEPARATOR).append(vlan);
+        }
+        s.append(TRUNK_SUFFIX);
+        return getUUidFromString(s.toString());
+    }
+
+    public static String getUUidFromString(String key) {
+        return java.util.UUID.nameUUIDFromBytes(key.getBytes()).toString();
+    }
+
+    public static MacAddress resolveGwMac(DataBroker dataBroker, OdlArputilService arpUtilService, String vpnName,
+            IpPrefix srcIpPrefix, IpAddress dstIpAddress, String interf) {
+
+        String srcTpAddressStr = getIpAddressFromPrefix(MefUtils.ipPrefixToString(srcIpPrefix));
+        IpAddress srcIpAddress = new IpAddress(srcTpAddressStr.toCharArray());
+
+        if (srcIpAddress == null || dstIpAddress == null) {
+            logger.error("Can't send ARP to srcIp {} dstIp {}", srcIpAddress, dstIpAddress);
+            throw new RuntimeException("Can't send ARP for dstIp " + dstIpAddress);
+        }
+
+        MacAddress macAddress = null;
+        int retries = MaxRetries;
+        while (retries > 0 && macAddress == null) {
+            sendArpRequest(arpUtilService, srcIpAddress, dstIpAddress, interf);
+            macAddress = waitForArpReplyProcessing(dataBroker, vpnName, dstIpAddress, MaxRetries);
+            retries--;
+        }
+        return macAddress;
+    }
+
+    private static void sendArpRequest(OdlArputilService arpUtilService, IpAddress srcIpAddress, IpAddress dstIpAddress,
+            String interf) {
+        try {
+            List<InterfaceAddress> interfaceAddresses = new ArrayList<>();
+            interfaceAddresses
+                    .add(new InterfaceAddressBuilder().setInterface(interf).setIpAddress(srcIpAddress).build());
+
+            SendArpRequestInput sendArpRequestInput = new SendArpRequestInputBuilder().setIpaddress(dstIpAddress)
+                    .setInterfaceAddress(interfaceAddresses).build();
+            arpUtilService.sendArpRequest(sendArpRequestInput);
+        } catch (Exception e) {
+            logger.error("Failed to send ARP request to IP {} from interfaces {}",
+                    dstIpAddress.getIpv4Address().getValue(), interf, e);
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+    public static MacAddress waitForArpReplyProcessing(DataBroker dataBroker, String vpnName, IpAddress dstIpAddress,
+            int retries) {
+        while (retries > 0) {
+            InstanceIdentifier<VpnPortipToPort> optionalPortIpId = buildVpnPortipToPortIdentifier(vpnName,
+                    MefUtils.ipAddressToString(dstIpAddress));
+            Optional<VpnPortipToPort> optionalPortIp = MdsalUtils.read(dataBroker, LogicalDatastoreType.OPERATIONAL,
+                    optionalPortIpId);
+
+            if (optionalPortIp.isPresent()) {
+                return new MacAddress(optionalPortIp.get().getMacAddress());
+            } else {
+                sleep();
+            }
+        }
+        return null;
+    }
+
+    private static void sleep() {
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+        }
+    }
+}
index 48a705a5c0d892ceeec35710c057f0f8079ed209..d58f323260fae0a65fa1a4a47d39288d287e0619 100644 (file)
@@ -45,7 +45,6 @@ import com.google.common.util.concurrent.CheckedFuture;
 public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapableNodeConnector> {
 
     private static final Logger log = LoggerFactory.getLogger(NodeConnectorListener.class);
-    private static final Logger logger = LoggerFactory.getLogger(NodeConnectorListener.class);
     private static boolean handleRemovedNodeConnectors = false;
     private ListenerRegistration<NodeConnectorListener> evcListenerRegistration;
 
@@ -158,9 +157,9 @@ public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapa
 
         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
 
-        logger.info("Adding mef uni/device interface {} with device {}", nodeConnector.getName(), dpnId);
+        log.info("Adding mef uni/device interface {} with device {}", nodeConnector.getName(), dpnId);
 
-        String uniName = EvcUniUtils.getDeviceInterfaceName(dpnId, nodeConnector.getName());
+        String uniName = NetvirtUtils.getDeviceInterfaceName(dpnId, nodeConnector.getName());
         InstanceIdentifier interfacePath = MefUtils.getDeviceInterfaceInstanceIdentifier(dpnId, uniName);
         InterfaceBuilder interfaceBuilder = new InterfaceBuilder();
         interfaceBuilder.setPhy(new Identifier45(uniName));
@@ -171,6 +170,7 @@ public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapa
         InstanceIdentifier uniPath = MefUtils.getUniInstanceIdentifier(uniName);
         UniBuilder uniBuilder = new UniBuilder();
         uniBuilder.setUniId(new Identifier45(uniName));
+        uniBuilder.setMacAddress(nodeConnector.getHardwareAddress());
 
         PhysicalLayersBuilder physicalLayersBuilder = new PhysicalLayersBuilder();
         LinksBuilder linksBuilder = new LinksBuilder();
@@ -190,7 +190,7 @@ public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapa
         try {
             futures.get();
         } catch (InterruptedException | ExecutionException e) {
-            logger.error("Error writing to datastore (path, data) : ({}, {}), ({}, {})", interfacePath, deviceInterface,
+            log.error("Error writing to datastore (path, data) : ({}, {}), ({}, {})", interfacePath, deviceInterface,
                     uniPath, uni);
             throw new RuntimeException(e.getMessage());
         }
@@ -199,7 +199,7 @@ public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapa
     private void handleNodeConnectorRemoved(DataBroker dataBroker, String dpnId,
             FlowCapableNodeConnector nodeConnector) {
 
-        String uniName = EvcUniUtils.getDeviceInterfaceName(dpnId, nodeConnector.getName());
+        String uniName = NetvirtUtils.getDeviceInterfaceName(dpnId, nodeConnector.getName());
 
         if (!handleRemovedNodeConnectors) {
             return;
index 1a7839e2658e133c7b12f7c2850fee34f70dbff7..c7d779893312ea781c59e85f7404977242339676 100644 (file)
@@ -11,6 +11,8 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefServiceBuilder;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.EvcChoice;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,4 +37,12 @@ public class TenantEnhancerUtils {
         MdsalUtils.syncUpdate(dataBroker, LogicalDatastoreType.CONFIGURATION,
                 MefUtils.getMefServiceInstanceIdentifier(service.getSvcId()), service);
     }
+
+    public static Evc GetEvc(MefService service) {
+        if (!(service.getMefServiceChoice() instanceof EvcChoice)) {
+            return null;
+        }
+
+        return ((EvcChoice) service.getMefServiceChoice()).getEvc();
+    }
 }
\ No newline at end of file
index e86d9048dd208194f5ba43c4881b79dd782ff8f6..abb3a9a71c73dae0a1e29e09c2bce197d4ab3eae 100644 (file)
@@ -78,9 +78,10 @@ public class TenantUniListener extends UnimgrDataTreeChangeListener<Uni> {
         if (!optionalServices.isPresent()) {
             return;
         }
+
         for (MefService service : optionalServices.get().getMefService()) {
-            for (org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni serviceUni : service
-                    .getEvc().getUnis().getUni()) {
+            for (org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni serviceUni : TenantEnhancerUtils
+                    .GetEvc(service).getUnis().getUni()) {
                 if (!TenantEnhancerUtils.isServiceTenanted(service) && serviceUni.getUniId().equals(uni.getUniId())) {
                     log.info("instance identifier is {}", MefUtils.getMefServiceInstanceIdentifier(service.getSvcId()));
                     TenantEnhancerUtils.updateService(dataBroker, tenant, service);
index 8579c9e817730efc881df2f044b4ab191780f8be..4ba3f4a4f7389ed934fe5809e231e8739aa0b887 100644 (file)
@@ -15,9 +15,9 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.Evc;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.evc.unis.Uni;
+import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,7 +77,7 @@ public class TenantlessEvcListener extends UnimgrDataTreeChangeListener<MefServi
             log.info("Service {} is already connected to a Service", service.getSvcId().getValue());
             return;
         }
-        Evc evc = service.getEvc();
+        Evc evc = TenantEnhancerUtils.GetEvc(service);
         if (evc.getUnis() == null) {
             log.info("No UNI's in service {}, exiting", service.getSvcId().getValue());
             return;
index e4f94e2b4965f971d3679353750fd1eff09b036d..6d917ee4500a89fee2392f3a405b57628172d7c4 100644 (file)
@@ -8,7 +8,11 @@
 
   <reference id="dataBroker"
     interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" />
-
+  <reference id="notificationPublishService"
+    interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService" />
+  <odl:rpc-service id="odlArputilService"
+    interface="org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.OdlArputilService" />
+  
   <bean class="org.opendaylight.unimgr.mef.netvirt.EvcListener">
     <argument index="0" ref="dataBroker" />
   </bean>
     <argument index="0" ref="dataBroker" />
   </bean>
 
-  <bean class="org.opendaylight.unimgr.mef.netvirt.TenantlessEvcListener">
-    <argument index="0" ref="dataBroker" />
+<!--   <bean class="org.opendaylight.unimgr.mef.netvirt.TenantlessEvcListener"> -->
+<!--     <argument index="0" ref="dataBroker" /> -->
+<!--   </bean> -->
+  
+<!--   <bean class="org.opendaylight.unimgr.mef.netvirt.TenantUniListener"> -->
+<!--     <argument index="0" ref="dataBroker" /> -->
+<!--   </bean>   -->
+  
+  <bean class="org.opendaylight.unimgr.mef.netvirt.IpvcListener">
+    <argument ref="dataBroker" />
+    <argument ref="notificationPublishService" />
+    <argument ref="odlArputilService" />
   </bean>
-  <bean class="org.opendaylight.unimgr.mef.netvirt.TenantUniListener">
-    <argument index="0" ref="dataBroker" />
-  </bean>  
   
 </blueprint>
\ No newline at end of file