huawei-l2vpn

L2 virtual private network.

  • Version: 2021-08-05

    huawei-l2vpn@2021-08-05


    
      module huawei-l2vpn {
    
        yang-version 1;
    
        namespace "urn:huawei:yang:huawei-l2vpn";
    
        prefix l2vpn;
    
        import ietf-yang-types {
          prefix yang;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import huawei-pub-type {
          prefix pub-type;
        }
        import huawei-extension {
          prefix ext;
        }
        import huawei-ifm {
          prefix ifm;
        }
        import huawei-network-instance {
          prefix ni;
        }
        import huawei-bd {
          prefix bd;
        }
        import huawei-mpls {
          prefix mpls;
        }
        import huawei-bfd {
          prefix bfd;
        }
        import huawei-tunnel-management {
          prefix tnlm;
        }
    
        organization
          "Huawei Technologies Co., Ltd.";
    
        contact
          "Huawei Industrial Base
    Bantian, Longgang
    Shenzhen 518129
    People's Republic of China
    Website: http://www.huawei.com
    Email: support@huawei.com";
    
        description
          "L2 virtual private network.";
    
        revision "2021-08-05" {
          description "Modify nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-10-22" {
          description "Add query nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-05-14" {
          description "Add operation-exclude.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-09-16" {
          description "Add nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-07-08" {
          description "Add nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-04-04" {
          description "Init revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "l2vpn";
    
        typedef l2vpn-instance-name {
          type string {
            length "1..31";
          }
          description "L2VPN instance name.";
        }
    
        typedef l2vpn-peer-address-type {
          type inet:ipv4-address-no-zone {
            pattern
              '(([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-6]|12[8-9]|1[3-9][0-9]|2[0-1][0-9]|22[0-4])\.)(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
          }
          description "IP address of a peer.";
        }
    
        typedef l2vpn-vpls-encap-type {
          type enumeration {
            enum "vlan" {
              value 4;
              description
                "The encapsulation type of VPLS is VLAN.";
            }
            enum "ethernet" {
              value 5;
              description
                "The encapsulation type of VPLS is ethernet.";
            }
          }
          description
            "L2VPN VPLS encapsulation type.";
        }
    
        typedef l2vpn-vpls-ldp-pw-encap-type {
          type enumeration {
            enum "vlan" {
              value 4;
              description
                "The VPLS LDP PW encapsulation type is VLAN.";
            }
            enum "ethernet" {
              value 5;
              description
                "The VPLS LDP PW encapsulation type is ethernet.";
            }
            enum "unsupport" {
              value 255;
              description
                "Unsupported encapsulation type.";
            }
          }
          description
            "L2VPN VPLS LDP PW encapsulation type.";
        }
    
        typedef l2vpn-mac-learn-style {
          type enumeration {
            enum "unqualify" {
              value 1;
              description
                "The MAC learn style is unqualify.";
            }
            enum "qualify" {
              value 2;
              description
                "The MAC learn style is qualify.";
            }
            enum "qualify-outer-vlan" {
              value 3;
              description
                "Learn MAC addresses in qualified mode by explicitly using outer VLAN ID.";
            }
            enum "qualify-inner-vlan" {
              value 4;
              description
                "Learn MAC addresses in qualified mode by explicitly using inner VLAN ID.";
            }
          }
          description "L2VPN MAC learn style.";
        }
    
        typedef pw-role-type {
          type enumeration {
            enum "primary" {
              value 1;
              description
                "The PW role type is primary.";
            }
            enum "backup" {
              value 2;
              description
                "The PW role type is backup.";
            }
            enum "bypass" {
              value 3;
              description
                "The PW role type is bypass.";
            }
            enum "ac-bypass" {
              value 7;
              description
                "The PW role type is AC-bypass.";
            }
            enum "pw-bypass" {
              value 8;
              description
                "The PW role type is PW-bypass.";
            }
          }
          description "L2VPN PW role type.";
        }
    
        typedef vpls-pw-role-type {
          type enumeration {
            enum "primary" {
              value 1;
              description
                "The PW role type is primary.";
            }
            enum "backup" {
              value 2;
              description
                "The PW role type is backup.";
            }
          }
          description "VPLS PW role type.";
        }
    
        typedef ms-pw-role-type {
          type enumeration {
            enum "left-primary" {
              value 4;
              description
                "The left side PW of multi-segment instance.";
            }
            enum "right-primary" {
              value 5;
              description
                "The right side PW of multi-segment instance.";
            }
            enum "right-backup" {
              value 6;
              description
                "The backup of the right side PW.";
            }
          }
          description
            "L2VPN multi-segment PW role.";
        }
    
        typedef l2vpn-pw-template-name {
          type string {
            length "1..19";
          }
          description "L2VPN PW template name.";
        }
    
        typedef l2vpn-pw-name {
          type string {
            length "1..15";
          }
          description "L2VPN PW name.";
        }
    
        typedef l2vpn-state {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The state is default.";
            }
            enum "down" {
              value 1;
              description "The state is down.";
            }
            enum "up" {
              value 2;
              description "The state is up.";
            }
          }
          description "L2VPN state.";
        }
    
        typedef instance-state {
          type enumeration {
            enum "down" {
              value 0;
              description
                "The instance state is down.";
            }
            enum "up" {
              value 1;
              description
                "The instance state is up.";
            }
            enum "admin-down" {
              value 2;
              description
                "The instance state is admin down.";
            }
          }
          description "L2VPN instance state.";
        }
    
        typedef ac-state {
          type enumeration {
            enum "down" {
              value 0;
              description
                "The AC state is down.";
            }
            enum "up" {
              value 1;
              description "The AC state is up.";
            }
            enum "plug-out" {
              value 2;
              description
                "The AC state is plug-out.";
            }
            enum "notify-down" {
              value 3;
              description
                "The AC state is notify-down.";
            }
            enum "down-notify" {
              value 4;
              description
                "The AC state is down-notify.";
            }
          }
          description "L2VPN AC state.";
        }
    
        typedef l2vpn-pw-state {
          type enumeration {
            enum "down" {
              value 0;
              description
                "The PW state is down.";
            }
            enum "up" {
              value 1;
              description "The PW state is up.";
            }
            enum "backup" {
              value 2;
              description
                "The PW state is backup.";
            }
          }
          description "L2VPN PW state.";
        }
    
        typedef l2vpn-forward-state {
          type enumeration {
            enum "not-forwarding" {
              value 0;
              description
                "The forward state is not forwarding.";
            }
            enum "forwarding" {
              value 1;
              description
                "The forward state is forwarding.";
            }
          }
          description "L2VPN forward state.";
        }
    
        typedef ldp-signal-type {
          type enumeration {
            enum "pwe3" {
              value 0;
              description
                "Pseudo-wire emulation edge to edge.";
            }
            enum "martini" {
              value 1;
              description "Martini mode.";
            }
          }
          description "L2VPN LDP signal mode.";
        }
    
        typedef l2vpn-peer-ldp-signal-mode {
          type enumeration {
            enum "pwe3" {
              value 0;
              description
                "Pseudo-Wire Emulation Edge to Edge.";
            }
            enum "martini" {
              value 1;
              description "Martini mode.";
            }
            enum "default" {
              value 2;
              description "Default mode.";
            }
          }
          description
            "L2VPN peer LDP signal mode.";
        }
    
        typedef l2vpn-control-word {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The control word mode is default.";
            }
            enum "disable" {
              value 1;
              description
                "The control word mode is disable.";
            }
            enum "enable" {
              value 2;
              description
                "The control word mode is enable.";
            }
            enum "prefer" {
              value 3;
              description
                "The control word mode is prefer.";
            }
          }
          description "L2VPN control word.";
        }
    
        typedef l2vpn-instance-type {
          type enumeration {
            enum "vpws-local-ccc" {
              value 1;
              description
                "The instance type is VPWS local CCC.";
            }
            enum "vpws-remote-ccc" {
              value 2;
              description
                "The instance type is VPWS remote CCC.";
            }
            enum "vpws-svc" {
              value 3;
              description
                "The instance type is VPWS SVC.";
            }
            enum "vpws-ldp" {
              value 4;
              description
                "The instance type is VPWS LDP.";
            }
            enum "vpws-switch" {
              value 5;
              description
                "The instance type is VPWS switching.";
            }
            enum "vpls" {
              value 6;
              description
                "Virtual private LAN service.";
            }
            enum "vpws-bgp" {
              value 8;
              description
                "The instance type is VPWS BGP.";
            }
            enum "vpws-single-ccc" {
              value 9;
              description
                "The instance type is VPWS single CCC.";
            }
          }
          description "L2VPN instance type.";
        }
    
        typedef l2vpn-switch-type {
          type enumeration {
            enum "svc-svc" {
              value 1;
              description "SVC to SVC.";
            }
            enum "ldp-svc" {
              value 2;
              description "LDP to SVC.";
            }
            enum "ldp-ldp" {
              value 3;
              description "LDP to LDP.";
            }
            enum "upe" {
              value 4;
              description
                "User-end provider edge.";
            }
            enum "ldp-ldp-bak" {
              value 5;
              description
                "PW redundancy of LDP to LDP.";
            }
          }
          description "L2VPN switch type.";
        }
    
        typedef encapsulation-type {
          type enumeration {
            enum "fr" {
              value 1;
              description
                "The encapsulation type is FR.";
            }
            enum "atm-aal5-sdu" {
              value 2;
              description
                "The encapsulation type is ATM-AAL5-SDU.";
            }
            enum "atm-trans-cell" {
              value 3;
              description
                "The encapsulation type is ATM-TRANS-CELL.";
            }
            enum "vlan" {
              value 4;
              description
                "The encapsulation type is VLAN.";
            }
            enum "ethernet" {
              value 5;
              description
                "The encapsulation type is ethernet.";
            }
            enum "hdlc" {
              value 6;
              description
                "The encapsulation type is HDLC.";
            }
            enum "ppp" {
              value 7;
              description
                "The encapsulation type is PPP.";
            }
            enum "cem" {
              value 8;
              description
                "The encapsulation type is CEM.";
            }
            enum "atm-nto1-vcc" {
              value 9;
              description
                "The encapsulation type is ATM-Nto1-VCC.";
            }
            enum "atm-nto1-vpc" {
              value 10;
              description
                "The encapsulation type is ATM-Nto1-VPC.";
            }
            enum "ip-layer2" {
              value 11;
              description
                "The encapsulation type is IP-Layer2.";
            }
            enum "atm-1to1-vcc" {
              value 12;
              description
                "The encapsulation type is ATM-1to1-VCC.";
            }
            enum "atm-1to1-vpc" {
              value 13;
              description
                "The encapsulation type is ATM-1to1-VPC.";
            }
            enum "atm-aal5-pdu" {
              value 14;
              description
                "The encapsulation type is ATM-AAL5-PDU.";
            }
            enum "fr-port-mode" {
              value 15;
              description
                "The encapsulation type is FR-PORT-MODE.";
            }
            enum "cep" {
              value 16;
              description
                "The encapsulation type is CEP.";
            }
            enum "satop-e1" {
              value 17;
              description
                "The encapsulation type is SAToP-E1.";
            }
            enum "satop-t1" {
              value 18;
              description
                "The encapsulation type is SAToP-T1.";
            }
            enum "satop-e3" {
              value 19;
              description
                "The encapsulation type is SAToP-E3.";
            }
            enum "satop-t3" {
              value 20;
              description
                "The encapsulation type is SAToP-T3.";
            }
            enum "cesopsn-basic" {
              value 21;
              description
                "The encapsulation type is CESoPSN-BASIC.";
            }
            enum "tdmoip-aal1" {
              value 22;
              description
                "The encapsulation type is TDMoIP-AAL1.";
            }
            enum "cesopsn-tdm" {
              value 23;
              description
                "The encapsulation type is CESoPSN-TDM.";
            }
            enum "tdmoip-aal2" {
              value 24;
              description
                "The encapsulation type is TDMoIP-AAL2.";
            }
            enum "fr-dlci" {
              value 25;
              description
                "The encapsulation type is FR-DLCI.";
            }
            enum "ip-interworking" {
              value 64;
              description
                "The encapsulation type is IP interworking.";
            }
            enum "unsupport" {
              value 255;
              description
                "This encapsulation type is used when the encapsulation types of AC interfaces at the two ends of a local CCC are different, or the ATM bundle interfaces do not have any member, or the VPLS LDP PW on a router inherits the encapsulation type of a VSI.";
            }
          }
          description "L2VPN encapsulate type.";
        }
    
        typedef l2vpn-backup-mode {
          type enumeration {
            enum "primary" {
              value 1;
              description
                "The backup mode is primary.";
            }
            enum "secondary" {
              value 2;
              description
                "The backup mode is secondary.";
            }
            enum "bypass" {
              value 3;
              description
                "The backup mode is bypass.";
            }
            enum "ac-bypass" {
              value 4;
              description
                "The backup mode is AC-bypass.";
            }
            enum "pw-bypass" {
              value 5;
              description
                "The backup mode is PW-bypass.";
            }
          }
          description "L2VPN backup mode.";
        }
    
        typedef l2vpn-tunnel-type {
          type enumeration {
            enum "invalid" {
              value 0;
              description
                "The tunnel type is invalid.";
            }
            enum "ldp" {
              value 1;
              description
                "The tunnel type is LDP.";
            }
            enum "bgp" {
              value 2;
              description
                "The tunnel type is BGP.";
            }
            enum "te" {
              value 3;
              description
                "The tunnel type is TE.";
            }
            enum "static-lsp" {
              value 4;
              description
                "The tunnel type is static LSP.";
            }
            enum "gre" {
              value 5;
              description
                "The tunnel type is GRE.";
            }
            enum "uni" {
              value 6;
              description
                "The tunnel type is UNI.";
            }
            enum "tnl-group" {
              value 7;
              description
                "The tunnel type is Tunnel group.";
            }
            enum "sub-te" {
              value 8;
              description
                "The tunnel type is Sub-TE.";
            }
            enum "sub-group" {
              value 9;
              description
                "The tunnel type is Sub-group.";
            }
            enum "6over4" {
              value 10;
              description
                "The tunnel type is IPv6-over-IPv4.";
            }
            enum "6to4" {
              value 11;
              description
                "The tunnel type is IPv6-to-IPv4.";
            }
            enum "bgp-local-ifnet" {
              value 12;
              description
                "The tunnel type is BGP local-ifnet.";
            }
            enum "ldp6" {
              value 13;
              description
                "The tunnel type is LDP6.";
            }
            enum "srbe-lsp" {
              value 41;
              description
                "The tunnel type is SRBE LSP.";
            }
          }
          description "L2VPN tunnel type.";
        }
    
        typedef l2vpn-mac-type {
          type enumeration {
            enum "static" {
              value 1;
              description
                "The MAC type is static.";
            }
            enum "dynamic" {
              value 2;
              description
                "The MAC type is dynamic.";
            }
            enum "broadcast" {
              value 3;
              description
                "The MAC type is broadcast.";
            }
          }
          description "L2VPN MAC type.";
        }
    
        typedef l2vpn-pw-aps-oper-type {
          type enumeration {
            enum "non-revertive" {
              value 0;
              description
                "The PW APS instance is in non-revertive mode.";
            }
            enum "revertive" {
              value 1;
              description
                "The PW APS instance is in revertive mode.";
            }
          }
          description "L2VPN PW APS oper type.";
        }
    
        typedef l2vpn-pw-aps-mode {
          type enumeration {
            enum "1to1" {
              value 1;
              description
                "The PW APS mode is 1:1.";
            }
          }
          description "L2VPN PW APS mode.";
        }
    
        typedef l2vpn-pw-aps-type {
          type enumeration {
            enum "pw-aps" {
              value 1;
              description
                "The PW APS type is PW APS.";
            }
            enum "mc-pw-aps" {
              value 2;
              description
                "The PW APS type is MC PW APS.";
            }
            enum "pw-fps" {
              value 3;
              description
                "The PW APS type is PW FPS.";
            }
          }
          description "L2VPN PW APS type.";
        }
    
        typedef l2vpn-pw-aps-role {
          type enumeration {
            enum "pw-aps" {
              value 1;
              description
                "Default PW APS role for a PW APS instance.";
            }
            enum "master" {
              value 2;
              description
                "Master role for a PW APS instance in the E-PW APS scenario.";
            }
            enum "slave" {
              value 3;
              description
                "Slave role for a PW APS instance in the E-PW APS scenario.";
            }
          }
          description "L2VPN PW APS role.";
        }
    
        typedef l2vpn-reroute-mode {
          type enumeration {
            enum "delay" {
              value 1;
              description "Delayed switchback.";
            }
            enum "immediately" {
              value 2;
              description
                "Immediate switchback.";
            }
            enum "never" {
              value 3;
              description "Never switchback.";
            }
          }
          description "L2VPN reroute mode.";
        }
    
        typedef pw-redundancy-mode {
          type enumeration {
            enum "frr" {
              value 0;
              description
                "The PW redundancy mode is FRR.";
            }
            enum "independent" {
              value 1;
              description
                "The PW redundancy mode is independent.";
            }
            enum "master" {
              value 2;
              description
                "The PW redundancy mode is master.";
            }
            enum "none" {
              value 3;
              description
                "The PW redundancy mode is not configured.";
            }
          }
          description "PW redundancy mode.";
        }
    
        typedef vpls-redundancy-mode {
          type enumeration {
            enum "independent" {
              value 1;
              description
                "The PW redundancy mode is independent.";
            }
            enum "master" {
              value 2;
              description
                "The PW redundancy mode is master.";
            }
            enum "none" {
              value 3;
              description
                "The PW redundancy mode is not configured.";
            }
          }
          description "PW redundancy mode.";
        }
    
        typedef l2vpn-vpls-vsi-mem-disc-type {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The member discovery type is composite.";
            }
            enum "auto" {
              value 1;
              description
                "The member discovery type is automatic.";
            }
            enum "static" {
              value 2;
              description
                "The member discovery type is static.";
            }
          }
          description
            "L2VPN VPLS VSI member discovery type.";
        }
    
        typedef l2vpn-vpls-unknow-frame-act {
          type enumeration {
            enum "broadcast" {
              value 0;
              description
                "Broadcast unknown frames.";
            }
            enum "drop" {
              value 1;
              description "Drop unknown frames.";
            }
            enum "local-handle" {
              value 2;
              description
                "Locally handle unknown frames.";
            }
            enum "drop-learn" {
              value 3;
              description
                "Drop unknown frames but learn the MAC addresses of these frames.";
            }
          }
          description
            "L2VPN VPLS unknown frame act.";
        }
    
        typedef l2vpn-vpls-pw-type {
          type enumeration {
            enum "label" {
              value 0;
              description
                "The PW type is label.";
            }
            enum "qinq" {
              value 1;
              description "The PW type is QinQ.";
            }
            enum "mehvpls" {
              value 2;
              description
                "The PW type is MEHVPLS. An AC interface is an interface bound to a VSI. On a LDP VPLS network, if the peer is a UPE, the PW connecting the UPE is processed as an AC in internal processing. The detailed VSI information shows that the PW type of the UPE is MEHVPLS.";
            }
          }
          description "L2VPN VPLS PW type.";
        }
    
        typedef l2vpn-vpls-traffic-statistics-enable-type {
          type enumeration {
            enum "default" {
              value 0;
              description
                "VSI traffic statistics collection configurations are inherited.";
            }
            enum "disable" {
              value 1;
              description
                "The function to collect VPLS traffic statistics is disabled.";
            }
            enum "enable" {
              value 2;
              description
                "The function to collect VPLS traffic statistics is enabled.";
            }
          }
          description
            "L2VPN VPLS traffic statistics enable type.";
        }
    
        typedef l2vpn-vpls-ldp-pw-state-code {
          type enumeration {
            enum "forward" {
              value 0;
              description
                "Forwarding is supported.";
            }
            enum "standby" {
              value 1;
              description
                "The PW is a secondary PW.";
            }
            enum "ac-fault" {
              value 2;
              description
                "The peer AC interface is faulty.";
            }
            enum "psn-fault" {
              value 3;
              description
                "A fault occurs on the public network between the local end and peer end.";
            }
            enum "not-forward" {
              value 4;
              description
                "Forwarding is not supported.";
            }
          }
          description
            "L2VPN VPLS LDP PW state code.";
        }
    
        typedef l2vpn-vpws-vrrp-state {
          type enumeration {
            enum "initialize" {
              value 0;
              description
                "The VRRP state is initializing.";
            }
            enum "backup" {
              value 1;
              description
                "The VRRP state is backup.";
            }
            enum "master" {
              value 2;
              description
                "The VRRP state is master.";
            }
          }
          description "L2VPN VPWS VRRP state.";
        }
    
        typedef l2vpn-vpws-bfd-state {
          type enumeration {
            enum "invalid" {
              value 0;
              description
                "The state of BFD is invalid. The status code is 0.";
            }
            enum "down" {
              value 1;
              description
                "The state of BFD is down.";
            }
            enum "up" {
              value 2;
              description
                "The state of BFD is up.";
            }
            enum "admin-down" {
              value 3;
              description
                "The state of BFD is administratively down.";
            }
          }
          description "L2VPN VPWS BFD state.";
        }
    
        typedef l2vpn-aps-bind-type {
          type enumeration {
            enum "admin" {
              value 1;
              description
                "The APS bind type is admin.";
            }
            enum "reference" {
              value 2;
              description
                "The APS bind type is reference.";
            }
          }
          description "L2VPN APS bind type.";
        }
    
        typedef oam-protocal {
          type enumeration {
            enum "mpls-oam" {
              value 3;
              description
                "MPLS OAM is used to monitor the link status.";
            }
            enum "tp-oam" {
              value 4;
              description
                "MPLS-TP OAM is used to monitor the link status.";
            }
            enum "none" {
              value 5;
              description
                "No link detection protocol is used to detect the link status, or the packet receiving function of a configured link detection protocol is not enabled.";
            }
          }
          description "L2VPN OAM protocol.";
        }
    
        typedef oam-status {
          type enumeration {
            enum "nondefect" {
              value 1;
              description
                "The link status is normal.";
            }
            enum "defect" {
              value 2;
              description "The link is faulty.";
            }
            enum "detect-stop" {
              value 3;
              description
                "Link detection stops.";
            }
            enum "invalid" {
              value 4;
              description
                "No link detection protocol is used to detect the link status, or the packet receiving function of a configured link detection protocol is not enabled.";
            }
          }
          description "L2VPN OAM status.";
        }
    
        typedef l2vpn-aps-status {
          type enumeration {
            enum "LO" {
              value 1;
              description
                "Services are locked to the primary PW.";
            }
            enum "SF-P" {
              value 2;
              description
                "The secondary or bypass PW becomes faulty.";
            }
            enum "FS" {
              value 3;
              description
                "Services are forcibly switched from the primary PW to the secondary or bypass PW.";
            }
            enum "SF" {
              value 4;
              description
                "The primary PW becomes faulty.";
            }
            enum "SD-P" {
              value 5;
              description
                "Signals degrade on the secondary or bypass PW.";
            }
            enum "SD" {
              value 6;
              description
                "Signals degrade on the primary PW.";
            }
            enum "MS" {
              value 7;
              description
                "Services are manually switched from the primary PW to the secondary or bypass PW.";
            }
            enum "WTR" {
              value 8;
              description
                "The system is waiting to switch traffic back from the secondary or bypass PW to the primary PW.";
            }
            enum "EXER" {
              value 9;
              description
                "The status is exercise.";
            }
            enum "RR" {
              value 10;
              description
                "Revertive switching request.";
            }
            enum "DNR" {
              value 11;
              description "Do not revert.";
            }
            enum "NR" {
              value 12;
              description
                "The primary, secondary, or bypass PW is normal.";
            }
            enum "MS-P" {
              value 13;
              description
                "Services are manually switched from the primary PW to the secondary or bypass PW.";
            }
            enum "MS-W" {
              value 14;
              description
                "Services are manually switched from the secondary or bypass PW to the primary PW.";
            }
            enum "EXER-P" {
              value 15;
              description
                "The secondary or bypass PW exercises traffic switching.";
            }
            enum "EXER-W" {
              value 16;
              description
                "The primary PW exercises traffic switching.";
            }
            enum "RR-P" {
              value 17;
              description
                "Services are requested to switch from the primary PW to the secondary or bypass PW.";
            }
            enum "RR-W" {
              value 18;
              description
                "Services are requested to switch from the secondary or bypass PW to the primary PW.";
            }
            enum "NR-P" {
              value 19;
              description
                "Services are not requested to switch from the primary PW to the secondary or bypass PW.";
            }
            enum "NR-W" {
              value 20;
              description
                "Services are not requested to switch from the secondary or bypass PW to the primary PW.";
            }
          }
          description "L2VPN APS status.";
        }
    
        typedef l2vpn-aps-path-status {
          type enumeration {
            enum "no-defect" {
              value 0;
              description "No fault exists.";
            }
            enum "defect" {
              value 1;
              description "A fault exists.";
            }
            enum "defect-sd" {
              value 2;
              description "Signals attenuated.";
            }
            enum "invalid" {
              value 3;
              description
                "The working path status cannot be detected because the PW APS instance is in the slave state.";
            }
          }
          description "L2VPN APS path status.";
        }
    
        typedef l2vpn-aps-result {
          type enumeration {
            enum "work" {
              value 0;
              description
                "The traffic in the PW protection group is transmitted over the primary PW.";
            }
            enum "protect" {
              value 1;
              description
                "The traffic in the PW protection group is transmitted over the secondary or bypass PW.";
            }
          }
          description "L2VPN APS result.";
        }
    
        typedef l2vpn-protect-group-name {
          type string {
            length "1..15";
          }
          description
            "L2VPN protect group name.";
        }
    
        typedef vpn-rt-type {
          type enumeration {
            enum "export-extcommunity" {
              value 2;
              description
                "Extended community attribute of the route from an outbound interface to the destination VPN.";
            }
            enum "import-extcommunity" {
              value 3;
              description
                "Receive routes that carry the specified extended community attribute.";
            }
          }
          description
            "L2VPN common VPN RT type.";
        }
    
        typedef vpls-split-horizon-mode-type {
          type enumeration {
            enum "spoke" {
              value 1;
              description
                "The split horizon mode type is spoke.";
            }
            enum "hub" {
              value 2;
              description
                "The split horizon mode type is hub.";
            }
          }
          description
            "L2VPN VPLS split horizon mode type.";
        }
    
        typedef pw-signal-type {
          type enumeration {
            enum "ldp" {
              value 1;
              description
                "The PW signal type is LDP.";
            }
            enum "static" {
              value 2;
              description
                "The PW signal type is static.";
            }
          }
          description "L2VPN PW signal type.";
        }
    
        typedef l2vpn-rtp-header-type {
          type enumeration {
            enum "false" {
              value 0;
              description
                "The function to add RTP headers to packets is disabled.";
            }
            enum "standard" {
              value 1;
              description
                "Add standard RTP headers to packets.";
            }
            enum "private" {
              value 2;
              description
                "Add vendor-specific RTP headers to packets.";
            }
          }
          description "L2VPN RT header type.";
        }
    
        typedef l2vpn-payload-comp {
          type enumeration {
            enum "disable" {
              value 0;
              description
                "Disable payload compression.";
            }
            enum "uneq" {
              value 1;
              description
                "Send DBA packets when the unequipped circuit indication is detected.";
            }
          }
          description
            "L2VPN payload compression.";
        }
    
        typedef l2vpn-route-status {
          type enumeration {
            enum "reachable" {
              value 1;
              description
                "The route status is reachable.";
            }
            enum "unreachable" {
              value 2;
              description
                "The route status is unreachable.";
            }
          }
          description "L2VPN route status.";
        }
    
        typedef ac-oam-mapping-type {
          type enumeration {
            enum "default" {
              value 1;
              description
                "The AC OAM mapping type is default.";
            }
            enum "1ag" {
              value 2;
              description
                "The AC OAM mapping type is 1ag.";
            }
            enum "3ah" {
              value 3;
              description
                "The AC OAM mapping type is 3ah.";
            }
          }
          description
            "L2VPN AC OAM mapping type.";
        }
    
        typedef oam-state {
          type enumeration {
            enum "down" {
              value 0;
              description
                "The MC OAM state is down.";
            }
            enum "up" {
              value 1;
              description
                "The MC OAM state is up.";
            }
            enum "invalid" {
              value 2;
              description
                "The MC OAM state is invalid.";
            }
          }
          description "L2VPN MC OAM state.";
        }
    
        typedef flow-label-ability {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The flow label ability is default.";
            }
            enum "send" {
              value 1;
              description
                "Ability to send flow labels.";
            }
            enum "receive" {
              value 2;
              description
                "Ability to receive flow labels.";
            }
            enum "both" {
              value 3;
              description
                "Ability to both send and receive flow labels.";
            }
            enum "disable" {
              value 4;
              description
                "Ability to disable flow labels.";
            }
          }
          description
            "L2VPN flow label ability.";
        }
    
        typedef l2vpn-load-balance-type {
          type enumeration {
            enum "packet" {
              value 1;
              description
                "Per-packet load balancing.";
            }
            enum "flow" {
              value 2;
              description
                "Per-flow load balancing.";
            }
          }
          description "L2VPN load balance type.";
        }
    
        typedef bgp-encap-type {
          type enumeration {
            enum "vpls" {
              value 19;
              description
                "The encapsulation type is BGP VPLS.";
            }
          }
          description
            "L2VPN BGP encapsulation type.";
        }
    
        typedef vsi-work-mode {
          type enumeration {
            enum "normal" {
              value 0;
              description
                "The VSI work mode is normal.";
            }
            enum "bd-mode" {
              value 1;
              description
                "The VSI work mode is bd-mode.";
            }
            enum "b-vsi" {
              value 3;
              description
                "Used to process B-MAC addresses and determine a PW's remote PE based on the configured peer address.";
            }
            enum "i-vsi" {
              value 4;
              description
                "I-VSI with no service type specified.";
            }
            enum "i-vsi-p2p" {
              value 5;
              description
                "The VSI work mode is P2P I-VSI.";
            }
            enum "i-vsi-b-evpn-interworking" {
              value 7;
              description
                "The VSI work mode is I-VSI accessing B-EVPN.";
            }
          }
          description
            "L2VPN VPLS VSI work mode.";
        }
    
        typedef send-receive-active-status {
          type enumeration {
            enum "send-receive-inactive" {
              value 0;
              description
                "Send inactive and receive inactive.";
            }
            enum "send-active-receive-inactive" {
              value 2;
              description
                "Send active and receive inactive.";
            }
            enum "send-inactive-receive-active" {
              value 4;
              description
                "Send inactive and receive active.";
            }
            enum "send-receive-active" {
              value 6;
              description
                "Send active and receive active.";
            }
          }
          description
            "L2VPN sernd recv active status.";
        }
    
        typedef ac-block-status {
          type enumeration {
            enum "unblocked" {
              value 0;
              description
                "The block status of AC is unblocked.";
            }
            enum "blocked" {
              value 1;
              description
                "The block status of AC is blocked.";
            }
          }
          description "L2VPN AC block status.";
        }
    
        typedef vpws-bgp-ce-name-type {
          type string {
            length "1..20";
          }
          description "L2VPN VPWS BGP CE name.";
        }
    
        typedef vpls-multi-homing-site-name {
          type string {
            length "1..19";
            pattern '[a-zA-Z][a-zA-Z0-9_-]*';
          }
          description
            "L2VPN VPLS multi-homing site name.";
        }
    
        typedef bfd-vccv-cv-type {
          type enumeration {
            enum "cv-linkage-bfd" {
              value 0;
              description
                "IP/UDP encapsulation supports fault detection and status signaling.";
            }
            enum "cv-bfd" {
              value 1;
              description
                "Fault Detection Only.";
            }
            enum "cv-pw-ach-bfd" {
              value 2;
              description
                "PW-ACH encapsulation supports only fault detection.";
            }
          }
          description "L2VPN BFD VCCV CV type.";
        }
    
        typedef l2vpn-common-enable-type {
          type enumeration {
            enum "disable" {
              value 1;
              description
                "The setting is disabled.";
            }
            enum "enable" {
              value 2;
              description
                "The setting is enabled.";
            }
          }
          description "L2VPN common enable.";
        }
    
        typedef interface-change-withdraw-type {
          type enumeration {
            enum "all" {
              value 0;
              description
                "The interface change withdraw type is all.";
            }
            enum "up" {
              value 1;
              description
                "The interface change withdraw type is up.";
            }
            enum "down" {
              value 2;
              description
                "The interface change withdraw type is down.";
            }
          }
          description
            "Interface change withdraw type.";
        }
    
        typedef suppression-type {
          type enumeration {
            enum "broadcast" {
              value 0;
              description
                "The suppression type is broadcast.";
            }
            enum "multicast" {
              value 1;
              description
                "The suppression type is multicast.";
            }
            enum "unknown-unicast" {
              value 2;
              description
                "The suppression type is unknown-unicast.";
            }
          }
          description "L2VPN suppression type.";
        }
    
        typedef mac-remove-type {
          type enumeration {
            enum "invalid" {
              value 0;
              description
                "The MAC remove type is invalid.";
            }
            enum "all-but-mine" {
              value 1;
              description
                "The MAC remove type is all-but-mine.";
            }
            enum "all-from-me" {
              value 2;
              description
                "The MAC remove type is all-from-me.";
            }
          }
          description "L2VPN MAC remove type.";
        }
    
        typedef l2vpn-arp-send-type {
          type enumeration {
            enum "dual-send" {
              value 1;
              description
                "The ARP send type is dual send.";
            }
            enum "single-send" {
              value 2;
              description
                "The ARP send type is single send.";
            }
          }
          description "L2VPN ARP send type.";
        }
    
        typedef l2vpn-nd-send-type {
          type enumeration {
            enum "dual-send" {
              value 1;
              description
                "The ND send type is dual send.";
            }
          }
          description "L2VPN ND send type.";
        }
    
        typedef l2vpn-pw-aps-ps-type {
          type enumeration {
            enum "manual" {
              value 1;
              description
                "Traffic is switched to the protection path manually. If the protection path is down, traffic cannot be switched and an error message will be displayed.";
            }
            enum "force" {
              value 2;
              description
                "Traffic is forced to switch to the protection path regardless of whether the protection path is up.";
            }
            enum "lock" {
              value 3;
              description
                "Traffic is locked to the working path, and is not switched to the protection path even if the working path becomes faulty.";
            }
            enum "clear" {
              value 4;
              description
                "Clear the manual switch request configured.";
            }
            enum "manual-to-work" {
              value 5;
              description
                "Traffic is switched to the working path manually. If the working path is down, traffic cannot be switched and an error message will be displayed.";
            }
            enum "manual-to-protect" {
              value 6;
              description
                "Traffic is switched to the protection path manually. If the protection path is down, traffic cannot be switched and an error message will be displayed.";
            }
            enum "exercise" {
              value 7;
              description
                "Switching exercise mode.";
            }
          }
          description "L2VPN PW APS PS type.";
        }
    
        typedef l2vpn-protect-group-ps-type {
          type enumeration {
            enum "manual" {
              value 1;
              description
                "The switching type of the PW protection group is manual switching.";
            }
            enum "clear" {
              value 2;
              description
                "The switching type of the PW protection group is clear.";
            }
          }
          description
            "L2VPN protect group PS type.";
        }
    
        typedef multicast-tunnel-type {
          type enumeration {
            enum "invalid" {
              value 0;
              description
                "The MC tunnel type is invalid.";
            }
            enum "mldp-p2mp" {
              value 1;
              description
                "The MC tunnel type is mLDP P2MP.";
            }
            enum "te-p2mp" {
              value 3;
              description
                "The MC tunnel type is TE P2MP.";
            }
          }
          description "L2VPN MC tunnel type.";
        }
    
        typedef pw-block-status {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The block status of PW is default.";
            }
            enum "blocked" {
              value 1;
              description
                "The block status of PW is blocked.";
            }
            enum "unblocked" {
              value 2;
              description
                "The block status of PW is unblocked.";
            }
            enum "temp-blocked" {
              value 3;
              description
                "The block status of PW is temp blocked.";
            }
          }
          description "L2VPN PW block status.";
        }
    
        typedef vpws-bgp-vpn-encap {
          type enumeration {
            enum "atm-aal5-sdu" {
              value 2;
              description
                "The encapsulation type is ATM-AAL5-SDU.";
            }
            enum "atm-trans-cell" {
              value 3;
              description
                "The encapsulation type is ATM-TRANS-CELL.";
            }
            enum "vlan" {
              value 4;
              description
                "The encapsulation type is VLAN.";
            }
            enum "ethernet" {
              value 5;
              description
                "The encapsulation type is ethernet.";
            }
            enum "hdlc" {
              value 6;
              description
                "The encapsulation type is HDLC.";
            }
            enum "ppp" {
              value 7;
              description
                "The encapsulation type is PPP.";
            }
            enum "atm-nto1-vcc" {
              value 9;
              description
                "The encapsulation type is ATM-Nto1-VCC.";
            }
            enum "atm-nto1-vpc" {
              value 10;
              description
                "The encapsulation type is ATM-Nto1-VPC.";
            }
            enum "ip-layer2" {
              value 11;
              description
                "The encapsulation type is IP-Layer2.";
            }
            enum "atm-1to1-vcc" {
              value 12;
              description
                "The encapsulation type is ATM-1to1-VCC.";
            }
            enum "atm-1to1-vpc" {
              value 13;
              description
                "The encapsulation type is ATM-1to1-VPC.";
            }
            enum "ip-interworking" {
              value 64;
              description
                "The encapsulation type is IP interworking.";
            }
          }
          description
            "Encapsulation type for a VPWS BGP VPN instance.";
        }
    
        typedef l2vpn-vpls-pw-bfd-state {
          type enumeration {
            enum "invalid" {
              value 0;
              description
                "The state of BFD is invalid.";
            }
            enum "down" {
              value 1;
              description
                "The state of BFD is down.";
            }
            enum "up" {
              value 2;
              description
                "The state of BFD is up.";
            }
            enum "admin-down" {
              value 3;
              description
                "The state of BFD is administratively down.";
            }
            enum "remote-ac-error" {
              value 4;
              description
                "The state of BFD is remote AC error.";
            }
            enum "remote-ac-error-resume" {
              value 5;
              description
                "The state of BFD is remote AC error resume.";
            }
          }
          description "BFD for VPLS PW state.";
        }
    
        typedef vpws-bgp-pw-type {
          type enumeration {
            enum "local" {
              value 0;
              description
                "The BGP PW type is local.";
            }
            enum "remote" {
              value 1;
              description
                "The BGP PW type is remote.";
            }
            enum "unknown" {
              value 2;
              description
                "The BGP PW type is unknown.";
            }
          }
          description "L2VPN VPWS BGP PW type.";
        }
    
        typedef vpws-bgp-ac-oam-state {
          type enumeration {
            enum "down" {
              value 0;
              description
                "The AC OAM state is down.";
            }
            enum "up" {
              value 1;
              description
                "The AC OAM state is up.";
            }
            enum "invalid" {
              value 2;
              description
                "The AC OAM state is invalid.";
            }
          }
          description
            "L2VPN VPWS BGP AC OAM state.";
        }
    
        typedef vpls-ldp-peer-type {
          type enumeration {
            enum "static" {
              value 0;
              description
                "The peer type is static.";
            }
            enum "dynamic" {
              value 1;
              description
                "The peer type is dynamic.";
            }
          }
          description
            "L2VPN VPLS LDP peer type.";
        }
    
        typedef vpls-loop-detect-type {
          type enumeration {
            enum "detect-loop" {
              value 1;
              description
                "A loop is detected before the maximum number of hops is reached.";
            }
            enum "exceed-max-hop" {
              value 2;
              description
                "The maximum number of hops for loop detection has been exceeded.";
            }
          }
          description
            "L2VPN VPLS loop detect type.";
        }
    
        typedef vpls-bgp-encapsulation-type {
          type enumeration {
            enum "vpls" {
              value 19;
              description
                "The encapsulation type is BGP VPLS.";
            }
          }
          description
            "L2VPN BGP encapsulation type.";
        }
    
        typedef control-flag-bits-type {
          type bits {
            bit sbit {
              position 0;
              description "S bit.";
            }
            bit local-cbit {
              position 1;
              description "Local C bit.";
            }
            bit fbit {
              position 2;
              description "F bit.";
            }
            bit qbit {
              position 3;
              description "Q bit.";
            }
            bit remote-c-bit {
              position 4;
              description "Remote C bit.";
            }
          }
          description
            "Indicates the control flag.";
        }
    
        typedef vsi-pbb-instance-type {
          type enumeration {
            enum "normal" {
              value 0;
              description "Normal mode.";
            }
            enum "b-vsi" {
              value 1;
              description
                "Used to process B-MAC addresses and determine a PW's remote PE based on the configured peer address.";
            }
            enum "i-vsi" {
              value 2;
              description
                "Used to encapsulate packets into PBB frames and is bound to an AC interface for local CE identification.";
            }
          }
          description
            "L2VPN VSI PBB instance style.";
        }
    
        typedef vsi-pbb-learned-flag {
          type enumeration {
            enum "no-mac" {
              value 1;
              description
                "No B-MAC outbound interface has been learned.";
            }
            enum "first" {
              value 2;
              description
                "This B-MAC outbound interface was learned first.";
            }
            enum "master" {
              value 3;
              description
                "Primary B-MAC outbound interface learned.";
            }
            enum "backup" {
              value 4;
              description
                "Secondary B-MAC outbound interface learned.";
            }
          }
          description
            "L2VPN VSI PBB learned flag.";
        }
    
        typedef multicast-active-state {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The MC active state is none.";
            }
            enum "inactive" {
              value 1;
              description
                "The MC active state is inactive.";
            }
            enum "active" {
              value 2;
              description
                "The MC active state is active.";
            }
          }
          description "L2VPN MC active state.";
        }
    
        typedef multicast-oam-type {
          type enumeration {
            enum "none" {
              value 0;
              description
                "The MC OAM type is none.";
            }
            enum "static-bfd" {
              value 1;
              description
                "The MC OAM type is static BFD.";
            }
            enum "bfd" {
              value 2;
              description
                "The MC OAM type is dynamic BFD.";
            }
            enum "mpls-oam" {
              value 3;
              description
                "MPLS OAM is used to detect the link status.";
            }
            enum "tp-oam" {
              value 4;
              description
                "MPLS-TP OAM is used to detect the link status.";
            }
          }
          description "L2VPN MC OAM type.";
        }
    
        typedef suppression-direction {
          type enumeration {
            enum "both" {
              value 0;
              description
                "The suppression direction is both.";
            }
            enum "in-bound" {
              value 1;
              description
                "The suppression direction is inbound.";
            }
            enum "out-bound" {
              value 2;
              description
                "The suppression direction is outbound.";
            }
          }
          description
            "L2VPN suppression direction.";
        }
    
        typedef etree-work-mode {
          type enumeration {
            enum "default" {
              value 0;
              description
                "The e-tree work mode of the PW is not specified.";
            }
            enum "optimized" {
              value 1;
              description
                "The e-tree work mode of the PW is optimized.";
            }
            enum "compatible" {
              value 2;
              description
                "The e-tree work mode of the PW is compatible.";
            }
          }
          description
            "The e-tree work mode of the PW.";
        }
    
        typedef etree-access-role {
          type enumeration {
            enum "root" {
              value 1;
              description
                "The e-tree access role of the AC is root.";
            }
            enum "leaf" {
              value 2;
              description
                "The e-tree access role of the AC is leaf.";
            }
          }
          description
            "The e-tree access role of the AC.";
        }
    
        typedef vpls-id-type {
          type union {
            type string {
              pattern
                '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
            type string {
              pattern
                '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(([0-9]\d{0,8})|([1-3]\d{9})|(4[0-1]\d{8})|(42[0-8]\d{7})|(429[0-3]\d{6})|(4294[0-8]\d{5})|(42949[0-5]\d{4})|(429496[0-6]\d{3})|(4294967[0-1]\d{2})|(42949672[0-8]\d{1})|(429496729[0-5]))';
            }
            type string {
              pattern
                '(((6553[6-9])|(655[4-9]\d{1})|(65[6-9]\d{2})|(6[6-9]\d{3})|([7-9]\d{4}))|([1-9]\d{5,8})|((4[0-1]\d{8})|(42[0-8]\d{7})|(429[0-3]\d{6})|(4294[0-8]\d{5})|(42949[0-5]\d{4})|(429496[0-6]\d{3})|(4294967[0-1]\d{2})|(42949672[0-8]\d{1})|(429496729[0-5]))):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
            type string {
              pattern
                '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\.(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
          }
          description
            "Type definition for vpls id value.";
        }
    
        typedef rd-value-type {
          type union {
            type string {
              pattern
                '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
            type string {
              pattern
                '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(([0-9]\d{0,8})|([1-3]\d{9})|(4[0-1]\d{8})|(42[0-8]\d{7})|(429[0-3]\d{6})|(4294[0-8]\d{5})|(42949[0-5]\d{4})|(429496[0-6]\d{3})|(4294967[0-1]\d{2})|(42949672[0-8]\d{1})|(429496729[0-5]))';
            }
            type string {
              pattern
                '(((6553[6-9])|(655[4-9]\d{1})|(65[6-9]\d{2})|(6[6-9]\d{3})|([7-9]\d{4}))|([1-9]\d{5,8})|((4[0-1]\d{8})|(42[0-8]\d{7})|(429[0-3]\d{6})|(4294[0-8]\d{5})|(42949[0-5]\d{4})|(429496[0-6]\d{3})|(4294967[0-1]\d{2})|(42949672[0-8]\d{1})|(429496729[0-5]))):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
            type string {
              pattern
                '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\.(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
          }
          description
            "Type definition for route distinguisher value.";
        }
    
        typedef rt-value-type {
          type union {
            type string {
              pattern
                '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
            type string {
              pattern
                '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(([0-9]\d{0,8})|([1-3]\d{9})|(4[0-1]\d{8})|(42[0-8]\d{7})|(429[0-3]\d{6})|(4294[0-8]\d{5})|(42949[0-5]\d{4})|(429496[0-6]\d{3})|(4294967[0-1]\d{2})|(42949672[0-8]\d{1})|(429496729[0-5]))';
            }
            type string {
              pattern
                '(((6553[6-9])|(655[4-9]\d{1})|(65[6-9]\d{2})|(6[6-9]\d{3})|([7-9]\d{4}))|([1-9]\d{5,8})|((4[0-1]\d{8})|(42[0-8]\d{7})|(429[0-3]\d{6})|(4294[0-8]\d{5})|(42949[0-5]\d{4})|(429496[0-6]\d{3})|(4294967[0-1]\d{2})|(42949672[0-8]\d{1})|(429496729[0-5]))):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
            type string {
              pattern
                '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)\.(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0):(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{0,3}|0)';
            }
          }
          description
            "Type definition for route vpn target value.";
        }
    
        container l2vpn {
          when
            "/mpls:mpls/mpls:common/mpls:global/mpls:mpls-enable='true'";
          presence
            "Enable l2 virtual private network.";
          description
            "L2 virtual private network.";
          container common {
            description
              "Configure L2VPN common attributes.";
            container global {
              description
                "Configure a global L2VPN.";
              leaf ldp-default-mode {
                type ldp-signal-type;
                default "pwe3";
                description
                  "LDP is used as the signaling protocol. The dynamic VC will then not send a notification during signaling negotiation. The LDP signaling mode is also called the Martini mode.";
              }
    
              leaf vpls-ignore-ac-state {
                type boolean;
                default "false";
                description
                  "Enable/disable the function of the VSI status not to be affected by changes in the AC status.";
              }
    
              leaf vpls-loop-detect-enable {
                type boolean;
                default "false";
                description
                  "Enable/disable MAC withdraw loop detection.";
              }
    
              leaf bfd-cv-type {
                type bfd-vccv-cv-type;
                default "cv-linkage-bfd";
                description
                  "The field of CV will be all filled corresponding BFD CV type after global enable BFDCV.";
              }
    
              leaf ignore-te-oam-state {
                type boolean;
                default "false";
                description
                  "Enable/disable ignoring TE OAM detecting state.";
              }
    
              leaf auto-create-session {
                type boolean;
                default "false";
                description
                  "Enable/disable creating LDP session automatically.";
              }
    
              leaf grp-selective-ldp-enable {
                type boolean;
                default "false";
                description
                  "Enable/disable the selective mLDP P2MP LSP group.";
              }
    
              leaf label-block-size {
                type uint32 {
                  range "2..8";
                }
                must
                  "(../label-block-size=2 or ../label-block-size=4 or ../label-block-size=8)";
                default "8";
                description
                  "Configure the label block size for BGP L2VPN.";
              }
            }  // container global
    
            container pw-templates {
              description
                "List of PW templates.";
              list pw-template {
                key "name";
                max-elements 2000;
                description
                  "Configure PW attributes in a PW template, such as the peer, control word, and tunnel policy.";
                leaf name {
                  type l2vpn-pw-template-name;
                  description
                    "Name of a PW template.";
                }
    
                leaf peer-address {
                  ext:operation-exclude "update";
                  type inet:ipv4-address-no-zone;
                  description
                    "Peer IP address. The loopback IP address of a peer is usually used as the peer IP address.";
                }
    
                leaf mtu {
                  type uint16 {
                    range "46..9600";
                  }
                  description
                    "MTU in a PW template.";
                }
    
                leaf control-word {
                  type enumeration {
                    enum "disable" {
                      value 1;
                      description
                        "Disable control word.";
                    }
                    enum "enable" {
                      value 2;
                      description
                        "Enable control word.";
                    }
                  }
                  default "disable";
                  description
                    "Enable the control word function.";
                }
    
                leaf tunnel-policy {
                  type string {
                    length "1..39";
                  }
                  description
                    "Tunnel policy configured in a PW template.";
                }
    
                leaf vccv-capability {
                  type string {
                    length "0..40";
                  }
                  config false;
                  description
                    "VCCV capability. VCCV supports two modes: control word and label alert.";
                }
    
                leaf total-pw-num {
                  type uint32;
                  default "0";
                  config false;
                  description
                    "Total number of PWs using a specific PW template, including static PWs and dynamic PWs.";
                }
    
                leaf static-pw-num {
                  type uint32;
                  default "0";
                  config false;
                  description
                    "Number of static PWs using a specific PW template.";
                }
    
                leaf ldp-pw-num {
                  type uint32;
                  default "0";
                  config false;
                  description
                    "Number of dynamic PWs using a specific PW template.";
                }
    
                container tdm-parameter {
                  description
                    "Configure TDM parameters.";
                  leaf tdm-encapsulate-number {
                    ext:dynamic-default;
                    type uint32 {
                      range "1..40";
                    }
                    description
                      "Number of TDM frames encapsulated in a CESoPSN or SAToP packet in the TDMoPSN application.";
                  }
    
                  leaf jitter-buffer {
                    ext:dynamic-default;
                    type uint32 {
                      range "1..64000";
                    }
                    units "us";
                    must ". mod 1000 = 0";
                    description
                      "Depth of the jitter buffer in the application of TDMoPSN.";
                  }
    
                  leaf jitter-buffer-cep {
                    type uint32 {
                      range "125..16000";
                    }
                    units "us";
                    must ". mod 125 = 0";
                    default "1000";
                    description
                      "Depth of the jitter buffer in the application of CEP.";
                  }
    
                  leaf rtp-header {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable transparently transmission of TDM frames.";
                  }
    
                  leaf idle-code {
                    type yang:hex-string {
                      length "1..2";
                    }
                    default "ff";
                    description
                      "Idle code that is filled when the jitter buffer underflow occurs.";
                  }
    
                  leaf payload-compression {
                    type l2vpn-payload-comp;
                    default "disable";
                    description
                      "Payload compression mode.";
                  }
                }  // container tdm-parameter
    
                container atm-parameter {
                  description
                    "Configure ATM parameters.";
                  leaf max-atm-cells {
                    ext:dynamic-default;
                    type uint32 {
                      range "1..28";
                    }
                    description
                      "Maximum number of ATM cells to be encapsulated into a packet that can be received by a device.";
                  }
    
                  leaf atm-pack-overtime {
                    ext:dynamic-default;
                    type uint32 {
                      range "100..10000";
                    }
                    units "us";
                    description
                      "Delay in encapsulating ATM cells into a packet.";
                  }
    
                  leaf atm-transmit-cell {
                    type uint32 {
                      range "1..28";
                    }
                    description
                      "Maximum number of ATM cells to be encapsulated into a packet that can be sent by a device.";
                  }
    
                  leaf sequence-number {
                    when
                      "../../control-word='enable'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the sequence number function.";
                  }
                }  // container atm-parameter
    
                container bfd-parameter {
                  when "/bfd:bfd";
                  must
                    "../control-word='enable'";
                  presence
                    "enable bfd-parameter for pw";
                  description
                    "Enable/disable BFD.";
                  leaf min-rx-interval {
                    type uint16 {
                      range "0..65535";
                    }
                    units "ms";
                    default "10";
                    description
                      "Minimum receive interval.";
                  }
    
                  leaf min-tx-interval {
                    type uint16 {
                      range "0..65535";
                    }
                    units "ms";
                    default "10";
                    description
                      "Minimum transmit interval.";
                  }
    
                  leaf detect-multiplier {
                    type uint16 {
                      range "3..50";
                    }
                    default "3";
                    description
                      "Detection multiplier.";
                  }
                }  // container bfd-parameter
    
                container flow-label {
                  presence
                    "enable flow-label for pw";
                  description
                    "Enable/disable the flow-label function.";
                  leaf ability {
                    type flow-label-ability;
                    must
                      ".!='default' and .!='disable'";
                    mandatory true;
                    description
                      "Specify the flow-label ability.";
                  }
    
                  leaf static {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the static flow-label function.";
                  }
                }  // container flow-label
    
                container qos-parameter {
                  must "cir<=pir" {
                    error-message
                      "The pir value is less than cir value.";
                  }
                  must "not(cir=0 and pir=0)" {
                    error-message
                      "The cir and pir value can not be zero at same time.";
                  }
                  presence "enable QoS for pw";
                  description
                    "Enable/disable QoS parameter information.";
                  leaf cir {
                    type uint32 {
                      range "0 | 16..4294967294";
                    }
                    units "kbit/s";
                    default "0";
                    description
                      "Specify the CIR.";
                  }
    
                  leaf pir {
                    type uint32 {
                      range "0 | 16..4294967294";
                    }
                    units "kbit/s";
                    description
                      "Specify the PIR.";
                  }
    
                  leaf profile-name {
                    when "../pir>0";
                    type leafref {
                      path "/qos:qos/qos:queue-scheduler-template/qos:profiles/qos:profile/qos:name";
                    }
                    description
                      "Specify the name of QoS profile.";
                  }
                }  // container qos-parameter
              }  // list pw-template
            }  // container pw-templates
    
            container pw-apss {
              description
                "List of APS instances.";
              list pw-aps {
                key "aps-id";
                max-elements 65536;
                description
                  "Configure APS instances.";
                leaf aps-id {
                  type uint32 {
                    range "1..65535";
                  }
                  description
                    "ID of a PW APS instance.";
                }
    
                leaf description {
                  type string {
                    length "1..63";
                  }
                  description
                    "PW APS description.";
                }
    
                leaf protect-type {
                  ext:operation-exclude "update|delete";
                  type l2vpn-pw-aps-type;
                  must
                    "((../protect-type='pw-aps' or ../protect-type='pw-fps') and ../role='pw-aps') or (../protect-type='mc-pw-aps' and (../role='master' or ../role='slave'))";
                  default "pw-aps";
                  description "Protection type.";
                }
    
                leaf role {
                  type l2vpn-pw-aps-role;
                  must
                    "((../protect-type='pw-aps' or ../protect-type='pw-fps') and ../role='pw-aps') or (../protect-type='mc-pw-aps' and (../role='master' or ../role='slave'))";
                  default "pw-aps";
                  description "E-PW APS role.";
                }
    
                leaf remote-aps-id {
                  when "not(../role='pw-aps')";
                  type uint32 {
                    range "1..65535";
                  }
                  description
                    "Remote ID of E-PW APS.";
                }
    
                leaf holdoff {
                  type uint32 {
                    range "0..100";
                  }
                  units "100 ms";
                  default "0";
                  description
                    "Hold time. The value ranges from 0 to 100. Step is 100ms.";
                }
    
                leaf wtr {
                  when "../role!='slave'";
                  type uint32 {
                    range "0..12";
                  }
                  units "min";
                  default "5";
                  description
                    "Wait-to-Restore time.";
                }
    
                leaf operation-type {
                  when "../role!='slave'";
                  type l2vpn-pw-aps-oper-type;
                  default "revertive";
                  description "Operation type.";
                }
    
                leaf protect-mode {
                  type l2vpn-pw-aps-mode;
                  default "1to1";
                  config false;
                  description "Protection mode.";
                }
    
                container pw-aps-info {
                  config false;
                  description
                    "Statistics of APS instances.";
                  leaf aps-status {
                    type l2vpn-aps-status;
                    description "PW APS status.";
                  }
    
                  leaf work-path-status {
                    type l2vpn-aps-path-status;
                    description
                      "Working path status.";
                  }
    
                  leaf protect-path-status {
                    type l2vpn-aps-path-status;
                    description
                      "Protection path status.";
                  }
    
                  leaf far-end-status {
                    type l2vpn-aps-status;
                    description
                      "PW APS status on the remote end.";
                  }
    
                  leaf request-result {
                    type l2vpn-aps-result;
                    description
                      "APS request result.";
                  }
    
                  leaf alarm {
                    type string {
                      length "1..256";
                    }
                    description
                      "Alarm information.";
                  }
    
                  leaf total-vpn-num {
                    type uint32;
                    default "0";
                    description
                      "Total number of VPN instances (PW protection groups) bound to a PW APS instance.";
                  }
                }  // container pw-aps-info
    
                container aps-vpws-instances {
                  config false;
                  description
                    "List of VPWS PW protection groups.";
                  list aps-vpws-instance {
                    key "client-interface";
                    max-elements 128;
                    description
                      "Operational data of a VPWS PW protection group.";
                    leaf client-interface {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Interface bound to an L2VPN.";
                    }
    
                    leaf instance-name {
                      type l2vpn-instance-name;
                      description
                        "VPWS instance name.";
                    }
    
                    leaf bind-type {
                      type l2vpn-aps-bind-type;
                      description
                        "Binding relationship between a PW protection group and a PW APS instance.";
                    }
    
                    leaf encapsulation-type {
                      ext:support-filter "true";
                      type encapsulation-type;
                      description
                        "Encapsulation type of a VPWS instance bound to a PW APS instance.";
                    }
    
                    leaf description {
                      type string {
                        length "1..128";
                      }
                      description
                        "Description of a VPWS instance. The value is a string of characters.";
                    }
    
                    container aps-vpws-pws {
                      description
                        "List of protection group PW member.";
                      list aps-vpws-pw {
                        key "role";
                        max-elements 2;
                        description
                          "Operational data of PW members in a protection group.";
                        leaf role {
                          type pw-role-type;
                          description
                            "Role of a PW, either primary or secondary.";
                        }
    
                        leaf pw-id {
                          type uint32;
                          description "PW ID.";
                        }
    
                        leaf encapsulation-type {
                          type encapsulation-type;
                          description
                            "Encapsulation type of a PW.";
                        }
    
                        leaf peer-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "LSR ID of the remote device.";
                        }
    
                        leaf pw-state {
                          type l2vpn-pw-state;
                          description
                            "Status of a PW.";
                        }
                      }  // list aps-vpws-pw
                    }  // container aps-vpws-pws
                  }  // list aps-vpws-instance
                }  // container aps-vpws-instances
              }  // list pw-aps
            }  // container pw-apss
    
            container service-peers {
              description "List of peers.";
              list service-peer {
                key "peer-ip";
                description
                  "Configure the list of peers.";
                leaf peer-ip {
                  type inet:ipv4-address-no-zone;
                  description
                    "Indicates the LSR ID of the remote device.";
                }
    
                leaf ldp-mode {
                  type l2vpn-peer-ldp-signal-mode;
                  default "default";
                  description
                    "Peer signal mode.";
                }
              }  // list service-peer
            }  // container service-peers
    
            container peer-no-requests {
              description
                "List of no-request peers.";
              list peer-no-request {
                key "peer-ip";
                description
                  "Configure no-request peers.";
                leaf peer-ip {
                  type inet:ipv4-address-no-zone;
                  description
                    "Indicates the LSR ID of the remote device.";
                }
              }  // list peer-no-request
            }  // container peer-no-requests
    
            container peer-bfd-cv-stds {
              description
                "List of BFD CV standard peers.";
              list peer-bfd-cv-std {
                must
                  "(enable='disable' and type='cv-bfd') or enable='enable'";
                key "peer-ip";
                description
                  "Configure BFD CV standard peers.";
                leaf peer-ip {
                  type inet:ipv4-address-no-zone;
                  description
                    "Indicates the LSR ID of the remote device.";
                }
    
                leaf enable {
                  type l2vpn-common-enable-type;
                  default "enable";
                  description "Enable BFDCV.";
                }
    
                leaf type {
                  type bfd-vccv-cv-type;
                  default "cv-bfd";
                  description
                    "The BFDCV type of the peer.";
                }
              }  // list peer-bfd-cv-std
            }  // container peer-bfd-cv-stds
    
            container vpws-bgp-vpns {
              description
                "List of VPWS BGP VPN instances.";
              list vpws-bgp-vpn {
                key "name";
                description
                  "Configure VPWS BGP VPN instance.";
                leaf name {
                  type string {
                    length "1..31";
                  }
                  description
                    "VPWS BGP VPN instance name.";
                }
    
                leaf encapsulation-type {
                  type vpws-bgp-vpn-encap;
                  mandatory true;
                  description
                    "VPWS BGP VPN instance encapsulation type.";
                }
    
                leaf control-word {
                  type enumeration {
                    enum "disable" {
                      value 1;
                      description
                        "The control word mode is disable.";
                    }
                    enum "enable" {
                      value 2;
                      description
                        "The control word mode is enable.";
                    }
                  }
                  default "disable";
                  description
                    "Control word of the VPWS BGP VPN instance. If the encapsulation type is low speed, disabling the control word causes the VPWS BGP instance to fail.";
                }
    
                leaf route-distinguisher {
                  type rd-value-type;
                  description
                    "Route distinguisher of VPWS BGP VPN instance.";
                }
    
                leaf mtu {
                  type uint16 {
                    range "0..16352";
                  }
                  default "1500";
                  description
                    "MTU of VPWS BGP VPN instance.";
                }
    
                leaf ignore-mtu-match {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function of the ignoring MTU match of a VPWS BGP VPN instance.";
                }
    
                leaf auto-route-distinguisher {
                  type rd-value-type;
                  config false;
                  description
                    "Automatic route distinguisher (RD). If no RD is configured for an L2VPN instance, you can specify an IPv4 address using the rd-ip parameter, based on which an RD is automatically generated in the format of 32-bit prefix IP address:index, for example, 192.168.122.15:1. An index is an integer automatically allocated by the system and ranges from 1 to 65535.Each L2VPN instance must use a unique RD.";
                }
    
                container vpn-targets {
                  description
                    "List of route targets of VPWS BGP VPN instances.";
                  list vpn-target {
                    key "rt-value rt-type";
                    max-elements 32;
                    description
                      "Configure a route target list of the VPWS BGP VPN instances.";
                    leaf rt-value {
                      type rt-value-type;
                      description
                        "Route target value of the VPWS BGP VPN instance.";
                    }
    
                    leaf rt-type {
                      type vpn-rt-type;
                      description
                        "Route target type of the VPWS BGP VPN instance.";
                    }
                  }  // list vpn-target
                }  // container vpn-targets
    
                container sites {
                  description
                    "List of CEs in a VPWS BGP VPN instance.";
                  list site {
                    must
                      "not(id=0 and default-offset=1)";
                    key "name";
                    unique "id";
                    description
                      "Configure a CE in a VPWS BGP VPN instance.";
                    leaf name {
                      type vpws-bgp-ce-name-type;
                      description
                        "Local site name.";
                    }
    
                    leaf id {
                      ext:operation-exclude "update";
                      type uint16 {
                        range "0..65534";
                      }
                      mandatory true;
                      description
                        "VPWS BGP VPN instance customer edge identifier.";
                    }
    
                    leaf range {
                      type uint16 {
                        range "1..65535";
                      }
                      must
                        "../l2vpn:range >= /l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name=current()/../../../l2vpn:name]/l2vpn:sites/l2vpn:site[l2vpn:name = current()/../l2vpn:name]/range";
                      default "10";
                      description
                        "VPWS BGP VPN instance customer edge range.";
                    }
    
                    leaf default-offset {
                      type uint16 {
                        range "0..1";
                      }
                      default "0";
                      description
                        "VPWS BGP VPN instance customer edge default offset.";
                    }
    
                    container label-blocks {
                      config false;
                      description
                        "List of label blocks of a CE in a VPWS BGP VPN instance.";
                      list label-block {
                        key "label-offset";
                        description
                          "Operational data of a label block of a CE in aVPWS BGP VPN instance.";
                        leaf label-offset {
                          type uint8;
                          description
                            "VPWS BGP VPN instance customer edge label offset.";
                        }
    
                        leaf label-base {
                          type uint32;
                          description
                            "VPWS BGP VPN instance customer edge label benchmark.";
                        }
    
                        leaf ce-base {
                          type uint32;
                          description
                            "VPWS BGP VPN instance customer edge benchmark.";
                        }
    
                        leaf label-range {
                          type uint16;
                          description
                            "VPWS BGP VPN instance customer edge label range.";
                        }
                      }  // list label-block
                    }  // container label-blocks
                  }  // list site
                }  // container sites
    
                container remote-sites {
                  config false;
                  description
                    "List of remote CE information in a VPWS BGP VPN instance.";
                  list remote-site {
                    key "id";
                    description
                      "Operational data of remote label information of a remote CE in a VPWS BGP VPN instance.";
                    leaf id {
                      type uint16;
                      description
                        "VPWS BGP VPN instance remote customer edge info customer edge identifier.";
                    }
    
                    leaf peer-ip {
                      type inet:ipv4-address-no-zone;
                      description
                        "VPWS BGP VPN instance remote customer edge info peer IP address.";
                    }
    
                    leaf route-distinguisher {
                      type string {
                        length "0..21";
                      }
                      description
                        "VPWS BGP VPN instance remote customer edge info remote route distinguisher.";
                    }
    
                    container labels {
                      description
                        "List of remote label information of a remote CE in a VPWS BGP VPN instance.";
                      list label {
                        key "label-offset";
                        description
                          "Operational data of remote label information of a remote CE in a VPWS BGP VPN instance.";
                        leaf label-offset {
                          type uint8;
                          description
                            "VPWS BGP VPN instance remote customer edge info remote label offset.";
                        }
    
                        leaf label-base {
                          type uint32;
                          description
                            "VPWS BGP VPN instance remote customer edge info remote label benchmark.";
                        }
    
                        leaf label-range {
                          type uint16;
                          description
                            "VPWS BGP VPN instance remote customer edge info remote label range.";
                        }
                      }  // list label
                    }  // container labels
                  }  // list remote-site
                }  // container remote-sites
              }  // list vpws-bgp-vpn
            }  // container vpws-bgp-vpns
    
            container not-match-remote-ldps {
              config false;
              description
                "List of incongruous remote signaling.";
              list not-match-remote-ldp {
                key "pw-id peer-ip encapsulation-type";
                description
                  "Operational data of incongruous remote signaling.";
                leaf pw-id {
                  type uint32 {
                    range "0..4294967295";
                  }
                  description
                    "PW ID used by the remote end for PW negotiation.";
                }
    
                leaf peer-ip {
                  type inet:ipv4-address-no-zone;
                  description
                    "IP address of the remote end.";
                }
    
                leaf encapsulation-type {
                  type encapsulation-type;
                  description
                    "Encapsulate type on the remote end.";
                }
    
                leaf remote-label {
                  type uint32;
                  description
                    "Label information on the remote end.";
                }
    
                leaf remote-group-id {
                  type uint32;
                  description
                    "Group ID on the remote end.";
                }
    
                leaf remote-mtu {
                  type uint32;
                  description
                    "MTU information on the remote end.";
                }
    
                leaf remote-state-code {
                  type l2vpn-vpls-ldp-pw-state-code;
                  description
                    "Status code information on the remote end.";
                }
              }  // list not-match-remote-ldp
            }  // container not-match-remote-ldps
    
            container vpws-statistic {
              config false;
              description "VPWS statistics.";
              container vpws-ccc-instance {
                description "CCC statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of local and remote CCCs on the local end.";
                }
    
                leaf local-num {
                  type uint32;
                  default "0";
                  description
                    "Number of local CCCs on the local end.";
                }
    
                leaf local-up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of local CCCs in the up state.";
                }
    
                leaf remote-num {
                  type uint32;
                  default "0";
                  description
                    "Number of remote CCCs on the local end.";
                }
    
                leaf remote-up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of remote CCCs in the up state.";
                }
              }  // container vpws-ccc-instance
    
              container vpws-ccc-ac {
                description "CCC AC statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of CCC ACs.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of CCC ACs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "Number of CCC ACs in the down state.";
                }
              }  // container vpws-ccc-ac
    
              container vpws-ldp-ac {
                description
                  "VPWS LDP AC statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of VPWS LDP ACs.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of VPWS LDP ACs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "Number of VPWS LDP ACs in the down state.";
                }
              }  // container vpws-ldp-ac
    
              container vpws-ldp-pw {
                description
                  "VPWS PW statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of VPWS LDP PWs, including those in the up state and those in the down state.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of VPWS LDP PWs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "VPWS LDP PWs in the down state.";
                }
              }  // container vpws-ldp-pw
    
              container vpws-ldp-pw-remote {
                description
                  "Remote VPWS PW statistics.";
                leaf remote-num {
                  type uint32;
                  default "0";
                  description
                    "Remote VPWS LDP PWs.";
                }
              }  // container vpws-ldp-pw-remote
    
              container vpws-static-ac {
                description
                  "VPWS static AC statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of VPWS static ACs.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of VPWS static ACs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "Number of VPWS static ACs in the down state.";
                }
              }  // container vpws-static-ac
    
              container vpws-static-pw {
                description
                  "VPWS static PW statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of VPWS static PWs, including those in the up state and those in the down state.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of VPWS static PWs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "VPWS static PWs in the down state.";
                }
              }  // container vpws-static-pw
    
              container vpws-switch-instance {
                description
                  "VPWS MS-PW statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of MS-PWs.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of MS-PWs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "Number of MS-PWs in the down state.";
                }
              }  // container vpws-switch-instance
    
              container vpws-vrrps {
                description
                  "List of mVRRP backup group.";
                list vpws-vrrp {
                  key "vrrp-interface-name vrrp-vrid";
                  max-elements 1024;
                  description
                    "Operational data of MVRRP backup group.";
                  leaf vrrp-interface-name {
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    description
                      "Name of the interface bound to an mVRRP backup group.";
                  }
    
                  leaf vrrp-vrid {
                    type uint32 {
                      range "1..255";
                    }
                    description
                      "VRID of the mVRRP backup group.";
                  }
    
                  leaf vrrp-state {
                    type l2vpn-vpws-vrrp-state;
                    description
                      "Status of the mVRRP backup group, which can be master, backup, or initialize.";
                  }
    
                  leaf pw-number {
                    type uint32;
                    default "0";
                    description
                      "Number of PWs bound to an mVRRP backup group.";
                  }
    
                  container pw-infos {
                    description
                      "List of PWs bound to mVRRP backup groups.";
                    list pw-info {
                      key "client-interface-name";
                      max-elements 65535;
                      description
                        "Operational data of PW bound to an mVRRP backup group.";
                      leaf client-interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of the interface bound to an L2VPN.";
                      }
    
                      leaf pw-state {
                        type l2vpn-pw-state;
                        description
                          "PW status, either down or up.";
                      }
    
                      leaf pw-id {
                        type uint32;
                        description
                          "PW ID. The combination of the PW ID and encapsulation type uniquely identify a PW.";
                      }
    
                      leaf encapsulation-type {
                        type encapsulation-type;
                        description
                          "Encapsulation type of a PW.";
                      }
    
                      leaf link-state {
                        type l2vpn-state;
                        description
                          "Forwarding status of a PW.";
                      }
                    }  // list pw-info
                  }  // container pw-infos
                }  // list vpws-vrrp
              }  // container vpws-vrrps
    
              container arp {
                description "ARP statistics.";
                leaf total-ce-mac-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of CE MAC addresses.";
                }
    
                leaf dynamic-ce-mac-num {
                  type uint32;
                  default "0";
                  description
                    "Number of dynamic CE MAC entries.";
                }
    
                leaf static-ce-mac-num {
                  type uint32;
                  default "0";
                  description
                    "Number of static CE MAC entries.";
                }
    
                leaf brd-ce-mac-num {
                  type uint32;
                  default "0";
                  description
                    "Number of broadcast CE MAC addresses.";
                }
              }  // container arp
    
              container vpws-bgp-pw {
                description
                  "BGP VLL PW statistics.";
                leaf total-num {
                  type uint32;
                  default "0";
                  description
                    "Total number of BGP VLL PWs, including those in the up state and those in the down state.";
                }
    
                leaf up-num {
                  type uint32;
                  default "0";
                  description
                    "Number of BGP VLL PWs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  default "0";
                  description
                    "BGP VLL PWs in the down state.";
                }
              }  // container vpws-bgp-pw
            }  // container vpws-statistic
    
            container vpls-statistic {
              config false;
              description "VPLS statistics.";
              container vpls-instance {
                description "VSI statistics.";
                leaf total-vsi-num {
                  type uint32;
                  description
                    "Total number of VSIs, including those in the up state and those in the down state.";
                }
    
                leaf vsi-up-num {
                  type uint32;
                  description
                    "Number of VSIs in the up state.";
                }
    
                leaf vsi-down-num {
                  type uint32;
                  description
                    "Number of VSIs in the down state.";
                }
    
                leaf ldp-mode-num {
                  type uint32;
                  description
                    "Number of LDP VSIs.";
                }
    
                leaf bgp-vsi-num {
                  type uint32;
                  description
                    "Number of BGP VSIs.";
                }
    
                leaf bgpad-vsi-num {
                  type uint32;
                  description
                    "Number of BGP AD VSIs.";
                }
    
                leaf unspecified-num {
                  type uint32;
                  description
                    "Number of VSIs whose signaling modes are not specified.";
                }
    
                leaf mix-vsi-num {
                  type uint32;
                  description
                    "Number of hybrid VSIs.";
                }
    
                leaf max-vsi-num {
                  type uint32;
                  description
                    "Maximum number of VSIs that can be configured.";
                }
              }  // container vpls-instance
    
              container vpls-pw {
                description
                  "VPLS PW statistics.";
                leaf total-pw-num {
                  type uint32;
                  description
                    "Total number of PWs, including those in the up state and those in the down state.";
                }
    
                leaf up-pw-num {
                  type uint32;
                  description
                    "Number of PWs in the up state.";
                }
    
                leaf down-pw-num {
                  type uint32;
                  description
                    "Number of PWs in the down state.";
                }
    
                leaf ldp-pw-num {
                  type uint32;
                  description
                    "Number of LDP PWs.";
                }
    
                leaf bgp-pw-num {
                  type uint32;
                  description
                    "Number of BGP VSI PWs.";
                }
    
                leaf bgpad-pw-num {
                  type uint32;
                  description
                    "Number of BGP AD PWs.";
                }
              }  // container vpls-pw
    
              container ac {
                description
                  "VPLS AC statistics.";
                leaf total-num {
                  type uint32;
                  description
                    "Total number of VPLS ACs, including those in the up state and those in the down state.";
                }
    
                leaf up-num {
                  type uint32;
                  description
                    "Number of VPLS ACs in the up state.";
                }
    
                leaf down-num {
                  type uint32;
                  description
                    "Number of VPLS ACs in the down state.";
                }
              }  // container ac
    
              container vpls-tunnel-references {
                description
                  "List of tunnel policy reference.";
                list vpls-tunnel-reference {
                  key "tunnel-policy";
                  max-elements 16384;
                  description
                    "Operational data of times a tunnel policy is referenced.";
                  leaf tunnel-policy {
                    type string {
                      length "1..39";
                    }
                    description
                      "Name of a tunnel policy. If the tunnel policy name is not specified, the system uses the default tunnel policy. The default tunnel policy preferentially selects LSPs for packet transmission and the number of load-balancing tunnels is 1. If the tunnel policy name is specified but the corresponding tunnel policy does not exist, the system still uses the default tunnel policy.";
                  }
    
                  container references {
                    description
                      "List of tunnel policy reference.";
                    list reference {
                      key "instance-name";
                      max-elements 16384;
                      description
                        "Operational data of times a tunnel policy is referenced.";
                      leaf instance-name {
                        type string {
                          length "1..31";
                        }
                        description "VSI name.";
                      }
                    }  // list reference
                  }  // container references
                }  // list vpls-tunnel-reference
              }  // container vpls-tunnel-references
    
              container vpls-loop-detect {
                description
                  "MAC withdraw loop detection statistics.";
                leaf total-num {
                  type uint32;
                  description
                    "Total number of MAC withdraw loop detection times.";
                }
              }  // container vpls-loop-detect
    
              container vpls-bgpads {
                config false;
                description
                  "List of BGP AD local VPN target.";
                list vpls-bgpad {
                  key "vpls-id rt-value rt-type";
                  description
                    "Operational data of BGP AD local VPN target.";
                  leaf vpls-id {
                    type vpls-id-type;
                    description
                      "VPLS domain ID.";
                  }
    
                  leaf rt-value {
                    type rt-value-type;
                    description
                      "Route target. The format of an RT can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the RT value cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT value cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example, 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT value cannot be 0.0:0.";
                  }
    
                  leaf rt-type {
                    type vpn-rt-type;
                    description
                      "RT type, which can be:
    - export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN.
    - import-extcommunity: receives routes that carry the specified extended community attribute value.";
                  }
                }  // list vpls-bgpad
              }  // container vpls-bgpads
    
              container bgpad-remotes {
                config false;
                description
                  "List of BGP AD remote site.";
                list bgpad-remote {
                  key "peer-ip vpls-id";
                  description
                    "Operational data of BGP AD remote site.";
                  leaf peer-ip {
                    type inet:ipv4-address-no-zone;
                    description
                      "Peer IP information on the remote end.";
                  }
    
                  leaf vpls-id {
                    type vpls-id-type;
                    description
                      "VPLS domain ID on the remote end.";
                  }
    
                  leaf vsi-id {
                    type inet:ipv4-address-no-zone;
                    description
                      "VSI ID on the remote end.";
                  }
    
                  leaf vsi-index {
                    type uint32;
                    description "VSI index.";
                  }
    
                  container export-vpn-targets {
                    config false;
                    description
                      "List of Export VPN target on the remote end.";
                    list export-vpn-target {
                      key "rt-value rt-type";
                      description
                        "Operational data of VPN target.";
                      leaf rt-value {
                        type rt-value-type;
                        description
                          "Route target. The format of an RT can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example: 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0.0:0.";
                      }
    
                      leaf rt-type {
                        type vpn-rt-type;
                        description
                          "RT type, which can be:
    - export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN.
    - import-extcommunity: receives routes that carry the specified extended community attribute value.";
                      }
                    }  // list export-vpn-target
                  }  // container export-vpn-targets
                }  // list bgpad-remote
              }  // container bgpad-remotes
    
              container remote-fec129s {
                config false;
                description
                  "List of remote FEC129 signal.";
                list remote-fec129 {
                  key "peer-router-id encapsulation-type vpls-id saii taii";
                  description
                    "Operational data of remote FEC129 signaling.";
                  leaf peer-router-id {
                    type inet:ipv4-address-no-zone;
                    description
                      "Remote peer IP address.";
                  }
    
                  leaf encapsulation-type {
                    type encapsulation-type;
                    description
                      "Remote encapsulation type.";
                  }
    
                  leaf vpls-id {
                    type vpls-id-type;
                    description
                      "Remote VPLS domain ID.";
                  }
    
                  leaf saii {
                    type inet:ipv4-address-no-zone;
                    description
                      "Remote source attachment individual identifier.";
                  }
    
                  leaf taii {
                    type inet:ipv4-address-no-zone;
                    description
                      "Remote target attachment individual identifier.";
                  }
    
                  leaf vc-label {
                    type uint32;
                    description
                      "Remote VC label.";
                  }
    
                  leaf mtu {
                    type uint32;
                    description
                      "Remote MTU information.";
                  }
    
                  leaf vsi-index {
                    type uint32;
                    description
                      "Remote VSI index.";
                  }
    
                  leaf remote-vccv {
                    type string {
                      length "0..16";
                    }
                    description
                      "VCCV capability supported by the remote end. By default, the LSP ping and BFD for the label alert mode can be used if the control word function is disabled. If the control word function is enabled, the LSP ping and BFD for both the label alert mode and control word mode can be used.";
                  }
    
                  leaf remote-vccv-code {
                    type pub-type:hex-binary;
                    description
                      "Remote VCCV code.";
                  }
                }  // list remote-fec129
              }  // container remote-fec129s
    
              container bgp-remotes {
                config false;
                description
                  "List of BGP remote site.";
                list bgp-remote {
                  key "site-id offset route-distinguisher";
                  description
                    "Operational data of BGP remote site.";
                  leaf site-id {
                    type uint32 {
                      range "0..65534";
                    }
                    description "BGP site ID.";
                  }
    
                  leaf offset {
                    type uint16;
                    description
                      "BGP site offset.";
                  }
    
                  leaf route-distinguisher {
                    type rd-value-type;
                    description
                      "Route distinguisher.";
                  }
    
                  leaf label-start {
                    type uint32;
                    description
                      "Start of the label.";
                  }
    
                  leaf add-range {
                    type uint32;
                    description
                      "BGP site range.";
                  }
    
                  leaf peer-ip {
                    type inet:ipv4-address-no-zone;
                    description "BGP peer Ip.";
                  }
    
                  leaf mtu {
                    type uint32;
                    description
                      "Maximum transmission unit.";
                  }
    
                  leaf encapsulation-type {
                    type vpls-bgp-encapsulation-type;
                    description
                      "Encapsulation type.";
                  }
    
                  leaf control-lags {
                    type pub-type:hex-binary;
                    description "Control flags.";
                  }
    
                  leaf preference {
                    type uint32;
                    description
                      "Preference value.";
                  }
    
                  container export-vpn-targets {
                    config false;
                    description
                      "List of VPN target.";
                    list export-vpn-target {
                      key "rt-value rt-type";
                      description
                        "Operational data of VPN target.";
                      leaf rt-value {
                        type rt-value-type;
                        description
                          "Route target. The format of an RT can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example: 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0.0:0.";
                      }
    
                      leaf rt-type {
                        type vpn-rt-type;
                        description
                          "RT type, which can be:
    - export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN.
    - import-extcommunity: receives routes that carry the specified extended community attribute value.";
                      }
                    }  // list export-vpn-target
                  }  // container export-vpn-targets
                }  // list bgp-remote
              }  // container bgp-remotes
    
              container vpls-pbb-b-dmacs {
                config false;
                description
                  "List of B-DMAC address.";
                list vpls-pbb-b-dmac {
                  key "b-dmac";
                  description
                    "Operational data of B-DMAC address.";
                  leaf b-dmac {
                    type pub-type:mac-address;
                    description
                      "B-DMAC address.";
                  }
    
                  container reference-vsis {
                    description
                      "List of VPLS instance.";
                    list reference-vsi {
                      key "vsi-name";
                      description
                        "Operational data of VPLS instance.";
                      leaf vsi-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "VPLS instance name.";
                      }
    
                      leaf flag {
                        type enumeration {
                          enum "first" {
                            value 1;
                            description
                              "First configured B-DMAC address.";
                          }
                        }
                        description
                          "Flag indicating whether the B-DMAC address is first or second configured.";
                      }
                    }  // list reference-vsi
                  }  // container reference-vsis
                }  // list vpls-pbb-b-dmac
              }  // container vpls-pbb-b-dmacs
    
              container vpls-pbb-b-smacs {
                config false;
                description
                  "List of B-SMAC address.";
                list vpls-pbb-b-smac {
                  key "b-smac";
                  description
                    "Operational data of B-SMAC address.";
                  leaf b-smac {
                    type pub-type:mac-address;
                    description
                      "B-SMAC address.";
                  }
    
                  container reference-vsis {
                    description
                      "List of VPLS instance.";
                    list reference-vsi {
                      key "vsi-name";
                      description
                        "Operational data of VPLS instance.";
                      leaf vsi-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "VPLS instance name.";
                      }
    
                      leaf vsi-type {
                        type vsi-pbb-instance-type;
                        description
                          "VSI working mode.";
                      }
                    }  // list reference-vsi
                  }  // container reference-vsis
                }  // list vpls-pbb-b-smac
              }  // container vpls-pbb-b-smacs
            }  // container vpls-statistic
    
            container track-route-statistics {
              config false;
              description
                "Associated route statistics.";
              leaf total-track-route-num {
                type uint32;
                description
                  "Total number of associated routes.";
              }
    
              leaf reach-track-route-num {
                type uint32;
                description
                  "Number of reachable associated routes.";
              }
    
              leaf unreach-track-route-num {
                type uint32;
                description
                  "Number of unreachable associated routes.";
              }
            }  // container track-route-statistics
    
            container vrf-routes {
              config false;
              description
                "List of Associated routes.";
              list vrf-route {
                key "vrf-name destination mask-length";
                max-elements 1024;
                description
                  "Statistics of an Associated route.";
                leaf vrf-name {
                  type leafref {
                    path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                  }
                  description
                    "VPN instance name.";
                }
    
                leaf destination {
                  type inet:ip-address-no-zone;
                  description
                    "Destination address.";
                }
    
                leaf mask-length {
                  type uint32 {
                    range "0..128";
                  }
                  description
                    "The length of the mask.";
                }
    
                leaf route-state {
                  type l2vpn-route-status;
                  description "Route status.";
                }
    
                leaf pw-number {
                  type uint32;
                  description "Number of PWs.";
                }
    
                container vrf-route-pws {
                  config false;
                  description
                    "List of PWs associated with the route.";
                  list vrf-route-pw {
                    key "peer-ip pw-id encapsulation-type";
                    max-elements 65535;
                    description
                      "Statistics of a PW associated with the route.";
                    leaf peer-ip {
                      type inet:ipv4-address-no-zone;
                      description
                        "Peer IP address.";
                    }
    
                    leaf pw-id {
                      type uint32;
                      description "PW ID.";
                    }
    
                    leaf encapsulation-type {
                      type encapsulation-type;
                      description
                        "Encapsulation type.";
                    }
    
                    leaf pw-state {
                      type l2vpn-pw-state;
                      description "PW status.";
                    }
                  }  // list vrf-route-pw
                }  // container vrf-route-pws
              }  // list vrf-route
            }  // container vrf-routes
    
            container l2vpn-ext {
              description
                "Configure the extension of L2VPN.";
              leaf vpls-ldp-fast-switch {
                type boolean;
                default "false";
                description
                  "Enable/disable the flag of VPLS LDP fast-switch.";
              }
    
              leaf pw-source-tunnel-check {
                type boolean;
                default "true";
                description
                  "Enable/disable the flag of L2VPN pw-source-tunnel check.";
              }
    
              leaf flow-label-hash {
                type enumeration {
                  enum "L2" {
                    value 2;
                    description "L2.";
                  }
                  enum "L3" {
                    value 1;
                    description "L3.";
                  }
                  enum "L4" {
                    value 0;
                    description "L4.";
                  }
                }
                default "L4";
                description
                  "The flag of flowLabel.";
              }
    
              leaf convergence-separate-in-system {
                type boolean;
                default "false";
                description
                  "Enable/disable the flag of VPLS convergence separate in systerm.";
              }
    
              leaf vpls-tm-prune-enable {
                type boolean;
                default "false";
                description
                  "Enable/disable the flag of TM prune mode.";
              }
            }  // container l2vpn-ext
          }  // container common
    
          container instances {
            description
              "List of L2VPN instances.";
            list instance {
              key "name type";
              description
                "Configure L2VPN instances.";
              leaf name {
                type string {
                  length "1..31";
                }
                must
                  "(../type!='vpws-local-ccc' and ../type!='vpws-remote-ccc') or (.!='i' and .!='ip' and .!='ip-' and .!='ip-i' and .!='ip-in' and
    .!='ip-int' and .!='ip-inte' and .!='ip-inter' and .!='ip-interw' and .!='ip-interwo' and .!='ip-interwor' and
    .!='ip-interwork' and .!='ip-interworki' and .!='ip-interworkin' and .!='ip-interworking')";
                description
                  "The name of L2VPN instance.";
              }
    
              leaf type {
                type l2vpn-instance-type;
                description
                  "The type of L2VPN instance.";
              }
    
              leaf description {
                when
                  "not(../type='vpws-switch' or ../type='vpws-bgp')";
                type string {
                  length "1..128";
                }
                description
                  "Description of a VSI.";
              }
    
              leaf state {
                type instance-state;
                config false;
                description
                  "Status of a L2VPN instance.";
              }
    
              leaf last-up-time {
                type string {
                  length "1..80";
                }
                config false;
                description
                  "Date and time when a L2VPN instance was up the last time, for example, 2012/07/20 02:30:46.";
              }
    
              leaf total-up-time {
                type string {
                  length "1..80";
                }
                config false;
                description
                  "Total up time of a L2VPN instance.";
              }
    
              container vpws-local-ccc {
                when "../type='vpws-local-ccc'";
                description
                  "Configure VPWS local CCC instance.";
                leaf encapsulation-type {
                  ext:operation-exclude "update";
                  type encapsulation-type;
                  must
                    "../encapsulation-type='vlan' or
    ../encapsulation-type='ethernet' or
    ../encapsulation-type='hdlc' or
    ../encapsulation-type='ppp' or
    ../encapsulation-type='atm-nto1-vcc' or
    ../encapsulation-type='atm-nto1-vpc' or
    ../encapsulation-type='atm-1to1-vcc' or
    ../encapsulation-type='atm-1to1-vpc' or
    ../encapsulation-type='atm-trans-cell' or
    ../encapsulation-type='cep' or
    ../encapsulation-type='satop-e1' or
    ../encapsulation-type='cesopsn-basic' or
    ../encapsulation-type='ip-interworking' or
    ../encapsulation-type='unsupport'";
                  mandatory true;
                  description
                    "Encapsulation type of a VPWS instance.";
                }
    
                container tdm-parameter {
                  when
                    "../encapsulation-type='satop-e1' or
    ../encapsulation-type='cesopsn-basic' or
    ../encapsulation-type='cep' or
    ../encapsulation-type='satop-t1' or
    ../encapsulation-type='satop-e3'";
                  description
                    "Configure TDM parameters.";
                  leaf tdm-encapsulate-number {
                    ext:dynamic-default;
                    when
                      "../../encapsulation-type='satop-e1' or ../../encapsulation-type='cesopsn-basic' or
    ../../encapsulation-type='satop-t1' or ../../encapsulation-type='satop-e3'";
                    type uint32 {
                      range "1..40";
                    }
                    description
                      "Number of TDM frames encapsulated in a CESoPSN or SAToP packet in the TDMoPSN application.";
                  }
    
                  leaf jitter-buffer {
                    ext:dynamic-default;
                    type uint32 {
                      range "1..64000";
                    }
                    units "us";
                    must
                      "(. mod 1000 = 0 and (../../encapsulation-type)!='cep') or (. mod 125 = 0 and (../../encapsulation-type)='cep')";
                    description
                      "Depth of the jitter buffer in the application of TDMoPSN.";
                  }
    
                  leaf rtp-header {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable transparently transmission of TDM frames.";
                  }
    
                  leaf idle-code {
                    type yang:hex-string {
                      length "1..2";
                    }
                    default "ff";
                    description
                      "Idle code that is filled when the jitter buffer underflow occurs.";
                  }
                }  // container tdm-parameter
    
                container atm-parameter {
                  when
                    "../encapsulation-type='atm-aal5-sdu' or
    ../encapsulation-type='atm-trans-cell' or
    ../encapsulation-type='atm-nto1-vcc' or
    ../encapsulation-type='atm-nto1-vpc' or
    ../encapsulation-type='atm-1to1-vcc' or
    ../encapsulation-type='atm-1to1-vpc' or
    ../encapsulation-type='atm-aal5-pdu'";
                  description
                    "Configure ATM parameters.";
                  leaf max-atm-cells {
                    ext:dynamic-default;
                    type uint32 {
                      range "1..28";
                    }
                    description
                      "Maximum number of ATM cells to be encapsulated into a packet that can be received by a device.";
                  }
    
                  leaf atm-pack-overtime {
                    ext:dynamic-default;
                    type uint32 {
                      range "100..10000";
                    }
                    units "us";
                    description
                      "Delay in encapsulating ATM cells into a packet.";
                  }
                }  // container atm-parameter
    
                container acs {
                  description
                    "List of information about all ACs.";
                  list ac {
                    ext:operation-exclude "delete";
                    must
                      "(not(arp-entry)) or (arp-entry and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface-name]/ifm:link-protocol='ethernet' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface-name]/ifm:type!='PW-VE'))";
                    key "interface-name";
                    min-elements 2;
                    max-elements 2;
                    description
                      "Configure information about an AC. AC information is displayed in a configuration order.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Name of an AC interface.";
                    }
    
                    leaf tagged {
                      ext:operation-exclude "update|delete";
                      ext:dynamic-default {
                        ext:default-value "false" {
                          when "../../../encapsulation-type='ethernet'";
                          description "The default value is false when encapsulation-type is ethernet.";
                        }
                        ext:default-value "true" {
                          when "../../../encapsulation-type='vlan'";
                          description "The default value is true when encapsulation-type is VLAN.";
                        }
                      }
                      when
                        "../../../encapsulation-type='ethernet' or
    ../../../encapsulation-type='vlan'";
                      type boolean;
                      must
                        "(../../../encapsulation-type='ethernet' and ../tagged='false') or
    (../../../encapsulation-type='vlan' and ../tagged='true')";
                      description
                        "Enable/disable the VLAN tag setting.";
                    }
    
                    leaf access-port {
                      ext:operation-exclude "update|delete";
                      when
                        "../../../encapsulation-type='ethernet' or
    ../../../encapsulation-type='ip-interworking' or
    ../../../encapsulation-type='ip-layer2' or
    ../../../encapsulation-type='vlan'";
                      type boolean;
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='main-interface' or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='sub-interface' and ../access-port = 'false')";
                      default "false";
                      description
                        "Enable/disable the attribute that allows only untagged packets to pass through an interface.";
                    }
    
                    leaf trigger-interface-down {
                      type boolean;
                      must
                        "(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='main-interface' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:link-protocol='ethernet' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='Eth-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='PW-VE' and . = 'true') or (. = 'false')";
                      default "false";
                      description
                        "Enable/disable remote interface shutdown-based association between the PW status and interface status.";
                    }
    
                    leaf state {
                      type l2vpn-state;
                      config false;
                      description
                        "Status of an AC.";
                    }
    
                    leaf token-exceed {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Indicates whether the number of AC tokens exceeds the maximum limit.";
                    }
    
                    container arp-entry {
                      presence
                        "Enable the ARP entry for AC.";
                      description
                        "Configure the ARP entry attribute used for IP interworking between PEs.";
                      leaf local-ce-mac {
                        type pub-type:mac-address;
                        description
                          "MAC address of the ethernet interface or sub-interface on a CE connected to the local AC interface. If MAC, IP, and broadcast addresses are all configured, these addresses take effect in the sequence of MAC address, IP address, and broadcast address.";
                      }
    
                      leaf local-ce-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the ethernet interface or sub-interface on a CE connected to the local AC interface.";
                      }
    
                      leaf local-ce-broadcast {
                        type boolean;
                        must
                          "((.='false' and (../local-ce-mac or ../local-ce-ip or ../remote-ce-ip)) or (.='true'))";
                        default "false";
                        description
                          "Enable/disable the broadcast function on a PE Ethernet interface connected to a CE.";
                      }
    
                      leaf remote-ce-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the remote CE connected to the local AC interface.";
                      }
                    }  // container arp-entry
    
                    container ac-arps {
                      config false;
                      description
                        "Operational data of ARP information about all ACs.";
                      list ac-arp {
                        key "mac-type";
                        max-elements 3;
                        description
                          "Operational data of ARP information about an AC.";
                        leaf mac-type {
                          type l2vpn-mac-type;
                          description
                            "MAC address learning type.";
                        }
    
                        leaf mac-address {
                          type pub-type:mac-address;
                          description
                            "MAC address of the local CE.";
                        }
    
                        leaf expire-time {
                          type uint32;
                          units "min";
                          description
                            "Aging time.";
                        }
    
                        leaf vlan-id {
                          type uint32;
                          description
                            "VLAN ID corresponding to a MAC address.";
                        }
    
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Dynamically learned IP address of the local CE.";
                        }
                      }  // list ac-arp
                    }  // container ac-arps
                  }  // list ac
                }  // container acs
              }  // container vpws-local-ccc
    
              container vpws-remote-ccc {
                when "../type='vpws-remote-ccc'";
                description
                  "Configure a VPWS remote CCC instance.";
                leaf encapsulation-type {
                  ext:operation-exclude "update";
                  ext:support-filter "true";
                  type encapsulation-type;
                  must
                    "../encapsulation-type='vlan' or
    ../encapsulation-type='ethernet' or
    ../encapsulation-type='hdlc' or
    ../encapsulation-type='ppp' or
    ../encapsulation-type='atm-nto1-vcc' or
    ../encapsulation-type='atm-nto1-vpc' or
    ../encapsulation-type='atm-1to1-vcc' or
    ../encapsulation-type='atm-1to1-vpc' or
    ../encapsulation-type='cep' or
    ../encapsulation-type='satop-e1' or
    ../encapsulation-type='cesopsn-basic' or
    ../encapsulation-type='ip-interworking' or
    ../encapsulation-type='unsupport'";
                  mandatory true;
                  description
                    "Encapsulation type of a VPWS instance.";
                }
    
                container acs {
                  description
                    "List of information about all ACs.";
                  list ac {
                    ext:operation-exclude "delete";
                    must
                      "(not(arp-entry)) or (arp-entry and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface-name]/ifm:link-protocol='ethernet' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface-name]/ifm:type!='PW-VE'))";
                    key "interface-name";
                    min-elements 1;
                    max-elements 1;
                    description
                      "Configure information about an AC.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Name of an AC interface.";
                    }
    
                    leaf tagged {
                      ext:operation-exclude "update|delete";
                      ext:dynamic-default {
                        ext:default-value "false" {
                          when "../../../encapsulation-type='ethernet'";
                          description "The default value is false when encapsulation-type is ethernet.";
                        }
                        ext:default-value "true" {
                          when "../../../encapsulation-type='vlan'";
                          description "The default value is true when encapsulation-type is VLAN.";
                        }
                      }
                      when
                        "../../../encapsulation-type='ethernet' or
    ../../../encapsulation-type='vlan'";
                      type boolean;
                      must
                        "(../../../encapsulation-type='ethernet' and ../tagged='false') or
    (../../../encapsulation-type='vlan' and ../tagged='true')";
                      description
                        "Enable/disable the VLAN tag setting.";
                    }
    
                    leaf state {
                      type l2vpn-state;
                      config false;
                      description
                        "Status of an AC.";
                    }
    
                    leaf token-exceed {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Indicates whether the number of AC tokens exceeds the maximum limit.";
                    }
    
                    container arp-entry {
                      presence
                        "Enable the ARP entry for AC.";
                      description
                        "Configure the ARP entry attribute used for IP interworking between PEs.";
                      leaf local-ce-mac {
                        type pub-type:mac-address;
                        description
                          "MAC address of the Ethernet interface or sub-interface on a CE connected to the local AC interface. If MAC, IP, and broadcast addresses are all configured, these addresses take effect in the sequence of MAC address, IP address, and broadcast address.";
                      }
    
                      leaf local-ce-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the Ethernet interface or sub-interface on a CE connected to the local AC interface.";
                      }
    
                      leaf local-ce-broadcast {
                        type boolean;
                        must
                          "((.='false' and (../local-ce-mac or ../local-ce-ip or ../remote-ce-ip)) or (.='true'))";
                        default "false";
                        description
                          "Enable/disable broadcast on a PE Ethernet interface connected to a CE.";
                      }
    
                      leaf remote-ce-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the remote CE connected to the local AC interface.";
                      }
                    }  // container arp-entry
    
                    container ac-arps {
                      config false;
                      description
                        "Operational data of ARP information about all ACs.";
                      list ac-arp {
                        key "mac-type";
                        max-elements 3;
                        description
                          "Operational data of ARP information about an AC.";
                        leaf mac-type {
                          type l2vpn-mac-type;
                          description
                            "MAC address learning type.";
                        }
    
                        leaf mac-address {
                          type pub-type:mac-address;
                          description
                            "MAC address of the local CE.";
                        }
    
                        leaf expire-time {
                          type uint32;
                          units "min";
                          description
                            "Aging time.";
                        }
    
                        leaf vlan-id {
                          type uint32;
                          description
                            "VLAN ID corresponding to a MAC address.";
                        }
    
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Dynamically learned IP address of the local CE.";
                        }
                      }  // list ac-arp
                    }  // container ac-arps
                  }  // list ac
                }  // container acs
    
                container pw {
                  ext:operation-exclude "update|delete";
                  description
                    "Configure a VPWS remote CCC PW.";
                  leaf out-label {
                    type uint32 {
                      range "0..1048575";
                    }
                    mandatory true;
                    description
                      "Label for sending packets.";
                  }
    
                  leaf in-label {
                    type uint32 {
                      range "16..1048575";
                    }
                    mandatory true;
                    description
                      "Label for receiving packets.";
                  }
    
                  leaf control-word {
                    ext:operation-exclude "delete";
                    type l2vpn-control-word;
                    must ".!='prefer'";
                    default "default";
                    description
                      "Enable the control word function. The control word is usually used for TDM, ATM, and FR PWs.";
                  }
    
                  leaf out-interface-name {
                    ext:operation-exclude "delete";
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "(../out-interface-name and not(../next-hop)) or (not(../out-interface-name) and ../next-hop)";
                    description
                      "Outbound interface.";
                  }
    
                  leaf next-hop {
                    ext:operation-exclude "delete";
                    type inet:ipv4-address-no-zone;
                    must
                      "(../out-interface-name and not(../next-hop)) or (not(../out-interface-name) and ../next-hop)";
                    description "Next hop.";
                  }
                }  // container pw
              }  // container vpws-remote-ccc
    
              container vpws-ldp {
                when
                  "../type='vpws-ldp' or ../type='vpws-svc' or ../type='vpws-single-ccc'";
                must
                  "not(out-acs and ac-oam-mapping)";
                must
                  "(count(pws/pw) + count(out-acs/out-ac) >= 1)";
                description
                  "Configure VPWS LDP instance.";
                leaf encapsulation-type {
                  ext:operation-exclude "update";
                  type encapsulation-type;
                  must
                    "../encapsulation-type='vlan' or
    ../encapsulation-type='ethernet' or
    ../encapsulation-type='hdlc' or
    ../encapsulation-type='ppp' or
    ../encapsulation-type='atm-nto1-vcc' or
    ../encapsulation-type='atm-nto1-vpc' or
    ../encapsulation-type='atm-1to1-vcc' or
    ../encapsulation-type='atm-1to1-vpc' or
    ../encapsulation-type='atm-aal5-sdu' or
    ../encapsulation-type='atm-trans-cell' or
    ../encapsulation-type='cep' or
    ../encapsulation-type='satop-e1' or
    ../encapsulation-type='cesopsn-basic' or
    ../encapsulation-type='ip-interworking' or
    ../encapsulation-type='unsupport' or
    (../../type!='vpws-svc' and ../encapsulation-type='ip-layer2')";
                  mandatory true;
                  description
                    "Encapsulation type of a VPWS instance.";
                }
    
                leaf mac-withdraw-disable {
                  when
                    "../../type='vpws-ldp' and
    (../encapsulation-type='ethernet' or
    ../encapsulation-type='vlan' or
    ../encapsulation-type='ip-interworking' or
    ../encapsulation-type='ip-layer2')";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function to send MAC withdraw messages during the primary/secondary PW switchover for Ethernet-encapsulated or VLAN-encapsulated VLLs.";
                }
    
                leaf load-balance {
                  when
                    "../../type='vpws-ldp' or ../../type='vpws-svc'";
                  type l2vpn-load-balance-type;
                  default "flow";
                  description
                    "Load balancing mode, which can be:
    - Flow: indicates per-flow load balancing.
    - Packet: indicates per-packet load balancing.";
                }
    
                leaf service-name {
                  type string {
                    length "1..31";
                  }
                  description
                    "Service name of a VPWS instance.";
                }
    
                leaf bit-error-detection {
                  when "../../type='vpws-ldp'";
                  type boolean;
                  must
                    "../bit-error-detection='false' or (not(../reliability/aps-parameter) and not(../out-acs/out-ac))";
                  default "false";
                  description
                    "Enable/disable bit error detection on SPEs for an LDP MS-PW.";
                }
    
                container acs {
                  description
                    "List of information about all ACs.";
                  list ac {
                    ext:operation-exclude "delete";
                    must
                      "(not(arp-entry)) or (arp-entry and (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface-name]/ifm:link-protocol='ethernet' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface-name]/ifm:type!='PW-VE'))";
                    key "interface-name";
                    min-elements 1;
                    max-elements 1;
                    description
                      "Configure information about an AC.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Name of an AC interface.";
                    }
    
                    leaf tagged {
                      ext:operation-exclude "update|delete";
                      ext:dynamic-default {
                        ext:default-value "false" {
                          when "../../../encapsulation-type='ethernet'";
                          description "The default value is false when encapsulation-type is ethernet.";
                        }
                        ext:default-value "true" {
                          when "../../../encapsulation-type='vlan'";
                          description "The default value is true when encapsulation-type is VLAN.";
                        }
                      }
                      when
                        "../../../encapsulation-type='ethernet' or
    ../../../encapsulation-type='vlan'";
                      type boolean;
                      must
                        "(../../../encapsulation-type='ethernet' and ../tagged='false') or
    (../../../encapsulation-type='vlan' and ../tagged='true')";
                      description
                        "Enable/disable the VLAN tag setting.";
                    }
    
                    leaf access-port {
                      ext:operation-exclude "update|delete";
                      when
                        "../../../encapsulation-type='ethernet' or
    ../../../encapsulation-type='ip-interworking' or
    ../../../encapsulation-type='ip-layer2' or
    ../../../encapsulation-type='vlan'";
                      type boolean;
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='main-interface' or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='sub-interface' and ../access-port = 'false')";
                      default "false";
                      description
                        "Enable/disable the function of allowing only untagged packets to pass through an interface. The access port attribute can be configured only on main Ethernet interfaces. The access port attribute of outbound interface must be consistent with that of inbound interface.";
                    }
    
                    leaf trigger-interface-down {
                      when
                        "../../../../type='vpws-ldp'";
                      type boolean;
                      must
                        "(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='main-interface' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:link-protocol='ethernet' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='Eth-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='PW-VE' and . = 'true') or (. = 'false')";
                      must
                        "(. = 'true' and not(../../../out-acs/out-ac)) or . = 'false'";
                      default "false";
                      description
                        "Enable/disable remote interface shutdown to associate PW status with interface status.";
                    }
    
                    leaf forward-mode {
                      type boolean;
                      must
                        "(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type='PW-VE' and ../forward-mode='true') or ../forward-mode='false'";
                      default "false";
                      description
                        "Enable/disable the raw forwarding mode.";
                    }
    
                    leaf performance-statistics {
                      when
                        "(../../../encapsulation-type='satop-e1' or
    ../../../encapsulation-type='cesopsn-basic' or
    ../../../encapsulation-type='cep' or
    ../../../encapsulation-type='atm-aal5-sdu' or
    ../../../encapsulation-type='atm-trans-cell' or
    ../../../encapsulation-type='atm-nto1-vcc' or
    ../../../encapsulation-type='atm-nto1-vpc' or
    ../../../encapsulation-type='atm-1to1-vcc' or
    ../../../encapsulation-type='atm-1to1-vpc' or
    ../../../encapsulation-type='atm-aal5-pdu') and
    /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='Remote-Ap' and
    ../../../../type!='vpws-single-ccc'";
                      type boolean;
                      default "true";
                      description
                        "Enable/disable PW performance statistics collection.";
                    }
    
                    leaf state {
                      type l2vpn-state;
                      config false;
                      description
                        "Status of an AC.";
                    }
    
                    leaf token-exceed {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Indicates whether the number of AC tokens exceeds the maximum limit.";
                    }
    
                    container arp-entry {
                      presence
                        "Enable the ARP entry for AC.";
                      description
                        "Configure ARP entry attribute used for IP interworking between PEs.";
                      leaf local-ce-mac {
                        type pub-type:mac-address;
                        description
                          "MAC address of the Ethernet interface or sub-interface on a CE connected to the local AC interface. If MAC, IP, and broadcast addresses are all configured, these addresses take effect in the sequence of MAC address, IP address, and broadcast address.";
                      }
    
                      leaf local-ce-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the Ethernet interface or sub-interface on a CE connected to the local AC interface.";
                      }
    
                      leaf local-ce-broadcast {
                        type boolean;
                        must
                          "((.='false' and (../local-ce-mac or ../local-ce-ip or ../remote-ce-ip)) or (.='true'))";
                        default "false";
                        description
                          "Enable/disable the broadcast function on a PE Ethernet interface connected to a CE.";
                      }
    
                      leaf remote-ce-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "IP address of the remote CE connected to the local AC interface.";
                      }
                    }  // container arp-entry
    
                    container ac-arps {
                      config false;
                      description
                        "Operational data of ARP information about all ACs.";
                      list ac-arp {
                        key "mac-type";
                        max-elements 3;
                        description
                          "Operational data of ARP information about an AC.";
                        leaf mac-type {
                          type l2vpn-mac-type;
                          description
                            "MAC address learning type.";
                        }
    
                        leaf mac-address {
                          type pub-type:mac-address;
                          description
                            "MAC address of the local CE.";
                        }
    
                        leaf expire-time {
                          type uint32;
                          units "min";
                          description
                            "Aging time.";
                        }
    
                        leaf vlan-id {
                          type uint32;
                          description
                            "VLAN ID corresponding to a MAC address.";
                        }
    
                        leaf ip-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Dynamically learned IP address of the local CE.";
                        }
                      }  // list ac-arp
                    }  // container ac-arps
    
                    container tdm-performance-statistic {
                      when
                        "(../../../encapsulation-type='satop-e1' or ../../../encapsulation-type='cesopsn-basic') and
    ../../../../type!='vpws-single-ccc'";
                      config false;
                      description
                        "Operational data of TDM PW performance statistics.";
                      leaf missing-packets {
                        type uint64;
                        description
                          "Number of missing packets.";
                      }
    
                      leaf jitter-buffer-overruns {
                        type uint64;
                        description
                          "Number of times the jitter buffer was overrun.";
                      }
    
                      leaf jitter-buffer-underruns {
                        type uint64;
                        description
                          "Number of times the jitter buffer was underrun.";
                      }
    
                      leaf misorder-packets {
                        type uint64;
                        description
                          "Number of disordered packets.";
                      }
    
                      leaf malformed-packet {
                        type uint64;
                        description
                          "Number of malformed packets.";
                      }
    
                      leaf misconnected-packets {
                        type uint64;
                        description
                          "Number of misconnected packets.";
                      }
    
                      leaf error-seconds {
                        type uint64;
                        description
                          "Accumulated number of seconds in which errored bits exist, that is, in which the TDM-encapsulated PW drops packets or receives errored packets, including disordered packets and malformed packets.";
                      }
    
                      leaf severely-error-seconds {
                        type uint64;
                        description
                          "Number of severely errored seconds.";
                      }
    
                      leaf unavailable-seconds {
                        type uint64;
                        description
                          "Number of unavailable seconds.";
                      }
                    }  // container tdm-performance-statistic
    
                    container atm-performance-statistic {
                      when
                        "(../../../encapsulation-type='atm-aal5-sdu' or
    ../../../encapsulation-type='atm-trans-cell' or
    ../../../encapsulation-type='atm-nto1-vcc' or
    ../../../encapsulation-type='atm-nto1-vpc' or
    ../../../encapsulation-type='atm-1to1-vcc' or
    ../../../encapsulation-type='atm-1to1-vpc' or
    ../../../encapsulation-type='atm-aal5-pdu') and
    ../../../../type!='vpws-single-ccc'";
                      config false;
                      description
                        "Operational data of ATM PW performance statistics.";
                      leaf missing-packets {
                        type uint64;
                        description
                          "Number of dropped packets.";
                      }
    
                      leaf misorder-packets {
                        type uint64;
                        description
                          "Number of packets dropped due to packet disorder.";
                      }
    
                      leaf transmitted-cells {
                        type uint64;
                        description
                          "Number of sent cells.";
                      }
    
                      leaf received-cells {
                        type uint64;
                        description
                          "Number of received cells.";
                      }
    
                      leaf unknown-cells {
                        type uint64;
                        description
                          "Number of unknown cells.";
                      }
                    }  // container atm-performance-statistic
    
                    container lpt {
                      description
                        "Configure LPT in a AC interface.";
                      container ptp-instance {
                        presence
                          "Create a ptp instance.";
                        description
                          "Configure point to point instance of LPT.";
                        leaf enable {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable LPT state.";
                        }
    
                        leaf recover-time {
                          ext:operation-exclude "update|delete" {
                            when "../enable = 'true'";
                            description "The 'recover-time' cannot be updated or deleted, when enable node is 'true'.";
                          }
                          type uint32 {
                            range "1..600";
                          }
                          units "s";
                          default "1";
                          description
                            "Recovery time value.";
                        }
    
                        leaf hold-off-time {
                          ext:operation-exclude "update|delete" {
                            when "../enable = 'true'";
                            description "The 'hold-off-time' cannot be updated or deleted, when enable node is 'true'.";
                          }
                          type uint32 {
                            range "0..10000";
                          }
                          units "ms";
                          must
                            "(../hold-off-time mod 100)=0";
                          default "1000";
                          description
                            "Holdoff time value.";
                        }
    
                        leaf oam-period {
                          ext:operation-exclude "update|delete" {
                            when "../enable = 'true'";
                            description "The 'oam-period' cannot be updated or deleted, when enable node is 'true'.";
                          }
                          type uint32 {
                            range "10..100";
                          }
                          units "100 ms";
                          default "10";
                          description
                            "OAM period value.";
                        }
    
                        leaf peer-ip {
                          type inet:ipv4-address-no-zone;
                          config false;
                          description
                            "Remote IP address.";
                        }
    
                        leaf vc-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          config false;
                          description
                            "Virtual channel ID.";
                        }
    
                        leaf vc-type {
                          type vc-type;
                          config false;
                          description
                            "Virtual channel type.";
                        }
    
                        leaf net-carrier-type {
                          type net-carrier-type;
                          config false;
                          description
                            "The network side Carrier Type.";
                        }
    
                        leaf user-port-state {
                          type port-state;
                          config false;
                          description
                            "User side port status.";
                        }
    
                        leaf protocol-state {
                          type fsm-state;
                          default "normal";
                          config false;
                          description
                            "LPT protocol status.";
                        }
    
                        leaf local-fault {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Local user side fault.";
                        }
    
                        leaf net-fault {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "Local network side fault.";
                        }
    
                        leaf remote-fault {
                          type boolean;
                          default "false";
                          config false;
                          description
                            "LPT remote instance fault.";
                        }
    
                        leaf notification-mode {
                          type notification-mode-type;
                          config false;
                          description
                            "Packet mode for fault transfer.";
                        }
    
                        leaf oam-type {
                          type oam-type;
                          config false;
                          description
                            "Network side fault detection mode.";
                        }
                      }  // container ptp-instance
                    }  // container lpt
                  }  // list ac
                }  // container acs
    
                container pws {
                  description
                    "List of all VPWS PWs.";
                  list pw {
                    must
                      "peer-ip or (pw-template and /l2vpn:l2vpn/l2vpn:common/l2vpn:pw-templates/l2vpn:pw-template[l2vpn:name=current()/pw-template]/l2vpn:peer-address)";
                    must
                      "((../../../type='vpws-ldp' or ../../../type='vpws-single-ccc') and pw-id) or (../../../type='vpws-svc' and transmit-label and receive-label and ((pw-template and pw-id) or not(pw-template)))";
                    must
                      "(endpoint and color) or ((not(endpoint)) and (not(color)))";
                    key "role";
                    max-elements 3;
                    description
                      "Configure a VPWS PW.";
                    leaf role {
                      type pw-role-type;
                      must
                        "((../../../../type='vpws-ldp' and .='primary') or (../../../../type='vpws-ldp' and .='backup' and ../../pw[role='primary']) or (../../../../type='vpws-ldp' and .='bypass' and ../../pw[role='primary'] and not(../../pw[role='backup'])) or (../../../../type='vpws-ldp' and .='ac-bypass' and ../../pw[role='primary'] and not(../../pw[role='bypass'])) or (../../../../type='vpws-ldp' and .='pw-bypass' and ../../pw[role='ac-bypass'])) or ((../../../../type='vpws-svc' and .='primary') or (../../../../type='vpws-svc' and .='backup' and ../../pw[role='primary']) or (../../../../type='vpws-svc' and .='bypass' and ../../pw[role='primary'] and not(../../pw[role='backup']))) or (../../../../type='vpws-single-ccc' and .='backup' and ../../../out-acs/out-ac)";
                      description
                        "Role of a PW. Configure a primary PW first.";
                    }
    
                    leaf pw-id {
                      ext:operation-exclude "update|delete";
                      ext:support-filter "true";
                      type uint32 {
                        range "1..4294967295";
                      }
                      description "PW ID.";
                    }
    
                    leaf peer-ip {
                      ext:operation-exclude "update|delete";
                      type l2vpn-peer-address-type;
                      description
                        "IP address of a peer.";
                    }
    
                    leaf admin-pw {
                      ext:operation-exclude "update|delete";
                      when
                        "../../../../type!='vpws-svc'";
                      type boolean;
                      must
                        "(../admin-pw='true' and ../role='primary' and ../../../encapsulation-type='ip-interworking' and ../control-word!='disable' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:type='LoopBack' and ../../../load-balance!='packet' and ../../../bit-error-detection!='true') or ../admin-pw='false'" {
                        error-message
                          "The PW role must be primary when admin-pw enabled.";
                      }
                      default "false";
                      description
                        "Enable/disable administrative PW.";
                    }
    
                    leaf transmit-label {
                      ext:operation-exclude "update|delete";
                      when
                        "../../../../type='vpws-svc'";
                      type uint32 {
                        range "0..1048575";
                      }
                      description
                        "Label for sending packets.";
                    }
    
                    leaf receive-label {
                      ext:operation-exclude "update|delete";
                      when
                        "../../../../type='vpws-svc'";
                      type uint32 {
                        range "16..1048575";
                      }
                      description
                        "Label for receiving packets.";
                    }
    
                    leaf control-word {
                      when
                        "../role!='pw-bypass'";
                      type l2vpn-control-word;
                      must
                        "../control-word!='prefer'";
                      default "default";
                      description
                        "Enable the control word function. The control word is usually used for TDM, ATM, and FR PWs.";
                    }
    
                    leaf vccv-ability {
                      when
                        "../../../../type!='vpws-svc' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:type!='LoopBack' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:type!='PW-VE' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:type!='Remote-Ap'";
                      type boolean;
                      default "true";
                      description
                        "Enable/disable virtual circuit connectivity verification (VCCV) capability. VCCV supports two modes: control word and label alert.";
                    }
    
                    leaf tunnel-policy {
                      when
                        "../role!='pw-bypass'";
                      type string {
                        length "1..39";
                      }
                      description
                        "Name of a tunnel policy. If the tunnel policy name is not specified, the system uses the default tunnel policy. The default tunnel policy preferentially selects LSPs for packet transmission and the number of load-balancing tunnels is 1. If the tunnel policy name is specified but the corresponding tunnel policy does not exist, the system still uses the default tunnel policy.";
                    }
    
                    leaf endpoint {
                      when "../tunnel-policy";
                      type inet:ipv6-address-no-zone;
                      description
                        "Endpoint IPv6 address of srv6 policy tunnel.";
                    }
    
                    leaf color {
                      when "../tunnel-policy";
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Color of srv6 policy tunnel.";
                    }
    
                    leaf pw-template {
                      ext:operation-exclude "update|delete";
                      when
                        "../role!='pw-bypass'";
                      type leafref {
                        path "/l2vpn/common/pw-templates/pw-template/name";
                      }
                      description
                        "Name of a PW template. You can configure PW attributes such as the remote peer, tunnel policy, and control word in a PW template. When configuring an LDP PW, you can reference the PW attributes configured in an existing PW template.";
                    }
    
                    leaf ignore-standby {
                      when
                        "../../../../type='vpws-ldp' and ../admin-pw='false'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the PW's function of ignoring the standby state informed by the VSI peer.";
                    }
    
                    leaf set-fault {
                      when
                        "../../../../type='vpws-ldp' and ../admin-pw='false'";
                      type boolean;
                      must
                        "../set-fault='false' or (../set-fault='true' and not(../../../out-acs/out-ac) and ../../../reliability/redundancy-mode!='independent' and ../../../reliability/redundancy-mode!='master')";
                      default "false";
                      description
                        "Enable/disable simulating a fault on a primary or secondary PW.";
                    }
    
                    leaf pw-ttl {
                      when "../admin-pw!='true'";
                      type uint32 {
                        range "1..255";
                      }
                      must
                        "((../role='ac-bypass' or ../role='pw-bypass' or ../../../out-acs/out-ac or ../../../../type='vpws-single-ccc') and ../pw-ttl=1) or not(../role='ac-bypass' or ../role='pw-bypass' or ../../../out-acs/out-ac or ../../../../type='vpws-single-ccc')";
                      default "1";
                      description "TTL of a PW.";
                    }
    
                    leaf track-admin-pw {
                      when
                        "../role!='pw-bypass' and ../admin-pw='false'";
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:type='LoopBack' and /l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-ldp/l2vpn:acs/l2vpn:ac/l2vpn:interface-name[.=current()]";
                      description
                        "Configure a service PW to track the mPW.";
                    }
    
                    leaf traffic-statistics-collection {
                      when
                        "../role!='ac-bypass' and ../role!='pw-bypass' and (../admin-pw='false' or not(../admin-pw))";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable collecting traffic statistics.";
                    }
    
                    leaf ignore-ac-state {
                      when
                        "../role!='ac-bypass' and ../role!='pw-bypass' and (../admin-pw='false' or not(../admin-pw))";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the function of the VPWS PW status not to be affected by changes in the AC status.";
                    }
    
                    container tdm-parameter {
                      when
                        "../role!='pw-bypass' and ../admin-pw='false' and
    (../../../encapsulation-type='cep' or
    ../../../encapsulation-type='cesopsn-basic' or
    ../../../encapsulation-type='satop-e1')";
                      description
                        "Configure TDM parameters.";
                      leaf tdm-encapsulate-number {
                        ext:dynamic-default;
                        when
                          "../../../../encapsulation-type='cesopsn-basic' or ../../../../encapsulation-type='satop-e1'";
                        type uint32 {
                          range "1..5000";
                        }
                        description
                          "Number of TDM frames encapsulated in a CESoPSN or SAToP packet in the TDMoPSN application.";
                      }
    
                      leaf jitter-buffer {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..64000";
                        }
                        units "us";
                        must
                          "(. mod 1000 = 0 and ../../../../encapsulation-type!='cep') or (. mod 125 = 0 and ../../../../encapsulation-type='cep')";
                        description
                          "Depth of the jitter buffer in the application of TDMoPSN.";
                      }
    
                      leaf sequence-number {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the TDM sequence number function.";
                      }
    
                      leaf rtp-header {
                        type l2vpn-rtp-header-type;
                        default "false";
                        description
                          "Add the RTP header to transparently transmitted TDM frames.";
                      }
    
                      leaf idle-code {
                        ext:dynamic-default;
                        type string {
                          length "1..2";
                          pattern
                            '[a-fA-F0-9]{1,2}';
                        }
                        description
                          "Idle code that is filled when the jitter buffer underflow occurs.";
                      }
    
                      leaf payload-compression {
                        type l2vpn-payload-comp;
                        must
                          "(../payload-compression!='disable' and ../../../../encapsulation-type='cep') or (../payload-compression='disable')";
                        default "disable";
                        description
                          "Payload compression mode.";
                      }
                    }  // container tdm-parameter
    
                    container atm-parameter {
                      when
                        "../role!='pw-bypass' and ../admin-pw='false' and
    (../../../encapsulation-type='atm-1to1-vcc' or
    ../../../encapsulation-type='atm-1to1-vpc' or
    ../../../encapsulation-type='atm-aal5-pdu' or
    ../../../encapsulation-type='atm-aal5-sdu' or
    ../../../encapsulation-type='atm-nto1-vcc' or
    ../../../encapsulation-type='atm-nto1-vpc' or
    ../../../encapsulation-type='atm-trans-cell')";
                      description
                        "Configure ATM parameters.";
                      leaf max-atm-cells {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..28";
                        }
                        description
                          "Maximum number of ATM cells to be encapsulated into a packet that can be received by a device.";
                      }
    
                      leaf atm-pack-overtime {
                        ext:dynamic-default;
                        type uint32 {
                          range "100..10000";
                        }
                        units "us";
                        description
                          "Delay in encapsulating ATM cells into a packet.";
                      }
    
                      leaf atm-transmit-cell {
                        ext:dynamic-default;
                        when
                          "../../../../../type!='vpws-svc'";
                        type uint32 {
                          range "1..28";
                        }
                        description
                          "Maximum number of ATM cells to be encapsulated into a packet that can be sent by a device.";
                      }
    
                      leaf sequence-number {
                        type boolean;
                        must
                          "(../sequence-number='true' and ../../control-word='enable') or (../sequence-number='false')";
                        default "false";
                        description
                          "Enable/disable the control-word-based ATM packet sequencing feature. Performance statistics can then be collected based on this feature.";
                      }
                    }  // container atm-parameter
    
                    container track-vrrp {
                      when
                        "../../../../type='vpws-ldp' and ../admin-pw='false' and (../role='primary' or ../role='backup')";
                      must
                        "not (../../../out-acs/out-ac)";
                      presence
                        "enable track vrrp.";
                      description
                        "Enable/disable associating a PW with the mVRRP backup group.";
                      leaf vrrp-interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        must
                          "../../role='primary' or (../../role='backup' and ../../../pw[role='primary']/track-vrrp[vrrp-interface-name=current()])";
                        mandatory true;
                        description
                          "The name of mVRRP interface.";
                      }
    
                      leaf vrrp-vrid {
                        type uint32 {
                          range "1..255";
                        }
                        must
                          "../../role='primary' or (../../role='backup' and ../../../pw[role='primary']/track-vrrp[vrrp-vrid=current()])";
                        mandatory true;
                        description
                          "VRID of a VRRP backup group.";
                      }
    
                      leaf pw-redundancy {
                        type boolean;
                        must
                          "../../role='primary' or (../../role='backup' and ../../../pw[role='primary']/track-vrrp[pw-redundancy=current()])";
                        default "false";
                        description
                          "Enable/disable the PW protection group associated with an mVRRP backup group in PW redundancy.";
                      }
                    }  // container track-vrrp
    
                    container flow-label {
                      when
                        "../admin-pw='false' and (../role='primary' or ../role='backup')";
                      presence
                        "enbale flow label for pw";
                      description
                        "Enable/disable the flow label capability of a PW.";
                      leaf ability {
                        type flow-label-ability;
                        must
                          ".!='default' and .!='disable'";
                        mandatory true;
                        description
                          "Flow label capability.";
                      }
    
                      leaf static {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the static flow label.";
                      }
                    }  // container flow-label
    
                    container track-vrf-routes {
                      when
                        "../../../../type='vpws-ldp' and ../admin-pw='false' and
    ((/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:type='Virtual-Ethernet' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:type='Global-VE') and
    /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../acs/ac/interface-name]/ifm:class='sub-interface')";
                      description
                        "List of PWs to track the VPN instance route.";
                      list track-vrf-route {
                        key "vrf-name ip-address mask-length";
                        description
                          "Configure a PW associated with a VPN instance route.";
                        leaf vrf-name {
                          type leafref {
                            path "/ni:network-instance/ni:instances/ni:instance/ni:name";
                          }
                          description
                            "The name of the VPN instance.";
                        }
    
                        leaf ip-address {
                          type inet:ip-address-no-zone;
                          description
                            "IP address of a VPN instance route.";
                        }
    
                        leaf mask-length {
                          type uint32 {
                            range "0..128";
                          }
                          description
                            "Mask of a VPN instance route.";
                        }
                      }  // list track-vrf-route
                    }  // container track-vrf-routes
    
                    container bfd {
                      when
                        "(../role='primary' or ../role='backup') and /bfd:bfd";
                      presence "enable pw bfd.";
                      description
                        "Enable/disable the BFD parameter list.";
                      leaf min-rx-interval {
                        type uint16 {
                          range "0..65535";
                        }
                        units "ms";
                        default "10";
                        description
                          "Minimum receive interval.";
                      }
    
                      leaf min-tx-interval {
                        type uint16 {
                          range "0..65535";
                        }
                        units "ms";
                        default "10";
                        description
                          "Minimum transmit interval.";
                      }
    
                      leaf detect-multiplier {
                        type uint16 {
                          range "3..50";
                        }
                        default "3";
                        description
                          "Detection multiplier.";
                      }
    
                      leaf remote-vc-id {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description
                          "Remote VC ID.";
                      }
    
                      leaf track-interface {
                        when
                          "../../admin-pw!='true'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable BFD track interface state.";
                      }
    
                      leaf track-interface-name {
                        when
                          "../../admin-pw='true'";
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Specify the interface to be tracked.";
                      }
                    }  // container bfd
    
                    container pw-info {
                      config false;
                      description
                        "Operational data of VPWS PW information.";
                      leaf interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of an AC interface.";
                      }
    
                      leaf if-state {
                        type ac-state;
                        description
                          "Status of an AC interface.";
                      }
    
                      leaf session-state {
                        type l2vpn-state;
                        description
                          "Status of an LDP session between the endpoint devices of a VC.";
                      }
    
                      leaf integrative-ac-state {
                        type ac-state;
                        description
                          "Integrative AC status.";
                      }
    
                      leaf ac-state {
                        type ac-state;
                        description
                          "Status of an AC.";
                      }
    
                      leaf pw-state {
                        type l2vpn-pw-state;
                        description
                          "Status of a PW.";
                      }
    
                      leaf pw-id {
                        type uint32;
                        description "PW ID.";
                      }
    
                      leaf encapsulation-type {
                        type encapsulation-type;
                        description
                          "Encapsulation type of a PW.";
                      }
    
                      leaf destination {
                        type inet:ipv4-address-no-zone;
                        description
                          "Destination address, usually the LSR ID of a peer.";
                      }
    
                      leaf local-group-id {
                        type uint32;
                        description
                          "PW group ID on the local end.";
                      }
    
                      leaf remote-group-id {
                        type uint32;
                        description
                          "PW group ID on the remote end.";
                      }
    
                      leaf local-vc-label {
                        type uint32;
                        description
                          "Local VC label.";
                      }
    
                      leaf remote-vc-label {
                        type uint32;
                        description
                          "VC label on the remote end.";
                      }
    
                      leaf local-tdm-encapsulate-num {
                        type uint32;
                        description
                          "Number of TDM frames encapsulated in a CESoPSN or SAToP packet in the TDMoPSN application.";
                      }
    
                      leaf remote-tdm-encapsulate-num {
                        type uint32;
                        description
                          "Number of TDM frames encapsulated in a CESoPSN or SAToP packet on the remote end.";
                      }
    
                      leaf jitter-buffer {
                        type uint32;
                        units "us";
                        description
                          "Depth of the jitter buffer in the application of TDMoPSN.";
                      }
    
                      leaf idle-code {
                        type string {
                          length "0..3";
                        }
                        description
                          "Idle code that is filled when the jitter buffer underflow occurs.";
                      }
    
                      leaf local-rtp-header-enable {
                        type l2vpn-rtp-header-type;
                        description
                          "Add the RTP header to transparently transmitted TDM frames.";
                      }
    
                      leaf remote-rtp-header-enable {
                        type l2vpn-rtp-header-type;
                        description
                          "Add the RTP header to transparently transmitted TDM frames on the remote end.";
                      }
    
                      leaf max-atm-cells {
                        type uint32 {
                          range "1..28";
                        }
                        description
                          "Maximum number of ATM cells to be encapsulated into a packet that can be sent by the local device.";
                      }
    
                      leaf remote-max-atm-cells {
                        type uint32 {
                          range "0..28";
                        }
                        description
                          "Maximum number of ATM cells to be encapsulated into a packet that can be sent by the remote device.";
                      }
    
                      leaf atm-pack-overtime {
                        type uint32 {
                          range "100..10000";
                        }
                        units "us";
                        description
                          "Delay in encapsulating ATM cells into a packet.";
                      }
    
                      leaf atm-transmit-cell {
                        type uint32 {
                          range "1..28";
                        }
                        description
                          "Maximum number of ATM cells to be encapsulated into a packet that can be sent by the local device.";
                      }
    
                      leaf sequence-number {
                        type boolean;
                        description
                          "Enable the sequence number function.";
                      }
    
                      leaf local-bit-rate {
                        type uint32;
                        description
                          "Bit rate of the local VC.";
                      }
    
                      leaf remote-bit-rate {
                        type uint32;
                        description
                          "Bit rate on the remote end.";
                      }
    
                      leaf local-ac-oam {
                        type l2vpn-state;
                        description
                          "OAM status of a local AC.";
                      }
    
                      leaf local-psn-oam {
                        type l2vpn-state;
                        description
                          "PSN OAM status on the local end.";
                      }
    
                      leaf local-forward-state {
                        type l2vpn-forward-state;
                        description
                          "Forwarding status of the local end.";
                      }
    
                      leaf local-state-code {
                        type pub-type:hex-binary;
                        description
                          "Status code on the local end.";
                      }
    
                      leaf remote-ac-oam {
                        type l2vpn-state;
                        description
                          "OAM status on the remote end.";
                      }
    
                      leaf remote-psn-oam {
                        type l2vpn-state;
                        description
                          "PSN OAM status on the remote end.";
                      }
    
                      leaf remote-forward-state {
                        type l2vpn-forward-state;
                        description
                          "Forwarding status of the remote end.";
                      }
    
                      leaf remote-state-code {
                        type pub-type:hex-binary;
                        description
                          "Status code on the remote end.";
                      }
    
                      leaf ignore-standby {
                        type boolean;
                        description
                          "Ignore the standby state of the VPWS PW.";
                      }
    
                      leaf bfd-enable {
                        type boolean;
                        description
                          "Enable BFD.";
                      }
    
                      leaf bfd-state {
                        type l2vpn-vpws-bfd-state;
                        description
                          "BFD status.";
                      }
    
                      leaf bfd-session-index {
                        type uint32;
                        description "BFD index.";
                      }
    
                      leaf is-manual-fault {
                        type boolean;
                        description
                          "Simulate a PW fault.";
                      }
    
                      leaf is-active {
                        type boolean;
                        description
                          "Whether an interface is active.";
                      }
    
                      leaf is-forward-exist {
                        type boolean;
                        description
                          "The forwarding entry for an AC interface exists.";
                      }
    
                      leaf link-state {
                        type l2vpn-state;
                        description
                          "Integrative status of a PW.";
                      }
    
                      leaf local-vc-mtu {
                        type uint32;
                        description
                          "MTU for a local VC.";
                      }
    
                      leaf remote-vc-mtu {
                        type uint32;
                        description
                          "VC MTU on the remote end.";
                      }
    
                      leaf local-vccv {
                        type string {
                          length "0..40";
                        }
                        description
                          "VCCV capability supported by the local end. By default, the LSP ping and BFD for the label alert mode can be used if the control word function is disabled. If the control word function is enabled, the LSP ping and BFD for both the label alert mode and control word mode can be used.";
                      }
    
                      leaf remote-vccv {
                        type string {
                          length "0..40";
                        }
                        description
                          "VCCV capability supported by the remote end. By default, the LSP ping and BFD for the label alert mode can be used if the control word function is disabled. If the control word function is enabled, the LSP ping and BFD for both the label alert mode and control word mode can be used.";
                      }
    
                      leaf local-control-word {
                        type l2vpn-control-word;
                        description
                          "Enable the control word function on the local end.";
                      }
    
                      leaf remote-control-word {
                        type l2vpn-control-word;
                        description
                          "Enable the control word function on the remote end.";
                      }
    
                      leaf tunnel-policy {
                        type string {
                          length "1..39";
                        }
                        description
                          "Name of a tunnel policy.";
                      }
    
                      leaf template-name {
                        type string {
                          length "1..19";
                        }
                        description
                          "Name of a PW template.";
                      }
    
                      leaf primary-or-second {
                        type l2vpn-backup-mode;
                        description
                          "Primary/secondary status of a PW.";
                      }
    
                      leaf access-port {
                        type boolean;
                        description
                          "Attribute that allows only untagged packets to pass through an interface.";
                      }
    
                      leaf oam-protocol {
                        type oam-protocal;
                        description
                          "Link (PW) status detection protocol.";
                      }
    
                      leaf oam-status {
                        type oam-status;
                        description
                          "Link (PW) status detected by the link detection protocol.";
                      }
    
                      leaf oam-fault-type {
                        type string {
                          length "1..100";
                        }
                        description
                          "Type of a link fault detected by a link detection protocol.";
                      }
    
                      leaf aps-id {
                        type uint32;
                        description
                          "ID of the PW APS instance associated with the local PW.";
                      }
    
                      leaf aps-status {
                        type l2vpn-aps-status;
                        description
                          "PW APS status.";
                      }
    
                      leaf aps-ttl {
                        type uint32;
                        description "PW TTL.";
                      }
    
                      leaf tunnel-count {
                        type uint16;
                        default "0";
                        description
                          "Number of effective tunnels.";
                      }
    
                      leaf spe-count {
                        type uint32 {
                          range "0..4294967295";
                        }
                        default "0";
                        description
                          "Number of SPEs in the path to the peer.";
                      }
    
                      leaf create-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "How long a PW has been created.";
                      }
    
                      leaf up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "How long a PW has been in the up state. If a PW is in the down state, its PW up duration is 0.";
                      }
    
                      leaf last-change-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "How long the status of a PW has stayed unchanged since the last change time.";
                      }
    
                      leaf last-up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "Date and time when a PW was up for the last time, for example, 2012/07/20 02:30:46.";
                      }
    
                      leaf total-up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "Total up time of a PW.";
                      }
    
                      leaf c-key {
                        type uint32;
                        description
                          "Customer key. Each CKey corresponds to a PW.";
                      }
    
                      leaf n-key {
                        type uint32;
                        description
                          "Network key. Each NKey corresponds to a combination of the peer and tunnel policy.";
                      }
    
                      leaf support-notification {
                        type boolean;
                        description
                          "Whether a PW can send notification packets.";
                      }
    
                      leaf route-state {
                        type l2vpn-route-status;
                        description
                          "Route status.";
                      }
    
                      leaf received-flow-label {
                        type flow-label-ability;
                        description
                          "Received flow label.";
                      }
    
                      leaf negotiated-flow-label {
                        type flow-label-ability;
                        description
                          "Negotiated flow label.";
                      }
    
                      leaf dynamic-bfd-session {
                        type string {
                          length "1..19";
                        }
                        description
                          "Dynamic BFD session.";
                      }
    
                      leaf bfd-for-pw {
                        type string {
                          length "1..19";
                        }
                        description
                          "BFD for PW information.";
                      }
    
                      leaf remote-vccv-code {
                        type pub-type:hex-binary;
                        description
                          "Remote VCCV code.";
                      }
    
                      leaf hard-pipe-bandwidth {
                        type uint32 {
                          range "16..4294967294";
                        }
                        units "kbit/s";
                        description
                          "Specify bandwidth value.";
                      }
    
                      leaf hard-pipe-expand-ratio {
                        type string {
                          length "0..7";
                        }
                        description
                          "Specify the value of bandwidth expand ratio (%).";
                      }
    
                      leaf hard-pipe-burst-time {
                        type uint32 {
                          range "100..5000";
                        }
                        units "us";
                        description
                          "Burst time.";
                      }
    
                      leaf local-payload-compression {
                        type l2vpn-payload-comp;
                        description
                          "Local payload compression.";
                      }
    
                      leaf remote-payload-compression {
                        type l2vpn-payload-comp;
                        description
                          "Remote payload compression.";
                      }
    
                      leaf send-receive-active {
                        type send-receive-active-status;
                        default
                          "send-receive-inactive";
                        description
                          "Send and receive status.";
                      }
    
                      leaf ac-block-state {
                        type ac-block-status;
                        description
                          "AC block state.";
                      }
    
                      leaf pw-token-exceed {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether the number of PW tokens exceeds the maximum limit.";
                      }
    
                      container tunnels {
                        description
                          "List of tunnels.";
                        list tunnel {
                          key "tunnel-key";
                          max-elements 32;
                          description
                            "Operational data of tunnels.";
                          leaf tunnel-key {
                            type string {
                              length "0..21";
                            }
                            description
                              "Index of a public network tunnel.";
                          }
    
                          leaf tunnel-type {
                            type l2vpn-tunnel-type;
                            description
                              "Type of the tunnel used by the PW.";
                          }
    
                          leaf tunnel-name {
                            type string {
                              length "0..64";
                            }
                            description
                              "Name of the tunnel used by the PW.";
                          }
    
                          leaf public-next-hop {
                            type inet:ipv4-address-no-zone;
                            description
                              "Next hop of a PW on the public network.";
                          }
                        }  // list tunnel
                      }  // container tunnels
    
                      container spes {
                        description
                          "Operational data of SPEs on the path to the peer.";
                        list spe {
                          key "spe-pw-id spe-peer-ip";
                          description
                            "Operational data of the SPE on the path to the peer.";
                          leaf spe-pw-id {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "List of PW IDs on the path traveled by a label mapping message.";
                          }
    
                          leaf spe-peer-ip {
                            type inet:ipv4-address-no-zone;
                            description
                              "IP address of an SPE in the path to the peer.";
                          }
                        }  // list spe
                      }  // container spes
    
                      container label-stacks {
                        description
                          "Operational data of PW label stacks.";
                        list label-stack {
                          key "label-stack level";
                          description
                            "Operational data of the PW label stack.";
                          leaf label-stack {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Label stack.";
                          }
    
                          leaf level {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "Label level.";
                          }
    
                          leaf type {
                            type string {
                              length "0..20";
                            }
                            description
                              "Label type.";
                          }
    
                          leaf label {
                            type string {
                              length "0..20";
                            }
                            description
                              "Label value.";
                          }
    
                          leaf out-interface {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "Outbound interface name.";
                          }
                        }  // list label-stack
                      }  // container label-stacks
    
                      container down-causes {
                        description
                          "Operational data of the down causes.";
                        list down-cause {
                          key "down-cause-index";
                          description
                            "Statistics of the down causes of PWs.";
                          leaf down-cause-index {
                            type uint32;
                            description
                              "Sequence number of the PW down cause.";
                          }
    
                          leaf down-cause {
                            type string {
                              length "0..100";
                            }
                            description
                              "Indicates the down causes of the PW.";
                          }
                        }  // list down-cause
                      }  // container down-causes
    
                      container status-changes {
                        description
                          "Operational data of the reason and time.";
                        list status-change {
                          key "index";
                          description
                            "Statistics of the reason and the time of the PW status that has changed.";
                          leaf index {
                            type uint32;
                            description
                              "Sequence number of reasons that the PW status has changed.";
                          }
    
                          leaf timestamp {
                            type string {
                              length "0..60";
                            }
                            description
                              "Indicates the time of the PW status has changed.";
                          }
    
                          leaf reason {
                            type string {
                              length "0..100";
                            }
                            description
                              "Indicates the reason of the PW status has changed.";
                          }
                        }  // list status-change
                      }  // container status-changes
                    }  // container pw-info
    
                    container traffic-statistics {
                      config false;
                      description
                        "VPWS LDP PW traffic statistics.";
                      leaf interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "The name of interface.";
                      }
    
                      leaf last-clear-time {
                        type string {
                          length "1..60";
                        }
                        description
                          "Time when statistics are cleared for the last time.";
                      }
    
                      leaf input-bytes-rate {
                        type uint64;
                        description
                          "Rate of traffic received on the PW.";
                      }
    
                      leaf output-bytes-rate {
                        type uint64;
                        description
                          "Rate of traffic transmitted out of the PW.";
                      }
    
                      leaf input-packets-rate {
                        type uint64;
                        description
                          "Rate of frames received on the PW.";
                      }
    
                      leaf output-packets-rate {
                        type uint64;
                        description
                          "Rate of frames transmitted out of the PW.";
                      }
    
                      leaf input-bytes {
                        type uint64;
                        description
                          "Number of bytes received on the PW.";
                      }
    
                      leaf output-bytes {
                        type uint64;
                        description
                          "Number of bytes transmitted out of the PW.";
                      }
    
                      leaf input-packets {
                        type uint64;
                        description
                          "Number of frames received on the PW.";
                      }
    
                      leaf output-packets {
                        type uint64;
                        description
                          "Number of frames transmitted out of the PW.";
                      }
                    }  // container traffic-statistics
    
                    container qos-parameter {
                      when
                        "../l2vpn:role!='ac-bypass' and ../l2vpn:role!='pw-bypass'";
                      must "cir<=pir" {
                        error-message
                          "The pir value is less than cir value.";
                      }
                      must
                        "not(cir=0 and pir=0)" {
                        error-message
                          "The cir and pir value can not be zero at same time.";
                      }
                      must
                        "not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-ldp/l2vpn:pws/l2vpn:pw/l2vpn:endpoint)";
                      must
                        "not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-ldp/l2vpn:pws/l2vpn:pw/l2vpn:color)";
                      presence
                        "enable QoS for pw";
                      description
                        "Enable/disable the QoS parameter information.";
                      leaf cir {
                        type uint32 {
                          range
                            "0 | 16..4294967294";
                        }
                        units "kbit/s";
                        default "0";
                        description
                          "Specify the CIR.";
                      }
    
                      leaf pir {
                        type uint32 {
                          range
                            "0 | 16..4294967294";
                        }
                        units "kbit/s";
                        description
                          "Specify the PIR.";
                      }
    
                      leaf profile-name {
                        when "../pir>0";
                        type leafref {
                          path "/qos:qos/qos:queue-scheduler-template/qos:profiles/qos:profile/qos:name";
                        }
                        description
                          "Specify the name of QoS profile.";
                      }
                    }  // container qos-parameter
    
                    container qos-traffic-statistics {
                      config false;
                      description
                        "Operational data of QoS traffic statistics table.";
                      leaf interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Indicates the type and number of the AC interface.";
                      }
    
                      leaf last-clear-time {
                        type string {
                          length "1..60";
                        }
                        description
                          "Last time of clean out.";
                      }
    
                      leaf bits-rate {
                        type uint64;
                        units "bit/s";
                        description
                          "The traffic bits rate received on the PW.";
                      }
    
                      leaf packets-rate {
                        type uint64;
                        units "pps";
                        description
                          "The traffic packet rate received on the PW.";
                      }
    
                      leaf output-bytes {
                        type uint64;
                        units "Byte";
                        description
                          "The traffic bytes transmitted out of the PW.";
                      }
    
                      leaf output-packets {
                        type uint64;
                        units "packet";
                        description
                          "The traffic packets transmitted out of the PW.";
                      }
    
                      container qos-querys {
                        description
                          "List of the QoS traffic-statistics.";
                        list qos-query {
                          key "query";
                          description
                            "Indicates the query table of the QoS traffic statistics.";
                          leaf query {
                            type qos-query-type;
                            description
                              "Indicates the query of the QoS traffic statistics.";
                          }
    
                          leaf packets {
                            type uint64;
                            units "packet";
                            description
                              "The total number of output packets.";
                          }
    
                          leaf bytes {
                            type uint64;
                            units "Byte";
                            description
                              "The total number of output bytes.";
                          }
    
                          leaf packets-rate {
                            type uint64;
                            units "pps";
                            description
                              "The last 300 seconds packets rate.";
                          }
    
                          leaf bits-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "The last 300 seconds bits rate.";
                          }
    
                          leaf discard-packets {
                            type uint64;
                            units "packet";
                            description
                              "The total discard number of the packets.";
                          }
    
                          leaf discard-bytes {
                            type uint64;
                            units "Byte";
                            description
                              "The total discard number of the bytes.";
                          }
    
                          leaf discard-packets-rate {
                            type uint64;
                            units "pps";
                            description
                              "The last 300 seconds discard packets rate.";
                          }
    
                          leaf discard-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "The last 300 seconds discard bits rate.";
                          }
                        }  // list qos-query
                      }  // container qos-querys
                    }  // container qos-traffic-statistics
                  }  // list pw
                }  // container pws
    
                container out-acs {
                  when
                    "../../type='vpws-single-ccc' or ../../type='vpws-ldp'";
                  description
                    "List of all out ACs.";
                  list out-ac {
                    key "interface-name";
                    max-elements 1;
                    description
                      "Configure outbound interface of single CCC.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "not(../../../acs/ac[interface-name=current()])";
                      description
                        "Name of an AC interface.";
                    }
    
                    leaf role {
                      ext:operation-exclude "update";
                      type pw-role-type;
                      must
                        "(../role='primary' and ../../../../type='vpws-single-ccc') or (../role='backup' and ../../../../type='vpws-ldp')";
                      mandatory true;
                      description
                        "Role of out AC.";
                    }
    
                    container tdm-parameter {
                      when
                        "../../../encapsulation-type='satop-e1' or ../../../encapsulation-type='satop-t1' or ../../../encapsulation-type='satop-e3' or ../../../encapsulation-type='cesopsn-basic' or ../../../encapsulation-type='cep'";
                      description
                        "Configure TDM parameters of CCC instance.";
                      leaf tdm-encapsulate-number {
                        ext:dynamic-default;
                        when
                          "../../../../encapsulation-type='satop-e1' or ../../../../encapsulation-type='satop-t1' or
    ../../../../encapsulation-type='satop-e3' or ../../../../encapsulation-type='cesopsn-basic'";
                        type uint32 {
                          range "1..40";
                        }
                        description
                          "Number of TDM frames encapsulated in a CESoPSN or SAToP packet in the TDMoPSN application.";
                      }
    
                      leaf jitter-buffer {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..64000";
                        }
                        units "us";
                        must
                          "(. mod 1000 = 0 and ../../../../encapsulation-type!='cep') or (. mod 125 = 0 and ../../../../encapsulation-type='cep')";
                        description
                          "Depth of the jitter buffer in the application of TDMoPSN.";
                      }
    
                      leaf rtp-header {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the RTP header of transparently transmitted TDM frames.";
                      }
    
                      leaf idle-code {
                        type yang:hex-string {
                          length "1..2";
                        }
                        default "ff";
                        description
                          "Idle code that is filled when the jitter buffer underflow occurs.";
                      }
                    }  // container tdm-parameter
    
                    container atm-parameter {
                      when
                        "../../../encapsulation-type='atm-1to1-vcc' or
    ../../../encapsulation-type='atm-1to1-vpc' or
    ../../../encapsulation-type='atm-aal5-pdu' or
    ../../../encapsulation-type='atm-aal5-sdu' or
    ../../../encapsulation-type='atm-nto1-vcc' or
    ../../../encapsulation-type='atm-nto1-vpc' or
    ../../../encapsulation-type='atm-trans-cell'";
                      description
                        "Configure ATM parameters.";
                      leaf max-atm-cells {
                        ext:dynamic-default;
                        type uint32 {
                          range "1..28";
                        }
                        description
                          "Maximum number of ATM cells to be encapsulated into a packet that can be received by a device.";
                      }
    
                      leaf atm-pack-overtime {
                        ext:dynamic-default;
                        type uint32 {
                          range "100..10000";
                        }
                        units "us";
                        description
                          "Delay in encapsulating ATM cells into a packet.";
                      }
                    }  // container atm-parameter
                  }  // list out-ac
                }  // container out-acs
    
                container hard-pipe {
                  when "../../type='vpws-svc'";
                  must
                    "../pws/pw/tunnel-policy and /tnlm:tunnel-management/tnlm:tunnel-policys/tnlm:tunnel-policy[tnlm:name=current()/../pws/pw/tunnel-policy]/tnlm:ipv4-set/tnlm:nexthops";
                  must
                    "../encapsulation-type != 'fr'";
                  must
                    "../encapsulation-type != 'atm-nto1-vcc'";
                  must
                    "../encapsulation-type != 'atm-nto1-vpc'";
                  must
                    "../encapsulation-type != 'atm-1to1-vcc'";
                  must
                    "../encapsulation-type != 'atm-1to1-vpc'";
                  must
                    "../encapsulation-type != 'atm-trans-cell'";
                  must
                    "../encapsulation-type != 'atm-aal5-pdu'";
                  must
                    "../encapsulation-type != 'atm-aal5-sdu'";
                  must
                    "../encapsulation-type != 'unsupport'";
                  must "not(../pws/pw/endpoint)";
                  must "not(../pws/pw/color)";
                  presence
                    "Enable hard pipe for pw.";
                  description
                    "Enable/disable hard pipe. The hard-pipe node and the qos-parameter node cannot be configured together.";
                  leaf bandwidth {
                    when
                      "../../encapsulation-type='ethernet' or ../../encapsulation-type='vlan'";
                    type uint32 {
                      range "16..4294967294";
                    }
                    units "kbit/s";
                    mandatory true;
                    description
                      "Specify bandwidth value.";
                  }
    
                  leaf expand-ratio {
                    type uint16 {
                      range "0..10000";
                    }
                    must
                      ". <= 100 or ../../encapsulation-type = 'satop-e1' or ../../encapsulation-type = 'satop-t1' or ../../encapsulation-type = 'satop-t3' or ../../encapsulation-type = 'satop-e3' or ../../encapsulation-type = 'cesopsn-basic'";
                    default "10";
                    description
                      "Specify the value of bandwidth expand ratio (%). As to CES service, expand ratio ranges from 0 to 10000. The other service, expand ratio ranges from 0 to 100.";
                  }
    
                  leaf burst-time {
                    when
                      "../../encapsulation-type='ethernet' or ../../encapsulation-type='vlan'";
                    type uint32 {
                      range "100..5000";
                    }
                    units "us";
                    default "100";
                    description "Burst time.";
                  }
                }  // container hard-pipe
    
                container ac-oam-mapping {
                  ext:operation-exclude "update";
                  when
                    "../../type='vpws-ldp' and
    (../encapsulation-type='vlan' or
    ../encapsulation-type='ethernet' or
    ../encapsulation-type='atm-nto1-vcc' or
    ../encapsulation-type='atm-nto1-vpc' or
    ../encapsulation-type='atm-1to1-vcc' or
    ../encapsulation-type='atm-1to1-vpc' or
    ../encapsulation-type='atm-trans-cell' or
    ../encapsulation-type='cep' or
    ../encapsulation-type='satop-e1' or
    ../encapsulation-type='cesopsn-basic')";
                  presence
                    "enable AC OAM mapping";
                  description
                    "Enable/disable OAM mapping.";
                  leaf type {
                    type ac-oam-mapping-type;
                    must
                      "(../type='1ag' and ../md-name and ../ma-name) or ../type!='1ag'";
                    mandatory true;
                    description
                      "VPWS attachment circuit OAM mapping type.";
                  }
    
                  leaf md-name {
                    ext:operation-exclude "delete";
                    when "../type='1ag'";
                    type string {
                      length "1..43";
                    }
                    description
                      "VPWS OAM mapping parameter md name.";
                  }
    
                  leaf ma-name {
                    ext:operation-exclude "delete";
                    when "../type='1ag'";
                    type string {
                      length "1..43";
                    }
                    description
                      "VPWS OAM mapping parameter ma name.";
                  }
                }  // container ac-oam-mapping
    
                container reliability {
                  when
                    "count(../pws/pw)>=2 or (count(../pws/pw)=1 and count(../out-acs/out-ac)=1)";
                  description
                    "Configure PW reliability.";
                  leaf redundancy-mode {
                    type pw-redundancy-mode;
                    must
                      "../redundancy-mode='frr' or ../../../type!='vpws-svc'";
                    must
                      "../redundancy-mode='frr' or ../redundancy-mode='independent' or ../redundancy-mode='master'";
                    default "frr";
                    description
                      "PW redundancy mode.";
                  }
    
                  leaf switchover {
                    when
                      "../redundancy-mode='master'";
                    type boolean;
                    must
                      ".='true' and (not(../../out-acs/out-ac)) or .='false'";
                    default "false";
                    description
                      "Enable/disable manual PW switchover.";
                  }
    
                  leaf dual-receive {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the packet reception of both the primary and secondary PWs.";
                  }
    
                  leaf dual-send {
                    type boolean;
                    must
                      "../dual-send='false' or (../dual-send='true' and ../../../type='vpws-ldp' and count(../../out-acs/out-ac)=0 and ../redundancy-mode='frr' and not(../aps-parameter) and (../../encapsulation-type='cep' or ../../encapsulation-type='satop-e1' or ../../encapsulation-type='cesopsn-basic'))";
                    default "false";
                    description
                      "Enable/disable the packet transmission of both the primary and secondary PWs.";
                  }
    
                  leaf holdoff {
                    when
                      "../redundancy-mode='master' and not(../../out-acs/out-ac)";
                    type uint32 {
                      range "1..180";
                    }
                    units "s";
                    description
                      "Hold time for traffic switching.";
                  }
    
                  container reroute {
                    when
                      "../redundancy-mode='master' or ../redundancy-mode='frr'";
                    description
                      "Configure a switchback policy list.";
                    leaf reroute-policy {
                      type l2vpn-reroute-mode;
                      default "delay";
                      description
                        "Switchback policy.";
                    }
    
                    leaf delay-time {
                      when
                        "../reroute-policy='delay'";
                      type uint32 {
                        range "10..10800";
                      }
                      units "s";
                      default "30";
                      description
                        "Delay for switching traffic back to the primary PW.";
                    }
    
                    leaf resume-time {
                      when
                        "(../../redundancy-mode='frr' and (../reroute-policy='delay' or ../reroute-policy='immediately')) and ../../../../type='vpws-ldp' and not(../../../out-acs/out-ac)";
                      type uint32 {
                        range "0..600";
                      }
                      units "s";
                      default "10";
                      description
                        "Time after which the peer PE on the secondary PW is notified that the local PE has recovered. This parameter can be configured only in FRR mode.";
                    }
    
                    leaf last-switchback-reason {
                      type string {
                        length "0..100";
                      }
                      config false;
                      description
                        "Last switchback reason.";
                    }
    
                    leaf last-switchback-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Last switchback time.";
                    }
    
                    leaf delay-residual {
                      type uint32;
                      units "s";
                      config false;
                      description
                        "Remaining delay time.";
                    }
    
                    leaf resume-residual {
                      type uint32;
                      units "s";
                      config false;
                      description
                        "Remaining resume time.";
                    }
                  }  // container reroute
    
                  container aps-parameter {
                    ext:operation-exclude "update";
                    when
                      "count(../../out-acs/out-ac)=0 and ../redundancy-mode='frr' and ../reroute/reroute-policy='delay' and ../reroute/delay-time='30' and (../../../type='vpws-svc' or ../reroute/resume-time='10')";
                    presence
                      "enable aps protection for pw.";
                    description
                      "Enable/disable APS.";
                    leaf aps-id {
                      type leafref {
                        path "/l2vpn/common/pw-apss/pw-aps/aps-id";
                      }
                      mandatory true;
                      description
                        "PW APS instance ID.";
                    }
    
                    leaf bind-type {
                      ext:operation-exclude "delete";
                      type l2vpn-aps-bind-type;
                      default "admin";
                      description
                        "Type of a PW protection group associated with the PW APS instance.";
                    }
                  }  // container aps-parameter
                }  // container reliability
              }  // container vpws-ldp
    
              container vpws-switch {
                when "../type='vpws-switch'";
                must
                  "(switch-type!='ldp-ldp-bak' and count(pws/pw)=2 and pws/pw[role='left-primary'] and pws/pw[role='right-primary']) or (switch-type='ldp-ldp-bak' and count(pws/pw)=3)";
                description
                  "Configure a VPWS switch instance.";
                leaf switch-type {
                  ext:operation-exclude "update";
                  type l2vpn-switch-type;
                  mandatory true;
                  description
                    "Switch type of a VPWS switch instance.";
                }
    
                leaf encapsulation-type {
                  type encapsulation-type;
                  must
                    "../encapsulation-type='fr' or
    ../encapsulation-type='atm-aal5-sdu' or
    ../encapsulation-type='atm-trans-cell' or
    ../encapsulation-type='vlan' or
    ../encapsulation-type='ethernet' or
    ../encapsulation-type='hdlc' or
    ../encapsulation-type='ppp' or
    ../encapsulation-type='atm-nto1-vcc' or
    ../encapsulation-type='atm-nto1-vpc' or
    ../encapsulation-type='ip-layer2' or
    ../encapsulation-type='atm-1to1-vcc' or
    ../encapsulation-type='atm-1to1-vpc' or
    ../encapsulation-type='atm-aal5-pdu' or
    ../encapsulation-type='cep' or
    ../encapsulation-type='satop-e1' or
    ../encapsulation-type='satop-t1' or
    ../encapsulation-type='satop-e3' or
    ../encapsulation-type='cesopsn-basic' or
    ../encapsulation-type='ip-interworking'";
                  mandatory true;
                  description
                    "Encapsulation type of a VPWS switch instance.";
                }
    
                leaf control-word-trans {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the control word of a VPWS switching instance to be transparently transmitted.";
                }
    
                leaf control-word {
                  when
                    "not(../switch-type='ldp-ldp' or ../switch-type='ldp-ldp-bak')";
                  type l2vpn-control-word;
                  must ".!='prefer'";
                  default "default";
                  description
                    "Enable the control word function. The control word function is usually used for TDM, ATM, and FR PWs.";
                }
    
                leaf mtu {
                  when
                    "../switch-type='ldp-svc'";
                  type uint16 {
                    range "46..9600";
                  }
                  default "1500";
                  description
                    "MTU of a VPWS switch instance.";
                }
    
                leaf bit-error-detection {
                  when
                    "../switch-type='ldp-ldp'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable bit error detection on SPEs for an LDP MS-PW.";
                }
    
                leaf create-time {
                  type string {
                    length "1..80";
                  }
                  config false;
                  description
                    "How long a VPWS switch instance has been created.";
                }
    
                leaf up-time {
                  type string {
                    length "1..80";
                  }
                  config false;
                  description
                    "How long a VPWS switch instance has been in the up state. If a VPWS instance is in the down state, its VPWS instance up duration is 0.";
                }
    
                leaf last-change-time {
                  type string {
                    length "1..80";
                  }
                  config false;
                  description
                    "How long the status of a VPWS switch instance stays unchanged since the last change time.";
                }
    
                container pws {
                  description
                    "List of VPWS PWs.";
                  list pw {
                    ext:operation-exclude "delete";
                    must "pw-id and peer-ip";
                    must
                      "(((../../switch-type='ldp-svc' and role='right-primary') or ../../switch-type='svc-svc') and transmit-label and receive-label) or not((../../switch-type='ldp-svc' and role='right-primary') or ../../switch-type='svc-svc')";
                    must
                      "(endpoint and color) or ((not(endpoint)) and (not(color)))";
                    key "role";
                    unique "peer-ip";
                    min-elements 2;
                    max-elements 3;
                    description
                      "Configure a PW in a VPWS switching instance.";
                    leaf role {
                      type ms-pw-role-type;
                      description
                        "Role of a PW.";
                    }
    
                    leaf pw-id {
                      ext:operation-exclude "update|delete";
                      type uint32 {
                        range "1..4294967295";
                      }
                      description "PW ID.";
                    }
    
                    leaf peer-ip {
                      ext:operation-exclude "update|delete";
                      type l2vpn-peer-address-type;
                      description
                        "IP address of a peer.";
                    }
    
                    leaf transmit-label {
                      ext:operation-exclude "update|delete";
                      when
                        "(../../../switch-type='ldp-svc' and ../role='right-primary') or ../../../switch-type='svc-svc'";
                      type uint32 {
                        range "0..1048575";
                      }
                      description
                        "Static label for sending packets.";
                    }
    
                    leaf receive-label {
                      ext:operation-exclude "update|delete";
                      when
                        "(../../../switch-type='ldp-svc' and ../role='right-primary') or ../../../switch-type='svc-svc'";
                      type uint32 {
                        range "16..1048575";
                      }
                      description
                        "Static label for receiving packets.";
                    }
    
                    leaf tunnel-policy {
                      type string {
                        length "1..39";
                      }
                      description
                        "Name of a tunnel policy. If the tunnel policy name is not specified, the system uses the default tunnel policy. The default tunnel policy preferentially selects LSPs for packet transmission and the number of load-balancing tunnels is 1. If the tunnel policy name is specified but the corresponding tunnel policy does not exist, the system still uses the default tunnel policy.";
                    }
    
                    leaf endpoint {
                      when "../tunnel-policy";
                      type inet:ipv6-address-no-zone;
                      description
                        "Endpoint IPv6 address of srv6 policy tunnel.";
                    }
    
                    leaf color {
                      when "../tunnel-policy";
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Color of srv6 policy tunnel.";
                    }
    
                    container flow-label {
                      must
                        "ability or oam-packet-pop='true'";
                      presence
                        "enbale flow label for pw";
                      description
                        "Enable/disable the flow label of a PW.";
                      leaf ability {
                        ext:operation-exclude "delete";
                        when
                          "../../../../switch-type='ldp-svc' and ../oam-packet-pop ='false'";
                        type flow-label-ability;
                        must
                          ".!='default' and .!='disable'";
                        must
                          ".=../../../pw[role!=current()/../../role]/flow-label/ability";
                        description
                          "Flow label capability. The values of the ability node at both ends of a PW must be consistent.";
                      }
    
                      leaf oam-packet-pop {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function of popping out flow labels in the OAM packets.";
                      }
                    }  // container flow-label
    
                    container hard-pipe {
                      when
                        "(../../../switch-type='svc-svc' or (../../../switch-type='ldp-svc' and ../role='right-primary'))";
                      must
                        "../tunnel-policy and /tnlm:tunnel-management/tnlm:tunnel-policys/tnlm:tunnel-policy[tnlm:name=current()/../tunnel-policy]/tnlm:ipv4-set/tnlm:nexthops";
                      must "not(../endpoint)";
                      must "not(../color)";
                      presence
                        "Enable hard pipe for pw.";
                      description
                        "Enable/disable hard pipe.";
                      leaf bandwidth {
                        when
                          "../../../../encapsulation-type='ethernet' or ../../../../encapsulation-type='vlan'";
                        type uint32 {
                          range "16..4294967294";
                        }
                        units "kbit/s";
                        mandatory true;
                        description
                          "Specify bandwidth value.";
                      }
    
                      leaf expand-ratio {
                        type uint16 {
                          range "0..10000";
                        }
                        must
                          ". <= 100 or ../../../../encapsulation-type = 'satop-e1' or ../../../../encapsulation-type= 'satop-t1' or ../../../../encapsulation-type or ../../../../encapsulation-type = 'satop-e3' or ../../../../encapsulation-type = 'cesopsn-basic'";
                        default "10";
                        description
                          "Specify the value of bandwidth expand ratio (%). As to CES service, expand ratio ranges from 0 to 10000. The other service, expand ratio ranges from 0 to 100.";
                      }
                    }  // container hard-pipe
    
                    container tdm-parameter {
                      when
                        "../../../switch-type='ldp-svc' and
    (../../../encapsulation-type='cep' or
    ../../../encapsulation-type='cesopsn-basic' or
    ../../../encapsulation-type='satop-e1' or
    ../../../encapsulation-type='satop-t1' or
    ../../../encapsulation-type='satop-e3') and
    (../role='left-primary')";
                      description
                        "Configure TDM parameters.";
                      leaf tdm-encapsulate-number {
                        ext:dynamic-default;
                        when
                          "../../../../encapsulation-type='cesopsn-basic' or
    ../../../../encapsulation-type='satop-e1' or
    ../../../../encapsulation-type='satop-t1' or
    ../../../../encapsulation-type='satop-e3'";
                        type uint32 {
                          range "1..5000";
                        }
                        description
                          "Number of TDM frames encapsulated in a CESoPSN or SAToP packet in the TDMoPSN application.";
                      }
    
                      leaf rtp-header {
                        type l2vpn-rtp-header-type;
                        default "false";
                        description
                          "Add the RTP header to transparently transmitted TDM frames.";
                      }
    
                      leaf time-slot {
                        when
                          "../../../../encapsulation-type='cesopsn-basic'";
                        type uint32 {
                          range "1..32";
                        }
                        description
                          "Number of time slots on an interface.";
                      }
                    }  // container tdm-parameter
    
                    container pw-info {
                      config false;
                      description
                        "Operational data of VPWS PW information.";
                      leaf session-state {
                        type l2vpn-state;
                        description
                          "Status of an LDP session between the endpoint devices of a VC.";
                      }
    
                      leaf pw-state {
                        type l2vpn-pw-state;
                        description
                          "Status of a PW.";
                      }
    
                      leaf pw-id {
                        type uint32;
                        description "PW ID.";
                      }
    
                      leaf encapsulation-type {
                        type encapsulation-type;
                        description
                          "Encapsulation type of a PW.";
                      }
    
                      leaf destination {
                        type inet:ip-address-no-zone;
                        description
                          "Destination address, usually the LSR ID of a peer.";
                      }
    
                      leaf local-vc-label {
                        type uint32;
                        description
                          "Local VC label.";
                      }
    
                      leaf remote-vc-label {
                        type uint32;
                        description
                          "VC label on the remote end.";
                      }
    
                      leaf local-ac-oam {
                        type l2vpn-state;
                        description
                          "OAM status of a local AC.";
                      }
    
                      leaf local-psn-oam {
                        type l2vpn-state;
                        description
                          "PSN OAM status on the local end.";
                      }
    
                      leaf local-forward-state {
                        type l2vpn-forward-state;
                        description
                          "Forwarding status of the local end.";
                      }
    
                      leaf remote-ac-oam {
                        type l2vpn-state;
                        description
                          "OAM status on the remote end.";
                      }
    
                      leaf remote-psn-oam {
                        type l2vpn-state;
                        description
                          "PSN OAM status on the remote end.";
                      }
    
                      leaf remote-forward-state {
                        type l2vpn-forward-state;
                        description
                          "Forwarding status of the remote end.";
                      }
    
                      leaf local-vc-mtu {
                        type uint32;
                        description
                          "MTU for a local VC.";
                      }
    
                      leaf remote-vc-mtu {
                        type uint32;
                        description
                          "VC MTU on the remote end.";
                      }
    
                      leaf local-vccv {
                        type string {
                          length "0..40";
                        }
                        description
                          "VCCV capability supported by the local end. By default, the LSP ping and BFD for the label alert mode can be used if the control word function is disabled. If the control word function is enabled, the LSP ping and BFD for both the label alert mode and control word mode can be used.";
                      }
    
                      leaf remote-vccv {
                        type string {
                          length "0..40";
                        }
                        description
                          "VCCV capability supported by the remote end. By default, the LSP ping and BFD for the label alert mode can be used if the control word function is disabled. If the control word function is enabled, the LSP ping and BFD for both the label alert mode and control word mode can be used.";
                      }
    
                      leaf local-control-word {
                        type l2vpn-control-word;
                        description
                          "Enable the control word function on the local end.";
                      }
    
                      leaf remote-control-word {
                        type l2vpn-control-word;
                        description
                          "Enable the control word function on the remote end.";
                      }
    
                      leaf tunnel-policy {
                        type string {
                          length "1..39";
                        }
                        description
                          "Name of a tunnel policy.";
                      }
    
                      leaf tunnel-count {
                        type uint16;
                        default "0";
                        description
                          "Number of effective tunnels.";
                      }
    
                      leaf spe-count {
                        type uint32 {
                          range "0..4294967295";
                        }
                        default "0";
                        description
                          "Number of SPEs in the path to the peer.";
                      }
    
                      leaf create-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "How long a PW has been created.";
                      }
    
                      leaf up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "How long a PW has been in the up state. If a PW is in the down state, its PW up duration is 0.";
                      }
    
                      leaf last-change-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "How long the status of a PW has stayed unchanged since the last change time.";
                      }
    
                      leaf last-up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "Date and time when a PW was up for the last time, for example, 2012/07/20 02:30:46.";
                      }
    
                      leaf total-up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "Total up time of a PW.";
                      }
    
                      leaf c-key {
                        type uint32;
                        description
                          "Customer key. Each CKey corresponds to a PW.";
                      }
    
                      leaf n-key {
                        type uint32;
                        description
                          "Network key. Each NKey corresponds to a combination of the peer and tunnel policy.";
                      }
    
                      leaf remote-vccv-code {
                        type pub-type:hex-binary;
                        description
                          "Remote VCCV code.";
                      }
    
                      leaf hard-pipe-bandwidth {
                        type uint32 {
                          range "16..4294967294";
                        }
                        units "kbit/s";
                        description
                          "Specify bandwidth value.";
                      }
    
                      leaf hard-pipe-expand-ratio {
                        type string {
                          length "0..7";
                        }
                        description
                          "Specify the value of bandwidth expand ratio (%).";
                      }
    
                      leaf pw-token-exceed {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether the number of PW tokens exceeds the maximum limit.";
                      }
    
                      container spes {
                        config false;
                        description
                          "Operational data of SPEs on the path to the peer.";
                        list spe {
                          key "spe-pw-id spe-peer-ip";
                          description
                            "Operational data of the SPE on the path to the peer.";
                          leaf spe-pw-id {
                            type uint32 {
                              range
                                "0..4294967295";
                            }
                            description
                              "List of PW IDs on the path traveled by a label mapping message.";
                          }
    
                          leaf spe-peer-ip {
                            type inet:ipv4-address-no-zone;
                            description
                              "IP address of an SPE in the path to the peer.";
                          }
                        }  // list spe
                      }  // container spes
    
                      container tunnels {
                        config false;
                        description
                          "List of VPWS PW tunnels.";
                        list tunnel {
                          key "tunnel-key";
                          max-elements 32;
                          description
                            "Operational data of tunnels.";
                          leaf tunnel-key {
                            type string {
                              length "0..21";
                            }
                            description
                              "Index of a public network tunnel.";
                          }
    
                          leaf tunnel-type {
                            type l2vpn-tunnel-type;
                            description
                              "Type of the tunnel used by the PW.";
                          }
    
                          leaf tunnel-name {
                            type string {
                              length "0..64";
                            }
                            description
                              "Name of the tunnel used by the PW.";
                          }
    
                          leaf public-next-hop {
                            type inet:ipv4-address-no-zone;
                            description
                              "Next hop of a PW on the public network.";
                          }
                        }  // list tunnel
                      }  // container tunnels
    
                      container down-causes {
                        description
                          "Operational data of the down causes.";
                        list down-cause {
                          key "down-cause-index";
                          description
                            "Statistics of the down causes of PWs.";
                          leaf down-cause-index {
                            type uint32;
                            description
                              "Sequence number of the PW down cause.";
                          }
    
                          leaf down-cause {
                            type string {
                              length "0..100";
                            }
                            description
                              "Indicates the down causes of the PW.";
                          }
                        }  // list down-cause
                      }  // container down-causes
    
                      container status-changes {
                        description
                          "Operational data of the reason and time.";
                        list status-change {
                          key "index";
                          description
                            "Statistics of the reason and the time of the PW status that has changed.";
                          leaf index {
                            type uint32;
                            description
                              "Sequence number of reasons that the PW status has changed.";
                          }
    
                          leaf timestamp {
                            type string {
                              length "0..60";
                            }
                            description
                              "Indicates the time of the PW status has changed.";
                          }
    
                          leaf reason {
                            type string {
                              length "0..100";
                            }
                            description
                              "Indicates the reason of the PW status has changed.";
                          }
                        }  // list status-change
                      }  // container status-changes
                    }  // container pw-info
    
                    container qos-parameter {
                      when
                        "../../../l2vpn:switch-type != 'ldp-ldp-bak'";
                      must "cir<=pir" {
                        error-message
                          "The pir value is less than cir value.";
                      }
                      must
                        "not(cir=0 and pir=0)" {
                        error-message
                          "The cir and pir value can not be zero at same time.";
                      }
                      must
                        "not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-switch/l2vpn:pws/l2vpn:pw/l2vpn:endpoint)";
                      must
                        "not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-switch/l2vpn:pws/l2vpn:pw/l2vpn:color)";
                      presence
                        "enable QoS for pw";
                      description
                        "Enable/disable QoS parameter information.";
                      leaf cir {
                        type uint32 {
                          range
                            "0 | 16..4294967294";
                        }
                        units "kbit/s";
                        default "0";
                        description
                          "Specify the CIR.";
                      }
    
                      leaf pir {
                        type uint32 {
                          range
                            "0 | 16..4294967294";
                        }
                        units "kbit/s";
                        description
                          "Specify the PIR.";
                      }
    
                      leaf profile-name {
                        when "../pir>0";
                        type leafref {
                          path "/qos:qos/qos:queue-scheduler-template/qos:profiles/qos:profile/qos:name";
                        }
                        description
                          "Specify the name of QoS profile.";
                      }
                    }  // container qos-parameter
                  }  // list pw
                }  // container pws
    
                container reliability {
                  when
                    "../switch-type='ldp-ldp-bak'";
                  description
                    "Configure PW reliability.";
                  leaf redundancy-mode {
                    type pw-redundancy-mode;
                    must
                      "../redundancy-mode='master'";
                    default "master";
                    description
                      "PW redundancy mode.";
                  }
    
                  leaf switchover {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the PW switchover.";
                  }
    
                  container reroute {
                    description
                      "Configure a switchback policy list.";
                    leaf reroute-policy {
                      type l2vpn-reroute-mode;
                      default "delay";
                      description
                        "Switchback policy.";
                    }
    
                    leaf delay-time {
                      when
                        "../reroute-policy='delay'";
                      type uint32 {
                        range "10..10800";
                      }
                      units "s";
                      default "30";
                      description
                        "Delay for switching traffic back to the primary PW.";
                    }
    
                    leaf last-switchback-reason {
                      type string {
                        length "0..100";
                      }
                      config false;
                      description
                        "Last switchback reason.";
                    }
    
                    leaf last-switchback-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Last switchback time.";
                    }
    
                    leaf delay-residual {
                      type uint32;
                      units "s";
                      config false;
                      description
                        "Remaining delay time.";
                    }
                  }  // container reroute
                }  // container reliability
              }  // container vpws-switch
    
              container vpws-bgp {
                when "../type='vpws-bgp'";
                description
                  "Configure a VPWS BGP instance. This container cannot be deleted.";
                leaf vpn-instance {
                  type leafref {
                    path "/l2vpn/common/vpws-bgp-vpns/vpws-bgp-vpn/name";
                  }
                  mandatory true;
                  description
                    "VPWS BGP instance.";
                }
    
                leaf local-site {
                  type leafref {
                    path "/l2vpn/common/vpws-bgp-vpns/vpws-bgp-vpn/sites/site/name";
                  }
                  mandatory true;
                  description "Local site name.";
                }
    
                container acs {
                  description
                    "List of attachment circuits in a VPWS BGP VPN instance.";
                  list ac {
                    ext:operation-exclude "delete";
                    key "interface-name";
                    min-elements 1;
                    max-elements 1;
                    description
                      "Configure a connection attachment circuit.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "VPWS BGP VPN instance connection attachment circuit interface name. The encapsulation type of this interface must be the same as that of the VPN instance. Otherwise, the PW cannot go Up.";
                    }
    
                    leaf tagged {
                      ext:operation-exclude "update|delete";
                      ext:dynamic-default;
                      when
                        "/l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name=current()/../../../l2vpn:vpn-instance]/l2vpn:encapsulation-type !='ip-interworking' and /l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name=current()/../../../l2vpn:vpn-instance]/l2vpn:encapsulation-type !='ip-layer2'";
                      type boolean;
                      description
                        "Enable/disable the attachment circuit tag of the VPWS BGP instance.";
                    }
    
                    leaf trigger-interface-down {
                      type boolean;
                      must
                        "(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='main-interface' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:link-protocol='ethernet' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='Eth-Trunk' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='PW-VE' and . = 'true') or (. = 'false')";
                      default "false";
                      description
                        "Enable/disable remote interface shutdown-based association between the PW status and interface status.";
                    }
    
                    leaf state {
                      type l2vpn-state;
                      config false;
                      description
                        "Status of an AC interface.";
                    }
    
                    leaf token-exceed {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Indicates whether the number of AC tokens exceeds the maximum limit.";
                    }
                  }  // list ac
                }  // container acs
    
                container pws {
                  description "List of PWs.";
                  list pw {
                    key "remote-site-id";
                    unique "role";
                    min-elements 1;
                    description
                      "Configure a PW.";
                    leaf remote-site-id {
                      type uint16 {
                        range "0..65534";
                      }
                      must
                        "../l2vpn:remote-site-id < (/l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name=current()/../../../l2vpn:vpn-instance]/l2vpn:sites/l2vpn:site[l2vpn:name = current()/../../../l2vpn:local-site]/range + /l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name = current()/../../../l2vpn:vpn-instance]/l2vpn:sites/l2vpn:site[l2vpn:name = current()/../../../l2vpn:local-site]/default-offset) and ../l2vpn:remote-site-id >= /l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name = current()/../../../l2vpn:vpn-instance]/l2vpn:sites/l2vpn:site[l2vpn:name = current()/../../../l2vpn:local-site]/default-offset";
                      description
                        "VPWS BGP VPN instance connection remote customer edge identifier.";
                    }
    
                    leaf role {
                      ext:operation-exclude "update|delete";
                      type pw-role-type;
                      must
                        "(.='primary') or (.='backup' and ../../pw[role='primary'])";
                      default "primary";
                      description
                        "VPWS BGP VPN instance connection pseudo wire role. Configure a primary PW first. The PW role canot be changed.";
                    }
    
                    leaf tunnel-policy {
                      type string {
                        length "1..39";
                      }
                      description
                        "VPWS BGP VPN instance connection tunnel policy name.";
                    }
    
                    leaf traffic-statistics-collection {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable connection traffic statistics collection of a VPWS BGP VPN instance.";
                    }
    
                    leaf manual-set-fault {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the manual setting of faults in a VPWS BGP VPN instance connection.";
                    }
    
                    container bfd {
                      when "/bfd:bfd";
                      must
                        "/l2vpn:l2vpn/l2vpn:common/l2vpn:vpws-bgp-vpns/l2vpn:vpws-bgp-vpn[l2vpn:name=current()/../../../l2vpn:vpn-instance]/l2vpn:control-word='enable'";
                      presence "enable pw bfd.";
                      description
                        "Enable/disable BFD for PW in a VPWS BGP VPN instance.";
                      leaf min-rx-interval {
                        type uint16 {
                          range "0..65535";
                        }
                        units "ms";
                        default "10";
                        description
                          "Minimum receive interval.";
                      }
    
                      leaf min-tx-interval {
                        type uint16 {
                          range "0..65535";
                        }
                        units "ms";
                        default "10";
                        description
                          "Minimum transmit interval.";
                      }
    
                      leaf detect-multiplier {
                        type uint16 {
                          range "3..50";
                        }
                        default "3";
                        description
                          "Detection multiplier.";
                      }
    
                      leaf track-interface {
                        type boolean;
                        default "false";
                        description
                          "Enable/disable BFD track interface state.";
                      }
                    }  // container bfd
    
                    container pw-info {
                      config false;
                      description
                        "Operational data of VPWS BGP PW information.";
                      leaf type {
                        type vpws-bgp-pw-type;
                        description
                          "Indicates the type of the pw.";
                      }
    
                      leaf local-vc-state {
                        type l2vpn-pw-state;
                        description
                          "Indicates the status of the local PW.";
                      }
    
                      leaf remote-vc-state {
                        type l2vpn-pw-state;
                        description
                          "Indicates the status of the remote PW.";
                      }
    
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "Indicates the LSR ID of the VC peer device.";
                      }
    
                      leaf local-vc-label {
                        type uint32;
                        description
                          "Indicates the local VC label.";
                      }
    
                      leaf remote-vc-label {
                        type uint32;
                        description
                          "Indicates the remote VC label.";
                      }
    
                      leaf ac-oam-state {
                        type vpws-bgp-ac-oam-state;
                        description
                          "Indicates the OAM status of the AC.";
                      }
    
                      leaf bfd-state {
                        type l2vpn-vpws-bfd-state;
                        description
                          "Indicates the status of the BFD for PW.";
                      }
    
                      leaf control-flag-bit {
                        type control-flag-bits-type;
                        description
                          "Indicates the control flag.";
                      }
    
                      leaf pw-token-exceed {
                        type boolean;
                        default "false";
                        description
                          "Indicates whether the number of PW tokens exceeds the maximum limit.";
                      }
    
                      container down-causes {
                        config false;
                        description
                          "Operational data of the down causes.";
                        list down-cause {
                          key "down-cause-index";
                          description
                            "Statistics of the down causes of PWs.";
                          leaf down-cause-index {
                            type uint32;
                            description
                              "Sequence number of the PW down cause.";
                          }
    
                          leaf down-cause {
                            type string {
                              length "0..100";
                            }
                            description
                              "Indicates the down causes of the PW.";
                          }
                        }  // list down-cause
                      }  // container down-causes
                    }  // container pw-info
    
                    container tunnels {
                      config false;
                      description
                        "List of VPWS BGP PW tunnel info.";
                      list tunnel {
                        key "tunnel-key";
                        max-elements 32;
                        description
                          "Operational data of tunnels.";
                        leaf tunnel-key {
                          type string {
                            length "0..21";
                          }
                          description
                            "Index of a public network tunnel.";
                        }
    
                        leaf tunnel-type {
                          type l2vpn-tunnel-type;
                          description
                            "Type of the tunnel used by the PW.";
                        }
    
                        leaf tunnel-name {
                          type string {
                            length "0..64";
                          }
                          description
                            "Name of the tunnel used by the PW.";
                        }
    
                        leaf public-next-hop {
                          type inet:ipv4-address-no-zone;
                          description
                            "Next hop of a PW on the public network.";
                        }
                      }  // list tunnel
                    }  // container tunnels
    
                    container traffic-statistics {
                      config false;
                      description
                        "Operational data of VPWS BGP PW traffic statistics.";
                      leaf interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "The name of interface.";
                      }
    
                      leaf last-clear-time {
                        type string {
                          length "1..60";
                        }
                        description
                          "Time when statistics are cleared for the last time.";
                      }
    
                      leaf input-bytes-rate {
                        type uint64;
                        description
                          "Rate of traffic received on the PW.";
                      }
    
                      leaf input-packets-rate {
                        type uint64;
                        description
                          "Rate of frames received on the PW.";
                      }
    
                      leaf output-bytes-rate {
                        type uint64;
                        description
                          "Rate of traffic transmitted out of the PW.";
                      }
    
                      leaf output-packets-rate {
                        type uint64;
                        description
                          "Rate of frames transmitted out of the PW.";
                      }
    
                      leaf input-bytes {
                        type uint64;
                        description
                          "Number of bytes received on the PW.";
                      }
    
                      leaf input-packets {
                        type uint64;
                        description
                          "Number of frames received on the PW.";
                      }
    
                      leaf output-bytes {
                        type uint64;
                        description
                          "Number of bytes transmitted out of the PW.";
                      }
    
                      leaf output-packets {
                        type uint64;
                        description
                          "Number of frames transmitted out of the PW.";
                      }
                    }  // container traffic-statistics
    
                    container qos-parameter {
                      must "cir<=pir" {
                        error-message
                          "The pir value is less than cir value.";
                      }
                      must
                        "not(cir=0 and pir=0)" {
                        error-message
                          "The cir and pir value can not be zero at same time.";
                      }
                      presence
                        "enable QoS for pw";
                      description
                        "Enable/disable the QoS parameter information.";
                      leaf cir {
                        type uint32 {
                          range
                            "0 | 16..4294967294";
                        }
                        units "kbit/s";
                        default "0";
                        description
                          "Specify the CIR.";
                      }
    
                      leaf pir {
                        type uint32 {
                          range
                            "0 | 16..4294967294";
                        }
                        units "kbit/s";
                        description
                          "Specify the PIR.";
                      }
    
                      leaf profile-name {
                        when "../pir>0";
                        type leafref {
                          path "/qos:qos/qos:queue-scheduler-template/qos:profiles/qos:profile/qos:name";
                        }
                        description
                          "Specify the name of QoS profile.";
                      }
                    }  // container qos-parameter
    
                    container qos-traffic-statistics {
                      config false;
                      description
                        "Operational data of QoS traffic statistics table.";
                      leaf interface-name {
                        type leafref {
                          path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Indicates the type and number of the AC interface.";
                      }
    
                      leaf last-clear-time {
                        type string {
                          length "1..60";
                        }
                        description
                          "Last time of clean out.";
                      }
    
                      leaf bits-rate {
                        type uint64;
                        units "bit/s";
                        description
                          "The traffic bits rate received on the PW.";
                      }
    
                      leaf packets-rate {
                        type uint64;
                        units "pps";
                        description
                          "The traffic packet rate received on the PW.";
                      }
    
                      leaf output-bytes {
                        type uint64;
                        units "Byte";
                        description
                          "The traffic bytes transmitted out of the PW.";
                      }
    
                      leaf output-packets {
                        type uint64;
                        units "packet";
                        description
                          "The traffic packets transmitted out of the PW.";
                      }
    
                      container qos-querys {
                        description
                          "List of the QoS traffic-statistics.";
                        list qos-query {
                          key "query";
                          description
                            "Indicates the query table of the QoS traffic statistics.";
                          leaf query {
                            type qos-query-type;
                            description
                              "Indicates the query of the QoS traffic statistics.";
                          }
    
                          leaf packets {
                            type uint64;
                            units "packet";
                            description
                              "The total number of output packets.";
                          }
    
                          leaf bytes {
                            type uint64;
                            units "Byte";
                            description
                              "The total number of output bytes.";
                          }
    
                          leaf packets-rate {
                            type uint64;
                            units "pps";
                            description
                              "The last 300 seconds packets rate.";
                          }
    
                          leaf bits-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "The last 300 seconds bits rate.";
                          }
    
                          leaf discard-packets {
                            type uint64;
                            units "packet";
                            description
                              "The total discard number of the packets.";
                          }
    
                          leaf discard-bytes {
                            type uint64;
                            units "Byte";
                            description
                              "The total discard number of the bytes.";
                          }
    
                          leaf discard-packets-rate {
                            type uint64;
                            units "pps";
                            description
                              "The last 300 seconds discard packets rate.";
                          }
    
                          leaf discard-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "The last 300 seconds discard bits rate.";
                          }
                        }  // list qos-query
                      }  // container qos-querys
                    }  // container qos-traffic-statistics
                  }  // list pw
                }  // container pws
    
                container reliability {
                  when "count(../pws/pw)=2";
                  description
                    "Configure PW reliability.";
                  leaf redundancy-mode {
                    type pw-redundancy-mode;
                    must
                      "../redundancy-mode='frr'";
                    default "frr";
                    description
                      "PW redundancy mode.";
                  }
    
                  leaf dual-receive {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the receipt of both the primary and secondary PWs to receive packets.";
                  }
    
                  container reroute {
                    description
                      "Configure a switchback policy list.";
                    leaf reroute-policy {
                      type l2vpn-reroute-mode;
                      default "delay";
                      description
                        "Switchback policy.";
                    }
    
                    leaf delay-time {
                      when
                        "../reroute-policy='delay'";
                      type uint32 {
                        range "10..10800";
                      }
                      units "s";
                      default "30";
                      description
                        "Delay for switching traffic back to the primary PW.";
                    }
    
                    leaf resume-time {
                      when
                        "not(../reroute-policy='never')";
                      type uint32 {
                        range "0..600";
                      }
                      units "s";
                      default "10";
                      description
                        "Time after which the peer PE on the secondary PW is notified that the local PE has recovered. This parameter can be configured only in FRR mode.";
                    }
    
                    leaf last-switchback-reason {
                      type string {
                        length "0..100";
                      }
                      config false;
                      description
                        "Last switchback reason.";
                    }
    
                    leaf last-switchback-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Last switchback time.";
                    }
    
                    leaf delay-residual {
                      type uint32;
                      units "s";
                      config false;
                      description
                        "Remaining delay time.";
                    }
    
                    leaf resume-residual {
                      type uint32;
                      units "s";
                      config false;
                      description
                        "Remaining resume time.";
                    }
                  }  // container reroute
                }  // container reliability
    
                container oam-mapping {
                  presence
                    "enable AC OAM mapping";
                  description
                    "Enable/disable OAM mapping.";
                  leaf type {
                    type ac-oam-mapping-type;
                    must
                      "(../type='1ag' and ../md-name and ../ma-name) or ../type!='1ag'";
                    mandatory true;
                    description
                      "VPWS attachment circuit OAM mapping type.";
                  }
    
                  leaf md-name {
                    ext:operation-exclude "update|delete";
                    when "../type='1ag'";
                    type string {
                      length "1..43";
                    }
                    description
                      "VPWS OAM mapping parameter md name.";
                  }
    
                  leaf ma-name {
                    ext:operation-exclude "update|delete";
                    when "../type='1ag'";
                    type string {
                      length "1..43";
                    }
                    description
                      "VPWS OAM mapping parameter ma name.";
                  }
                }  // container oam-mapping
              }  // container vpws-bgp
    
              container vpls {
                when "../type='vpls'";
                must
                  "(shutdown='false') or (not (admin-vsi)) or (shutdown='true' and admin-vsi='false')";
                must
                  "not(ldp-signaling and bgp-multi-homing-signaling)";
                must
                  "not(bgp-signaling and bgp-multi-homing-signaling)";
                must
                  "not(bgp-signaling and bgpad-signaling)";
                must
                  "not(bgp-multi-homing-signaling and bgpad-signaling)";
                description
                  "Configure a VPLS instance.";
                leaf member-discovery-mode {
                  type l2vpn-vpls-vsi-mem-disc-type;
                  default "default";
                  description
                    "VPLS member discovery mode for a specified VSI.";
                }
    
                leaf work-mode {
                  ext:operation-exclude "update";
                  type vsi-work-mode;
                  default "normal";
                  description
                    "Workmode of a VSI.";
                }
    
                leaf encapsulation-type {
                  type l2vpn-vpls-encap-type;
                  must
                    ".='vlan' or not(../etree)";
                  default "vlan";
                  description
                    "Encapsulation type of a VSI.";
                }
    
                leaf mtu {
                  type uint16 {
                    range "46..65535";
                  }
                  default "1500";
                  description "VPLS MTU.";
                }
    
                leaf tunnel-policy {
                  type string {
                    length "1..39";
                  }
                  description
                    "Name of a tunnel policy for a VSI. If the tunnel policy name is not specified, the system uses the default tunnel policy. The default tunnel policy preferentially selects LSPs for packet transmission and the number of load-balancing tunnels is 1. If the tunnel policy name is specified but the corresponding tunnel policy does not exist, the system still uses the default tunnel policy.";
                }
    
                leaf shutdown {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function of shutting down a specified VSI.";
                }
    
                leaf isolate-spoken {
                  when "../work-mode='normal'";
                  type boolean;
                  must
                    ".='false' or not(../etree)";
                  default "false";
                  description
                    "Enable/disable forwarding isolation between AC interfaces, between UPE PWs, and between ACs and UPE PWs in a VSI.";
                }
    
                leaf isolate-spoken-include-multicast {
                  when
                    "../isolate-spoken='true'";
                  type boolean;
                  must
                    ".='false' or not(../etree)";
                  default "false";
                  description
                    "Enable/disable isolating forwarding between AC interfaces, between UPE PWs, and between ACs and UPE PWs in a VSI.";
                }
    
                leaf ignore-ac-state {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function for the VSI status not to be affected by changes in the AC status.";
                }
    
                leaf response-ac-state {
                  when "../work-mode='bd-mode'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function for the BD VSI status to be affected by changes in the BD AC status.";
                }
    
                leaf admin-vsi {
                  type boolean;
                  must
                    "(.='false') or (.='true' and ../isolate-spoken='false' and not(../etree))";
                  must
                    ".='false' or (.='true' and ../work-mode='normal')";
                  default "false";
                  description
                    "Enable/disable the function for the current service VSI to be configured as the mVSI.";
                }
    
                leaf track-admin-vsi {
                  ext:operation-exclude "update|delete";
                  when
                    "../work-mode='normal' or ../work-mode='b-vsi'";
                  type string {
                    length "1..31";
                  }
                  must
                    "(../admin-vsi='false' and /l2vpn:l2vpn/l2vpn:instances/l2vpn:instance[l2vpn:name=current()][l2vpn:type='vpls']/l2vpn:vpls/l2vpn:admin-vsi='true')";
                  description
                    "Name of the mVSI to which a service VSI is bound.";
                }
    
                leaf unknown-unicast-action {
                  when
                    "not(../work-mode='bd-mode')";
                  type l2vpn-vpls-unknow-frame-act;
                  default "broadcast";
                  description
                    "Action taken to process unknown unicast frames.";
                }
    
                leaf unknown-multicast-action {
                  when
                    "not(../work-mode='bd-mode')";
                  type l2vpn-vpls-unknow-frame-act;
                  must
                    "((.='broadcast' or .='drop'))";
                  default "broadcast";
                  description
                    "Action taken to process unknown multicast frames.";
                }
    
                leaf isolate-hub-ac-pw {
                  when "../work-mode='normal'";
                  type boolean;
                  must
                    ".='false' or not(../etree)";
                  default "false";
                  description
                    "Enable/disable forwarding isolation between hub ACs and PWs in a VSI.";
                }
    
                leaf p2p-vsi {
                  when "../work-mode='normal'";
                  type boolean;
                  must
                    ".='false' or (.='true' and ../admin-vsi='false' and ../mac-learn='false' and ../mac-learn-style='unqualify' and not(../etree))";
                  default "false";
                  description
                    "Enable/disable the P2P VSI.";
                }
    
                leaf traffic-statistics-collection {
                  when
                    "../work-mode='normal' or ../work-mode='bd-mode'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable VSI QoS traffic statistics collection.";
                }
    
                leaf mac-remove-mode {
                  type mac-remove-type;
                  must
                    "((not(.='all-from-me')) or ((.='all-from-me') and (not(../work-mode='bd-mode')) and (not(../work-mode='b-vsi')) and (not(../work-mode='i-vsi')) and (not(../work-mode='i-vsi-p2p')) and (not(../work-mode='i-vsi-b-evpn-interworking'))))";
                  default "invalid";
                  description
                    "Local MAC remove mode.";
                }
    
                leaf mac-learn {
                  when
                    "not(../work-mode='bd-mode')";
                  type boolean;
                  must
                    ".='false' or (.='true' and ../p2p-vsi='false')";
                  default "true";
                  description
                    "Enable/disable the function for a VSI to learn MAC addresses.";
                }
    
                leaf mac-learn-style {
                  when "../work-mode='normal'";
                  type l2vpn-mac-learn-style;
                  must
                    ".='unqualify' or not(../etree)";
                  default "unqualify";
                  description
                    "MAC address learning style of PWs.";
                }
    
                leaf mac-age-time {
                  when
                    "not(../work-mode='bd-mode')";
                  type uint32 {
                    range "0 | 60..1000000";
                  }
                  units "s";
                  description
                    "MAC address aging timer that sets the aging time of MAC addresses.";
                }
    
                leaf local-mac-age-time {
                  when "../work-mode='normal'";
                  type uint32 {
                    range "0 | 60..1000000";
                  }
                  units "s";
                  description
                    "Local MAC address aging timer that sets the aging time of MAC addresses.";
                }
    
                leaf remote-mac-age-time {
                  when "../work-mode='normal'";
                  type uint32 {
                    range "0 | 60..1000000";
                  }
                  units "s";
                  description
                    "Remote MAC address aging timer that sets the aging time of MAC addresses.";
                }
    
                leaf mac-withdraw {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function for a VSI to delete the local MAC address and notifies all remote peers of the deletion when an AC or a UPE fault occurs and the VSI remains up.";
                }
    
                leaf interface-change-mac-withdraw {
                  when
                    "not(../work-mode='i-vsi-b-evpn-interworking')";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function for PEs to send LDP MAC withdraw messages to all peers when the status of the AC interface bound to the VSI changes.";
                }
    
                leaf interface-change-mac-withdraw-type {
                  type interface-change-withdraw-type;
                  must
                    ".='all' or ../interface-change-mac-withdraw='true'";
                  default "all";
                  description
                    "Specify the status change type for a VSI AC interface.";
                }
    
                leaf bd-pwtag-mac-withdraw {
                  when "../work-mode='bd-mode'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function for LDP MAC withdraw messages to carry PW tag corresponding to the VSI bound to the bridge domain. This node can be configured only when the VSI works in BD mode.";
                }
    
                leaf bd-down-mac-withdraw {
                  when "../work-mode='bd-mode'";
                  type boolean;
                  default "true";
                  description
                    "Enable/disable the function for PEs to send LDP MAC withdraw messages to all peers when BD goes down. This node can be configured only when the VSI works in BD mode.";
                }
    
                leaf propagate-mac-withdraw {
                  when
                    "not(../work-mode='i-vsi-b-evpn-interworking')";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the function for a PE to propagate LDP MAC withdraw messages to other peers after receiving the message from a remote peer.";
                }
    
                leaf mac-flush-rfc-compatible {
                  when
                    "../work-mode='normal' or ../work-mode='bd-mode'";
                  type boolean;
                  default "false";
                  description
                    "Enable/disable the transmission of standard MAC-flush message when the PW status changes.";
                }
    
                leaf vrrp-mac-withdraw-retry {
                  type uint16 {
                    range "0..60";
                  }
                  default "0";
                  description
                    "VRRP backup Mac withdraw retry.";
                }
    
                leaf token-exceed {
                  type boolean;
                  default "false";
                  config false;
                  description
                    "Indicates whether the number of VSI tokens exceeds the maximum limit.";
                }
    
                leaf ac-count {
                  type uint32;
                  config false;
                  description
                    "Total number of ACs in a VSI.";
                }
    
                leaf create-time {
                  type string {
                    length "1..60";
                  }
                  config false;
                  description
                    "Time when a VSI was created.";
                }
    
                leaf ignore-ac-state-effect {
                  type boolean;
                  default "false";
                  config false;
                  description
                    "Configure the VSI status not to be affected by changes in the AC status. By default, the VSI status changes according to the AC status.";
                }
    
                container etree {
                  when "../work-mode='normal'";
                  must
                    "(root-vlan and leaf-vlan) or ((not(root-vlan)) and (not(leaf-vlan)))";
                  presence
                    "Enable ethernet tree.";
                  description
                    "Enable/disable vpls ethernet tree.";
                  leaf static {
                    type boolean;
                    must "../static='true'";
                    default "true";
                    description
                      "Enable/disable static mode.";
                  }
    
                  leaf root-vlan {
                    type uint16 {
                      range "1..4094";
                    }
                    description
                      "Specify root VLAN id.";
                  }
    
                  leaf leaf-vlan {
                    type uint16 {
                      range "1..4094";
                    }
                    description
                      "Specify leaf VLAN id.";
                  }
                }  // container etree
    
                container ldp-signaling {
                  presence
                    "Label Distribution Protocol (LDP) signaling.";
                  description
                    "Enable/disable Label Distribution Protocol (LDP) signaling.";
                  leaf vsi-id {
                    ext:operation-exclude "update";
                    type uint64 {
                      range "1..4294967295";
                    }
                    must
                      "count(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpls/l2vpn:ldp-signaling/l2vpn:vsi-id[.=current()])<=1";
                    must
                      "count(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-ldp[l2vpn:encapsulation-type='vlan']/l2vpn:pws/l2vpn:pw/l2vpn:pw-id[.=current()])=0";
                    must
                      "count(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-ldp[l2vpn:encapsulation-type='ethernet']/l2vpn:pws/l2vpn:pw/l2vpn:pw-id[.=current()])=0";
                    must
                      "count(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-switch[l2vpn:encapsulation-type='vlan']/l2vpn:pws/l2vpn:pw/l2vpn:pw-id[.=current()])=0";
                    must
                      "count(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:vpws-switch[l2vpn:encapsulation-type='ethernet']/l2vpn:pws/l2vpn:pw/l2vpn:pw-id[.=current()])=0";
                    description
                      "VPLS LDP VSI ID. Can not be modified after configuration.";
                  }
    
                  leaf traffic-statistics-collection {
                    when "../vsi-id";
                    type boolean;
                    must
                      ". = 'false' or not(../../traffic-statistics-collection='true')";
                    default "false";
                    description
                      "Enable/disable traffic statistics collection.";
                  }
    
                  leaf control-word {
                    type l2vpn-control-word;
                    must
                      ".='disable' or .='enable'";
                    default "disable";
                    description
                      "Enable the control word feature. The control word feature is usually used for TDM, ATM, and FR PWs.";
                  }
    
                  leaf hard-pipe {
                    type boolean;
                    must
                      ".='false' or (../../work-mode='normal' and not(../../bgp-signaling) and not(../../bgpad-signaling) and ../../p2p-vsi='false')";
                    default "false";
                    description
                      "Enable/disable hard pipe.";
                  }
    
                  leaf mac-withdraw {
                    type boolean;
                    must
                      ".='false' or (../../mac-withdraw='false' and ../../propagate-mac-withdraw='false' and ../../interface-change-mac-withdraw='false')";
                    default "false";
                    description
                      "Enable/disable the function for a VSI to delete the local MAC address and notify all remote peers of the deletion when an AC or a UPE fault occurs and the VSI remains up.";
                  }
    
                  leaf interface-change-mac-withdraw {
                    type boolean;
                    must
                      ".='false' or  (.='true' and ../../mac-withdraw='false' and ../../propagate-mac-withdraw='false' and ../../interface-change-mac-withdraw='false' and ../../work-mode!='i-vsi-b-evpn-interworking')";
                    default "false";
                    description
                      "Enable/disable the function for PEs to send LDP MAC withdraw messages to all peers when the status of the AC interface bound to the VSI changes.";
                  }
    
                  leaf interface-change-mac-withdraw-type {
                    type interface-change-withdraw-type;
                    must
                      ".='all' or ../interface-change-mac-withdraw='true'";
                    default "all";
                    description
                      "Specify the status change type for a VSI AC interface.";
                  }
    
                  leaf upe-upe-mac-withdraw {
                    type boolean;
                    must
                      ".='false' or (../../mac-withdraw='false' and ../../propagate-mac-withdraw='false' and ../../interface-change-mac-withdraw='false' and ../../work-mode!='i-vsi')";
                    default "false";
                    description
                      "Enable/disable the function for an NPE to forward the LDP MAC withdraw messages received from a UPE to other UPEs.";
                  }
    
                  leaf upe-npe-mac-withdraw {
                    type boolean;
                    must
                      ".='false' or (../../mac-withdraw='false' and ../../propagate-mac-withdraw='false' and ../../interface-change-mac-withdraw='false' and ../../work-mode!='i-vsi')";
                    default "false";
                    description
                      "Enable/disable the function for an NPE to forward the LDP MAC withdraw messages received from a UPE to other NPEs.";
                  }
    
                  leaf npe-upe-mac-withdraw {
                    type boolean;
                    must
                      ".='false' or (../../mac-withdraw='false' and ../../propagate-mac-withdraw='false' and ../../interface-change-mac-withdraw='false' and ../../work-mode!='i-vsi')";
                    default "false";
                    description
                      "Enable/disable the function for an NPE to forward the LDP MAC withdraw messages received from another NPE to UPEs.";
                  }
    
                  container flow-label {
                    presence
                      "enable flow-label for ldp signaling pws.";
                    description
                      "Enable/disable flow label capability of a PW.";
                    leaf ability {
                      type flow-label-ability;
                      must
                        ".!='default' and .!='disable'";
                      mandatory true;
                      description
                        "Enable/disable flow label capability.";
                    }
    
                    leaf static {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the static flow label function.";
                    }
                  }  // container flow-label
    
                  container pws {
                    when "../vsi-id";
                    description
                      "List of VPLS PWs.";
                    list pw {
                      key "peer-ip negotiation-vc-id encapsulation-type";
                      description
                        "Configure VPLS PWs.";
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "Peer IP address. The loopback IP address of a peer is usually used as the peer IP address.";
                      }
    
                      leaf negotiation-vc-id {
                        type uint32 {
                          range "1..4294967295";
                        }
                        description
                          "PW ID used to uniquely identify a VC. The PW ID is usually used when both ends need to communicate but the VSI IDs on both ends are different.";
                      }
    
                      leaf encapsulation-type {
                        type l2vpn-vpls-ldp-pw-encap-type;
                        description
                          "Encapsulation type of a VPLS PW. 'unsupport' indicates that the encapsulation type of a VSI is inherited.";
                      }
    
                      leaf role {
                        ext:operation-exclude "update|delete";
                        type vpls-pw-role-type;
                        must
                          "../role='primary' or (../role='backup' and  ../../pw[role='primary'])";
                        default "primary";
                        description
                          "Role of a PW, either primary or secondary. Configure a primary PW first.";
                      }
    
                      leaf name {
                        ext:operation-exclude "update";
                        type string {
                          length "1..15";
                        }
                        description "PW name.";
                      }
    
                      leaf signal-type {
                        ext:operation-exclude "update|delete";
                        type pw-signal-type;
                        must
                          "(../signal-type='ldp') or ../role!='backup'";
                        must
                          "(../signal-type='static' and ../tunnel-policy) or ../../../hard-pipe='false'";
                        must
                          "(../signal-type='static' and ../transmit-label and ../receive-label) or ../signal-type='ldp'";
                        must
                          "(.='static' and ../ignore-standby='false') or .!='static'";
                        default "ldp";
                        description
                          "PW type, either dynamic or static.";
                      }
    
                      leaf transmit-label {
                        ext:operation-exclude "update|delete";
                        when
                          "../signal-type='static'";
                        type uint32 {
                          range "0..1048575";
                        }
                        description
                          "Label for sending packets.";
                      }
    
                      leaf receive-label {
                        ext:operation-exclude "update|delete";
                        when
                          "../signal-type='static'";
                        type uint32 {
                          range "16..1048575";
                        }
                        description
                          "Label for receiving packets.";
                      }
    
                      leaf control-word {
                        when "../name";
                        type l2vpn-control-word;
                        default "default";
                        description
                          "Enable the control word function.";
                      }
    
                      leaf vccv {
                        when "../name";
                        type boolean;
                        default "true";
                        description
                          "Enable/disable virtual circuit connectivity verification capability. VCCV supports two modes: control word and label alert.";
                      }
    
                      leaf ignore-standby {
                        ext:operation-exclude "update|delete";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function for the created PW to ignore the standby state sent from the peer device.";
                      }
    
                      leaf upe {
                        ext:operation-exclude "update|delete";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the peer device as a UPE.";
                      }
    
                      leaf tunnel-policy {
                        type string {
                          length "1..39";
                        }
                        description
                          "Name of the tunnel policy for a PW.";
                      }
    
                      leaf traffic-statistics-collection {
                        type l2vpn-vpls-traffic-statistics-enable-type;
                        must
                          ". = 'default' or not(../../../../traffic-statistics-collection = 'true')";
                        default "default";
                        description
                          "Enable the function to collect traffic statistics.";
                      }
    
                      leaf track-hub-pw {
                        when "../name";
                        type boolean;
                        must
                          "../track-hub-pw='false' or (../track-hub-pw='true' and ../upe='true' and ../../../../work-mode!='i-vsi-b-evpn-interworking')";
                        default "false";
                        description
                          "Enable/disable the function for the spoke PW to track the hub PW. If a PW is not a spoke PW, it cannot track the hub PW.";
                      }
    
                      leaf ignore-stp-loop-check {
                        when "../name";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function of ignoring STP loops.";
                      }
    
                      leaf hard-pipe-bandwidth {
                        ext:operation-exclude "delete";
                        when
                          "../../../hard-pipe='true' and ../signal-type='static' and ../tunnel-policy and /tnlm:tunnel-management/tnlm:tunnel-policys/tnlm:tunnel-policy[tnlm:name=current()/../tunnel-policy]/tnlm:ipv4-set/tnlm:nexthops";
                        type uint32 {
                          range "16..4294967294";
                        }
                        units "kbit/s";
                        description
                          "Specify bandwidth value.";
                      }
    
                      leaf hard-pipe-burst-time {
                        ext:operation-exclude "delete";
                        when
                          "../hard-pipe-bandwidth";
                        type uint32 {
                          range "100..5000";
                        }
                        units "us";
                        default "100";
                        description
                          "Burst time.";
                      }
    
                      leaf status-code-change-flush-mac-disable {
                        when "../name";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the function of flushing MAC when status code change.";
                      }
    
                      leaf ac-mode {
                        ext:operation-exclude "update|delete";
                        when
                          "../../../../work-mode='bd-mode'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the AC mode.";
                      }
    
                      leaf etree-mode {
                        when
                          "../../../../etree and ../name";
                        type etree-work-mode;
                        default "default";
                        description
                          "Specify e-tree work mode.";
                      }
    
                      leaf etree-leaf {
                        when
                          "../etree-mode = 'compatible'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable e-tree leaf.";
                      }
    
                      container flow-label {
                        when "../name";
                        presence
                          "enable flow label";
                        description
                          "Enable/disable the flow label capability of a PW.";
                        leaf ability {
                          type flow-label-ability;
                          must ".!='default'";
                          mandatory true;
                          description
                            "Flow label capability.";
                        }
    
                        leaf static {
                          type boolean;
                          must
                            ".='false' or ../ability!='disable'";
                          default "false";
                          description
                            "Enable/disable the static flow label function.";
                        }
                      }  // container flow-label
    
                      container bfd {
                        when
                          "../name and /bfd:bfd";
                        presence
                          "enable vpls ldp pw bfd.";
                        description
                          "Enable/disable BFD.";
                        leaf min-rx-interval {
                          type uint16 {
                            range "0..65535";
                          }
                          units "ms";
                          default "10";
                          description
                            "Minimum receive interval.";
                        }
    
                        leaf min-tx-interval {
                          type uint16 {
                            range "0..65535";
                          }
                          units "ms";
                          default "10";
                          description
                            "Minimum transmit interval.";
                        }
    
                        leaf detect-multiplier {
                          type uint16 {
                            range "3..50";
                          }
                          default "3";
                          description
                            "Detection multiplier.";
                        }
    
                        leaf option-tlv {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable BFD detection with options.";
                        }
                      }  // container bfd
    
                      container pw-info {
                        config false;
                        description
                          "Operational data of VPLS LDP PW information.";
                        leaf peer-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Peer IP address.";
                        }
    
                        leaf negotiation-vc-id {
                          type uint32;
                          description
                            "PW ID used to uniquely identify a VC. The PW ID is usually used when both ends need to communicate but the VSI IDs on both ends are different.";
                        }
    
                        leaf pw-type {
                          type l2vpn-vpls-pw-type;
                          description
                            "PW type, which can be label, QinQ, or MEHVPLS.";
                        }
    
                        leaf session-state {
                          type l2vpn-state;
                          description
                            "Status of the session between the local end and its peer. The value is either up or down. This item is displayed only when the VPLS type is Martini.";
                        }
    
                        leaf pw-state {
                          type l2vpn-pw-state;
                          description
                            "Current PW status.";
                        }
    
                        leaf local-vc-label {
                          type uint32;
                          description
                            "VC label allocated by the local device.";
                        }
    
                        leaf remote-vc-label {
                          type uint32;
                          description
                            "VC label allocated by the peer.";
                        }
    
                        leaf remote-control-word {
                          type l2vpn-control-word;
                          description
                            "Enable the control word function on the remote end.";
                        }
    
                        leaf tunnel-policy {
                          type string {
                            length "1..39";
                          }
                          description
                            "Name of the tunnel policy for a PW.";
                        }
    
                        leaf last-up-time {
                          type string {
                            length "1..80";
                          }
                          description
                            "Date and time when a PW was up for the last time, for example, 2012/07/20 02:30:46.";
                        }
    
                        leaf total-up-time {
                          type string {
                            length "1..80";
                          }
                          description
                            "Total up time of the PW.";
                        }
    
                        leaf c-key {
                          type uint32;
                          description
                            "Customer key. Each CKey corresponds to a PW.";
                        }
    
                        leaf n-key {
                          type uint32;
                          description
                            "Network key. Each NKey corresponds to a combination of the peer and tunnel policy.";
                        }
    
                        leaf spe-count {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "Number of SPEs in the path to the peer.";
                        }
    
                        leaf stp-enable {
                          type boolean;
                          description
                            "Enable STP for PW.";
                        }
    
                        leaf mac-flapping-state {
                          type pw-block-status;
                          description
                            "MAC flapping information.";
                        }
    
                        leaf pw-index {
                          type uint32;
                          description
                            "PW index.";
                        }
    
                        leaf remote-group-id {
                          type uint32;
                          description
                            "ID of a remote PW group.";
                        }
    
                        leaf remote-mtu {
                          type uint32;
                          description
                            "MTU of the remote VSI.";
                        }
    
                        leaf remote-state-code {
                          type l2vpn-vpls-ldp-pw-state-code;
                          description
                            "Status code information on the remote end.";
                        }
    
                        leaf received-flow-label {
                          type flow-label-ability;
                          description
                            "Received flow label.";
                        }
    
                        leaf negotiated-flow-label {
                          type flow-label-ability;
                          description
                            "Negotiated flow label.";
                        }
    
                        leaf remote-vccv-code {
                          type pub-type:hex-binary;
                          description
                            "Remote VCCV code.";
                        }
    
                        leaf bfd-enable {
                          type boolean;
                          description
                            "Enable BFD.";
                        }
    
                        leaf bfd-state {
                          type l2vpn-vpls-pw-bfd-state;
                          description
                            "BFD status.";
                        }
    
                        leaf bfd-session-index {
                          when
                            "../dynamic-bfd-session='false'";
                          type uint32;
                          description
                            "BFD index.";
                        }
    
                        leaf dynamic-bfd-session {
                          type boolean;
                          description
                            "Enable dynamic BFD.";
                        }
    
                        leaf bfd-for-pw {
                          when
                            "../dynamic-bfd-session='true'";
                          type boolean;
                          description
                            "Dynamic BFD session status.";
                        }
    
                        leaf block-status {
                          type pw-block-status;
                          description
                            "Specifies whether a PW is blocked. If the PW is blocked, it cannot receive or transmit services.";
                        }
    
                        leaf pw-token-exceed {
                          type boolean;
                          default "false";
                          description
                            "Indicates whether the number of PW tokens exceeds the maximum limit.";
                        }
    
                        container tunnels {
                          config false;
                          description
                            "List of VPLS LDP PW tunnels.";
                          list tunnel {
                            key "tunnel-key";
                            max-elements 32;
                            description
                              "Operational data of VPLS LDP PW tunnels.";
                            leaf tunnel-key {
                              type string {
                                length "0..21";
                              }
                              description
                                "Tunnel ID in hexadecimal notation that is assigned by the system.";
                            }
    
                            leaf tunnel-type {
                              type l2vpn-tunnel-type;
                              description
                                "Type of a tunnel.";
                            }
    
                            leaf out-interface {
                              type string {
                                length "0..257";
                              }
                              description
                                "Outbound interface of a PW.";
                            }
    
                            leaf tunnel-name {
                              type string {
                                length "0..64";
                              }
                              description
                                "Name of the tunnel used by the PW.";
                            }
    
                            leaf public-next-hop {
                              type inet:ipv4-address-no-zone;
                              description
                                "Public next hop of a PW.";
                            }
                          }  // list tunnel
                        }  // container tunnels
    
                        container spes {
                          description
                            "Operational data of SPEs on the path to the peer.";
                          list spe {
                            key "spe-pw-id spe-peer-ip";
                            description
                              "Operational data of the SPE on the path to the peer.";
                            leaf spe-pw-id {
                              type uint32 {
                                range
                                  "0..4294967295";
                              }
                              description
                                "List of PW IDs on the path traveled by a label mapping message.";
                            }
    
                            leaf spe-peer-ip {
                              type inet:ipv4-address-no-zone;
                              description
                                "IP address of an SPE in the path to the peer.";
                            }
                          }  // list spe
                        }  // container spes
    
                        container label-stacks {
                          description
                            "Operational data of PW label stacks.";
                          list label-stack {
                            key "label-stack level";
                            description
                              "Operational data of the PW label stack.";
                            leaf label-stack {
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Label stack.";
                            }
    
                            leaf level {
                              type uint32 {
                                range
                                  "1..4294967295";
                              }
                              description
                                "Label level.";
                            }
    
                            leaf type {
                              type string {
                                length "0..20";
                              }
                              description
                                "Label type.";
                            }
    
                            leaf label {
                              type string {
                                length "0..20";
                              }
                              description
                                "Label value.";
                            }
    
                            leaf out-interface {
                              type leafref {
                                path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                              }
                              description
                                "Outbound interface name.";
                            }
                          }  // list label-stack
                        }  // container label-stacks
    
                        container down-causes {
                          description
                            "Operational data of the down causes.";
                          list down-cause {
                            key "down-cause-index";
                            description
                              "Statistics of the down causes of PWs.";
                            leaf down-cause-index {
                              type uint32;
                              description
                                "Sequence number of the PW down cause.";
                            }
    
                            leaf down-cause {
                              type string {
                                length "0..100";
                              }
                              description
                                "Indicates the down causes of the PW.";
                            }
                          }  // list down-cause
                        }  // container down-causes
    
                        container status-changes {
                          description
                            "Operational data of the reason and time.";
                          list status-change {
                            key "index";
                            description
                              "Statistics of the reason and the time of the PW status that has changed.";
                            leaf index {
                              type uint32;
                              description
                                "Sequence number of reasons that the PW status has changed.";
                            }
    
                            leaf timestamp {
                              type string {
                                length "0..60";
                              }
                              description
                                "Indicates the time of the PW status has changed.";
                            }
    
                            leaf reason {
                              type string {
                                length "0..100";
                              }
                              description
                                "Indicates the reason of the PW status has changed.";
                            }
                          }  // list status-change
                        }  // container status-changes
                      }  // container pw-info
    
                      container suppression-statisticss {
                        config false;
                        description
                          "List of suppression statistics.";
                        list suppression-statistics {
                          key "suppression-type";
                          description
                            "Operational data of suppression statistics.";
                          leaf suppression-type {
                            type suppression-type;
                            description
                              "Suppression statistics type.";
                          }
    
                          leaf cir {
                            type uint32;
                            description
                              "CIR value.";
                          }
    
                          leaf pir {
                            type uint32;
                            description
                              "PIR value.";
                          }
    
                          leaf cbs {
                            type uint32;
                            description
                              "CBS value.";
                          }
    
                          leaf pbs {
                            type uint32;
                            description
                              "PBS value.";
                          }
    
                          leaf passed-packets {
                            type uint64;
                            description
                              "Passed packets.";
                          }
    
                          leaf passed-bytes {
                            type uint64;
                            description
                              "Passed bytes.";
                          }
    
                          leaf discard-packets {
                            type uint64;
                            description
                              "Discard packets.";
                          }
    
                          leaf discard-bytes {
                            type uint64;
                            description
                              "Discard bytes.";
                          }
    
                          leaf passed-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Passed packet rate.";
                          }
    
                          leaf passed-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Passed bit rate.";
                          }
    
                          leaf discard-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Discard packet rate.";
                          }
    
                          leaf discard-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Discard bit rate.";
                          }
                        }  // list suppression-statistics
                      }  // container suppression-statisticss
    
                      container traffic-statistics {
                        config false;
                        description
                          "Operational data of traffic statistics about PWs.";
                        leaf in-traffic-rate {
                          type uint64;
                          description
                            "Rate of traffic received by the PW.";
                        }
    
                        leaf out-traffic-rate {
                          type uint64;
                          description
                            "Rate of traffic sent by the PW.";
                        }
    
                        leaf in-frame-rate {
                          type uint64;
                          description
                            "Rate of frames received by the PW.";
                        }
    
                        leaf out-frame-rate {
                          type uint64;
                          description
                            "Rate of frames sent by the PW.";
                        }
    
                        leaf in-bytes {
                          type uint64;
                          description
                            "Number of bytes received by the PW.";
                        }
    
                        leaf out-bytes {
                          type uint64;
                          description
                            "Number of bytes sent by the PW.";
                        }
    
                        leaf in-frames {
                          type uint64;
                          description
                            "Number of frames received by the PW.";
                        }
    
                        leaf out-frames {
                          type uint64;
                          description
                            "Number of frames sent by the PW.";
                        }
    
                        leaf in-unicast-frames {
                          type uint64;
                          description
                            "Number of unicast frames received by the PW.";
                        }
    
                        leaf in-unicast-bytes {
                          type uint64;
                          description
                            "Number of unicast bytes received by the PW.";
                        }
    
                        leaf in-multicast-frames {
                          type uint64;
                          description
                            "Number of multicast frames received by the PW.";
                        }
    
                        leaf in-multicast-bytes {
                          type uint64;
                          description
                            "Number of multicast bytes received by the PW.";
                        }
    
                        leaf in-broadcast-frames {
                          type uint64;
                          description
                            "Number of broadcast frames received by the PW.";
                        }
    
                        leaf in-broadcast-bytes {
                          type uint64;
                          description
                            "Number of broadcast bytes received by the PW.";
                        }
    
                        leaf out-unicast-frames {
                          type uint64;
                          description
                            "Number of unicast frames sent by the PW.";
                        }
    
                        leaf out-unicast-bytes {
                          type uint64;
                          description
                            "Number of unicast bytes sent by the PW.";
                        }
    
                        leaf out-multicast-frames {
                          type uint64;
                          description
                            "Number of multicast frames sent by the PW.";
                        }
    
                        leaf out-multicast-bytes {
                          type uint64;
                          description
                            "Number of multicast bytes sent by the PW.";
                        }
    
                        leaf out-broadcast-frames {
                          type uint64;
                          description
                            "Number of broadcast frames sent by the PW.";
                        }
    
                        leaf out-broadcast-bytes {
                          type uint64;
                          description
                            "Number of broadcast bytes sent by the PW.";
                        }
    
                        leaf in-discard-frames {
                          type uint64;
                          description
                            "Number of frames received and then dropped by the PW.";
                        }
    
                        leaf reset-time {
                          type string {
                            length "1..60";
                          }
                          description
                            "Time when statistics were cleared the last time.";
                        }
                      }  // container traffic-statistics
    
                      container hard-pipe-traffic-statistics {
                        config false;
                        description
                          "Operational data of traffic statistics about VPLS LDP PW HardPipe.";
                        leaf last-clear-time {
                          type string {
                            length "1..60";
                          }
                          description
                            "Time when statistics are cleared for the last time.";
                        }
    
                        leaf pass-packets-rate {
                          type uint64;
                          description
                            "The last 300 seconds pass packets rate.";
                        }
    
                        leaf pass-bytes-rate {
                          type uint64;
                          description
                            "The last 300 seconds pass bytes rate.";
                        }
    
                        leaf discard-packets-rate {
                          type uint64;
                          description
                            "The last 300 seconds discard packets rate.";
                        }
    
                        leaf discard-bytes-rate {
                          type uint64;
                          description
                            "The last 300 seconds discard bytes rate.";
                        }
    
                        leaf pass-packets {
                          type uint64;
                          description
                            "Number of pass packets in the last 300 seconds.";
                        }
    
                        leaf pass-bytes {
                          type uint64;
                          description
                            "Number of pass bytes in the last 300 seconds.";
                        }
    
                        leaf drop-packets {
                          type uint64;
                          description
                            "Number of discard packets in the last 300 seconds.";
                        }
    
                        leaf drop-bytes {
                          type uint64;
                          description
                            "Number of discard bytes in the last 300 seconds.";
                        }
                      }  // container hard-pipe-traffic-statistics
    
                      container evpn {
                        description
                          "Configure the EVPN attributes of a PW.";
                        leaf etree-leaf-enable {
                          when
                            "../../../../../l2vpn:work-mode='bd-mode' and ../../l2vpn:upe='true' and ../../l2vpn:name";
                          type boolean;
                          must
                            "(../etree-leaf-enable='true' and ../../../../../l2vpn:bds/l2vpn:bd/l2vpn:id and /bd:bd/bd:instances/bd:instance[bd:id=current()/../../../../../l2vpn:bds/l2vpn:bd/l2vpn:id]/evpn:evpn/evpn:name and /evpn:evpn/evpn:instances/evpn:instance[evpn:name=/bd:bd/bd:instances/bd:instance[bd:id=current()/../../../../../l2vpn:bds/l2vpn:bd/l2vpn:id]/evpn:evpn/evpn:name]/evpn:type='bd-evpn' and /evpn:evpn/evpn:instances/evpn:instance[evpn:name=/bd:bd/bd:instances/bd:instance[bd:id=current()/../../../../../l2vpn:bds/l2vpn:bd/l2vpn:id]/evpn:evpn/evpn:name]/evpn:bd-evpn/evpn:etree-enable='true') or ../etree-leaf-enable='false'";
                          default "false";
                          description
                            "Enable/disable the E-Tree leaf attribute of a PW.";
                        }
    
                        leaf esi {
                          when
                            "../../../../../l2vpn:work-mode='bd-mode' and ../../l2vpn:upe='true' and ../../l2vpn:name";
                          type leafref {
                            path "/evpn:evpn/evpn:site/evpn:static-esis/evpn:static-esi/evpn:esi";
                          }
                          must
                            "/evpn:evpn/evpn:site/evpn:static-esis/evpn:static-esi[evpn:esi=current()/../evpn:esi]/evpn:redundancy-mode='single-active'";
                          description
                            "Static ESI, in the format of 00xx.xxxx.xxxx.xxxx.xxxx, in which x ranges from 0 to F. A static ESI cannot be all 0s.";
                        }
    
                        leaf state {
                          type l2vpn-pw-state;
                          config false;
                          description
                            "PW state.";
                        }
                      }  // container evpn
    
                      container encapsulation-vlan {
                        when
                          "../../../../l2vpn:work-mode ='bd-mode' and ../l2vpn:name";
                        description
                          "Configure the encapsulation VLAN pass of a PW.";
                        leaf vlan-pass {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the VLAN pass.";
                        }
                      }  // container encapsulation-vlan
    
                      container qos-parameter {
                        when "../l2vpn:name";
                        must "cir<=pir" {
                          error-message
                            "The pir value is less than cir value.";
                        }
                        must
                          "not(cir=0 and pir=0)" {
                          error-message
                            "The cir and pir value can not be zero at same time.";
                        }
                        must
                          "not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance[l2vpn:name=current()/../../../../../l2vpn:name][l2vpn:type='vpls']/l2vpn:vpls/l2vpn-extension:qos-parameter)";
                        presence
                          "enable QoS for pw";
                        description
                          "Enable/disable the QoS parameter information.";
                        leaf cir {
                          type uint32 {
                            range
                              "0 | 16..4294967294";
                          }
                          units "kbit/s";
                          default "0";
                          description
                            "Specify the CIR.";
                        }
    
                        leaf pir {
                          type uint32 {
                            range
                              "0 | 16..4294967294";
                          }
                          units "kbit/s";
                          description
                            "Specify the PIR.";
                        }
    
                        leaf profile-name {
                          when "../pir>0";
                          type leafref {
                            path "/qos:qos/qos:queue-scheduler-template/qos:profiles/qos:profile/qos:name";
                          }
                          description
                            "Specify the name of QoS profile.";
                        }
                      }  // container qos-parameter
    
                      container qos-traffic-statistics {
                        config false;
                        description
                          "Operational data of QoS traffic statistics table.";
                        leaf last-clear-time {
                          type string {
                            length "1..60";
                          }
                          description
                            "Last time of clean out.";
                        }
    
                        leaf bits-rate {
                          type uint64;
                          units "bit/s";
                          description
                            "The traffic bits rate received on the PW.";
                        }
    
                        leaf packets-rate {
                          type uint64;
                          units "pps";
                          description
                            "The traffic packet rate received on the PW.";
                        }
    
                        leaf output-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "The traffic bytes transmitted out of the PW.";
                        }
    
                        leaf output-packets {
                          type uint64;
                          units "packet";
                          description
                            "The traffic packets transmitted out of the PW.";
                        }
    
                        container qos-querys {
                          description
                            "List of the QoS traffic-statistics.";
                          list qos-query {
                            key "query";
                            description
                              "Indicates the query table of the QoS traffic statistics.";
                            leaf query {
                              type qos-query-type;
                              description
                                "Indicates the query of the QoS traffic statistics.";
                            }
    
                            leaf packets {
                              type uint64;
                              units "packet";
                              description
                                "The total number of output packets.";
                            }
    
                            leaf bytes {
                              type uint64;
                              units "Byte";
                              description
                                "The total number of output bytes.";
                            }
    
                            leaf packets-rate {
                              type uint64;
                              units "pps";
                              description
                                "The last 300 seconds packets rate.";
                            }
    
                            leaf bits-rate {
                              type uint64;
                              units "bit/s";
                              description
                                "The last 300 seconds bits rate.";
                            }
    
                            leaf discard-packets {
                              type uint64;
                              units "packet";
                              description
                                "The total discard number of the packets.";
                            }
    
                            leaf discard-bytes {
                              type uint64;
                              units "Byte";
                              description
                                "The total discard number of the bytes.";
                            }
    
                            leaf discard-packets-rate {
                              type uint64;
                              units "pps";
                              description
                                "The last 300 seconds discard packets rate.";
                            }
    
                            leaf discard-bit-rate {
                              type uint64;
                              units "bit/s";
                              description
                                "The last 300 seconds discard bits rate.";
                            }
                          }  // list qos-query
                        }  // container qos-querys
                      }  // container qos-traffic-statistics
    
                      container track-vrrp {
                        ext:operation-exclude "update";
                        when
                          "../../../../l2vpn:work-mode='bd-mode'";
                        presence
                          "enable pw track vrrp";
                        description
                          "Configure VRRP parameter list.";
                        leaf vrrp-interface-name {
                          type leafref {
                            path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                          }
                          must
                            "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ip:ipv4/vrrp:vrrp/vrrp:groups/vrrp:group[vrrp:id=current()/../vrrp-vrid]/vrrp:admin-flag or
    /ni:network-instance/ni:instances/ni:instance/vrrp:vrrp/vrrp:groups/vrrp:group[vrrp:id=current()/../vrrp-vrid]/vrrp:admin-flag";
                          mandatory true;
                          description
                            "VRRP interface.";
                        }
    
                        leaf vrrp-vrid {
                          type uint32 {
                            range "1..255";
                          }
                          mandatory true;
                          description
                            "VRID of a VRRP backup group.";
                        }
    
                        leaf pw-redundancy {
                          type boolean;
                          must
                            "../pw-redundancy='true'";
                          default "true";
                          description
                            "Enable/disable VRRP PW redundancy mode.";
                        }
    
                        leaf backup-block-all {
                          type boolean;
                          must
                            "../backup-block-all='true'";
                          default "true";
                          description
                            "Enable/disable block the traffic on the backup PW.";
                        }
                      }  // container track-vrrp
    
                      container mac-flapping {
                        when "../l2vpn:name";
                        description
                          "Configure MAC flapping attribute.";
                        container block-priority {
                          must
                            "../../../../../l2vpn:work-mode!='i-vsi-b-evpn-interworking'";
                          presence
                            "Blocking priority configuration.";
                          description
                            "Configure Blocking priority.";
                          leaf priority {
                            type uint32 {
                              range "1..4";
                            }
                            mandatory true;
                            description
                              "Priority value.";
                          }
                        }  // container block-priority
                      }  // container mac-flapping
                    }  // list pw
                  }  // container pws
    
                  container redundancy-protect-groups {
                    when "../vsi-id";
                    description
                      "List of VPLS PW protection groups.";
                    list redundancy-protect-group {
                      key "name";
                      max-elements 32;
                      description
                        "Configure VPLS PW protection groups.";
                      leaf name {
                        type l2vpn-protect-group-name;
                        description
                          "Name of a PW protection group. The name is a string of case-sensitive characters.";
                      }
    
                      leaf protect-mode {
                        type vpls-redundancy-mode;
                        default "none";
                        description
                          "Switching mode of the PW protection group.";
                      }
    
                      leaf dual-receive {
                        when
                          "../protect-mode!='none'";
                        type boolean;
                        default "false";
                        description
                          "Enable/disable the receipt of both the primary and secondary PWs.";
                      }
    
                      leaf holdoff {
                        when
                          "../protect-mode='master'";
                        type uint16 {
                          range "1..180";
                        }
                        units "s";
                        description
                          "Hold time for traffic switching.";
                      }
    
                      container reroute-policy {
                        when
                          "../protect-mode='master'";
                        description
                          "Configure a switchback policy.";
                        leaf policy {
                          type l2vpn-reroute-mode;
                          default "delay";
                          description
                            "Switchback policy.";
                        }
    
                        leaf delay-time {
                          when
                            "../policy='delay'";
                          type uint32 {
                            range "10..10800";
                          }
                          units "s";
                          default "30";
                          description
                            "Delay for switching traffic back to the primary PW.";
                        }
    
                        leaf last-switchback-time {
                          type string {
                            length "1..60";
                          }
                          config false;
                          description
                            "Last switchback time.";
                        }
    
                        leaf last-reroute-action {
                          type string {
                            length "1..100";
                          }
                          config false;
                          description
                            "Last switchback action.";
                        }
    
                        leaf last-switchback-reason {
                          type string {
                            length "0..100";
                          }
                          config false;
                          description
                            "Last switchback reason.";
                        }
                      }  // container reroute-policy
    
                      container pw-members {
                        when
                          "not(../protect-mode='none')";
                        description
                          "List of PW members in a protection group.";
                        list pw-member {
                          must
                            "../../../../pws/pw[peer-ip=current()/peer-ip][negotiation-vc-id=current()/negotiation-vc-id][encapsulation-type=current()/encapsulation-type]";
                          key "peer-ip negotiation-vc-id encapsulation-type";
                          unique "preference";
                          max-elements 2;
                          description
                            "Configure PW members in a protection group.";
                          leaf peer-ip {
                            type inet:ipv4-address-no-zone;
                            description
                              "Peer IP address. The loopback IP address of a peer is usually used as the peer IP address.";
                          }
    
                          leaf negotiation-vc-id {
                            type uint32 {
                              range
                                "1..4294967295";
                            }
                            description
                              "PW ID used to uniquely identify a VC. The PW ID is usually used when both ends need to communicate but the VSI IDs on both ends are different.";
                          }
    
                          leaf encapsulation-type {
                            type l2vpn-vpls-ldp-pw-encap-type;
                            description
                              "Encapsulate type.";
                          }
    
                          leaf preference {
                            type uint32 {
                              range "1..32";
                            }
                            mandatory true;
                            description
                              "Priority of a PW in the PW protection group.";
                          }
    
                          leaf role {
                            type l2vpn-backup-mode;
                            config false;
                            description
                              "Primary/secondary status of a PW.";
                          }
    
                          leaf active-state {
                            type boolean;
                            default "false";
                            config false;
                            description
                              "Whether an interface is active.";
                          }
                        }  // list pw-member
                      }  // container pw-members
    
                      container historys {
                        config false;
                        description
                          "Operational data of historical switching information of PW protection groups.";
                        list history {
                          key "num";
                          max-elements 5;
                          description
                            "Operational data of historical switching information of a PW protection group.";
                          leaf num {
                            type uint32 {
                              range "1..5";
                            }
                            description
                              "Sequence number.";
                          }
    
                          leaf reroute-time {
                            type string {
                              length "1..60";
                            }
                            description
                              "Switchback time.";
                          }
    
                          leaf reroute-action {
                            type string {
                              length "1..100";
                            }
                            description
                              "Switchback action.";
                          }
    
                          leaf reroute-reason {
                            type string {
                              length "0..100";
                            }
                            description
                              "Switchback reason.";
                          }
                        }  // list history
                      }  // container historys
                    }  // list redundancy-protect-group
                  }  // container redundancy-protect-groups
    
                  container traffic-statistics {
                    config false;
                    description
                      "Operational data of traffic statistics.";
                    leaf last-cleared {
                      type string {
                        length "1..60";
                      }
                      description
                        "Time when traffic statistics were cleared the last time.";
                    }
    
                    leaf in-packets-rate {
                      type uint64;
                      description
                        "Rate of packets received.";
                    }
    
                    leaf out-packets-rate {
                      type uint64;
                      description
                        "Rate of packets sent.";
                    }
    
                    leaf in-packets {
                      type uint64;
                      description
                        "Number of packets received.";
                    }
    
                    leaf out-packets {
                      type uint64;
                      description
                        "Number of packets sent.";
                    }
    
                    leaf in-unicast-packets {
                      type uint64;
                      description
                        "Number of unicast packets received.";
                    }
    
                    leaf in-multicast-packets {
                      type uint64;
                      description
                        "Number of multicast packets received.";
                    }
    
                    leaf in-drop-packets {
                      type uint64;
                      description
                        "Number of packets received and then discarded.";
                    }
    
                    leaf out-unicast-packets {
                      type uint64;
                      description
                        "Number of unicast packets sent.";
                    }
    
                    leaf out-multicast-packets {
                      type uint64;
                      description
                        "Number of multicast packets sent.";
                    }
                  }  // container traffic-statistics
                }  // container ldp-signaling
    
                container bgp-signaling {
                  when
                    "../work-mode='normal' or ../work-mode='bd-mode'";
                  must
                    "../admin-vsi!='true' and not(../track-admin-vsi) and ../p2p-vsi!='true' and (../mac-remove-mode='invalid' or (../mac-remove-mode!='invalid' and ../ldp-signaling))";
                  must "not(../etree)";
                  presence
                    "Container for bgp protocol vpls instance.";
                  description
                    "Enable/disable BGP VSIs.";
                  leaf route-distinguisher {
                    type rd-value-type;
                    description
                      "Route distinguisher.";
                  }
    
                  leaf encapsulation-rfc4761-compatible {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of changing an encapsulation type.";
                  }
    
                  leaf encapsulation-vpls-family-compatible {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of changing an encapsulation type to private mode.";
                  }
    
                  leaf mtu-negotiate-disable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of ignoring MTU match between local VSI and remote VSI. The default implementation is match.";
                  }
    
                  leaf control-word {
                    type l2vpn-control-word;
                    must
                      "((../control-word='disable' or ../control-word='enable' ) )";
                    default "disable";
                    description
                      "Enable the control word feature. The control word feature is usually used for TDM, ATM, and FR PWs.";
                  }
    
                  leaf auto-route-distinguisher {
                    type rd-value-type;
                    config false;
                    description
                      "Automatic route distinguisher (RD). If no RD is configured for an L2VPN instance, you can specify an IPv4 address using the rd-ip parameter, based on which an RD is automatically generated in the format of 32-bit prefix IP address:index, for example, 192.168.122.15:1. An index is an integer automatically allocated by the system and ranges from 1 to 65535.Each L2VPN instance must use a unique RD.";
                  }
    
                  container sites {
                    description
                      "List of BGP sites.";
                    list site {
                      must
                        "not(site-id=0 and default-offset=1)";
                      key "site-id";
                      max-elements 1;
                      description
                        "Configure BGP sites.";
                      leaf site-id {
                        type uint32 {
                          range "0..65534";
                        }
                        description
                          "BGP site ID.";
                      }
    
                      leaf range {
                        type uint32 {
                          range "1..65535";
                        }
                        default "10";
                        description
                          "BGP site range. Cannot decrease site range.";
                      }
    
                      leaf default-offset {
                        ext:operation-exclude "update|delete";
                        type uint16 {
                          range "0..1";
                        }
                        default "0";
                        description
                          "The default offset of BGP site. The value of this node cannot be modified or deleted after being set.";
                      }
                    }  // list site
                  }  // container sites
    
                  container vpn-targets {
                    description
                      "List of VPN targets.";
                    list vpn-target {
                      key "rt-value rt-type";
                      max-elements 32;
                      description
                        "Configure VPN targets.";
                      leaf rt-value {
                        type rt-value-type;
                        description
                          "Route target. The format of an RT can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example: 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0.0:0.";
                      }
    
                      leaf rt-type {
                        type vpn-rt-type;
                        description
                          "RT type, which can be:
    - export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN.
    - import-extcommunity: receives routes that carry the specified extended community attribute value.";
                      }
                    }  // list vpn-target
                  }  // container vpn-targets
    
                  container flow-label {
                    presence
                      "enable flow-label for bgp signaling pws.";
                    description
                      "Enable/disable flow label capability of a PW.";
                    leaf ability {
                      type flow-label-ability;
                      must
                        ".!='default' and .!='disable'";
                      mandatory true;
                      description
                        "Flow label capability.";
                    }
    
                    leaf static {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the static flow label function.";
                    }
                  }  // container flow-label
    
                  container pws {
                    description
                      "List of VPLS BGP PWs.";
                    list pw {
                      must
                        "name or traffic-statistics-collection='true'";
                      key "peer-ip remote-site-id";
                      unique "name";
                      description
                        "Configure VPLS BGP PWs.";
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "Peer IP address.";
                      }
    
                      leaf remote-site-id {
                        type uint32 {
                          range "0..65534";
                        }
                        description
                          "Remote BGP site ID.";
                      }
    
                      leaf name {
                        type string {
                          length "1..15";
                        }
                        description "PW name.";
                      }
    
                      leaf traffic-statistics-collection {
                        type boolean;
                        must
                          ". = 'false' or not(../../../../traffic-statistics-collection = 'true' or ../../../../ldp-signaling/traffic-statistics-collection = 'true' or ../../../../ldp-signaling/pws/pw[traffic-statistics-collection != 'default'])";
                        default "false";
                        description
                          "Enable/disable the function to collect traffic statistics.";
                      }
    
                      container suppression-statisticss {
                        config false;
                        description
                          "List of suppression statistics.";
                        list suppression-statistics {
                          key "suppression-type";
                          description
                            "Operational data of suppression statistics.";
                          leaf suppression-type {
                            type suppression-type;
                            description
                              "Suppression statistics type.";
                          }
    
                          leaf cir {
                            type uint32;
                            description
                              "CIR value.";
                          }
    
                          leaf pir {
                            type uint32;
                            description
                              "PIR value.";
                          }
    
                          leaf cbs {
                            type uint32;
                            description
                              "CBS value.";
                          }
    
                          leaf pbs {
                            type uint32;
                            description
                              "PBS value.";
                          }
    
                          leaf passed-packets {
                            type uint64;
                            description
                              "Passed packets.";
                          }
    
                          leaf passed-bytes {
                            type uint64;
                            description
                              "Passed bytes.";
                          }
    
                          leaf discard-packets {
                            type uint64;
                            description
                              "Discard packets.";
                          }
    
                          leaf discard-bytes {
                            type uint64;
                            description
                              "Discard bytes.";
                          }
    
                          leaf passed-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Passed packet rate.";
                          }
    
                          leaf passed-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Passed bit rate.";
                          }
    
                          leaf discard-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Discard packet rate.";
                          }
    
                          leaf discard-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Discard bit rate.";
                          }
                        }  // list suppression-statistics
                      }  // container suppression-statisticss
                    }  // list pw
                  }  // container pws
    
                  container local-label-blocks {
                    config false;
                    description
                      "Operational data of local label blocks.";
                    list local-label-block {
                      key "offset";
                      description
                        "Operational data of local label blocks.";
                      leaf offset {
                        type uint16;
                        description
                          "BGP site offset.";
                      }
    
                      leaf label-start {
                        type uint32;
                        description
                          "Start of the label.";
                      }
    
                      leaf add-range {
                        type uint32;
                        description
                          "BGP site range.";
                      }
    
                      leaf site-base {
                        type uint32;
                        description
                          "Base of the site.";
                      }
                    }  // list local-label-block
                  }  // container local-label-blocks
    
                  container remote-label-blocks {
                    config false;
                    description
                      "Operational data of remote label blocks.";
                    list remote-label-block {
                      key "route-distinguisher site-id offset";
                      description
                        "Operational data of remote label blocks.";
                      leaf route-distinguisher {
                        type rd-value-type;
                        description
                          "Route distinguisher.";
                      }
    
                      leaf site-id {
                        type uint32 {
                          range "0..65534";
                        }
                        description
                          "BGP site ID.";
                      }
    
                      leaf offset {
                        type uint16;
                        description
                          "BGP site offset.";
                      }
    
                      leaf label-start {
                        type uint32;
                        description
                          "Start of the label.";
                      }
    
                      leaf add-range {
                        type uint32;
                        description
                          "BGP site range.";
                      }
                    }  // list remote-label-block
                  }  // container remote-label-blocks
    
                  container pw-infos {
                    config false;
                    description
                      "List of BGP PWs.";
                    list pw-info {
                      key "site-id offset";
                      description
                        "Operational data of the BGP PW list.";
                      leaf site-id {
                        type uint32 {
                          range "0..65534";
                        }
                        description
                          "BGP site ID.";
                      }
    
                      leaf offset {
                        type uint16;
                        description
                          "BGP site offset.";
                      }
    
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "BGP peer IP address.";
                      }
    
                      leaf pw-type {
                        type l2vpn-vpls-pw-type;
                        description
                          "PW type, which can be label, QinQ, or MEHVPLS.";
                      }
    
                      leaf pw-state {
                        type l2vpn-pw-state;
                        description "PW status.";
                      }
    
                      leaf local-vc-label {
                        type uint32;
                        description
                          "VC label allocated by the local device.";
                      }
    
                      leaf remote-vc-label {
                        type uint32;
                        description
                          "VC label allocated by the peer.";
                      }
    
                      leaf last-up-time {
                        type yang:date-and-time;
                        description
                          "Date and time when a PW was up for the last time, for example, 2012/07/20 02:30:46.";
                      }
    
                      leaf total-up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "Total duration when the PW is up.";
                      }
    
                      leaf c-key {
                        type uint32;
                        description
                          "Customer key. Each CKey corresponds to a PW.";
                      }
    
                      leaf n-key {
                        type uint32;
                        description
                          "Network key. Each NKey corresponds to a combination of the peer and tunnel policy.";
                      }
    
                      leaf broadcast-tunnel-key {
                        type string {
                          length "0..21";
                        }
                        description
                          "Tunnel ID used by a PW for broadcast.";
                      }
    
                      leaf stp-enable {
                        type boolean;
                        description
                          "Enable STP for PW.";
                      }
    
                      leaf mac-flapping-enable {
                        type pw-block-status;
                        description
                          "MAC flapping information.";
                      }
    
                      leaf main-pw-token {
                        type pub-type:hex-binary;
                        description
                          "Token of the primary PW.";
                      }
    
                      leaf backup-pw-token {
                        type pub-type:hex-binary;
                        description
                          "Token of the secondary PW.";
                      }
    
                      leaf receive-flow-label {
                        type flow-label-ability;
                        description
                          "Received flow label.";
                      }
    
                      leaf negotiate-flow-label {
                        type flow-label-ability;
                        description
                          "Negotiated flow label.";
                      }
    
                      leaf remote-control-word {
                        type l2vpn-control-word;
                        description
                          "Remote control word capability.";
                      }
    
                      leaf negotiate-control-word {
                        type l2vpn-control-word;
                        description
                          "Negotiated control word capability.";
                      }
    
                      container tunnels {
                        description
                          "List of VPLS PW tunnels.";
                        list tunnel {
                          key "tunnel-key";
                          max-elements 32;
                          description
                            "Operational data of VPLS PW tunnels.";
                          leaf tunnel-key {
                            type string {
                              length "0..21";
                            }
                            description
                              "Tunnel ID in hexadecimal notation that is assigned by the system.";
                          }
    
                          leaf tunnel-type {
                            type l2vpn-tunnel-type;
                            description
                              "Type of a tunnel.";
                          }
    
                          leaf out-interface {
                            type pub-type:if-name;
                            description
                              "Outbound interface of a PW.";
                          }
    
                          leaf tunnel-name {
                            type string {
                              length "0..64";
                            }
                            description
                              "Name of the tunnel used by the PW.";
                          }
    
                          leaf public-next-hop {
                            type inet:ipv4-address-no-zone;
                            description
                              "Public next hop of a PW.";
                          }
                        }  // list tunnel
                      }  // container tunnels
    
                      container traffic-statistics {
                        description
                          "Peer traffic statistics.";
                        leaf in-traffic-rate {
                          type uint64;
                          units "bit/s";
                          description
                            "Rate of traffic received by the PW.";
                        }
    
                        leaf out-traffic-rate {
                          type uint64;
                          units "bit/s";
                          description
                            "Rate of traffic sent by the PW.";
                        }
    
                        leaf in-frame-rate {
                          type uint64;
                          units "pps";
                          description
                            "Rate of frames received by the PW.";
                        }
    
                        leaf out-frame-rate {
                          type uint64;
                          units "pps";
                          description
                            "Rate of frames sent by the PW.";
                        }
    
                        leaf in-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of bytes received by the PW.";
                        }
    
                        leaf out-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of bytes sent by the PW.";
                        }
    
                        leaf in-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of frames received by the PW.";
                        }
    
                        leaf out-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of frames sent by the PW.";
                        }
    
                        leaf in-unicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of unicast frames received by the PW.";
                        }
    
                        leaf in-unicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of unicast bytes received by the PW.";
                        }
    
                        leaf in-multicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of multicast frames received by the PW.";
                        }
    
                        leaf in-multicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of multicast bytes received by the PW.";
                        }
    
                        leaf in-broadcast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of broadcast frames received by the PW.";
                        }
    
                        leaf in-broadcast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of broadcast bytes received by the PW.";
                        }
    
                        leaf out-unicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of unicast frames sent by the PW.";
                        }
    
                        leaf out-unicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of unicast bytes sent by the PW.";
                        }
    
                        leaf out-multicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of multicast frames sent by the PW.";
                        }
    
                        leaf out-multicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of multicast bytes sent by the PW.";
                        }
    
                        leaf out-broadcast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of broadcast frames sent by the PW.";
                        }
    
                        leaf out-broadcast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of broadcast bytes sent by the PW.";
                        }
    
                        leaf in-discard-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of frames received and then dropped by the PW.";
                        }
    
                        leaf reset-time {
                          type yang:date-and-time;
                          description
                            "Time when statistics were cleared the last time.";
                        }
                      }  // container traffic-statistics
                    }  // list pw-info
                  }  // container pw-infos
                }  // container bgp-signaling
    
                container bgp-multi-homing-signaling {
                  when "../work-mode='normal'";
                  must
                    "../admin-vsi!='true' and not(../track-admin-vsi) and ../p2p-vsi!='true' and ../mac-remove-mode='invalid'";
                  must "not(../etree)";
                  presence
                    "Container for bgp protocol vpls instance.";
                  description
                    "Configure BGP VSIs.";
                  leaf route-distinguisher {
                    type rd-value-type;
                    description
                      "Route distinguisher.";
                  }
    
                  leaf encapsulation-rfc4761-compatible {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the setting of an encapsulation type.";
                  }
    
                  leaf encapsulation-vpls-family-compatible {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the setting of an encapsulation type to private mode.";
                  }
    
                  leaf mtu-negotiate-disable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of ignoring MTU match between local VSI and remote VSI. The default implementation is match.";
                  }
    
                  leaf site-range {
                    type uint32 {
                      range "1..65535";
                    }
                    description
                      "BGP site range. Cannot decrease site range.";
                  }
    
                  leaf default-offset {
                    ext:operation-exclude "update|delete";
                    when "../site-range";
                    type uint16 {
                      range "0..1";
                    }
                    default "0";
                    description
                      "BGP site offset. The value of this node cannot be modified after being set.";
                  }
    
                  leaf control-word {
                    type l2vpn-control-word;
                    must
                      "(../control-word='disable' or ../control-word='enable')";
                    default "disable";
                    description
                      "Enable the control word feature. The control word feature is usually used for TDM, ATM, and FR PWs.";
                  }
    
                  leaf auto-route-distinguisher {
                    type rd-value-type;
                    config false;
                    description
                      "Automatic route distinguisher (RD). If no RD is configured for an L2VPN instance, you can specify an IPv4 address using the rd-ip parameter, based on which an RD is automatically generated in the format of 32-bit prefix IP address:index, for example, 192.168.122.15:1. An index is an integer automatically allocated by the system and ranges from 1 to 65535.Each L2VPN instance must use a unique RD.";
                  }
    
                  container default-site {
                    description
                      "Configure the default BGP multi-homing site.";
                    leaf name {
                      type vpls-multi-homing-site-name;
                      must "../name='default'";
                      default "default";
                      description
                        "BGP multi-homing default site name.";
                    }
    
                    leaf site-id {
                      type uint32 {
                        range "0..65534";
                      }
                      description
                        "BGP multi-homing default site ID.";
                    }
    
                    leaf preference {
                      when "../site-id";
                      type uint32 {
                        range "1..65535";
                      }
                      default "100";
                      description
                        "BGP multi-homing default site preference.";
                    }
    
                    leaf selected {
                      type boolean;
                      config false;
                      description
                        "BGP multi-homing default site selected flag.";
                    }
    
                    container remote-sites {
                      config false;
                      description
                        "Operational data of BGP multi-homing remote site information.";
                      list remote-site {
                        key "remote-site-id peer-ip";
                        description
                          "Operational data of BGP multi-homing remote site information.";
                        leaf remote-site-id {
                          type uint32;
                          description
                            "BGP multi-homing remote site ID.";
                        }
    
                        leaf peer-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "BGP multi-homing peer IP.";
                        }
                      }  // list remote-site
                    }  // container remote-sites
                  }  // container default-site
    
                  container sites {
                    description
                      "List of BGP multi-homing sites.";
                    list site {
                      key "name";
                      max-elements 512;
                      description
                        "Configure BGP multi-homing sites.";
                      leaf name {
                        type vpls-multi-homing-site-name;
                        must
                          "not(../name='default')";
                        description
                          "BGP multi-homing site name.";
                      }
    
                      leaf site-id {
                        type uint32 {
                          range "0..65534";
                        }
                        description
                          "BGP multi-homing site ID.";
                      }
    
                      leaf preference {
                        when "../site-id";
                        type uint32 {
                          range "1..65535";
                        }
                        default "100";
                        description
                          "BGP multi-homing site preference.";
                      }
    
                      leaf active-delay-time {
                        when
                          "../name!='default' and not(../best-site) and ../site-id";
                        type uint16 {
                          range "0..256";
                        }
                        units "s";
                        default "30";
                        description
                          "BGP multi-homing site active delay time.";
                      }
    
                      leaf recover-delay-time {
                        when
                          "../name!='default' and not(../best-site) and ../site-id";
                        type uint16 {
                          range "0..3600";
                        }
                        units "s";
                        default "180";
                        description
                          "BGP multi-homing site recover delay time.";
                      }
    
                      leaf best-site {
                        when
                          "../name!='default' and ../site-id";
                        type empty;
                        description
                          "BGP multi-homing best site.";
                      }
    
                      leaf selected {
                        type boolean;
                        config false;
                        description
                          "Selected flag of BGP multi-homing site.";
                      }
    
                      container remote-sites {
                        config false;
                        description
                          "Operational data of BGP multi-homing remote site information.";
                        list remote-site {
                          key "remote-site-id peer-ip";
                          description
                            "Operational data of BGP multi-homing remote site information.";
                          leaf remote-site-id {
                            type uint32;
                            description
                              "BGP multi-homing remote site ID.";
                          }
    
                          leaf peer-ip {
                            type inet:ipv4-address-no-zone;
                            description
                              "BGP multi-homing peer IP.";
                          }
                        }  // list remote-site
                      }  // container remote-sites
    
                      container ac-infos {
                        config false;
                        description
                          "List of BGP multi-homing AC information.";
                        list ac-info {
                          key "interface-name";
                          description
                            "Operational data of BGP multi-homing AC information.";
                          leaf interface-name {
                            type leafref {
                              path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                            }
                            description
                              "BGP multi-homing AC interface name.";
                          }
    
                          leaf ac-state {
                            type ac-state;
                            description
                              "BGP multi-homing AC state.";
                          }
    
                          leaf mflp-state {
                            type ac-block-status;
                            description
                              "BGP multi-homing MFLP block state.";
                          }
    
                          leaf block-state {
                            type ac-block-status;
                            description
                              "BGP multi-homing AC block state.";
                          }
                        }  // list ac-info
                      }  // container ac-infos
                    }  // list site
                  }  // container sites
    
                  container vpn-targets {
                    description
                      "List of VPN targets.";
                    list vpn-target {
                      key "rt-value rt-type";
                      max-elements 32;
                      description
                        "Configure VPN targets.";
                      leaf rt-value {
                        type rt-value-type;
                        description
                          "Route target. The format of an RT can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example: 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0.0:0.";
                      }
    
                      leaf rt-type {
                        type vpn-rt-type;
                        description
                          "RT type, which can be:
    - export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN.
    - import-extcommunity: receives routes that carry the specified extended community attribute value.";
                      }
                    }  // list vpn-target
                  }  // container vpn-targets
    
                  container pws {
                    description
                      "List of VPLS BGP multi-homing PWs.";
                    list pw {
                      must
                        "name or traffic-statistics-collection='true'";
                      key "peer-ip";
                      unique "name";
                      description
                        "Configure a VPLS BGP multi-homing PW.";
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "Peer IP address.";
                      }
    
                      leaf name {
                        type string {
                          length "1..15";
                        }
                        description "PW name.";
                      }
    
                      leaf traffic-statistics-collection {
                        type boolean;
                        must
                          ". = 'false' or not(../../../../traffic-statistics-collection = 'true')";
                        default "false";
                        description
                          "Enable/disable the function to collect traffic statistics.";
                      }
    
                      container suppression-statisticss {
                        config false;
                        description
                          "List of suppression statistics.";
                        list suppression-statistics {
                          key "suppression-type";
                          description
                            "Operational data of suppression statistics.";
                          leaf suppression-type {
                            type suppression-type;
                            description
                              "Suppression statistics type.";
                          }
    
                          leaf cir {
                            type uint32;
                            description
                              "CIR value.";
                          }
    
                          leaf pir {
                            type uint32;
                            description
                              "PIR value.";
                          }
    
                          leaf cbs {
                            type uint32;
                            description
                              "CBS value.";
                          }
    
                          leaf pbs {
                            type uint32;
                            description
                              "PBS value.";
                          }
    
                          leaf passed-packets {
                            type uint64;
                            description
                              "Passed packets.";
                          }
    
                          leaf passed-bytes {
                            type uint64;
                            description
                              "Passed bytes.";
                          }
    
                          leaf discard-packets {
                            type uint64;
                            description
                              "Discard packets.";
                          }
    
                          leaf discard-bytes {
                            type uint64;
                            description
                              "Discard bytes.";
                          }
    
                          leaf passed-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Passed packet rate.";
                          }
    
                          leaf passed-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Passed bit rate.";
                          }
    
                          leaf discard-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Discard packet rate.";
                          }
    
                          leaf discard-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Discard bit rate.";
                          }
                        }  // list suppression-statistics
                      }  // container suppression-statisticss
                    }  // list pw
                  }  // container pws
    
                  container pw-infos {
                    config false;
                    description
                      "List of BGP multi-homing PWs.";
                    list pw-info {
                      key "site-id offset";
                      description
                        "Operational data of BGP multi-homing PWs.";
                      leaf site-id {
                        type uint32 {
                          range "0..65534";
                        }
                        description
                          "BGP site ID.";
                      }
    
                      leaf offset {
                        type uint16;
                        description
                          "BGP site offset.";
                      }
    
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "BGP peer IP.";
                      }
    
                      leaf pw-type {
                        type l2vpn-vpls-pw-type;
                        description
                          "PW type, which can be label, QinQ, or MEHVPLS.";
                      }
    
                      leaf pw-state {
                        type l2vpn-pw-state;
                        description "PW status.";
                      }
    
                      leaf local-vc-label {
                        type uint32;
                        description
                          "VC label allocated by the local device.";
                      }
    
                      leaf remote-vc-label {
                        type uint32;
                        description
                          "VC label allocated by the peer.";
                      }
    
                      leaf last-up-time {
                        type yang:date-and-time;
                        description
                          "Date and time when a PW was up for the last time, for example, 2012/07/20 02:30:46.";
                      }
    
                      leaf total-up-time {
                        type string {
                          length "1..80";
                        }
                        description
                          "Total duration when the PW is up.";
                      }
    
                      leaf c-key {
                        type uint32;
                        description
                          "Customer key. Each CKey corresponds to a PW.";
                      }
    
                      leaf n-key {
                        type uint32;
                        description
                          "Network key. Each NKey corresponds to a combination of the peer and tunnel policy.";
                      }
    
                      leaf broadcast-tunnel-key {
                        type string {
                          length "0..21";
                        }
                        description
                          "Tunnel ID used by a PW for broadcast.";
                      }
    
                      leaf stp-enable {
                        type boolean;
                        description
                          "Enable STP for PW.";
                      }
    
                      leaf mac-flapping-enable {
                        type pw-block-status;
                        description
                          "MAC flapping information.";
                      }
    
                      leaf main-pw-token {
                        type pub-type:hex-binary;
                        description
                          "Token of the primary PW.";
                      }
    
                      leaf backup-pw-token {
                        type pub-type:hex-binary;
                        description
                          "Token of the secondary PW.";
                      }
    
                      leaf remote-control-word {
                        type l2vpn-control-word;
                        description
                          "Remote control word capability.";
                      }
    
                      leaf negotiate-control-word {
                        type l2vpn-control-word;
                        description
                          "Negotiated control word capability.";
                      }
    
                      container tunnels {
                        description
                          "List of VPLS PW tunnels.";
                        list tunnel {
                          key "tunnel-key";
                          max-elements 32;
                          description
                            "Operational data of a VPLS PW tunnel.";
                          leaf tunnel-key {
                            type string {
                              length "0..21";
                            }
                            description
                              "Tunnel ID in hexadecimal notation that is assigned by the system.";
                          }
    
                          leaf tunnel-type {
                            type l2vpn-tunnel-type;
                            description
                              "Type of a tunnel.";
                          }
    
                          leaf out-interface {
                            type pub-type:if-name;
                            description
                              "Outbound interface of a PW.";
                          }
    
                          leaf tunnel-name {
                            type string {
                              length "0..64";
                            }
                            description
                              "Name of the tunnel used by the PW.";
                          }
    
                          leaf public-next-hop {
                            type inet:ipv4-address-no-zone;
                            description
                              "Public next hop of a PW.";
                          }
                        }  // list tunnel
                      }  // container tunnels
    
                      container traffic-statistics {
                        description
                          "Peer traffic statistics.";
                        leaf in-traffic-rate {
                          type uint64;
                          units "bit/s";
                          description
                            "Rate of traffic received by the PW.";
                        }
    
                        leaf out-traffic-rate {
                          type uint64;
                          units "bit/s";
                          description
                            "Rate of traffic sent by the PW.";
                        }
    
                        leaf in-frame-rate {
                          type uint64;
                          units "pps";
                          description
                            "Rate of frames received by the PW.";
                        }
    
                        leaf out-frame-rate {
                          type uint64;
                          units "pps";
                          description
                            "Rate of frames sent by the PW.";
                        }
    
                        leaf in-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of bytes received by the PW.";
                        }
    
                        leaf out-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of bytes sent by the PW.";
                        }
    
                        leaf in-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of frames received by the PW.";
                        }
    
                        leaf out-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of frames sent by the PW.";
                        }
    
                        leaf in-unicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of unicast frames received by the PW.";
                        }
    
                        leaf in-unicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of unicast bytes received by the PW.";
                        }
    
                        leaf in-multicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of multicast frames received by the PW.";
                        }
    
                        leaf in-multicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of multicast bytes received by the PW.";
                        }
    
                        leaf in-broadcast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of broadcast frames received by the PW.";
                        }
    
                        leaf in-broadcast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of broadcast bytes received by the PW.";
                        }
    
                        leaf out-unicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of unicast frames sent by the PW.";
                        }
    
                        leaf out-unicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of unicast bytes sent by the PW.";
                        }
    
                        leaf out-multicast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of multicast frames sent by the PW.";
                        }
    
                        leaf out-multicast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of multicast bytes sent by the PW.";
                        }
    
                        leaf out-broadcast-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of broadcast frames sent by the PW.";
                        }
    
                        leaf out-broadcast-bytes {
                          type uint64;
                          units "Byte";
                          description
                            "Number of broadcast bytes sent by the PW.";
                        }
    
                        leaf in-discard-frames {
                          type uint64;
                          units "packet";
                          description
                            "Number of frames received and then dropped by the PW.";
                        }
    
                        leaf reset-time {
                          type yang:date-and-time;
                          description
                            "Time when statistics were cleared the last time.";
                        }
                      }  // container traffic-statistics
                    }  // list pw-info
                  }  // container pw-infos
    
                  container local-label-blocks {
                    config false;
                    description
                      "Operational data of local label blocks.";
                    list local-label-block {
                      key "offset";
                      description
                        "Operational data of local label blocks.";
                      leaf offset {
                        type uint16;
                        description
                          "BGP site offset.";
                      }
    
                      leaf label-start {
                        type uint32;
                        description
                          "Start of the label.";
                      }
    
                      leaf add-range {
                        type uint32;
                        description
                          "BGP site range.";
                      }
    
                      leaf site-base {
                        type uint32;
                        description
                          "Base of the site.";
                      }
                    }  // list local-label-block
                  }  // container local-label-blocks
    
                  container remote-sites {
                    config false;
                    description
                      "List of BGP multi-homing remote site information.";
                    list remote-site {
                      key "site-id route-distinguisher offset";
                      description
                        "Operational data of BGP multi-homing remote site information.";
                      leaf site-id {
                        type uint32;
                        description
                          "BGP multi-homing remote site ID.";
                      }
    
                      leaf route-distinguisher {
                        type rd-value-type;
                        description
                          "Route distinguisher.";
                      }
    
                      leaf offset {
                        type uint16;
                        description
                          "BGP site offset.";
                      }
    
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "The IP address of peer.";
                      }
    
                      leaf mtu {
                        type uint32;
                        description
                          "Maximum transmission unit.";
                      }
    
                      leaf encapsulation-type {
                        type vpls-bgp-encapsulation-type;
                        description
                          "The encapsulation type of remote PW.";
                      }
    
                      leaf label-start {
                        type uint32;
                        description
                          "Start of the label.";
                      }
    
                      leaf add-range {
                        type uint16;
                        description
                          "BGP site range.";
                      }
                    }  // list remote-site
                  }  // container remote-sites
                }  // container bgp-multi-homing-signaling
    
                container bgpad-signaling {
                  when
                    "(../work-mode='normal' or ../work-mode='bd-mode')";
                  must
                    "../admin-vsi!='true' and not(../track-admin-vsi) and ../p2p-vsi !='true'";
                  must "not(../etree)";
                  presence
                    "Container for bgpad protocol vpls instance.";
                  description
                    "Enable/disable BGP AD VSI.";
                  leaf vpls-id {
                    ext:operation-exclude "update";
                    type vpls-id-type;
                    description
                      "VPLS domain ID. The format of a VPLS domain ID can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the VPLS domain ID cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the VPLS domain ID cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example: 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the VPLS domain ID cannot be 0.0:0.";
                  }
    
                  leaf split-horizon {
                    when "../vpls-id";
                    type vpls-split-horizon-mode-type;
                    default "hub";
                    description
                      "PW split horizon mode.";
                  }
    
                  leaf traffic-statistics-collection {
                    when "../vpls-id";
                    type boolean;
                    must
                      ". ='false' or not(../../traffic-statistics-collection='true' or ../../ldp-signaling/traffic-statistics-collection='true' or ../../ldp-signaling/pws/pw/traffic-statistics-collection!='default')";
                    default "false";
                    description
                      "Enable/disable traffic statistics collection.";
                  }
    
                  leaf route-distinguisher {
                    type rd-value-type;
                    config false;
                    description
                      "Route distinguisher.";
                  }
    
                  leaf vsi-id {
                    type inet:ipv4-address-no-zone;
                    config false;
                    description
                      "VSI ID. For a BGP AD VSI, the VSI ID is the IP address used by the local PE for signaling negotiation.";
                  }
    
                  container vpn-targets {
                    when "../vpls-id";
                    description
                      "List of VPN targets.";
                    list vpn-target {
                      key "rt-value rt-type";
                      max-elements 32;
                      description
                        "Configure VPN targets.";
                      leaf rt-value {
                        type rt-value-type;
                        description
                          "Route target. The format of an RT can be:
    - 16-bit AS number:32-bit user-defined number, for example, 1:3. An AS number ranges from 0 to 65535, and a user-defined number ranges from 0 to 4294967295. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - Integral 4-byte AS number:2-byte user-defined number, for example, 65537:3. An AS number ranges from 65536 to 4294967295. A user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0:0.
    - 32-bit IP address:16-bit user-defined number, for example: 192.168.122.15:1. The IP address ranges from 0.0.0.0 to 255.255.255.255, and the user-defined number ranges from 0 to 65535.
    - 32-bit AS number:16-bit user-defined number, for example, 10.11:3. An AS number ranges from 0.0 to 65535.65535, and a user-defined number ranges from 0 to 65535. The AS number and user-defined number cannot be both 0s. This means that the RT cannot be 0.0:0.";
                      }
    
                      leaf rt-type {
                        type vpn-rt-type;
                        description
                          "RT type, which can be:
    - export-extcommunity: specifies the value of the extended community attribute of the route from an outbound interface to the destination VPN.
    - import-extcommunity: receives routes that carry the specified extended community attribute value.";
                      }
                    }  // list vpn-target
                  }  // container vpn-targets
    
                  container pws {
                    when "../vpls-id";
                    description
                      "List of BGP AD PWs.";
                    list pw {
                      must
                        "name or traffic-statistics-collection";
                      key "peer-ip";
                      description
                        "Configure a BGP AD PW.";
                      leaf peer-ip {
                        type inet:ipv4-address-no-zone;
                        description
                          "Peer IP address.";
                      }
    
                      leaf name {
                        type string {
                          length "1..15";
                        }
                        description "PW name.";
                      }
    
                      leaf traffic-statistics-collection {
                        type boolean;
                        must
                          "not(../../../../ldp-signaling/traffic-statistics-collection = 'true')";
                        must
                          "not(../../../../ldp-signaling/pws/pw[traffic-statistics-collection != 'default'])";
                        must
                          ". != 'true' or (../../../../traffic-statistics-collection = 'false')";
                        description
                          "Enable/disable the function to collect traffic statistics.";
                      }
    
                      container suppression-statisticss {
                        config false;
                        description
                          "List of suppression statistics.";
                        list suppression-statistics {
                          key "suppression-type";
                          description
                            "Operational data of suppression statistics.";
                          leaf suppression-type {
                            type suppression-type;
                            description
                              "Suppression statistics type.";
                          }
    
                          leaf cir {
                            type uint32;
                            description
                              "CIR value.";
                          }
    
                          leaf pir {
                            type uint32;
                            description
                              "PIR value.";
                          }
    
                          leaf cbs {
                            type uint32;
                            description
                              "CBS value.";
                          }
    
                          leaf pbs {
                            type uint32;
                            description
                              "PBS value.";
                          }
    
                          leaf passed-packets {
                            type uint64;
                            description
                              "Passed packets.";
                          }
    
                          leaf passed-bytes {
                            type uint64;
                            description
                              "Passed bytes.";
                          }
    
                          leaf discard-packets {
                            type uint64;
                            description
                              "Discard packets.";
                          }
    
                          leaf discard-bytes {
                            type uint64;
                            description
                              "Discard bytes.";
                          }
    
                          leaf passed-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Passed packet rate.";
                          }
    
                          leaf passed-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Passed bit rate.";
                          }
    
                          leaf discard-packet-rate {
                            type uint64;
                            units "pps";
                            description
                              "Discard packet rate.";
                          }
    
                          leaf discard-bit-rate {
                            type uint64;
                            units "bit/s";
                            description
                              "Discard bit rate.";
                          }
                        }  // list suppression-statistics
                      }  // container suppression-statisticss
                    }  // list pw
                  }  // container pws
    
                  container peers {
                    config false;
                    description
                      "List of BGP AD peer.";
                    list peer {
                      key "peer-router-id";
                      max-elements 65536;
                      description
                        "Operational data of BGP AD peer.";
                      leaf peer-router-id {
                        type inet:ipv4-address-no-zone;
                        description
                          "Peer IP address.";
                      }
    
                      leaf vpls-id {
                        type vpls-id-type;
                        description
                          "VPLS domain ID.";
                      }
    
                      leaf saii {
                        type inet:ipv4-address-no-zone;
                        description
                          "Source attachment individual identifier.";
                      }
    
                      leaf taii {
                        type inet:ipv4-address-no-zone;
                        description
                          "Target attachment individual identifier.";
                      }
    
                      leaf peer-type {
                        type vpls-ldp-peer-type;
                        description
                          "Remote peer type, either dynamic or static.";
                      }
    
                      container pw-info {
                        config false;
                        description
                          "Operational data of BGP AD PW.";
                        leaf peer-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "BGP AD PW.";
                        }
    
                        leaf pw-type {
                          type l2vpn-vpls-pw-type;
                          description
                            "PW type, which can be label, QinQ, or MEHVPLS.";
                        }
    
                        leaf session-state {
                          type l2vpn-state;
                          description
                            "Status of the session between the local end and its peer. The value can be up or down. This item is displayed only when the VPLS type is Martini.";
                        }
    
                        leaf pw-state {
                          type l2vpn-pw-state;
                          description
                            "PW status.";
                        }
    
                        leaf local-vc-label {
                          type uint32;
                          description
                            "VC label allocated by the local device.";
                        }
    
                        leaf remote-vc-label {
                          type uint32;
                          description
                            "VC label allocated by the peer.";
                        }
    
                        leaf last-up-time {
                          type string {
                            length "1..80";
                          }
                          description
                            "Date and time when a PW was up for the last time, for example, 2012/07/20 02:30:46.";
                        }
    
                        leaf total-up-time {
                          type string {
                            length "1..80";
                          }
                          description
                            "Total duration when the PW is up.";
                        }
    
                        leaf c-key {
                          type uint32;
                          description
                            "Customer key. Each CKey corresponds to a PW.";
                        }
    
                        leaf n-key {
                          type uint32;
                          description
                            "Network key. Each NKey corresponds to a combination of the peer and tunnel policy.";
                        }
    
                        leaf broadcast-tunnel-key {
                          type string {
                            length "0..21";
                          }
                          description
                            "Tunnel ID used by a PW for broadcast.";
                        }
    
                        leaf stp-enable {
                          type boolean;
                          description
                            "Enable STP for PW.";
                        }
    
                        leaf mac-flapping-enable {
                          type pw-block-status;
                          description
                            "MAC flapping information.";
                        }
    
                        leaf main-pw-token {
                          type pub-type:hex-binary;
                          description
                            "Token of the primary PW.";
                        }
    
                        leaf backup-pw-token {
                          type pub-type:hex-binary;
                          description
                            "Token of the secondary PW.";
                        }
    
                        leaf remote-vccv-code {
                          type pub-type:hex-binary;
                          description
                            "Remote VCCV code.";
                        }
    
                        leaf pw-token-exceed {
                          type boolean;
                          default "false";
                          description
                            "Indicates whether the number of PW tokens exceeds the maximum limit.";
                        }
    
                        container tunnels {
                          config false;
                          description
                            "List of VPLS PW tunnel.";
                          list tunnel {
                            key "tunnel-key";
                            max-elements 32;
                            description
                              "Operational data of VPLS PW tunnel.";
                            leaf tunnel-key {
                              type string {
                                length "0..21";
                              }
                              description
                                "Tunnel ID in hexadecimal notation that is assigned by the system.";
                            }
    
                            leaf tunnel-type {
                              type l2vpn-tunnel-type;
                              description
                                "Type of a tunnel.";
                            }
    
                            leaf out-interface {
                              type string {
                                length "0..256";
                              }
                              description
                                "Outbound interface of a PW.";
                            }
    
                            leaf tunnel-name {
                              type string {
                                length "0..64";
                              }
                              description
                                "Name of the tunnel used by the PW.";
                            }
    
                            leaf public-next-hop {
                              type inet:ipv4-address-no-zone;
                              description
                                "Public next hop of a PW.";
                            }
                          }  // list tunnel
                        }  // container tunnels
                      }  // container pw-info
    
                      container traffic-statistics {
                        config false;
                        description
                          "Operational data of traffic statistics about PWs.";
                        leaf in-traffic-rate {
                          type uint64;
                          description
                            "Rate of traffic received by the PW.";
                        }
    
                        leaf out-traffic-rate {
                          type uint64;
                          description
                            "Rate of traffic sent by the PW.";
                        }
    
                        leaf in-frame-rate {
                          type uint64;
                          description
                            "Rate of frames received by the PW.";
                        }
    
                        leaf out-frame-rate {
                          type uint64;
                          description
                            "Rate of frames sent by the PW.";
                        }
    
                        leaf in-bytes {
                          type uint64;
                          description
                            "Number of bytes received by the PW.";
                        }
    
                        leaf out-bytes {
                          type uint64;
                          description
                            "Number of bytes sent by the PW.";
                        }
    
                        leaf in-frames {
                          type uint64;
                          description
                            "Number of frames received by the PW.";
                        }
    
                        leaf out-frames {
                          type uint64;
                          description
                            "Number of frames sent by the PW.";
                        }
    
                        leaf in-unicast-frames {
                          type uint64;
                          description
                            "Number of unicast frames received by the PW.";
                        }
    
                        leaf in-unicast-bytes {
                          type uint64;
                          description
                            "Number of unicast bytes received by the PW.";
                        }
    
                        leaf in-multicast-frames {
                          type uint64;
                          description
                            "Number of multicast frames received by the PW.";
                        }
    
                        leaf in-multicast-bytes {
                          type uint64;
                          description
                            "Number of multicast bytes received by the PW.";
                        }
    
                        leaf in-broadcast-frames {
                          type uint64;
                          description
                            "Number of broadcast frames received by the PW.";
                        }
    
                        leaf in-broadcast-bytes {
                          type uint64;
                          description
                            "Number of broadcast bytes received by the PW.";
                        }
    
                        leaf out-unicast-frames {
                          type uint64;
                          description
                            "Number of unicast frames sent by the PW.";
                        }
    
                        leaf out-unicast-bytes {
                          type uint64;
                          description
                            "Number of unicast bytes sent by the PW.";
                        }
    
                        leaf out-multicast-frames {
                          type uint64;
                          description
                            "Number of multicast frames sent by the PW.";
                        }
    
                        leaf out-multicast-bytes {
                          type uint64;
                          description
                            "Number of multicast bytes sent by the PW.";
                        }
    
                        leaf out-broadcast-frames {
                          type uint64;
                          description
                            "Number of broadcast frames sent by the PW.";
                        }
    
                        leaf out-broadcast-bytes {
                          type uint64;
                          description
                            "Number of broadcast bytes sent by the PW.";
                        }
    
                        leaf in-discard-frames {
                          type uint64;
                          description
                            "Number of frames received and then dropped by the PW.";
                        }
    
                        leaf reset-time {
                          type string {
                            length "1..60";
                          }
                          description
                            "Time when statistics were cleared the last time.";
                        }
                      }  // container traffic-statistics
                    }  // list peer
                  }  // container peers
                }  // container bgpad-signaling
    
                container acs {
                  when "../work-mode!='bd-mode'";
                  must "../work-mode!='b-vsi'";
                  description
                    "List of VPLS ACs.";
                  list ac {
                    key "interface-name";
                    description
                      "Configure a VPLS AC.";
                    leaf interface-name {
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:link-protocol='ethernet'";
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:type!='PW-VE'";
                      description
                        "Name of the AC interface bound to a VSI.";
                    }
    
                    leaf site-name {
                      when
                        "../../../bgp-multi-homing-signaling/sites/site/site-id";
                      type vpls-multi-homing-site-name;
                      must
                        "../../../bgp-multi-homing-signaling/sites/site[name=current()]";
                      must ".!='default'";
                      description
                        "BGP multi-homing site name. The value of this node cannot be changed after being configured.";
                    }
    
                    leaf hub-mode {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable an interface's support for the hub mode.";
                    }
    
                    leaf access-port {
                      ext:operation-exclude "update|delete";
                      type boolean;
                      must
                        "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='main-interface' or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../interface-name]/ifm:class='sub-interface' and ../access-port = 'false')";
                      default "false";
                      description
                        "Enable/disable the attribute that allows only untagged packets to pass through an interface.";
                    }
    
                    leaf etree-leaf {
                      when "../../../etree";
                      type boolean;
                      must
                        ".='false' or ../../../ldp-signaling";
                      default "false";
                      description
                        "Enable/disable e-tree leaf.";
                    }
    
                    leaf state {
                      type ac-state;
                      config false;
                      description
                        "Status of the AC interface bound to a VSI.";
                    }
    
                    leaf block-state {
                      type ac-block-status;
                      config false;
                      description
                        "AC block state.";
                    }
    
                    leaf last-up-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Date and time when the AC interface was up for the last time, for example, 2012/07/20 02:30:46.";
                    }
    
                    leaf total-up-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Total up time of the AC interface.";
                    }
    
                    leaf token-exceed {
                      type boolean;
                      default "false";
                      config false;
                      description
                        "Indicates whether the number of AC tokens exceeds the maximum limit.";
                    }
    
                    leaf oam-state {
                      type oam-state;
                      config false;
                      description
                        "OAM Status of the AC interface bound to a VSI.";
                    }
    
                    container igmp-snooping {
                      description
                        "Configure IGMP-snooping on VPLS AC interface.";
                      container static-router-port {
                        when
                          "/mc:multicast/ims:igmp-snooping/ims:global-enable and ((../../../../l2vpn:bgp-signaling and not(../../../../l2vpn:ldp-signaling)) or ../../../../l2vpn:bgp-multi-homing-signaling or (../../../../l2vpn:bgpad-signaling and ../../../../l2vpn:ipmsi/l2vpn:leaf and not(../../../../l2vpn:ipmsi/l2vpn:root)) or (not(../../../../l2vpn:bgpad-signaling) and not(../../../../l2vpn:bgp-signaling) and ../../../../l2vpn:ldp-signaling/l2vpn:vsi-id)) and ../../../../l2vpn:work-mode='normal'";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination)";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-stacking)";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-mapping)";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:vlan-type-policy/ethernet:policy-type='8021p')";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination/ethernet:dot1q-vlans-policy/ethernet:policy-vlans/ethernet:policy-vlan[ethernet:policy-type='8021p'])";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination/ethernet:dot1q-vlans-policy/ethernet:policy-vlan-groups/ethernet:policy-vlan-group[ethernet:policy-type='8021p'])";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:untag-policy)";
                        must
                          "not(/mc:multicast/ims:igmp-snooping/ims:instances/ims:instance/ims:user-instance-vsis/ims:user-instance-vsi[ims:vsi-name=current()/../../../../../l2vpn:name])";
                        presence
                          "static-router-port.";
                        description
                          "Configure static router port.";
                      }  // container static-router-port
    
                      container backup-report-forward {
                        when
                          "/mc:multicast/ims:igmp-snooping/ims:global-enable";
                        must
                          "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ifm:type='Eth-Trunk'";
                        must
                          "not (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-stacking)";
                        must
                          "not (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-mapping)";
                        presence
                          "backup-report-forward.";
                        description
                          "Configure backup interfaces that forward report to router port.";
                      }  // container backup-report-forward
    
                      container proxy-uplink-port {
                        when
                          "/mc:multicast/ims:igmp-snooping/ims:global-enable";
                        must
                          "(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:vlan-type-dot1q[ethernet:vlan-type-vid=current()/pe-vid] and not(./ce-vid)) or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ifm:class='main-interface' and not(./pe-vid) and not(./ce-vid)) or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination and ./pe-vid and not(./ce-vid)) or (/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination/ethernet:qinq-vids/ethernet:qinq-vid[ethernet:pe-vlan-begin<=current()/pe-vid][ethernet:pe-vlan-end>=current()/pe-vid] and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination/ethernet:qinq-vids/ethernet:qinq-vid[ethernet:ce-vlan-begin<=current()/ce-vid][ethernet:ce-vlan-end>=current()/ce-vid])";
                        must
                          "(../../../../ims:igmp-snooping/ims:global/ims:proxy-enable='true') or (../../../../ims:igmp-snooping/ims:global/ims:querier-enable='true')";
                        must
                          "not (../../../../ims:igmp-snooping/ims:proxy-uplink-port)";
                        presence
                          "proxy-uplink-port.";
                        description
                          "Configure a proxy uplink port.";
                        leaf pe-vid {
                          type uint32 {
                            range "1..4094";
                          }
                          description
                            "Outer VLAN ID.";
                        }
    
                        leaf ce-vid {
                          type uint32 {
                            range "1..4094";
                          }
                          description
                            "Inner VLAN ID.";
                        }
                      }  // container proxy-uplink-port
    
                      container limit-max-entry {
                        description
                          "Configure Layer 2 multicast entry limit of an AC interface.";
                        leaf config-entry {
                          type uint32 {
                            range "1..16384";
                          }
                          must
                            "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../l2vpn:interface-name]/ifm:type!='Vlanif'";
                          must
                            "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../../l2vpn:interface-name]/ifm:type!='IMEth'";
                          description
                            "Maximum number of entries that can be generated. VLANIF or IMETH interface does not support.";
                        }
    
                        leaf except-acl {
                          when "../config-entry";
                          type acl:acl4-identity;
                          must
                            "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                          description
                            "ACL used to prevent groups from being counted against the multicast group number limit. A basic ACL filters both (*, G) and (S, G) multicast entries, while an advanced ACL filters only (S, G) multicast entries.";
                        }
    
                        leaf current-entry {
                          type uint32 {
                            range "0..16384";
                          }
                          config false;
                          description
                            "Current entry statistics.";
                        }
                      }  // container limit-max-entry
                    }  // container igmp-snooping
    
                    container mld-snooping {
                      description
                        "Configure MLD-snooping on VPLS AC interface.";
                      container static-router-port {
                        when
                          "/mc:multicast/ims:mld-snooping/ims:global-enable and ../../../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../../../l2vpn:work-mode='normal'";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination)";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-stacking)";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-mapping)";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:vlan-type-policy/ethernet:policy-type='8021p')";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination/ethernet:dot1q-vlans-policy/ethernet:policy-vlans/ethernet:policy-vlan[ethernet:policy-type='8021p'])";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination/ethernet:dot1q-vlans-policy/ethernet:policy-vlan-groups/ethernet:policy-vlan-group[ethernet:policy-type='8021p'])";
                        must
                          "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:interface-name]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:untag-policy)";
                        must
                          "not(/mc:multicast/ims:igmp-snooping/ims:instances/ims:instance/ims:user-instance-vsis/ims:user-instance-vsi[ims:vsi-name=current()/../../../../../l2vpn:name])";
                        presence
                          "static-router-port.";
                        description
                          "Configure static router port.";
                      }  // container static-router-port
                    }  // container mld-snooping
    
                    container vpls-ac-suppression {
                      config false;
                      description
                        "Statistics of the VSI AC suppression.";
                      leaf time {
                        type string {
                          length "1..60";
                        }
                        config false;
                        description
                          "AC suppression time.";
                      }
    
                      leaf unicast-in-flag {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Unicast inbound suppression flag.";
                      }
    
                      leaf unicast-in-pass-packets {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast packets passed in the inbound direction of an AC interface.";
                      }
    
                      leaf unicast-in-pass-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast bytes passed in the inbound direction of an AC interface.";
                      }
    
                      leaf unicast-in-drop-packets {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast packets dropped in the inbound direction of an AC interface.";
                      }
    
                      leaf unicast-in-drop-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast bytes dropped in the inbound direction of an AC interface.";
                      }
    
                      leaf unicast-out-flag {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Unicast outbound suppression flag.";
                      }
    
                      leaf unicast-out-pass-packets {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast packets passed in the outbound direction of an AC interface.";
                      }
    
                      leaf unicast-out-pass-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast bytes passed in the outbound direction of an AC interface.";
                      }
    
                      leaf unicast-out-drop-packets {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast packets dropped in the outbound direction of an AC interface.";
                      }
    
                      leaf unicast-out-drop-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of unknown unicast bytes dropped in the outbound direction of an AC interface.";
                      }
    
                      leaf multicast-in-flag {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Multicast inbound suppression flag.";
                      }
    
                      leaf multicast-in-pass-packets {
                        type uint64;
                        config false;
                        description
                          "Number of multicast packets passed in the inbound direction of an AC interface.";
                      }
    
                      leaf multicast-in-pass-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of multicast bytes passed in the inbound direction of an AC interface.";
                      }
    
                      leaf multicast-in-drop-packets {
                        type uint64;
                        config false;
                        description
                          "Number of multicast packets dropped in the inbound direction of an AC interface.";
                      }
    
                      leaf multicast-in-drop-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of multicast bytes dropped in the inbound direction of an AC interface.";
                      }
    
                      leaf multicast-out-flag {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Multicast outbound suppression flag.";
                      }
    
                      leaf multicast-out-pass-packets {
                        type uint64;
                        config false;
                        description
                          "Number of multicast packets passed in the outbound direction of an AC interface.";
                      }
    
                      leaf multicast-out-pass-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of multicast bytes passed in the outbound direction of an AC interface.";
                      }
    
                      leaf multicast-out-drop-packets {
                        type uint64;
                        config false;
                        description
                          "Number of multicast packets dropped in the outbound direction of an AC interface.";
                      }
    
                      leaf multicast-out-drop-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of multicast bytes dropped in the outbound direction of an AC interface.";
                      }
    
                      leaf broadcast-in-flag {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Broadcast inbound suppression flag.";
                      }
    
                      leaf broadcast-in-pass-packets {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast packets passed in the inbound direction of an AC interface.";
                      }
    
                      leaf broadcast-in-pass-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast bytes passed in the inbound direction of an AC interface.";
                      }
    
                      leaf broadcast-in-drop-packets {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast packets dropped in the inbound direction of an AC interface.";
                      }
    
                      leaf broadcast-in-drop-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast bytes dropped in the inbound direction of an AC interface.";
                      }
    
                      leaf broadcast-out-flag {
                        type boolean;
                        default "false";
                        config false;
                        description
                          "Broadcast outbound suppression flag.";
                      }
    
                      leaf broadcast-out-pass-packets {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast packets passed in the outbound direction of an AC interface.";
                      }
    
                      leaf broadcast-out-pass-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast bytes passed in the outbound direction of an AC interface.";
                      }
    
                      leaf broadcast-out-drop-packets {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast packets dropped in the outbound direction of an AC interface.";
                      }
    
                      leaf broadcast-out-drop-bytes {
                        type uint64;
                        config false;
                        description
                          "Number of broadcast bytes dropped in the outbound direction of an AC interface.";
                      }
                    }  // container vpls-ac-suppression
    
                    container ac-oam-mapping {
                      ext:operation-exclude "update";
                      when
                        "../../../l2vpn:work-mode='normal' and /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../l2vpn:interface-name]/ifm:class='sub-interface'";
                      presence
                        "enable ac oam mapping";
                      description
                        "Enable/disable OAM mapping.";
                      leaf type {
                        type ac-oam-mapping-type;
                        must
                          "../type='1ag' and ../md-name and ../ma-name";
                        mandatory true;
                        description
                          "VPLS OAM mapping type.";
                      }
    
                      leaf md-name {
                        when "../type='1ag'";
                        type string {
                          length "1..43";
                        }
                        description
                          "VPLS OAM mapping parameter MD name.";
                      }
    
                      leaf ma-name {
                        when "../type='1ag'";
                        type string {
                          length "1..43";
                        }
                        description
                          "VPLS OAM mapping parameter MA name.";
                      }
                    }  // container ac-oam-mapping
                  }  // list ac
                }  // container acs
    
                container bds {
                  when
                    "../work-mode='bd-mode' and (../ldp-signaling/vsi-id or ../bgp-signaling or ../bgpad-signaling/vpls-id)";
                  must "not(../etree)";
                  description
                    "List of VPLS BD ACs.";
                  list bd {
                    must
                      "(pw-tag and count(.)>1) or (not(count(.)>1))";
                    key "id";
                    unique "pw-tag";
                    description
                      "Configure VPLS BD ACs.";
                    leaf id {
                      type leafref {
                        path "/bd:bd/bd:instances/bd:instance/bd:id";
                      }
                      description "BD ID.";
                    }
    
                    leaf pw-tag {
                      type uint16 {
                        range "1..4094";
                      }
                      description "PW tag.";
                    }
    
                    leaf state {
                      type ac-state;
                      config false;
                      description
                        "Status of the AC interface bound to a VSI.";
                    }
    
                    leaf last-up-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Date and time when the AC interface was up for the last time, for example, 2012/07/20 02:30:46.";
                    }
    
                    leaf total-up-time {
                      type string {
                        length "1..60";
                      }
                      config false;
                      description
                        "Total up time of the AC interface.";
                    }
                  }  // list bd
                }  // container bds
    
                container pbb {
                  when
                    "../work-mode='b-vsi' or ../work-mode='i-vsi' or ../work-mode='i-vsi-p2p' or ../work-mode='i-vsi-b-evpn-interworking'";
                  must "../admin-vsi!='true'";
                  description
                    "Configure PBB VPLS.";
                  leaf i-tag {
                    when
                      "../../work-mode='i-vsi-b-evpn-interworking' or ../../work-mode='i-vsi' or ../../work-mode='i-vsi-p2p'";
                    type uint32 {
                      range "0..16777215";
                    }
                    description
                      "Tag defined in 802.1ah to identify a service instance.";
                  }
    
                  leaf backbone-source-mac {
                    when
                      "../../work-mode='b-vsi' or ../../work-mode='i-vsi' or ../../work-mode='i-vsi-p2p'";
                    type pub-type:mac-address;
                    description
                      "B-SMAC address.";
                  }
    
                  leaf backbone-destination-mac {
                    when
                      "../../work-mode='i-vsi' or ../../work-mode='i-vsi-p2p'";
                    type pub-type:mac-address;
                    description
                      "B-DMAC address.";
                  }
    
                  leaf mac-withdraw-rfc7361-compatible {
                    when
                      "../../work-mode='b-vsi'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable MAC withdraw messages that carry PBB B-MAC and I-tag TLVs in accordance with RFC 7361.";
                  }
    
                  leaf b-vsi {
                    type leafref {
                      path "/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance/l2vpn:name";
                    }
                    must
                      "/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance[l2vpn:name=current()][l2vpn:type='vpls']/l2vpn:vpls/l2vpn:work-mode='b-vsi' and ../../work-mode='i-vsi-p2p' and ../i-tag and ../backbone-destination-mac and ../backbone-source-mac";
                    description
                      "Name of the B-VSI instance to which the I-VSI is bound.";
                  }
    
                  leaf b-evpn {
                    type string {
                      length "1..31";
                    }
                    must
                      "../../work-mode='i-vsi-b-evpn-interworking' and ../i-tag";
                    description
                      "Name of the B-EVPN instance to which the I-VSI is bound.";
                  }
    
                  leaf learned-flag {
                    type vsi-pbb-learned-flag;
                    config false;
                    description
                      "B-MAC address learning result.";
                  }
    
                  leaf learned-in-label {
                    type uint32;
                    config false;
                    description
                      "Learned in-label.";
                  }
    
                  leaf learned-out-label {
                    type uint32;
                    config false;
                    description
                      "Learned out-label.";
                  }
    
                  container i-vsis {
                    config false;
                    description "List of I-VSI.";
                    list i-vsi {
                      key "vsi-name";
                      description
                        "Operational data of I-VSI.";
                      leaf vsi-name {
                        type string {
                          length "1..31";
                        }
                        description
                          "I-VSI name.";
                      }
                    }  // list i-vsi
                  }  // container i-vsis
                }  // container pbb
    
                container ipmsi {
                  when "../work-mode!='bd-mode'";
                  must
                    "../bgpad-signaling/vpls-id or ../bgp-multi-homing-signaling";
                  must "not(../etree)";
                  presence "enable ipmsi.";
                  description
                    "Enable/disable multicast VPLS.";
                  container root {
                    presence "root";
                    description
                      "Enable/disable the P2MP tunnel root.";
                    leaf data-switch-disable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable broadcast, unknown unicast, and multicast traffic's switching to a PW when a P2MP tunnel goes down.";
                    }
    
                    leaf mc-tunnel-type {
                      type multicast-tunnel-type;
                      default "invalid";
                      description
                        "P2MP tunnel type.";
                    }
    
                    leaf root-ip {
                      when
                        "../mc-tunnel-type='mldp-p2mp'";
                      type inet:ipv4-address-no-zone;
                      description
                        "Root IP address of a P2MP tunnel.";
                    }
    
                    leaf te-p2mp-dynamic {
                      when
                        "../mc-tunnel-type='te-p2mp'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable P2MP dynamic TE.";
                    }
    
                    leaf p2mp-template-name {
                      when
                        "../te-p2mp-dynamic='false' and ../mc-tunnel-type='te-p2mp'";
                      type string {
                        length "1..31";
                      }
                      description
                        "P2MP template name.";
                    }
    
                    leaf bfd-track-if-name {
                      when "../../../acs/ac";
                      type leafref {
                        path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                      }
                      description
                        "Name of the interface bound to a BFD session.";
                    }
    
                    leaf leaf-count {
                      type uint32 {
                        range "0..65535";
                      }
                      config false;
                      description
                        "Number of leaves.";
                    }
    
                    container tunnel {
                      config false;
                      description
                        "Operational data of tunnels.";
                      leaf ingress-lsr-id {
                        type inet:ipv4-address-no-zone;
                        description
                          "Ingress LSR ID.";
                      }
    
                      leaf state {
                        type l2vpn-state;
                        description
                          "P2MP tunnel status.";
                      }
    
                      leaf session-id {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "RSVP session ID.";
                      }
    
                      leaf p2mp-id {
                        type string {
                          length "0..10";
                        }
                        description
                          "P2MP session ID.";
                      }
    
                      leaf opaque-value {
                        type string {
                          length "0..4096";
                        }
                        description
                          "Original opaque value in a message. The value is displayed in the format of TLV.";
                      }
                    }  // container tunnel
    
                    container leafs {
                      config false;
                      description
                        "List of Leaf.";
                      list leaf {
                        key "peer-ip";
                        description
                          "Operational data of leafs.";
                        leaf peer-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "LSR ID of the remote device.";
                        }
                      }  // list leaf
                    }  // container leafs
                  }  // container root
    
                  container leaf {
                    presence "leaf";
                    description
                      "Enable/disable the leaf of a P2MP tunnel.";
                    leaf egress-count {
                      type uint64 {
                        range "0..65534";
                      }
                      config false;
                      description
                        "Number of P2MP tunnel egresses.";
                    }
    
                    container pw-protect-groups {
                      description
                        "List of PW protection groups.";
                      list pw-protect-group {
                        must
                          "../../../../bgpad-signaling";
                        key "primary-root-ip backup-root-ip";
                        description
                          "Configure a PW protection group.";
                        leaf primary-root-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the primary root.";
                        }
    
                        leaf backup-root-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the backup root.";
                        }
    
                        leaf wtr {
                          type uint32 {
                            range "0..600";
                          }
                          units "s";
                          default "30";
                          description
                            "Wait-to-Restore time.";
                        }
    
                        leaf primary-track-bfd {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the association between the primary root and a BFD session.";
                        }
    
                        leaf backup-track-bfd {
                          type boolean;
                          default "false";
                          description
                            "Enable/disable the association between the backup root and a BFD session.";
                        }
    
                        container primary {
                          config false;
                          description
                            "Operational data of primary root node.";
                          leaf valid {
                            type boolean;
                            default "false";
                            description
                              "The root is valid.";
                          }
    
                          leaf active-state {
                            type multicast-active-state;
                            description
                              "The root is active.";
                          }
    
                          leaf oam-protocol {
                            type multicast-oam-type;
                            description
                              "Root OAM protocol.";
                          }
    
                          leaf oam-state {
                            type oam-state;
                            description
                              "Root OAM status.";
                          }
                        }  // container primary
    
                        container backup {
                          config false;
                          description
                            "Operational data of backup root node.";
                          leaf valid {
                            type boolean;
                            default "false";
                            description
                              "The root is valid.";
                          }
    
                          leaf active-state {
                            type multicast-active-state;
                            description
                              "The root is active.";
                          }
    
                          leaf oam-protocol {
                            type multicast-oam-type;
                            description
                              "Root OAM protocol.";
                          }
    
                          leaf oam-state {
                            type oam-state;
                            description
                              "Root OAM status.";
                          }
                        }  // container backup
                      }  // list pw-protect-group
                    }  // container pw-protect-groups
    
                    container mldp-p2mp-tunnels {
                      config false;
                      description
                        "Operational data of mLDP P2MP tunnel.";
                      list mldp-p2mp-tunnel {
                        key "root-ip opaque-value";
                        max-elements 65536;
                        description
                          "Operational data of tunnel information on a leaf node.";
                        leaf root-ip {
                          type inet:ipv4-address-no-zone;
                          description
                            "Root IP address of a P2MP tunnel.";
                        }
    
                        leaf opaque-value {
                          type string {
                            length "0..21";
                          }
                          description
                            "Original opaque value in a message. The value is displayed in the format of TLV.";
                        }
    
                        leaf state {
                          type l2vpn-state;
                          description
                            "P2MP tunnel status.";
                        }
                      }  // list mldp-p2mp-tunnel
                    }  // container mldp-p2mp-tunnels
    
                    container te-p2mp-tunnels {
                      config false;
                      description
                        "Operational data of te P2MP tunnel.";
                      list te-p2mp-tunnel {
                        key "ingress-lsr-id session-id p2mp-id";
                        max-elements 65536;
                        description
                          "Operational data of tunnel information on a leaf node.";
                        leaf ingress-lsr-id {
                          type inet:ipv4-address-no-zone;
                          description
                            "Ingress LSR ID.";
                        }
    
                        leaf session-id {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "RSVP session ID.";
                        }
    
                        leaf p2mp-id {
                          type string {
                            length "0..14";
                          }
                          description
                            "P2MP session ID.";
                        }
    
                        leaf state {
                          type l2vpn-state;
                          description
                            "P2MP tunnel status.";
                        }
                      }  // list te-p2mp-tunnel
                    }  // container te-p2mp-tunnels
                  }  // container leaf
                }  // container ipmsi
    
                container mac-withdraw-loop-detect {
                  config false;
                  description
                    "Operational data of MAC withdraw loop detection information.";
                  leaf last-loop-type {
                    type vpls-loop-detect-type;
                    description
                      "Type of the last loop detected by MAC withdraw loop detection.";
                  }
    
                  leaf send-peer {
                    type inet:ipv4-address-no-zone;
                    description
                      "Transmit peer for MAC withdraw loop detection.";
                  }
    
                  leaf receive-peer {
                    type inet:ipv4-address-no-zone;
                    description
                      "Receive peer for MAC withdraw loop detection.";
                  }
    
                  leaf last-loop-time {
                    type string {
                      length "1..80";
                    }
                    description
                      "Time when MAC withdraw loop detection detected the last loop.";
                  }
                }  // container mac-withdraw-loop-detect
    
                container down-causes {
                  config false;
                  description
                    "Operational data of the down causes of the VSI.";
                  list down-cause {
                    key "down-cause-index";
                    description
                      "Statistics of the down causes of PWs.";
                    leaf down-cause-index {
                      type uint32;
                      description
                        "Sequence number of the PW down cause.";
                    }
    
                    leaf down-cause {
                      type string {
                        length "0..100";
                      }
                      description
                        "Indicates the down causes of the PW.";
                    }
                  }  // list down-cause
                }  // container down-causes
    
                container statistic {
                  config false;
                  description
                    "Operational data of L2VPN VPLS statistic.";
                  leaf up-pw-num {
                    type uint32;
                    description
                      "Number of the up state PW.";
                  }
    
                  leaf down-pw-num {
                    type uint32;
                    description
                      "Number of the down state PW.";
                  }
    
                  leaf backup-pw-num {
                    type uint32;
                    description
                      "Number of the backup state PW.";
                  }
    
                  leaf up-bfd-num {
                    type uint32;
                    description
                      "Number of the BFD notify up state PW.";
                  }
    
                  leaf down-bfd-num {
                    type uint32;
                    description
                      "Number of the BFD notify down state PW.";
                  }
    
                  leaf up-ac-num {
                    type uint32;
                    description
                      "Number of the up state AC.";
                  }
    
                  leaf down-ac-num {
                    type uint32;
                    description
                      "Number of the down state AC.";
                  }
    
                  leaf down-acoam-num {
                    type uint32;
                    description
                      "Number of the down state AC because of OAM.";
                  }
                }  // container statistic
    
                container ac-suppression-statisticss {
                  config false;
                  description
                    "List of VPLS AC Suppression statistics.";
                  list ac-suppression-statistics {
                    key "direction suppression-type";
                    description
                      "Operational data of suppression statistics about VPLS ACs.";
                    leaf direction {
                      type suppression-direction;
                      description
                        "Suppression statistics direction.";
                    }
    
                    leaf suppression-type {
                      type suppression-type;
                      description
                        "Suppression statistics type.";
                    }
    
                    leaf cir {
                      type uint32;
                      description "CIR value.";
                    }
    
                    leaf pir {
                      type uint32;
                      description "PIR value.";
                    }
    
                    leaf cbs {
                      type uint32;
                      description "CBS value.";
                    }
    
                    leaf pbs {
                      type uint32;
                      description "PBS value.";
                    }
    
                    leaf passed-packets {
                      type uint64;
                      description
                        "Passed packets.";
                    }
    
                    leaf passed-bytes {
                      type uint64;
                      description
                        "Passed bytes.";
                    }
    
                    leaf discard-packets {
                      type uint64;
                      description
                        "Discard packets.";
                    }
    
                    leaf discard-bytes {
                      type uint64;
                      description
                        "Discard bytes.";
                    }
    
                    leaf passed-packet-rate {
                      type uint64;
                      units "pps";
                      description
                        "Passed packet rate.";
                    }
    
                    leaf passed-bit-rate {
                      type uint64;
                      units "bit/s";
                      description
                        "Passed bit rate.";
                    }
    
                    leaf discard-packet-rate {
                      type uint64;
                      units "pps";
                      description
                        "Discard packet rate.";
                    }
    
                    leaf discard-bit-rate {
                      type uint64;
                      units "bit/s";
                      description
                        "Discard bit rate.";
                    }
                  }  // list ac-suppression-statistics
                }  // container ac-suppression-statisticss
    
                container mac-accounting {
                  when
                    "../l2vpn:work-mode='normal'";
                  description
                    "Configure VSI MAC accounting.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the flag of VSI MAC accounting.";
                  }
                }  // container mac-accounting
    
                container igmp-snooping {
                  description
                    "Configure Layer 2 multicast configurations in the VSI.";
                  container global {
                    when
                      "/mc:multicast/ims:igmp-snooping/ims:global-enable and ((../../l2vpn:bgp-signaling and not(../../l2vpn:ldp-signaling)) or ../../l2vpn:bgp-multi-homing-signaling or (../../l2vpn:bgpad-signaling and ../../l2vpn:ipmsi/l2vpn:leaf and not(../../l2vpn:ipmsi/l2vpn:root)) or (not(../../l2vpn:bgpad-signaling) and not(../../l2vpn:bgp-signaling) and ../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../l2vpn:p2p-vsi='false')) and ../../l2vpn:work-mode='normal'";
                    description
                      "Configure Layer 2 multicast in the VSI.";
                    leaf ssm-policy-acl {
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                      description
                        "SSM group range policy.";
                    }
    
                    leaf version {
                      type uint32 {
                        range "1..3";
                      }
                      default "2";
                      description
                        "Layer 2 multicast version on an interface.";
                    }
    
                    leaf ssm-mapping-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable SSM mapping.";
                    }
    
                    leaf ssm-mapping-policy {
                      when
                        "../ssm-mapping-enable='true'";
                      type string {
                        length "1..31";
                      }
                      must
                        "not(../../ssm-mapping-groups/ssm-mapping-group)";
                      description
                        "Configure a policy for SSM mapping.";
                    }
    
                    leaf enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable Layer 2 multicast snooping in the VSI.";
                    }
    
                    leaf group-policy-acl {
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "Layer 2 multicast group policy.";
                    }
    
                    leaf group-policy-version {
                      when "../group-policy-acl";
                      type uint32 {
                        range "1..3";
                      }
                      description
                        "A group policy applies only to a specified layer 2 multicast version.";
                    }
    
                    leaf max-response-time {
                      type uint32 {
                        range "1..127";
                      }
                      units "s";
                      default "10";
                      description
                        "Maximum response time for a Layer 2 multicast Query message. This time is used to control the deadline for user hosts to send Report messages.";
                    }
    
                    leaf immediately-leave {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable prompt-leave. Prompt-Leave allows an interface to immediately delete a group record after receiving a Leave message for this group, without sending a last-member query message.";
                    }
    
                    leaf immediately-leave-acl {
                      when
                        "../immediately-leave='true'";
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "ACL used to control the applicable range of layer 2 multicast prompt-leave.";
                    }
    
                    leaf proxy-enable {
                      type boolean;
                      must
                        "../proxy-enable='false' or (../querier-enable='false' and ../report-suppress='false' and ../packet-encapsulation-raw='false')";
                      default "false";
                      description
                        "Enable/disable Layer 2 multicast snooping proxy.";
                    }
    
                    leaf multicast-group-model {
                      type snooping-mode;
                      default "asm-ssm";
                      description
                        "Layer 2 multicast group join mode.";
                    }
    
                    leaf ip-policy-acl {
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "IP filter policy.";
                    }
    
                    leaf query-ip-policy-acl {
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "Querier IP policy.";
                    }
    
                    leaf querier-election {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable Layer 2 multicast querier election.";
                    }
    
                    leaf proxy-router-protocol-pass {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a Layer 2 multicast snooping proxy-enabled device to transparently transmit Layer 2 multicast Report messages.";
                    }
    
                    leaf querier-enable {
                      type boolean;
                      must
                        "../querier-enable='false' or (../proxy-enable='false' and ../packet-encapsulation-raw='false')";
                      default "false";
                      description
                        "Enable/disable a Layer 2 multicast querier.";
                    }
    
                    leaf query-interval {
                      type uint32 {
                        range "1..65535";
                      }
                      units "s";
                      default "60";
                      description
                        "Interval at which a device sends General Query messages.";
                    }
    
                    leaf require-router-alert {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a device to permit only Layer 2 multicast messages that contain the Router-Alert option in the IP header.";
                    }
    
                    leaf send-router-alert {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable a device to permit only Layer 2 multicast messages that contain the Router-Alert option in the IP header.";
                    }
    
                    leaf robustness {
                      type uint32 {
                        range "2..5";
                      }
                      default "2";
                      description
                        "Number of times for retransmitting a message to avoid packet loss.";
                    }
    
                    leaf router-aging-time {
                      type uint32 {
                        range "1..1000";
                      }
                      units "s";
                      default "180";
                      description
                        "Aging time of dynamic router ports. The aging time of a dynamic router port is default value or equals to the holdtime value contained in a PIM Hello packet.";
                    }
    
                    leaf router-port-learning {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable dynamic router port learning.";
                    }
    
                    leaf last-member-query-interval {
                      type uint32 {
                        range "1..5";
                      }
                      units "s";
                      default "1";
                      description
                        "Interval at which a last-member query message is sent.";
                    }
    
                    leaf static-group-suppress-dynamic-join {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a Layer 2 device from sending Layer 2 multicast Report and Leave messages of a group that has been configured as a static group on the upstream device.";
                    }
    
                    leaf report-suppress {
                      type boolean;
                      must
                        "../report-suppress='false' or ../proxy-enable='false'";
                      default "false";
                      description
                        "Enable/disable the function of suppressing Layer 2 multicast Report messages.";
                    }
    
                    leaf source-life-time {
                      type uint32 {
                        range "60..1000";
                      }
                      units "s";
                      default "210";
                      description
                        "Aging time for entries triggered by multicast flows.";
                    }
    
                    leaf limit-max-entry {
                      when
                        "not(../../../l2vpn:bgp-signaling)";
                      type uint32 {
                        range "1..16384";
                      }
                      description
                        "Maximum number of entries that can be generated.";
                    }
    
                    leaf limit-except-acl {
                      when "../limit-max-entry";
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "ACL used to prevent groups from being counted against the multicast group number limit. A basic ACL filters both (*, G) and (S, G) multicast entries, while an advanced ACL filters only (S, G) multicast entries.";
                    }
    
                    leaf backup-query-forward {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the function of forwarding Layer 2 multicast query packet to backup PW.";
                    }
    
                    leaf backup-query-source-mac-replace {
                      when
                        "../backup-query-forward='true'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the function of replacing MAC address when forwarding query packet to backup PW.";
                    }
    
                    leaf backup-report-forward {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the function of forwarding report packet received from backup PW.";
                    }
    
                    leaf backup-report-source-mac-replace {
                      when
                        "../backup-report-forward='true'";
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the function of replacing MAC address when forwarding report packet received from backup PW.";
                    }
    
                    leaf dynamic-trunk-bandwidth-lose-mode {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable dynamic Eth-Trunk bandwidth limit lose mode.";
                    }
    
                    leaf pim-forward-to-router-port-only {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable PIM messages forwarding to router port only.";
                    }
    
                    leaf qinq-stacking-listen {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable listening report from qinq-stacking interface in the VSI, by default, igmp-snooping enable in the VSI will be conflict with the qinq-stacking interface binding vsi.";
                    }
    
                    leaf qinq-stacking-copy-mode {
                      when
                        "../qinq-stacking-listen='true'";
                      type copy-mode;
                      default "invalid";
                      description
                        "Specify the qinq-stacking interface copy mode, by default, the traffic will not be forward to the qinq-stacking interface.";
                    }
    
                    leaf qinq-mapping-listen {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable listening report from qinq-mapping interface in the VSI, by default, igmp-snooping enable in the VSI will be conflict with the qinq-mapping interface binding vsi.";
                    }
    
                    leaf qinq-mapping-copy-mode {
                      when
                        "../qinq-mapping-listen='true'";
                      type copy-mode;
                      default "invalid";
                      description
                        "Specify the qinq-mapping interface copy mode, by default, the traffic will not be forward to the qinq-mapping interface.";
                    }
    
                    leaf user-info-delete-delay-time {
                      type uint32 {
                        range "0..300";
                      }
                      units "s";
                      default "70";
                      description
                        "The user information delete delay time of qinq statcking and qinq mapping interface.";
                    }
    
                    leaf pw-fast-control {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable PW fast control, do not delete entries fot PW ports when the PW state become down.";
                    }
    
                    leaf pw-fast-control-holdtime {
                      when
                        "../pw-fast-control='true'";
                      type uint32 {
                        range "5..120";
                      }
                      units "s";
                      description
                        "PW fast control holdtime.";
                    }
    
                    leaf packet-encapsulation-raw {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a device to reserve the original tag and add a new tag to the IGMP Report packets when the packets are forwarded from L2VE sub-interface to L3VE QinQ termination sub-interface.";
                    }
                  }  // container global
    
                  container transparent-vlan {
                    when
                      "/mc:multicast/ims:igmp-snooping/ims:global-enable and (../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../l2vpn:p2p-vsi='false') and ../../l2vpn:work-mode='normal'";
                    must
                      "../global/report-suppress='false' and ../global/proxy-enable='false' and ../global/querier-enable='false'";
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:acs/l2vpn:ac/l2vpn:interface-name]/ifm:class!='sub-interface'";
                    must
                      "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../../l2vpn:acs/l2vpn:ac/l2vpn:interface-name]/ifm:type!='Vlanif'";
                    presence
                      "transparent-vlan enable";
                    description
                      "Enable/disable a device to transmit IGMP messages with VLAN tag transparently.";
                  }  // container transparent-vlan
    
                  container static-router-port {
                    description
                      "Configure static router port.";
                    container ldp-pws {
                      when
                        "/mc:multicast/ims:igmp-snooping/ims:global-enable and ../../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../../l2vpn:work-mode='normal'";
                      description
                        "List of router ports for VSIs.";
                      list ldp-pw {
                        key "remote-peer negotiation-vc-id";
                        description
                          "Configure a router port for a VSI.";
                        leaf remote-peer {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the peer end.";
                        }
    
                        leaf negotiation-vc-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          description
                            "Negotiation VC ID.";
                        }
                      }  // list ldp-pw
                    }  // container ldp-pws
    
                    container bgp-ad-pws {
                      when
                        "/mc:multicast/ims:igmp-snooping/ims:global-enable and ../../../l2vpn:ipmsi/l2vpn:leaf";
                      description
                        "Configure router ports for VSIs.";
                      leaf-list remoter-peer {
                        type inet:ipv4-address-no-zone;
                        description
                          "Configure IP address of the peer end.";
                      }
                    }  // container bgp-ad-pws
                  }  // container static-router-port
    
                  container proxy-uplink-port {
                    when
                      "/mc:multicast/ims:igmp-snooping/ims:global-enable";
                    description
                      "Configure IGMP/MLD snooping proxy uplink interfaces.";
                    container ldp-pws {
                      description
                        "List of router ports for VSIs.";
                      list ldp-pw {
                        must
                          "../../../ims:global/ims:proxy-enable='true' or ../../../ims:global/ims:querier-enable='true'";
                        must
                          "not (../../../../l2vpn:acs/l2vpn:ac/ims:igmp-snooping/ims:proxy-uplink-port)";
                        must
                          "../../../../l2vpn:work-mode='normal' and ../../../../l2vpn:ldp-signaling/l2vpn:vsi-id and not(../../../../l2vpn:bgp-signaling) and (not(../../../../l2vpn:bgpad-signaling) or (../../../../l2vpn:bgpad-signaling and ../../../../l2vpn:ipmsi/l2vpn:leaf and not(../../../../l2vpn:ipmsi/l2vpn:root)))";
                        must
                          "not (../../bgp-ad-pws)";
                        key "remote-peer negotiation-vc-id";
                        max-elements 1;
                        description
                          "Configure router ports for a VSI.";
                        leaf remote-peer {
                          type inet:ipv4-address-no-zone {
                            pattern
                              '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                          }
                          description
                            "IP address of the peer end.";
                        }
    
                        leaf negotiation-vc-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          description
                            "Negotiation VC ID.";
                        }
                      }  // list ldp-pw
                    }  // container ldp-pws
    
                    container bgp-ad-pws {
                      description
                        "Configure router ports for VSIs.";
                      leaf-list remoter-peer {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        must
                          "../../../ims:global/ims:proxy-enable='true' or ../../../ims:global/ims:querier-enable='true'";
                        must
                          "not (../../../../l2vpn:acs/l2vpn:ac/ims:igmp-snooping/ims:proxy-uplink-port)";
                        must
                          "(../../../../l2vpn:bgpad-signaling and ../../../../l2vpn:ipmsi/l2vpn:leaf and not(../../../../l2vpn:ipmsi/l2vpn:root)) or (../../../../l2vpn:bgp-multi-homing-signaling)";
                        must
                          "not (../../ldp-pws)";
                        max-elements 1;
                        description
                          "Configure IP address of the peer end.";
                      }
                    }  // container bgp-ad-pws
                  }  // container proxy-uplink-port
    
                  container ssm-mapping-groups {
                    when
                      "/mc:multicast/ims:igmp-snooping/ims:global-enable and ((../../l2vpn:bgp-signaling and not(../../l2vpn:ldp-signaling)) or ../../l2vpn:bgp-multi-homing-signaling or (../../l2vpn:bgpad-signaling and ../../l2vpn:ipmsi/l2vpn:leaf and not(../../l2vpn:ipmsi/l2vpn:root)) or (not(../../l2vpn:bgpad-signaling) and not(../../l2vpn:bgp-signaling) and ../../l2vpn:ldp-signaling/l2vpn:vsi-id)) and ../../l2vpn:work-mode='normal'";
                    description
                      "List of SSM mapping configurations.";
                    list ssm-mapping-group {
                      must
                        "not(../../global/ssm-mapping-policy)";
                      must
                        "not(/mc:multicast/ims:igmp-snooping/ims:instances/ims:instance/ims:user-instance-vsis/ims:user-instance-vsi[ims:vsi-name=current()/../../../../l2vpn:name])";
                      key "group-address mask-length source-address";
                      max-elements 128;
                      description
                        "Configure groups for which a device can immediately forward multicast data after receiving IGMP report messages.";
                      leaf group-address {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '(22[4-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        description
                          "Address of a multicast group.";
                      }
    
                      leaf mask-length {
                        type uint32 {
                          range "4..32";
                        }
                        description
                          "Mask length of a group address.";
                      }
    
                      leaf source-address {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                        }
                        description
                          "Multicast source IPv4 address.";
                      }
                    }  // list ssm-mapping-group
                  }  // container ssm-mapping-groups
                }  // container igmp-snooping
    
                container mld-snooping {
                  description
                    "Configure Layer 2 multicast MLD snooping in the VSI.";
                  container global {
                    when
                      "/mc:multicast/ims:mld-snooping/ims:global-enable and ../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../l2vpn:work-mode='normal'";
                    description
                      "Configure Layer 2 multicast in the VSI.";
                    leaf ssm-policy-acl {
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                      description
                        "SSM group range policy.";
                    }
    
                    leaf version {
                      type uint32 {
                        range "1..2";
                      }
                      default "2";
                      description
                        "Layer 2 multicast version on an interface.";
                    }
    
                    leaf ssm-mapping-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable SSM mapping.";
                    }
    
                    leaf ssm-mapping-policy {
                      when
                        "../ssm-mapping-enable='true'";
                      type string {
                        length "1..31";
                      }
                      must
                        "not(../../ssm-mapping-groups/ssm-mapping-group)";
                      description
                        "Configure a policy for SSM mapping.";
                    }
    
                    leaf enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable Layer 2 multicast snooping in the VSI.";
                    }
    
                    leaf group-policy-acl {
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "Layer 2 multicast group policy.";
                    }
    
                    leaf group-policy-version {
                      when "../group-policy-acl";
                      type uint32 {
                        range "1..2";
                      }
                      description
                        "A group policy applies only to a specified layer 2 multicast version.";
                    }
    
                    leaf max-response-time {
                      type uint32 {
                        range "1..25";
                      }
                      units "s";
                      default "10";
                      description
                        "Maximum response time for a Layer 2 multicast Query message. This time is used to control the deadline for user hosts to send Report messages.";
                    }
    
                    leaf immediately-leave {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable prompt-leave. Prompt-Leave allows an interface to immediately delete a group record after receiving a Leave message for this group, without sending a last-member query message.";
                    }
    
                    leaf immediately-leave-acl {
                      when
                        "../immediately-leave='true'";
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "ACL used to control the applicable range of layer 2 multicast prompt-leave.";
                    }
    
                    leaf proxy-enable {
                      type boolean;
                      must
                        "../proxy-enable='false' or (../querier-enable='false' and ../report-suppress='false' and ../packet-encapsulation-raw='false')";
                      default "false";
                      description
                        "Enable/disable Layer 2 multicast snooping proxy.";
                    }
    
                    leaf multicast-group-model {
                      type snooping-mode;
                      default "asm-ssm";
                      description
                        "Layer 2 multicast group join mode.";
                    }
    
                    leaf ip-policy-acl {
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "IP filter policy.";
                    }
    
                    leaf query-ip-policy-acl {
                      type leafref {
                        path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                      }
                      must
                        "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                      description
                        "Querier IP policy.";
                    }
    
                    leaf querier-election {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable Layer 2 multicast querier election.";
                    }
    
                    leaf proxy-router-protocol-pass {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a Layer 2 multicast snooping proxy-enabled device to transparently transmit Layer 2 multicast Report messages.";
                    }
    
                    leaf querier-enable {
                      type boolean;
                      must
                        "../querier-enable='false' or (../proxy-enable='false' and ../packet-encapsulation-raw='false')";
                      default "false";
                      description
                        "Enable/disable a Layer 2 multicast querier.";
                    }
    
                    leaf query-interval {
                      type uint32 {
                        range "1..65535";
                      }
                      units "s";
                      default "125";
                      description
                        "Interval at which a device sends General Query messages.";
                    }
    
                    leaf require-router-alert {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a device to permit only Layer 2 multicast messages that contain the Router-Alert option in the IP header.";
                    }
    
                    leaf send-router-alert {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable a device to permit only Layer 2 multicast messages that contain the Router-Alert option in the IP header.";
                    }
    
                    leaf robustness {
                      type uint32 {
                        range "2..5";
                      }
                      default "2";
                      description
                        "Number of times for retransmitting a message to avoid packet loss.";
                    }
    
                    leaf router-aging-time {
                      type uint32 {
                        range "1..1000";
                      }
                      units "s";
                      default "180";
                      description
                        "Aging time of dynamic router ports. The aging time of a dynamic router port is default value or equals to the holdtime value contained in a PIM Hello packet.";
                    }
    
                    leaf router-port-learning {
                      type boolean;
                      default "true";
                      description
                        "Enable/disable dynamic router port learning.";
                    }
    
                    leaf last-member-query-interval {
                      type uint32 {
                        range "1..5";
                      }
                      units "s";
                      default "1";
                      description
                        "Interval at which a last-member query message is sent.";
                    }
    
                    leaf static-group-suppress-dynamic-join {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a Layer 2 device from sending Layer 2 multicast Report and Leave messages of a group that has been configured as a static group on the upstream device.";
                    }
    
                    leaf report-suppress {
                      type boolean;
                      must
                        "../report-suppress='false' or ../proxy-enable='false'";
                      default "false";
                      description
                        "Enable/disable the function of suppressing Layer 2 multicast Report messages.";
                    }
    
                    leaf source-life-time {
                      type uint32 {
                        range "60..1000";
                      }
                      units "s";
                      default "210";
                      description
                        "Aging time for entries triggered by multicast flows.";
                    }
    
                    leaf packet-encapsulation-raw {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a device to reserve the original tag and add a new tag to the IGMP Report packets when the packets are forwarded from L2VE sub-interface to L3VE QinQ termination sub-interface.";
                    }
                  }  // container global
    
                  container static-router-port {
                    description
                      "Configure static router ports.";
                    container ldp-pws {
                      when
                        "/mc:multicast/ims:mld-snooping/ims:global-enable and ../../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../../l2vpn:work-mode='normal'";
                      description
                        "List of router ports for VSIs.";
                      list ldp-pw {
                        key "remote-peer negotiation-vc-id";
                        description
                          "Configure a router port for a VSI.";
                        leaf remote-peer {
                          type inet:ipv4-address-no-zone;
                          description
                            "IP address of the peer end.";
                        }
    
                        leaf negotiation-vc-id {
                          type uint32 {
                            range
                              "1..4294967295";
                          }
                          description
                            "Negotiation VC ID.";
                        }
                      }  // list ldp-pw
                    }  // container ldp-pws
                  }  // container static-router-port
    
                  container ssm-mapping-groups {
                    when
                      "/mc:multicast/ims:mld-snooping/ims:global-enable and ../../l2vpn:ldp-signaling/l2vpn:vsi-id and ../../l2vpn:work-mode='normal'";
                    description
                      "List of SSM mapping configurations.";
                    list ssm-mapping-group {
                      must
                        "not(../../global/ssm-mapping-policy)";
                      must
                        "not(/mc:multicast/ims:igmp-snooping/ims:instances/ims:instance[ims:vsi-name=current()/../../../../l2vpn:name])";
                      must
                        "not(/mc:multicast/ims:igmp-snooping/ims:instances/ims:instance/ims:user-instance-vsis/ims:user-instance-vsi[ims:vsi-name=current()/../../../../l2vpn:name])";
                      key "group-address mask-length source-address";
                      max-elements 128;
                      description
                        "Configure groups for which a device can immediately forward multicast data after receiving IGMP report messages.";
                      leaf group-address {
                        type inet:ipv6-address-no-zone {
                          pattern
                            '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                        }
                        description
                          "Address of a multicast group.";
                      }
    
                      leaf mask-length {
                        type uint32 {
                          range
                            "16 | 32 | 64 | 128";
                        }
                        description
                          "Mask length of a group address.";
                      }
    
                      leaf source-address {
                        type inet:ipv6-address-no-zone;
                        description
                          "Multicast source IPv6 address. Value restrictions: The value cannot be any of the following: All 0s: 0::0, Loopback address: 0::1, Multicast address: ff00::0/8, Link-local address: fe80::0/10, In the format of ::x.x.x.x, class A addresses do not contain network segments 0 and 127. Class A, B, and C addresses cannot be network numbers or broadcast numbers.";
                      }
                    }  // list ssm-mapping-group
                  }  // container ssm-mapping-groups
                }  // container mld-snooping
    
                container vsi-pipe {
                  description
                    "Configure the diffserv mode of VPLS.";
                  leaf split-mode {
                    type boolean;
                    must
                      "((../split-mode='false' and not(../ingress-pipe-mode) and not(../egress-pipe-mode) and ../pipe-mode) or (../split-mode='true' and not(../pipe-mode) and ../ingress-pipe-mode and ../egress-pipe-mode and not(../ingress-pipe-mode='uniform' and ../egress-pipe-mode='uniform')))";
                    default "false";
                    description
                      "Enable/disable split mode.";
                  }
    
                  leaf pipe-mode {
                    when "../split-mode='false'";
                    type l2vpn-pipe-mode;
                    must
                      "(../split-mode='false') and ((../pipe-mode='pipe' and (../service-class) and (../color)) or (../pipe-mode='shortPipe' and (../service-class) and (../color) and (../domain-name)) or (../pipe-mode='uniform'))";
                    default "uniform";
                    description "VSI pipe mode.";
                  }
    
                  leaf ingress-pipe-mode {
                    when "../split-mode='true'";
                    type l2vpn-pipe-mode;
                    must
                      "((../split-mode='true') and (((../service-class) and (../color) and (../ingress-pipe-mode='shortPipe' or ../ingress-pipe-mode='pipe')) or (../ingress-pipe-mode='uniform' and ../egress-pipe-mode!='uniform')))";
                    default "uniform";
                    description
                      "VSI ingress pipe mode.";
                  }
    
                  leaf egress-pipe-mode {
                    when "../split-mode='true'";
                    type l2vpn-pipe-mode;
                    must
                      "((../split-mode='true') and (((../domain-name) and (../trust-type) and (../egress-pipe-mode='shortPipe')) or (../egress-pipe-mode='pipe') or (../egress-pipe-mode='uniform' and ../ingress-pipe-mode!='uniform')))";
                    default "uniform";
                    description
                      "VSI egress pipe mode.";
                  }
    
                  leaf service-class {
                    when
                      "(../pipe-mode='pipe' or ../pipe-mode='shortPipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortPipe')";
                    type l2vpn-service-class;
                    must
                      "(../pipe-mode='pipe' or ../pipe-mode='shortPipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortPipe')";
                    default "be";
                    description
                      "VSI service class.";
                  }
    
                  leaf color {
                    when
                      "(../pipe-mode='pipe' or ../pipe-mode='shortPipe'  or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortPipe')";
                    type l2vpn-color;
                    must
                      "(../pipe-mode='pipe' or ../pipe-mode='shortPipe' or ../ingress-pipe-mode='pipe' or ../ingress-pipe-mode='shortPipe')";
                    default "green";
                    description "Packet color.";
                  }
    
                  leaf domain-name {
                    when
                      "(../pipe-mode='shortPipe'  or ../egress-pipe-mode='shortPipe')";
                    type leafref {
                      path "/qos:qos/qos:classifier-template/qos:diffserv-domains/qos:diffserv-domain/qos:name";
                    }
                    must
                      "(../pipe-mode='shortPipe' or ../egress-pipe-mode='shortPipe')";
                    default "default";
                    description "Domain name.";
                  }
    
                  leaf trust-type {
                    when
                      "../egress-pipe-mode='shortPipe'";
                    type l2vpn-trust-type;
                    must
                      "../egress-pipe-mode='shortPipe'";
                    default "outpri";
                    description
                      "VSI trust type.";
                  }
                }  // container vsi-pipe
    
                container reserve-if-switch {
                  when
                    "../l2vpn:work-mode='normal'";
                  description
                    "Configure VSI separate broadcast fast switching.";
                  leaf enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the flag of VSI separate broadcast fast switching.";
                  }
                }  // container reserve-if-switch
    
                container vpls-ext {
                  description
                    "Configure VPLS common extension.";
                  leaf vsi-multicast-switch {
                    type boolean;
                    must
                      "(../vsi-multicast-switch = 'false') or ((../vsi-multicast-switch = 'true') and (../../l2vpn:work-mode='normal' or ../../l2vpn:work-mode='bd-mode' or ../../l2vpn:work-mode='b-vsi' or ../../l2vpn:work-mode='i-vsi' or ../../l2vpn:work-mode='i-vsi-p2p'))";
                    default "false";
                    description
                      "Enable/disable the flag of VPLS multicast fast switching.";
                  }
    
                  leaf pw-packet-type-traffic-statistic {
                    type boolean;
                    must
                      "(../pw-packet-type-traffic-statistic = 'false') or ((../pw-packet-type-traffic-statistic = 'true') and (../../l2vpn:work-mode='normal' or ../../l2vpn:work-mode='bd-mode'))";
                    default "false";
                    description
                      "Enable/disable the function to collect packet-type traffic statistics.";
                  }
    
                  leaf convergence-separate {
                    type boolean;
                    must
                      "(../convergence-separate ='false') or ((../convergence-separate ='true') and (../../l2vpn:work-mode='normal' or ../../l2vpn:work-mode='bd-mode') and (../../l2vpn:ldp-signaling/l2vpn:hard-pipe='false') and (/l2vpn:l2vpn/l2vpn:common/l2vpn-vpls-ext:l2vpn-ext/l2vpn-vpls-ext:convergence-separate-in-system='false'))";
                    default "false";
                    description
                      "Enable/disable the flag of VPLS convergence separate in VSI.";
                  }
                }  // container vpls-ext
    
                container qos-parameter {
                  must "cir<=pir" {
                    error-message
                      "The pir value is less than cir value.";
                  }
                  must "not(cir=0 and pir=0)" {
                    error-message
                      "The cir and pir value can not be zero at same time.";
                  }
                  must
                    "not(/l2vpn:l2vpn/l2vpn:instances/l2vpn:instance[l2vpn:name=current()/../../l2vpn:name][l2vpn:type='vpls']/l2vpn:vpls/l2vpn:ldp-signaling/l2vpn:pws/l2vpn:pw/l2vpn-extension:qos-parameter)";
                  presence "enable QoS for pw";
                  description
                    "Enable/disable the QoS parameter information.";
                  leaf cir {
                    type uint32 {
                      range "0 | 16..4294967294";
                    }
                    units "kbit/s";
                    default "0";
                    description
                      "Specify the CIR.";
                  }
    
                  leaf pir {
                    type uint32 {
                      range "0 | 16..4294967294";
                    }
                    units "kbit/s";
                    description
                      "Specify the PIR.";
                  }
    
                  leaf profile-name {
                    when "../pir>0";
                    type leafref {
                      path "/qos:qos/qos:queue-scheduler-template/qos:profiles/qos:profile/qos:name";
                    }
                    description
                      "Specify the name of QoS profile.";
                  }
                }  // container qos-parameter
    
                container qos-traffic-statistics {
                  config false;
                  description
                    "Operational data of QoS traffic statistics table.";
                  leaf last-clear-time {
                    type string {
                      length "1..60";
                    }
                    description
                      "Last time of clean out.";
                  }
    
                  leaf bits-rate {
                    type uint64;
                    units "bit/s";
                    description
                      "The traffic bits rate received on the PW.";
                  }
    
                  leaf packets-rate {
                    type uint64;
                    units "pps";
                    description
                      "The traffic packet rate received on the PW.";
                  }
    
                  leaf output-bytes {
                    type uint64;
                    units "Byte";
                    description
                      "The traffic bytes transmitted out of the PW.";
                  }
    
                  leaf output-packets {
                    type uint64;
                    units "packet";
                    description
                      "The traffic packets transmitted out of the PW.";
                  }
    
                  container qos-querys {
                    description
                      "List of the QoS traffic-statistics.";
                    list qos-query {
                      key "query";
                      description
                        "Indicates the query table of the QoS traffic statistics.";
                      leaf query {
                        type qos-query-type;
                        description
                          "Indicates the query of the QoS traffic statistics.";
                      }
    
                      leaf packets {
                        type uint64;
                        units "packet";
                        description
                          "The total number of output packets.";
                      }
    
                      leaf bytes {
                        type uint64;
                        units "Byte";
                        description
                          "The total number of output bytes.";
                      }
    
                      leaf packets-rate {
                        type uint64;
                        units "pps";
                        description
                          "The last 300 seconds packets rate.";
                      }
    
                      leaf bits-rate {
                        type uint64;
                        units "bit/s";
                        description
                          "The last 300 seconds bits rate.";
                      }
    
                      leaf discard-packets {
                        type uint64;
                        units "packet";
                        description
                          "The total discard number of the packets.";
                      }
    
                      leaf discard-bytes {
                        type uint64;
                        units "Byte";
                        description
                          "The total discard number of the bytes.";
                      }
    
                      leaf discard-packets-rate {
                        type uint64;
                        units "pps";
                        description
                          "The last 300 seconds discard packets rate.";
                      }
    
                      leaf discard-bit-rate {
                        type uint64;
                        units "bit/s";
                        description
                          "The last 300 seconds discard bits rate.";
                      }
                    }  // list qos-query
                  }  // container qos-querys
                }  // container qos-traffic-statistics
    
                container dhcp-snooping-vsi {
                  description
                    "Configure DHCP snooping VSI attributes.";
                  leaf nni-server-enable {
                    when
                      "/dhcp:dhcp/dhcp:snooping/dhcp:global/dhcp:enable='true'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the network node interface to server.";
                  }
                }  // container dhcp-snooping-vsi
    
                container mac-flapping {
                  description
                    "Configure MAC flapping.";
                  container loop-detect {
                    presence
                      "Loop detect configuration.";
                    description
                      "Configure VSI MAC flapping entry.";
                    leaf loop-times {
                      type uint32 {
                        range "3..1000";
                      }
                      mandatory true;
                      description
                        "Number of MAC address flappings.";
                    }
    
                    leaf detect-cycle {
                      type uint32 {
                        range "3..30";
                      }
                      units "s";
                      mandatory true;
                      description
                        "Detection cycle.";
                    }
    
                    leaf cycles {
                      type uint32 {
                        range "1..15";
                      }
                      mandatory true;
                      description
                        "Number of cycles.";
                    }
    
                    leaf action {
                      type alarm-enable;
                      mandatory true;
                      description
                        "Action taken after a loop occurs. The action can be reporting an alarm or blocking an interface.";
                    }
    
                    leaf retry-times {
                      when "../action='block'";
                      type uint32 {
                        range "0..5";
                      }
                      must
                        "(../retry-times and ../block-time) or (not(../retry-times) and not(../block-time))";
                      description "Retry times.";
                    }
    
                    leaf block-time {
                      when "../action='block'";
                      type uint32 {
                        range "10..65535";
                      }
                      units "s";
                      must
                        "(../retry-times and ../block-time) or (not(../retry-times) and not(../block-time))";
                      description
                        "Blocking time.";
                    }
                  }  // container loop-detect
    
                  container precise-block {
                    must
                      "../../l2vpn:work-mode='normal'";
                    presence "precise-block";
                    description
                      "Configure precise blocking policy table.";
                  }  // container precise-block
                }  // container mac-flapping
              }  // container vpls
            }  // list instance
          }  // container instances
        }  // container l2vpn
    
        rpc switch-protect-aps {
          ext:node-ref "/l2vpn/common/pw-apss/pw-aps";
          description "PW APS.";
          input {
            leaf aps-id {
              type uint32 {
                range "1..65535";
              }
              mandatory true;
              description
                "ID of a PW APS instance.";
            }
    
            leaf protect-switch-type {
              type l2vpn-pw-aps-ps-type;
              mandatory true;
              description
                "Configure a manual switching request for a specified PW APS instance. By default, the manual switching request is not configured.";
            }
          }
        }  // rpc switch-protect-aps
    
        rpc reset-vpws-ldp-pw {
          ext:node-ref "/l2vpn/instances/instance/vpws-ldp/pws/pw";
          ext:node-ref "/l2vpn/instances/instance";
          description "Reestablish a PW.";
          input {
            leaf name {
              type l2vpn-instance-name;
              mandatory true;
              description
                "Name of the reset instance.";
            }
    
            leaf type {
              type l2vpn-instance-type;
              mandatory true;
              description
                "Type of the reset instance.";
            }
    
            leaf role {
              type pw-role-type;
              mandatory true;
              description
                "Role of the reset PW.";
            }
          }
        }  // rpc reset-vpws-ldp-pw
    
        rpc reset-pw-template {
          ext:node-ref "/l2vpn/common/pw-templates/pw-template";
          description
            "Reestablish a PW template.";
          input {
            leaf name {
              type string {
                length "1..19";
              }
              mandatory true;
              description "PW template name.";
            }
          }
        }  // rpc reset-pw-template
    
        rpc reset-vpws-ldp-ac {
          ext:node-ref "/l2vpn/instances/instance/vpws-ldp/acs/ac";
          description
            "Clear MAC addresses and VLAN IDs dynamically learned by an ethernet interface on a local CE.";
          input {
            leaf interface-name {
              type pub-type:if-name;
              description "Interface name.";
            }
          }
        }  // rpc reset-vpws-ldp-ac
    
        rpc reset-vpws-ldp-traffic-statistics {
          ext:node-ref "/l2vpn/instances/instance/vpws-ldp/pws/pw";
          ext:node-ref "/l2vpn/instances/instance";
          description "Reset VPWS PW traffic.";
          input {
            leaf name {
              type l2vpn-instance-name;
              mandatory true;
              description "Instance name.";
            }
    
            leaf type {
              type l2vpn-instance-type;
              mandatory true;
              description "Instance type.";
            }
    
            leaf role {
              type pw-role-type;
              mandatory true;
              description "PW role.";
            }
          }
        }  // rpc reset-vpws-ldp-traffic-statistics
    
        rpc reset-vpws-bgp-traffic-statistics {
          ext:node-ref "/l2vpn/instances/instance/vpws-bgp/pws/pw";
          ext:node-ref "/l2vpn/instances/instance/vpws-bgp";
          ext:node-ref "/l2vpn/instances/instance";
          description
            "Reset VPWS BGP PW traffic.";
          input {
            leaf name {
              type l2vpn-instance-name;
              mandatory true;
              description "Instance name.";
            }
    
            leaf type {
              type l2vpn-instance-type;
              mandatory true;
              description "Instance type.";
            }
    
            leaf local-site {
              type vpws-bgp-ce-name-type;
              mandatory true;
              description "CE name.";
            }
    
            leaf remote-site-id {
              type uint16 {
                range "0..65534";
              }
              mandatory true;
              description "Remote CE ID.";
            }
          }
        }  // rpc reset-vpws-bgp-traffic-statistics
    
        rpc reset-vpls-traffic-statistics {
          ext:node-ref "/l2vpn/instances/instance";
          description
            "Clear VPLS traffic statistics.";
          input {
            leaf name {
              type l2vpn-instance-name;
              mandatory true;
              description "VSI name.";
            }
          }
        }  // rpc reset-vpls-traffic-statistics
    
        rpc reset-vpls-ldp-pw-traffic-statistics {
          ext:node-ref "/l2vpn/instances/instance/vpls/ldp-signaling/pws/pw";
          ext:node-ref "/l2vpn/instances/instance";
          description
            "Clear VPLS PW traffic statistics.";
          input {
            leaf name {
              type l2vpn-instance-name;
              mandatory true;
              description "VSI name.";
            }
    
            leaf signal-type {
              type pw-signal-type;
              mandatory true;
              description "LDP signaling.";
            }
    
            leaf peer-ip {
              type inet:ipv4-address-no-zone;
              mandatory true;
              description
                "Peer IP address. The loopback IP address of a peer is usually used as the peer IP address.";
            }
    
            leaf negotiation-vc-id {
              type uint32 {
                range "1..4294967295";
              }
              mandatory true;
              description
                "PW ID used to uniquely identify a VC. The PW ID is usually used when both ends need to communicate but the VSI IDs on both ends are different.";
            }
          }
        }  // rpc reset-vpls-ldp-pw-traffic-statistics
    
        rpc switch-vpls-protect-group {
          ext:node-ref "/l2vpn/instances/instance/vpls/ldp-signaling/redundancy-protect-groups/redundancy-protect-group";
          ext:node-ref "/l2vpn/instances/instance";
          description
            "Manual PW protection group switching.";
          input {
            leaf instance-name {
              type l2vpn-instance-name;
              mandatory true;
              description
                "Name of the instance for manual switching.";
            }
    
            leaf protect-group-name {
              type string {
                length "1..15";
              }
              mandatory true;
              description
                "Name of a PW protection group. The name is a string of case-sensitive characters.";
            }
    
            leaf protect-switch-type {
              type l2vpn-protect-group-ps-type;
              mandatory true;
              description "Manual switching.";
            }
          }
        }  // rpc switch-vpls-protect-group
    
        rpc reset-vpls-pw-suppression-statistics {
          ext:node-ref "/l2vpn/instances/instance/vpls/ldp-signaling/pws/pw";
          ext:node-ref "/l2vpn/instances/instance";
          description
            "Clear VPLS PW suppression statistics.";
          input {
            leaf name {
              type l2vpn-instance-name;
              mandatory true;
              description "VSI name.";
            }
    
            leaf signal-type {
              type pw-signal-type;
              mandatory true;
              description "LDP signaling.";
            }
    
            leaf peer-ip {
              type inet:ipv4-address-no-zone;
              mandatory true;
              description
                "Peer IP address. The loopback IP address of a peer is usually used as the peer IP address.";
            }
    
            leaf negotiation-vc-id {
              type uint32 {
                range "1..4294967295";
              }
              mandatory true;
              description
                "PW ID used to uniquely identify a VC. The PW ID is usually used when both ends need to communicate but the VSI IDs on both ends are different.";
            }
          }
        }  // rpc reset-vpls-pw-suppression-statistics
      }  // module huawei-l2vpn
    

© 2023 YumaWorks, Inc. All rights reserved.