cisco-pw

This YANG module describes the configuration and operational model of Psuedowire on PE router Terms and Acronyms AC : Att...

  • Version: 2019-07-01

    cisco-pw@2019-07-01


    
      module cisco-pw {
    
        yang-version 1;
    
        namespace
          "urn:cisco:params:xml:ns:yang:pw";
    
        prefix l2vpn-pw;
    
        import cisco-semver {
          prefix cisco-semver;
        }
        import ietf-interfaces {
          prefix if;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import ietf-yang-types {
          prefix yang;
        }
    
        organization "Cisco Systems, Inc.";
    
        contact
          "Cisco Systems, Inc.
         Customer Service
    
         Postal: 170 W Tasman Drive
         San Jose, CA 95134
    
         Tel: +1 1800 553-NETS
    
         E-mail: cs-yang@cisco.com";
    
        description
          "This YANG module describes the configuration and operational
         model of Psuedowire on PE router
    
         Terms and Acronyms
            AC    : Attachment Circuit
            BD    : Bridge Domain
            L2VPN : Layer 2 Virtual Private Network
            PE    : Provider Edge
            PW    : Pseudowire
            VFI   : Virtual Forwarding Instance
            VPLS  : Virtual Private LAN Service
            VLAN  : Virtual Local Area Network
        ";
    
        revision "2019-07-01" {
          description
            "Establish semantic version baseline";
        }
    
        revision "2016-12-07" {
          description
            "Removed cisco govern extension";
        }
    
        revision "2014-12-01" {
          description "Initial revision";
          reference
            "TODO";
    
        }
    
        cisco-semver:module-version "1.0.0";
    
        feature pw-interface {
          description
            "This feature represents ability to support pseudowire
           interface.";
        }
    
        feature pw-load-balancing {
          description
            "This feature represents ability to support load-balancing
           on pseudowires.";
        }
    
        feature pw-class-flow-setting {
          description
            "This feature represents ability to configure load-balancing
           flow type on a pwsdowire class/template level.";
        }
    
        feature flow-label-tlv-code17 {
          description
            "This feature represents ability to configure Flow Aware Label
           (FAT) PW to carry code 0x17 as sub-tlv id";
        }
    
        feature flow-label-static-config {
          description
            "This feature represents ability to use statically configured
           flow label on traffic flowing on the PW";
        }
    
        feature pw-preferred-path {
          description
            "This feature represents the ability to use a preferred path
           for pseudowires";
        }
    
        feature preferred-path-peer {
          description
            "This feature represents ability to use peer information
           (ip address or hostname) as preferred path.";
        }
    
        feature pw-vccv {
          description
            "This feature represents ability to configure vccv option on a
           pseudowire";
        }
    
        feature pw-class-switchover-delay {
          description
            "This feature represents the ability to configure pseodowire
           redundancy switchover properties on a pseudowire class";
        }
    
        feature pw-class-source-ip {
          description
            "This feature represents the ability to confifgure source IPv4
           address on a pseudowire class/template";
        }
    
        feature pw-class-tag-rewrite {
          description
            "This feature represents the ability to configure tag-rewrite
           parameters on a pseudowire class";
        }
    
        feature pw-tag-impose-vlan-id {
          description
            "This feature represents the ability to configure a tag for a
           VLAN ID on a pseudowire";
        }
    
        feature pw-ipv6-source {
          description
            "This feature represents the ability to configure a IPv6 local
           address for a IPv6 pseudowire";
        }
    
        feature pw-port-profiles {
          description
            "This feature represents the ability to configure port-profile
           parameters.";
        }
    
        feature pw-class-status {
          description
            "This feature represents the ability to configure status
           related propoties on a pw class.";
        }
    
        feature pw-sequencing {
          description
            "This feature represents the ability to support sequencing on
           pseudowire.";
        }
    
        feature pw-mac-withdraw-config {
          description
            "This feature represents the ability to configure pseudowire
           MAC withdraw feature.";
        }
    
        feature pw-short-config {
          description
            "This feature represents the ability to configure pseudowire
           with short version of parameters: neighbor IP, VC ID and encap
           type.";
        }
    
        feature static-label-direct-config {
          description
            "This feature represents the ability to directly configure a
           static label with neighbor IP and VC ID within a service
           instance.";
        }
    
        feature pw-grouping-config {
          description
            "This feature represents the ability to enable pseudowire
           grouping.";
        }
    
        feature pw-oam-refresh-config {
          description
            "This feature represents the ability to enable pseudowire oam
           refresh.";
        }
    
        feature pw-status-config {
          description
            "This feature represents the ability to enable pseudowire
           status at a global level.";
        }
    
        feature predictive-redundancy-config {
          description
            "This feature represents the ability to enable predicitive
           redundancy.";
        }
    
        feature pw-static-oam-config {
          description
            "This feature represents the ability to support oam classes";
        }
    
        identity pw-encapsulation-type {
          description
            "Base identity for PW encapsulations.";
        }
    
        identity pw-encap-mpls {
          base pw-encapsulation-type;
          description
            "Use MPLS for PW encapsulation";
        }
    
        identity pw-vc-type {
          description
            "Base identity for VC type in PW";
        }
    
        identity pw-vc-type-ether {
          base pw-vc-type;
          description
            "Identity for Ethernet VC type";
        }
    
        identity pw-vc-type-vlan {
          base pw-vc-type;
          description
            "Identity for VLAN VC type";
        }
    
        identity pw-vc-type-vlan-passthrough {
          base pw-vc-type;
          description
            "Identity for VLAN passthrough VC type (XR)";
        }
    
        identity pw-load-balance-type {
          description
            "Base type for load-balancing type";
        }
    
        identity pw-lb-ethernet-type {
          base pw-load-balance-type;
          description
            "Base type for load-balancing with ethernet fields";
        }
    
        identity pw-lb-eth-src-mac {
          base pw-lb-ethernet-type;
          description
            "Load-balancing with ethernet source MAC field";
        }
    
        identity pw-lb-eth-dst-mac {
          base pw-lb-ethernet-type;
          description
            "Load-balancing with ethernet destination MAC field";
        }
    
        identity pw-lb-eth-src-dst-mac {
          base pw-lb-ethernet-type;
          description
            "Load-balancing with ethernet source and destination MAC
           fields";
        }
    
        identity pw-lb-ip-type {
          base pw-load-balance-type;
          description
            "Base type for load-balancing with IP";
        }
    
        identity pw-lb-ip-src-ip {
          base pw-lb-ip-type;
          description
            "Load-balancing with IP source IP field";
        }
    
        identity pw-lb-ip-dst-ip {
          base pw-load-balance-type;
          description
            "Load-balancing with IP destination IP field";
        }
    
        identity pw-lb-ip-src-dst-ip {
          base pw-lb-ip-type;
          description
            "Load-balancing with IP source and destination IP fields";
        }
    
        identity pw-signaling-protocol-type {
          description
            "Base identity for PW signaling protocol";
        }
    
        identity pw-signaling-protocol-none {
          base pw-signaling-protocol-type;
          description "No PW signaling protocol";
        }
    
        identity pw-signaling-protocol-ldp {
          base pw-signaling-protocol-type;
          description
            "Use MPLS LDP for PW signaling protocol";
        }
    
        identity pw-signaling-protocol-bgp {
          base pw-signaling-protocol-type;
          description
            "Use BGP for PW signaling protocol";
        }
    
        identity pw-sequencing-type {
          description
            "Sequencing options for PW";
        }
    
        identity pw-sequencing-receive {
          base pw-sequencing-type;
          description
            "Receive sequencing option for PW";
        }
    
        identity pw-sequencing-transmit {
          base pw-sequencing-type;
          description
            "Transmit sequencing option for PW";
        }
    
        identity pw-sequencing-both {
          base pw-sequencing-type;
          description
            "Receive and Transmit sequencing option for PW";
        }
    
        typedef pw-template-ref {
          type leafref {
            path "/l2vpn-pw:pseudowire-config/pw-templates/l2vpn-pw:pw-template/l2vpn-pw:name";
          }
          description
            "Reference to an instance of pseudowire template.";
        }
    
        typedef pw-oper-vc-peer-addr-ref {
          type leafref {
            path "/l2vpn-pw:pseudowire-state/l2vpn-pw:pseudowires/l2vpn-pw:vc-peer-address";
          }
          description
            "Reference to the peer ip address of a pseudowire in oper
           data tree.";
        }
    
        typedef pw-oper-vc-id-ref {
          type leafref {
            path "/l2vpn-pw:pseudowire-state/l2vpn-pw:pseudowires/l2vpn-pw:vc-id";
          }
          description
            "Reference to the vc id of a pseudowire in oper data tree.";
        }
    
        typedef pw-group-id-type {
          type uint32;
          description
            "An administrative identification mechanism for grouping a
           set of service-specific pseudo-wire services. May only
           have local significance.";
          reference
            "CISCO-IETF-PW-TC-MIB";
    
        }
    
        typedef pw-vc-id-type {
          type uint32;
          description
            "Virtual Circuit Identifier. Used to identify the VC
           (together with some other fields) in the signaling
           session. Zero if the VC is set-up manually.";
          reference
            "CISCO-IETF-PW-TC-MIB";
    
        }
    
        typedef pw-vc-index-type {
          type uint32;
          description
            "Virtual Circuit Index. Locally unique index for indexing
           MIB tables associated with a particular VC.";
        }
    
        typedef pw-oper-state-type {
          type enumeration {
            enum "up" {
              value 1;
              description
                "Pseudowire is established, i.e., it is operational
               and available to carry packets";
            }
            enum "down" {
              value 2;
              description
                "Pseudowire is idle, i.e., it is administratively up
               but network connectivity with the neighbor is not
               established";
            }
            enum "cold-standby" {
              value 3;
              description
                "Pseudowire can take over traffic for another
               pseudowire";
            }
            enum "hot-standby" {
              value 4;
              description
                "Pseudowire is available to immediately take over
               traffic from another pseudowire";
            }
            enum "recovering" {
              value 5;
              description
                "Pseudowire was previously in active state and is
               in the process of being restored to active state";
            }
            enum "no-hardware" {
              value 6;
              description
                "Pseudowire no longer has the required hardware
               resources to be able to offer packet service to
               the system";
            }
            enum "unresolved" {
              value 7;
              description
                "Pseudowire is not completely provisioned";
            }
            enum "provisioned" {
              value 8;
              description
                "Pseudowire has received local configuration";
            }
            enum "remote-standby" {
              value 9;
              description
                "Pseudowire neighbor has sent its pseudowire
               binding information";
            }
            enum "local-ready" {
              value 10;
              description
                "Pseudowire is provisioned, got a local label, and
               its local binding has been sent to the neighbor";
            }
            enum "all-ready" {
              value 11;
              description
                "Pseudowire is locally provisioned, local binding
               has been sent, and remote binding was received
               from the neighbor";
            }
          }
          description
            "Indicates the operational status of the PW VC";
        }
    
        grouping pw-backup-delay-config {
          description
            "Specifies whether or how long it should wait before backup is
           disabled when primary pseudowire comes back up";
          leaf switchover-timer {
            type uint8 {
              range "0..120";
            }
            description
              "Specifies how long the backup pseudowire should wait before
             taking over";
          }
    
          choice restore-timer-or-never {
            description
              "Restore timer configuration options.";
            leaf timer {
              type uint8 {
                range "0..180";
              }
              description
                "Specifies how long the primary pseudowire should wait
               after it becomes active to take over for the backup
               pseudowire";
            }
            leaf never {
              type boolean;
              default "false";
              description
                "The primary pseudowire never takes over for the backup";
            }
          }  // choice restore-timer-or-never
        }  // grouping pw-backup-delay-config
    
        grouping pw-oper-ref-keys {
          description
            "Pseudowire oper keys. These leaves can uniquely identify
           a pseudowire instance in the oper data tree.";
          leaf vc-peer-address {
            type pw-oper-vc-peer-addr-ref;
            description
              "Reference to peer ip address of a pseudowire instance.";
          }
    
          leaf vc-id {
            type pw-oper-vc-id-ref;
            description
              "Reference to vc-id of a pseudowire instance.";
          }
        }  // grouping pw-oper-ref-keys
    
        grouping pw-class-template-config {
          description
            "Pseudowire parameters that can be configured on a template or
           a class to be shared among several pseudowires, although these
           can also be configured for one pseudowire, typically on a
           pseudowire interface. Hence they do not include any instance
           specific information.";
          leaf encapsulation {
            type identityref {
              base pw-encapsulation-type;
            }
            description
              "Encapsulation used for PW";
          }
    
          leaf control-word {
            when
              "../encapsulation = 'pw-encap-mpls'" {
              description
                "Pseudowire encapsulation must be of mpls type to enable
               control word in MPLS pseudowire header.";
            }
            type boolean;
            description
              "Use control word in the MPLS PW header.";
          }
    
          leaf signaling-protocol {
            type identityref {
              base pw-signaling-protocol-type;
            }
            description
              "Signaling protocol to use.";
          }
    
          container load-balance {
            if-feature pw-load-balancing;
            description
              "Load balancing mechanism.";
            choice flow {
              if-feature pw-class-flow-setting;
              default "ethernet";
              description
                "Load-balancing options for a pseudowire.";
              leaf ethernet {
                type identityref {
                  base pw-lb-ethernet-type;
                }
                default "pw-lb-eth-src-dst-mac";
                description
                  "Ethernet mac address based load balancing";
              }
              leaf ip {
                type identityref {
                  base pw-lb-ip-type;
                }
                description
                  "IP address based load balancing";
              }
            }  // choice flow
    
            container flow-label {
              description
                "Enable Flow Aware Label (FAT) PW - the capability to
               carry flow label on PW";
              leaf direction {
                type enumeration {
                  enum "transmit" {
                    value 1;
                    description "TODO";
                  }
                  enum "receive" {
                    value 2;
                    description "TODO";
                  }
                  enum "both" {
                    value 3;
                    description "TODO";
                  }
                }
                description
                  "Directions to enable Flow Aware Label PW";
              }
    
              leaf tlv-code-17 {
                if-feature flow-label-tlv-code17;
                type boolean;
                description
                  "Carry code 0x17 as Flow Aware Label (FAT) PW signalled
                 sub-tlv id";
              }
    
              leaf static {
                if-feature flow-label-static-config;
                type boolean;
                default "false";
                description
                  "Use statically configured flow label on traffic
                 flowing on the PW";
              }
            }  // container flow-label
          }  // container load-balance
    
          container preferred-path {
            if-feature pw-preferred-path;
            description
              "Preferred path for the PW";
            choice path {
              description
                "Choice of tunnel interface or peer";
              leaf interface {
                type if:interface-ref;
                description
                  "Reference to a tunnel interface.";
              }
    
              case address {
                if-feature preferred-path-peer;
                leaf address {
                  type inet:ip-address;
                  description "TODO";
                }
              }  // case address
    
              case hostname {
                if-feature preferred-path-peer;
                leaf hostname {
                  type string;
                  description "TODO";
                }
              }  // case hostname
            }  // choice path
    
            leaf disable-fallback {
              type boolean;
              description
                "Disable fall back to alternative route";
            }
          }  // container preferred-path
    
          container sequencing {
            if-feature pw-sequencing;
            description "Sequencing options";
            leaf direction {
              type identityref {
                base pw-sequencing-type;
              }
              description "TODO";
            }
    
            leaf resync {
              type int32 {
                range "5..65535";
              }
              description "TODO";
            }
          }  // container sequencing
    
          leaf vc-type {
            type identityref {
              base pw-vc-type;
            }
            description "Type of VC in the PW.";
          }
    
          leaf switching-tlv {
            type boolean;
            description "Send switching TLV";
          }
    
          container vccv {
            if-feature pw-vccv;
            description "VCCV configuration";
            leaf control-word {
              type boolean;
              description
                "Enable VCCV verification type";
            }
          }  // container vccv
    
          container switchover-delay {
            if-feature pw-class-switchover-delay;
            description
              "Timer configuration related to pseudowire redundancy
             switchover and restoring to primary";
            uses pw-backup-delay-config;
          }  // container switchover-delay
    
          leaf source-ip {
            if-feature pw-class-source-ip;
            type inet:ipv4-address;
            description
              "The local source IPv4 address";
          }
    
          leaf tag-rewrite-ingress-vlan {
            if-feature pw-class-tag-rewrite;
            type uint16 {
              range "1..4094";
            }
            description
              "Configure ingress tag rewrite vlan.";
          }
    
          leaf mac-withdraw {
            if-feature pw-mac-withdraw-config;
            type boolean;
            default "false";
            description
              "Send Mac-withdraw message when PW becomes active.";
          }
    
          container status {
            description "TODO";
            leaf decoupled {
              if-feature pw-class-status;
              type boolean;
              default "false";
              description
                "Reflect standby status of the attachment circuit as up on
               the pseudowire.";
            }
    
            leaf disable {
              if-feature pw-class-status;
              type boolean;
              default "false";
              description
                "Do not send pseudowire status to peer.";
            }
    
            leaf peer-topo-dual-homed {
              type boolean;
              description
                "Our peer(s) are participating in a redundant solution with
               some form of redundancy protocol running between the peer
               routers. Only one of the remote peers will advertise a
               status of UP at a time. The other will advertise standby.
               Change our configuration so we can send a status of UP on
               both active and redundant pseudowires.";
            }
    
            leaf route-watch-disable {
              if-feature pw-class-status;
              type boolean;
              default "false";
              description
                "Disable listening for routing events to trigger redundancy
               status changes";
            }
    
            leaf redundancy-master {
              if-feature pw-class-status;
              type boolean;
              default "false";
              description
                "Make the PE as master to enables Pseudowire Preferential
               Forwarding feature to display the status of  the active
               and backup pseudowires.";
            }
          }  // container status
        }  // grouping pw-class-template-config
    
        grouping pw-neighbor-base-config {
          description
            "Basic configuration parameters to identify a pseudowire and
           used by all variation of pseudowire configuration formats.";
          leaf neighbor-ip-address {
            type inet:ip-address;
            description
              "IPv4 or IPv6 address of the neighbor.";
          }
    
          leaf vc-id {
            type uint32 {
              range "1..4294967295";
            }
            description "Pseudowire VC ID";
          }
        }  // grouping pw-neighbor-base-config
    
        grouping pw-static-label-config {
          description
            "Statically configured labels used by PW";
          leaf local-label {
            type uint32 {
              range "16..1048575";
            }
            description "Local MPLS label ID";
          }
    
          leaf remote-label {
            type uint32 {
              range "16..1048575";
            }
            description "Remote MPLS label ID";
          }
        }  // grouping pw-static-label-config
    
        grouping pw-neighbor-config {
          description
            "Pseudowire configuration using neighbor address, VC ID and
           other parameters. Directly configurable under the service;
           which is a variation to pseudowire interface configuration.";
          uses pw-neighbor-base-config {
            description
              "Pseudowire neighbor-ip and vc-id config";
          }
    
          container static-label {
            if-feature static-label-direct-config;
            description
              "Statically configured labels, signalling should be none";
            uses pw-static-label-config;
          }  // container static-label
    
          choice pw-class-or-specs {
            description
              "Inherit attributes from a pseudowire class or provide
             configuration";
            leaf pw-class-template {
              type pw-template-ref;
              description
                "Reference to a pseudowire template";
            }
    
            case specs {
              leaf encap-type {
                if-feature pw-short-config;
                type identityref {
                  base pw-encapsulation-type;
                }
                description
                  "Encapsulation configuration for this neighbor";
              }
    
              leaf tag-impose-vlan {
                if-feature pw-tag-impose-vlan-id;
                type uint16 {
                  range "1..4094";
                }
                description
                  "Specify a tag for a VLAN ID for the pseudowire";
              }
    
              leaf source-ipv6 {
                if-feature pw-ipv6-source;
                type inet:ipv6-address;
                description
                  "The local source IPv6 address. Note this should only be
                 configured when neighbor address is IPv6 type";
              }
            }  // case specs
          }  // choice pw-class-or-specs
        }  // grouping pw-neighbor-config
    
        grouping pw-backup-neighbor-config {
          description
            "Backup pseudowire configuration using neighbor address, VC ID
           and other limited choice of parameters. This is usually
           associated with an active pseudowire neighbor.";
          uses pw-neighbor-base-config {
            description
              "Pseudowire neighbor-ip and vc-id config";
          }
    
          leaf pw-class-template {
            type pw-template-ref;
            description
              "Reference to a pseudowire template";
          }
        }  // grouping pw-backup-neighbor-config
    
        grouping pw-intf-or-pw-neighbor-config {
          description
            "Pseudowire configuration representation that can be either
           configured with a pseudowire interface or a pseudowire
           neighbor entity - PW-NEIGHBOR - a combination of pseudowire
           neighbor address, VC ID and possibly other parameters.";
          choice pw-intf-or-pw-neighbor {
            mandatory true;
            description
              "Pseudowire configuration options.";
            leaf pw-intf {
              if-feature pw-interface;
              type if:interface-ref;
              must
                "/if:interfaces/if:interface/if:type= 'ifPwType'" {
                description
                  "Must be a pseudowire interface.";
              }
              description
                "This is the reference to a pseudowire interface";
            }
            container pw-neighbor {
              description
                "This is the reference to a psuedowire using specifications
               of a neighbor address, a VC ID and other parameters";
              uses pw-neighbor-config;
            }  // container pw-neighbor
          }  // choice pw-intf-or-pw-neighbor
        }  // grouping pw-intf-or-pw-neighbor-config
    
        container pseudowire-config {
          description
            "Pseudowire configuration data.";
          container global {
            description
              "Global configurations related to pseudowires.";
            leaf pw-grouping {
              if-feature pw-grouping-config;
              type boolean;
              default "false";
              description
                "Enable pw-grouping.
    
               When pseudowires (PW) are established, each PW is assigned
               a group ID that is common for all PWs created from the
               same physical port. Hence, when the physical port becomes
               non-functional or is deleted, L2VPN sends a single message
               to advertise the status change of all PWs belonging to the
               group. A single L2VPN signal thus avoids a lot of
               processing and loss in reactivity.";
              reference
                "RFC 4447";
    
            }
    
            leaf pw-oam-refresh-transmit {
              if-feature pw-oam-refresh-config;
              type uint32 {
                range "1..4095";
              }
              description
                "Set pseudowire oam transmit refresh time (in seconds)";
            }
    
            leaf pw-status {
              if-feature pw-status-config;
              type boolean;
              description "Enable pw-status";
            }
    
            leaf predictive-redundancy {
              if-feature predictive-redundancy-config;
              type boolean;
              description
                "Enable predictive redundancy";
            }
    
            leaf vc-state-notification-enabled {
              type boolean;
              description
                "If this leaf is set to true, then it enables the emission
               of 'vc-state-notification'; otherwise these notifications
               are not emitted.";
              reference
                "CISCO-IETF-PW-MIB";
    
            }
    
            leaf vc-state-notification-batch-size {
              type uint32;
              description
                "'vc-state-notification' allows batching of pseudowires in
               order to reduce number of notifications generated from the
               device. All pseudowires in a batched notification MUST
               share same state at the same time.
    
               This leaf defines the maximum number of VCs that can be
               batched in vc-state-notification.";
            }
    
            leaf vc-state-notification-rate {
              type uint32;
              description
                "This leaf defines the maximum number of VC state change
               notifications that can be emitted from the device per
               second.";
              reference
                "CISCO-IETF-PW-MIB";
    
            }
          }  // container global
    
          container pw-templates {
            description
              "Contains list of all pw-template definitions.
             Also called PW Class (XR) and Port Profile (NX-OS)";
            list pw-template {
              key "name";
              description
                "Pseudowire template list.";
              leaf name {
                type string;
                description "PW Template name.";
              }
    
              uses pw-class-template-config {
                description
                  "Pseudowire class template configurations.";
              }
    
              container port-profile-spec {
                if-feature pw-port-profiles;
                description
                  "Pseudowire port profile configurations.";
                leaf description {
                  type string;
                  description
                    "Description string for the port profile";
                }
    
                leaf shutdown {
                  type boolean;
                  default "false";
                  description
                    "Shut down this template";
                }
    
                leaf shut-force {
                  type boolean;
                  default "false";
                  description
                    "Force shut down this port profile";
                }
    
                leaf mtu {
                  type uint32;
                  description "MTU of the port";
                }
    
                leaf max-ports {
                  type uint16 {
                    range "1..16384";
                  }
                  description
                    "Maximum number of ports";
                }
    
                leaf enabled {
                  type boolean;
                  default "false";
                  description
                    "Enable this port profile";
                }
              }  // container port-profile-spec
            }  // list pw-template
          }  // container pw-templates
    
          container pw-static-oam-classes {
            if-feature pw-static-oam-config;
            description
              "List of pseudowire static oam classes.";
            list pw-static-oam-class {
              key "name";
              description
                "Pseudowire static oam class configuration";
              leaf name {
                type string;
                description "OAM class name";
              }
    
              leaf ack {
                type boolean;
                description "Enable ack";
              }
    
              leaf keepalive {
                type uint32 {
                  range "1..4095";
                }
                default "600";
                description
                  "Keepalive in seconds";
              }
    
              leaf timeout-refresh-send {
                type uint32 {
                  range "1..4095";
                }
                default "30";
                description
                  "Refresh timeout in seconds";
              }
    
              leaf timeout-refresh-ack {
                type uint32 {
                  range "1..4095";
                }
                default "600";
                description
                  "Ack timeout in seconds";
              }
            }  // list pw-static-oam-class
          }  // container pw-static-oam-classes
        }  // container pseudowire-config
    
        augment /if:interfaces/if:interface {
          when "if:type = 'ifPwType'" {
            description
              "Only applicable for L2VPN pseudowires.";
          }
          description
            "Pseudowire-specific interface configuration";
          container pw-neighbor {
            if-feature pw-interface;
            description
              "Pseudowire neighbor configurations.";
            uses pw-neighbor-base-config {
              description
                "Pseudowire neighbor-ip and vc-id config";
            }
    
            container static-label {
              description
                "Statically configured labels, signalling should be none";
              uses pw-static-label-config;
            }  // container static-label
    
            leaf source-template {
              type pw-template-ref;
              description
                "Specify template for PW configuration";
            }
    
            uses pw-class-template-config {
              description
                "This configuration can be used to specify parameters in
               addition to the template specified by'source-template'
               node. In case of conflict, parameters in the template have
               higher precedence.";
            }
          }  // container pw-neighbor
        }
    
        container pseudowire-state {
          config false;
          description
            "Contains the operational state for all the pseudowire
           instances in the switch, no matter what L2VPN service
           created them.";
          list pseudowires {
            key "vc-peer-address vc-id vc-owner-type vc-name vc-index";
            description
              "Each list element contains the state for a pseudowire
             instance. The list can be optionally keyed by any
             combination of vc-id, peer-address, etc.
             Additional filtering of the list by the agent may be
             performed upon request by the client using subtree
             filtering as described in RFC 6020 Section 6.";
            leaf vc-type {
              type identityref {
                base pw-vc-type;
              }
              description
                "Indicates the service to be carried over this VC";
            }
    
            leaf vc-owner-type {
              type enumeration {
                enum "vpws" {
                  value 1;
                  description
                    "Created under VPWS context";
                }
                enum "vpls-vfi" {
                  value 2;
                  description
                    "Created under VFI context";
                }
                enum "vpls-bridge-domain" {
                  value 3;
                  description
                    "Created under bridge domain context";
                }
                enum "interface" {
                  value 4;
                  description
                    "Created by manual pseudowire interface
                   configuration";
                }
              }
              description
                "Indicates the service responsible for establishing
               this VC";
            }
    
            leaf vc-owner-name {
              type string;
              description
                "Name of the L2VPN service instance that created
               the pseudowire VC";
            }
    
            leaf vc-psn-type {
              type enumeration {
                enum "mpls" {
                  value 1;
                  description
                    "MPLS encapsulation";
                }
                enum "l2tp" {
                  value 2;
                  description
                    "L2TP encapsulation";
                }
                enum "ip" {
                  value 3;
                  description "IP core";
                }
                enum "mpls-over-ip" {
                  value 4;
                  description
                    "MPLS encapsulation over IP core";
                }
                enum "gre" {
                  value 5;
                  description
                    "GRE encapsulation";
                }
                enum "other" {
                  value 6;
                  description
                    "Some other encapsulation";
                }
              }
              description
                "Indicates the type of packet-switched network
               that carries this VC";
            }
    
            leaf vc-peer-address {
              type inet:ip-address;
              description
                "This object contains the value of the peer node address
               of the PW/PE protocol entity";
            }
    
            leaf vc-id {
              type pw-vc-id-type;
              description
                "Used to distinguish between pseudowires going to the
               same peer node";
            }
    
            leaf vc-index {
              type pw-vc-index-type;
              description
                "Locally-unique ID within the device for this
               pseudowire";
            }
    
            leaf vc-local-group-id {
              type pw-group-id-type;
              description
                "Used to identify which local pseudowire group this
               pseudowire belongs to";
            }
    
            leaf vc-control-word {
              type boolean;
              description
                "Indicates if the control word is sent with each packet
               by the local node";
            }
    
            leaf vc-local-if-mtu {
              type uint32;
              description
                "If not zero, this represents the locally supported MTU
               size over the interface (or the virtual interface)
               associated with the VC";
            }
    
            leaf vc-remote-group-id {
              type pw-group-id-type;
              description
                "If not zero, indicates the pseudowire group to which
               this pseudowire belongs on the peer node";
            }
    
            leaf vc-remote-control-word {
              type enumeration {
                enum "noControlWord" {
                  value 1;
                  description
                    "Peer sends control word";
                }
                enum "withControlWord" {
                  value 2;
                  description
                    "Peer does not send control word";
                }
                enum "notYetKnown" {
                  value 3;
                  description
                    "Have not received indication yet if peer sends
                   control word";
                }
              }
              description
                "Indicates whether MPLS control words are used by the
               pseudowire PSN service";
            }
    
            leaf vc-remote-if-mtu {
              type uint32;
              description
                "The remote interface MTU as (optionally) received
               from the remote node via the signaling protocol.
               Should be zero if this parameter is not available
               or not used";
            }
    
            leaf vc-outbound-label {
              type uint32;
              description
                "The VC label used in the outbound direction (i.e. toward
               the PSN). Example: for MPLS PSN, it represents the 20 bits
               of VC tag, for L2TP it represent the 32 bits Session ID.
               If the label is not yet known (signaling in procesS), the
               object should return a value of 0xFFFFFFFF.";
            }
    
            leaf vc-inbound-label {
              type uint32;
              description
                "The VC label used in the inbound direction (i.e. packets
               received from the PSN). Example: for MPLS PSN, it
               represents the 20 bits of VC tag, for L2TP it represents
               the 32 bits Session ID. If the label is not yet known
               (signaling in process), the object should return a value
               of 0xFFFFFFFF.";
            }
    
            leaf vc-name {
              type string;
              description
                "The canonical name assigned to the VC. The name may be
               autogenerated by the device; this Yang model does not
               currently support direct configuration of this name.";
            }
    
            leaf vc-oper-status {
              type pw-oper-state-type;
              description
                "Indicates the actual combined operational status of this
               VC. It is 'up' if both vc-inbound-oper-status and
               vc-outbound-oper-status are in 'up' state. For all other
               values, if the VCs in both directions are of the same
               value it reflects that value, otherwise it is set to the
               most severe status out of the two statuses. The order of
               severance from most severe to less severe is: unknown,
               notPresent, down, lowerLayerDown, dormant, testing, up.
               The operator may consult the per direction oper-status
               for fault isolation per direction.";
            }
    
            leaf vc-inbound-oper-status {
              type pw-oper-state-type;
              description
                "Indicates the actual operational status of this VC in
               the  inbound direction";
            }
    
            leaf vc-outbound-oper-status {
              type pw-oper-state-type;
              description
                "Indicates the actual operational status of this VC in
               the outbound direction";
            }
    
            container statistics {
              description
                "A collection of pseudowire-related statistics objects";
              leaf vc-create-time {
                type yang:timestamp;
                description
                  "System time when this VC was created";
              }
    
              leaf vc-up-time {
                type yang:timeticks;
                description
                  "Number of consecutive ticks this VC has been 'up' in
                 both directions together";
              }
    
              leaf discontinuity-time {
                type yang:date-and-time;
                mandatory true;
                description
                  "The time on the most recent occasion at which any of
                 this pseudowire's counters sufferred discontinuity.
                 If no such discontinuities have occurred since the
                 last re-initialization of the local management
                 subsystem, then this node contains the time the
                 local management subsystem re-initialized itself.";
              }
    
              leaf in-octets {
                type yang:counter64;
                description
                  "The total number of octets received on this
                 pseudowire.
    
                 Discontinuities in the value of this counter can
                 occur at re-initialization of the management system
                 and at other times as indicated by the value of
                 'discontinuity-time'.";
              }
    
              leaf in-pkts {
                type yang:counter64;
                description
                  "The total number of packets received on this
                 pseudowire.
    
                 Discontinuities in the value of this counter can
                 occur at re-initialization of the management system
                 and at other times as indicated by the value of
                 'discontinuity-time'.";
              }
    
              leaf in-errors {
                type yang:counter64;
                description
                  "The total number of inbound packets that contained
                 errors.
    
                 Discontinuities in the value of this counter can
                 occur at re-initialization of the management system
                 and at other times as indicated by the value of
                 'discontinuity-time'.";
              }
    
              leaf out-octets {
                type yang:counter64;
                description
                  "The total number of octets sent on this pseudowire.
    
                 Discontinuities in the value of this counter can
                 occur at re-initialization of the management system
                 and at other times as indicated by the value of
                 'discontinuity-time'.";
              }
    
              leaf out-pkts {
                type yang:counter64;
                description
                  "The total number of packets sent on this pseudowire.
    
                 Discontinuities in the value of this counter can
                 occur at re-initialization of the management system
                 and at other times as indicated by the value of
                 'discontinuity-time'.";
              }
    
              leaf out-errors {
                type yang:counter64;
                description
                  "The total number of outbound packets that could not
                 be sent on this pseudowire.
    
                 Discontinuities in the value of this counter can
                 occur at re-initialization of the management system
                 and at other times as indicated by the value of
                 'discontinuity-time'.";
              }
            }  // container statistics
          }  // list pseudowires
        }  // container pseudowire-state
    
        augment /if:interfaces-state/if:interface {
          when "if:type = 'ifPwType'" {
            description
              "Only applicable for L2VPN pseudowires";
          }
          description
            "Adds additional state to standard interface state";
          container pseudowire {
            description
              "Pseudowire-specific interface operational state";
            uses pw-neighbor-base-config {
              description
                "Pseudowire neighbor-ip and vc-id config";
            }
          }  // container pseudowire
        }
    
        notification vc-up-notification {
          description
            "This notification is generated when the 'vc-oper-status' leaf
           for one or more VC are about to enter the 'up' state from some
           other state.
    
           Multiple VCs that changed 'up' state can be combined into
           single notification. Maximum batch-size of each notification
           is defined by 'vc-state-notification-batch-size' leaf. If
           number of eligible VCs are more than batch-size then
           additional notifications should be generated.";
          reference
            "CISCO-IETF-PW-MIB cpwVcUp notification.";
    
          list vc-list {
            description
              "List of VCs that moved to 'up' state";
            uses l2vpn-pw:pw-oper-ref-keys {
              description
                "Pseudowire oper keys. These leaves can uniquely
               identify a pseudowire instance in the pseudowire
               oper data tree.";
            }
          }  // list vc-list
        }  // notification vc-up-notification
    
        notification vc-down-notification {
          description
            "This notification is generated when the 'vc-oper-status' leaf
           for one or more VC are about to enter the 'down' state from
           some other state.
    
           Multiple VCs that changed 'down' state can be combined into
           single notification. Maximum batch-size of each notification
           is defined by 'vc-state-notification-batch-size' leaf. If
           number of eligible VCs are more than batch-size then
           additional notifications should be generated.";
          reference
            "CISCO-IETF-PW-MIB cpwVcDown notification.";
    
          list vc-list {
            description
              "List of VCs that moved to 'down' state";
            uses l2vpn-pw:pw-oper-ref-keys {
              description
                "Pseudowire oper keys. These leaves can uniquely
               identify a pseudowire instance in the pseudowire
               oper data tree.";
            }
          }  // list vc-list
        }  // notification vc-down-notification
      }  // module cisco-pw
    

© 2023 YumaWorks, Inc. All rights reserved.