ietf-connectionless-oam-methods

This YANG module defines the RPC operations for connectionless OAM to be used within the IETF in a protocol-independent manner. ...

  • Version: 2019-04-16

    ietf-connectionless-oam-methods@2019-04-16


    
      module ietf-connectionless-oam-methods {
    
        yang-version 1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-methods";
    
        prefix cloam-methods;
    
        import ietf-interfaces {
          prefix if;
        }
        import ietf-connectionless-oam {
          prefix cl-oam;
        }
    
        organization "IETF LIME Working Group";
    
        contact
          "WG Web:   <https://datatracker.ietf.org/wg/lime>
         WG List:  <mailto:lmap@ietf.org>
    
         Deepak Kumar <dekumar@cisco.com>
         Qin Wu <bill.wu@huawei.com>
         Srihari Raghavan <rihari@cisco.com>
         Michael Wang <wangzitao@huawei.com>
         Reshad Rahman <rrahman@cisco.com>";
    
        description
          "This YANG module defines the RPC operations for
         connectionless OAM to be used within the IETF
         in a protocol-independent manner.  It is
         assumed that each protocol maps corresponding
         abstracts to its native format.  Each protocol
         may extend the YANG data model defined here to
         include protocol-specific extensions.
    
         Copyright (c) 2019 IETF Trust and the persons identified as
         authors of the code.  All rights reserved.
    
         Redistribution and use in source and binary forms, with or
         without modification, is permitted pursuant to, and subject
         to the license terms contained in, the Simplified BSD License
         set forth in Section 4.c of the IETF Trust's Legal Provisions
         Relating to IETF Documents
         (http://trustee.ietf.org/license-info).
    
         This version of this YANG module is part of RFC 8533; see
         the RFC itself for full legal notices.";
    
        revision "2019-04-16" {
          description "Initial revision.";
          reference
            "RFC 8533: Retrieval Methods YANG Data Model for the Management
            of Operations, Administration, and Maintenance (OAM)
            Protocols That Use Connectionless Communications";
    
        }
    
    
        identity protocol-id {
          description
            "This is the base identity for a generic protocol
           ID.  The protocol registry can be found at
           https://www.iana.org/protocols.";
        }
    
        identity protocol-id-internet {
          base protocol-id;
          description
            "Identity for Internet Protocols.";
        }
    
        identity protocol-id-proprietary {
          base protocol-id;
          description
            "Identity for proprietary protocols (e.g.,
           IP SLA).";
        }
    
        identity protocol-id-sfc {
          base protocol-id;
          description
            "Identity for Service Function Chaining.";
        }
    
        identity protocol-id-mpls {
          base protocol-id;
          description "The MPLS protocol.";
        }
    
        identity protocol-id-mpls-tp {
          base protocol-id;
          description "The MPLS-TP protocol.";
        }
    
        identity protocol-id-twamp {
          base protocol-id;
          description
            "The Two-Way Active Measurement Protocol (TWAMP)
           protocol.";
        }
    
        identity protocol-id-bier {
          base protocol-id;
          description
            "The Bit Index Explicit Replication (BIER)
           protocol.";
        }
    
        identity status-code {
          description
            "This is base identity for a status code.";
        }
    
        identity success-reach {
          base status-code;
          description
            "Indicates that the destination being verified
           is reachable (see RFC 7276).";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
        }
    
        identity fail-reach {
          base status-code;
          description
            "Indicates that the destination being verified
           is not reachable (see RFC 7276).";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
        }
    
        identity success-path-verification {
          base status-code;
          description
            "Indicates that the path verification is performed
           successfully (see RFC 7276).";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
        }
    
        identity fail-path-verification {
          base status-code;
          description
            "Indicates that the path verification fails
           (see RFC 7276).";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
        }
    
        identity status-sub-code {
          description
            "IdentityBase status-sub-code.";
        }
    
        identity invalid-cc {
          base status-sub-code;
          description
            "Indicates that the Continuity Check message is invalid
           (see RFC 7276).";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
        }
    
        identity invalid-pd {
          base status-sub-code;
          description
            "Indicates that the path discovery message is invalid
           (see RFC 7276).";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
        }
    
        identity protocol-id-meta-data {
          description
            "This is the base identity for metadata that corresponds
           to the protocol ID.";
        }
    
        identity protocol-internet-number {
          base protocol-id-meta-data;
          description
            "Internet Protocol number for standard
           Internet Protocols (IANA-assigned Internet
           Protocol numbers) to help in protocol processing.
           The Protocol Numbers registry can be found at
           https://www.iana.org/assignments/protocol-numbers.";
        }
    
        rpc continuity-check {
          if-feature cl-oam:continuity-check;
          description
            "Continuity Check RPC operation as per RFC 7276.";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
          input {
            container destination-tp {
              description
                "Destination test point.";
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                mandatory true;
                description
                  "Test point address type.";
              }
    
              container mac-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "MAC address type.";
                }
                description
                  "MAC address based TP addressing.";
                leaf mac-address {
                  type yang:mac-address;
                  mandatory true;
                  description "MAC address.";
                }
              }  // container mac-address
    
              container ipv4-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "IPv4 address type.";
                }
                description
                  "IP address based TP addressing.";
                leaf ipv4-address {
                  type inet:ipv4-address;
                  mandatory true;
                  description "IPv4 address.";
                }
              }  // container ipv4-address
    
              container ipv6-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "IPv6 address type.";
                }
                description
                  "IPv6 address based TP addressing.";
                leaf ipv6-address {
                  type inet:ipv6-address;
                  mandatory true;
                  description "IPv6 address.";
                }
              }  // container ipv6-address
    
              container tp-attribute {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                  description
                    "Test point attribute type.";
                }
                description
                  "Test Point Attribute Container.";
                leaf tp-attribute-type {
                  type address-attribute-type;
                  description "Test point type.";
                }
    
                choice tp-attribute-value {
                  description
                    "Test point value.";
                  leaf ip-prefix {
                    type inet:ip-prefix;
                    description
                      "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf bgp {
                    type inet:ip-prefix;
                    description
                      "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf tunnel-interface {
                    type uint32;
                    description
                      "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures.";
    
                  }
    
                  case pw {
                    leaf remote-pe-address {
                      type inet:ip-address;
                      description
                        "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf pw-id {
                      type uint32;
                      description
                        "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case pw
    
                  case vpls {
                    leaf route-distinguisher {
                      type rt:route-distinguisher;
                      description
                        "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf sender-ve-id {
                      type uint16;
                      description
                        "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf receiver-ve-id {
                      type uint16;
                      description
                        "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case vpls
                  choice root-address {
                    description
                      "Root address choice.";
                    case ip-address {
                      leaf source-address {
                        type inet:ip-address;
                        description
                          "IP address.";
                      }
    
                      leaf group-ip-address {
                        type inet:ip-address;
                        description
                          "Group IP address.";
                      }
                    }  // case ip-address
                    leaf as-number {
                      type inet:as-number;
                      description
                        "The AS number that identifies an Autonomous
    System.";
                    }
                    leaf lsp-id {
                      type string;
                      description
                        "LSP ID is an identifier of a LSP
    within a MPLS network.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // choice root-address
                }  // choice tp-attribute-value
              }  // container tp-attribute
    
              container system-info {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "System ID address type.";
                }
                description
                  "Router ID container.";
                leaf router-id {
                  type rt:router-id;
                  description
                    "Router ID assigned to this node.";
                }
              }  // container system-info
            }  // container destination-tp
    
            leaf source-interface {
              type if:interface-ref;
              mandatory true;
              description "Source interface.";
            }
    
            leaf outbound-interface {
              type if:interface-ref;
              mandatory true;
              description "Outbound interface.";
            }
    
            leaf vrf {
              type cl-oam:routing-instance-ref;
              description
                "Virtual Routing and Forwarding (VRF) instance.";
            }
    
            leaf session-type {
              type enumeration {
                enum "proactive" {
                  value 0;
                  description
                    "The current session is a proactive session.";
                }
                enum "on-demand" {
                  value 1;
                  description
                    "The current session is an on-demand session.";
                }
              }
              default "on-demand";
              description
                "Indicate which kind of activation will be used
    by the current session.";
            }
    
            leaf count {
              type uint32 {
                range "0..4294967295";
              }
              default "5";
              description
                "Specifies the number of
               packets that will be sent.  By
               default, the packet number is
               set to 5.";
            }
    
            leaf ttl {
              type uint8;
              default "255";
              description
                "Time to live (TTL) used to limit the lifetime
               of data packets transmitted in the network
               to prevent looping.  The TTL value is decremented
               for every hop that the packet traverses.  If the
               TTL is zero, the data packet will be discarded.";
            }
    
            leaf packet-size {
              type uint32 {
                range "64..10000";
              }
              default "64";
              description
                "Packet size of the Continuity Check message, in octets.
               By default, the packet size is set to 64 octets.";
            }
          }
    
          output {
            container response-info {
              description
                "Status code and status-sub-code for Continuity Check RPC
               operation.";
              leaf protocol-id {
                type identityref {
                  base protocol-id;
                }
                mandatory true;
                description
                  "Protocol used in the Continuity Check message.
                 This could be a standard protocol (e.g.,
                 TCP/IP protocols, MPLS, etc.) or a proprietary
                 protocol as identified by this field.";
              }
    
              leaf protocol-id-meta-data {
                type identityref {
                  base protocol-id-meta-data;
                }
                description
                  "An optional metadata related to the protocol ID.
                 For example, this could be the Internet Protocol
                 number for standard Internet Protocols used for
                 help with protocol processing.";
              }
    
              leaf status-code {
                type identityref {
                  base status-code;
                }
                mandatory true;
                description
                  "Status code for Continuity Check RPC operation.
                 This could be a basic status code (e.g., destination
                 is reachable or destination is not reachable; see RFC 7276)
                 or some customized status code as identified by this
                 field.";
                reference
                  "RFC 7276: An Overview of Operations, Administration, and
                  Maintenance (OAM) Tools";
    
              }
    
              leaf status-sub-code {
                type identityref {
                  base status-sub-code;
                }
                mandatory true;
                description
                  "An optional status-sub-code for Continuity Check
                 RPC operation.  If the basic status code is destination
                 reachable, this status-sub-code doesn't need to be
                 specified.  If the basic status code is destination
                 unreachable, the status-sub-code can be used to specify
                 the detailed reasons.  This could be a basic
                 sub-status-code (such as an invalid Continuity Check) or
                 other error codes specific to the protocol under use for
                 the Continuity Checks.  For example, if ICMP is the
                 protocol under use, the error codes defined in RFC 4443
                 can be used to specify the reasons specific to ICMP.
                 This technology-specific status-sub-code can be
                 defined in technology-specific models.";
                reference
                  "RFC 4443: The IETF Administrative Oversight Committee
                  (IAOC) Member Selection Guidelines and Process.";
    
              }
            }  // container response-info
    
            container src-test-point {
              description "Source test point.";
              leaf ni {
                type routing-instance-ref;
                description
                  "The ni is used to describe virtual resource partitioning
    that may be present on a network device.  An example of a
    common industry term for virtual resource partitioning is
    'VRF instance'.";
              }
    
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                mandatory true;
                description
                  "Test point address type.";
              }
    
              container mac-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "MAC address type.";
                }
                description
                  "MAC address based TP addressing.";
                leaf mac-address {
                  type yang:mac-address;
                  mandatory true;
                  description "MAC address.";
                }
              }  // container mac-address
    
              container ipv4-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "IPv4 address type.";
                }
                description
                  "IP address based TP addressing.";
                leaf ipv4-address {
                  type inet:ipv4-address;
                  mandatory true;
                  description "IPv4 address.";
                }
              }  // container ipv4-address
    
              container ipv6-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "IPv6 address type.";
                }
                description
                  "IPv6 address based TP addressing.";
                leaf ipv6-address {
                  type inet:ipv6-address;
                  mandatory true;
                  description "IPv6 address.";
                }
              }  // container ipv6-address
    
              container tp-attribute {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                  description
                    "Test point attribute type.";
                }
                description
                  "Test Point Attribute Container.";
                leaf tp-attribute-type {
                  type address-attribute-type;
                  description "Test point type.";
                }
    
                choice tp-attribute-value {
                  description
                    "Test point value.";
                  leaf ip-prefix {
                    type inet:ip-prefix;
                    description
                      "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf bgp {
                    type inet:ip-prefix;
                    description
                      "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf tunnel-interface {
                    type uint32;
                    description
                      "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures.";
    
                  }
    
                  case pw {
                    leaf remote-pe-address {
                      type inet:ip-address;
                      description
                        "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf pw-id {
                      type uint32;
                      description
                        "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case pw
    
                  case vpls {
                    leaf route-distinguisher {
                      type rt:route-distinguisher;
                      description
                        "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf sender-ve-id {
                      type uint16;
                      description
                        "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf receiver-ve-id {
                      type uint16;
                      description
                        "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case vpls
                  choice root-address {
                    description
                      "Root address choice.";
                    case ip-address {
                      leaf source-address {
                        type inet:ip-address;
                        description
                          "IP address.";
                      }
    
                      leaf group-ip-address {
                        type inet:ip-address;
                        description
                          "Group IP address.";
                      }
                    }  // case ip-address
                    leaf as-number {
                      type inet:as-number;
                      description
                        "The AS number that identifies an Autonomous
    System.";
                    }
                    leaf lsp-id {
                      type string;
                      description
                        "LSP ID is an identifier of a LSP
    within a MPLS network.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // choice root-address
                }  // choice tp-attribute-value
              }  // container tp-attribute
    
              container system-info {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "System ID address type.";
                }
                description
                  "Router ID container.";
                leaf router-id {
                  type rt:router-id;
                  description
                    "Router ID assigned to this node.";
                }
              }  // container system-info
    
              leaf egress-intf-name {
                type if:interface-ref;
                description
                  "Egress interface name.";
              }
            }  // container src-test-point
    
            container dest-test-point {
              description
                "Destination test point.";
              leaf ni {
                type routing-instance-ref;
                description
                  "The ni is used to describe virtual resource partitioning
    that may be present on a network device.  An example of a
    common industry term for virtual resource partitioning is
    'VRF instance'.";
              }
    
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                mandatory true;
                description
                  "Test point address type.";
              }
    
              container mac-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "MAC address type.";
                }
                description
                  "MAC address based TP addressing.";
                leaf mac-address {
                  type yang:mac-address;
                  mandatory true;
                  description "MAC address.";
                }
              }  // container mac-address
    
              container ipv4-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "IPv4 address type.";
                }
                description
                  "IP address based TP addressing.";
                leaf ipv4-address {
                  type inet:ipv4-address;
                  mandatory true;
                  description "IPv4 address.";
                }
              }  // container ipv4-address
    
              container ipv6-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "IPv6 address type.";
                }
                description
                  "IPv6 address based TP addressing.";
                leaf ipv6-address {
                  type inet:ipv6-address;
                  mandatory true;
                  description "IPv6 address.";
                }
              }  // container ipv6-address
    
              container tp-attribute {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                  description
                    "Test point attribute type.";
                }
                description
                  "Test Point Attribute Container.";
                leaf tp-attribute-type {
                  type address-attribute-type;
                  description "Test point type.";
                }
    
                choice tp-attribute-value {
                  description
                    "Test point value.";
                  leaf ip-prefix {
                    type inet:ip-prefix;
                    description
                      "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf bgp {
                    type inet:ip-prefix;
                    description
                      "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf tunnel-interface {
                    type uint32;
                    description
                      "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures.";
    
                  }
    
                  case pw {
                    leaf remote-pe-address {
                      type inet:ip-address;
                      description
                        "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf pw-id {
                      type uint32;
                      description
                        "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case pw
    
                  case vpls {
                    leaf route-distinguisher {
                      type rt:route-distinguisher;
                      description
                        "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf sender-ve-id {
                      type uint16;
                      description
                        "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf receiver-ve-id {
                      type uint16;
                      description
                        "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case vpls
                  choice root-address {
                    description
                      "Root address choice.";
                    case ip-address {
                      leaf source-address {
                        type inet:ip-address;
                        description
                          "IP address.";
                      }
    
                      leaf group-ip-address {
                        type inet:ip-address;
                        description
                          "Group IP address.";
                      }
                    }  // case ip-address
                    leaf as-number {
                      type inet:as-number;
                      description
                        "The AS number that identifies an Autonomous
    System.";
                    }
                    leaf lsp-id {
                      type string;
                      description
                        "LSP ID is an identifier of a LSP
    within a MPLS network.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // choice root-address
                }  // choice tp-attribute-value
              }  // container tp-attribute
    
              container system-info {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "System ID address type.";
                }
                description
                  "Router ID container.";
                leaf router-id {
                  type rt:router-id;
                  description
                    "Router ID assigned to this node.";
                }
              }  // container system-info
    
              leaf ingress-intf-name {
                type if:interface-ref;
                description
                  "Ingress interface name.";
              }
            }  // container dest-test-point
    
            leaf sequence-number {
              type uint64;
              default "0";
              description
                "Sequence number in data packets.  A value of
    zero indicates that no sequence number is sent.";
            }
    
            leaf hop-cnt {
              type uint8;
              default "0";
              description
                "Hop count.  A value of zero indicates
    that no hop count is sent.";
            }
    
            container session-packet-statistics {
              description
                "Statistics per session packet.";
              leaf rx-packet-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of received OAM packets.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf tx-packet-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of transmitted OAM packets.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf rx-bad-packet {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total number of received bad OAM packets.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf tx-packet-failed {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total number of OAM packets that failed when sent.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
            }  // container session-packet-statistics
    
            container session-error-statistics {
              description
                "Per-session error statistics.";
              leaf packet-loss-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of received packet drops.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf loss-ratio {
                type percentage;
                description
                  "Loss ratio of the packets.  Expressed as percentage
    of packets lost with respect to packets sent.";
              }
    
              leaf packet-reorder-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of received packets that were reordered.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf packets-out-of-seq-count {
                type uint32 {
                  range "0..4294967295";
                }
                description
                  "Total count of packets received out of sequence.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf packets-dup-count {
                type uint32 {
                  range "0..4294967295";
                }
                description
                  "Total count of received packet duplicates.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
            }  // container session-error-statistics
    
            container session-delay-statistics {
              description
                "Session delay summarized information.  By default, a
    one-way measurement protocol (e.g., OWAMP) is used
    to measure delay.  When a two-way measurement protocol
    (e.g., TWAMP) is used instead, it can be indicated
    using the protocol-id defined in RPC operation of
    retrieval methods for connectionless OAM (RFC 8533),
    i.e., set protocol-id as OWAMP.  Note that only one
    measurement protocol for delay is specified for
    interoperability reasons.";
              leaf time-unit-value {
                type identityref {
                  base lime:time-unit-type;
                }
                default "lime:milliseconds";
                description
                  "Time units, where the options are s, ms, ns, etc.";
              }
    
              leaf min-delay-value {
                type uint32;
                description
                  "Minimum delay value observed.";
              }
    
              leaf max-delay-value {
                type uint32;
                description
                  "Maximum delay value observed.";
              }
    
              leaf average-delay-value {
                type uint32;
                description
                  "Average delay value observed.";
              }
            }  // container session-delay-statistics
    
            container session-jitter-statistics {
              description
                "Summarized information about session jitter.  By default,
    jitter is measured using IP Packet Delay Variation
    (IPDV) as defined in RFC 3393.  When the other measurement
    method is used instead (e.g., Packet Delay Variation used
    in ITU-T Recommendation Y.1540, it can be indicated using
    protocol-id-meta-data defined in RPC operation of
    retrieval methods for connectionless OAM (RFC 8533).
    Note that only one measurement method for jitter is
    specified for interoperability reasons.";
              leaf unit-value {
                type identityref {
                  base lime:time-unit-type;
                }
                default "lime:milliseconds";
                description
                  "Time units, where the options are s, ms, ns, etc.";
              }
    
              leaf min-jitter-value {
                type uint32;
                description
                  "Minimum jitter value observed.";
              }
    
              leaf max-jitter-value {
                type uint32;
                description
                  "Maximum jitter value observed.";
              }
    
              leaf average-jitter-value {
                type uint32;
                description
                  "Average jitter value observed.";
              }
            }  // container session-jitter-statistics
          }
        }  // rpc continuity-check
    
        rpc path-discovery {
          if-feature cl-oam:path-discovery;
          description
            "Path discovery RPC operation as per RFC 7276.";
          reference
            "RFC 7276: An Overview of Operations, Administration, and
            Maintenance (OAM) Tools";
    
          input {
            container destination-tp {
              description
                "Destination test point.";
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                mandatory true;
                description
                  "Test point address type.";
              }
    
              container mac-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "MAC address type.";
                }
                description
                  "MAC address based TP addressing.";
                leaf mac-address {
                  type yang:mac-address;
                  mandatory true;
                  description "MAC address.";
                }
              }  // container mac-address
    
              container ipv4-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "IPv4 address type.";
                }
                description
                  "IP address based TP addressing.";
                leaf ipv4-address {
                  type inet:ipv4-address;
                  mandatory true;
                  description "IPv4 address.";
                }
              }  // container ipv4-address
    
              container ipv6-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "IPv6 address type.";
                }
                description
                  "IPv6 address based TP addressing.";
                leaf ipv6-address {
                  type inet:ipv6-address;
                  mandatory true;
                  description "IPv6 address.";
                }
              }  // container ipv6-address
    
              container tp-attribute {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                  description
                    "Test point attribute type.";
                }
                description
                  "Test Point Attribute Container.";
                leaf tp-attribute-type {
                  type address-attribute-type;
                  description "Test point type.";
                }
    
                choice tp-attribute-value {
                  description
                    "Test point value.";
                  leaf ip-prefix {
                    type inet:ip-prefix;
                    description
                      "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf bgp {
                    type inet:ip-prefix;
                    description
                      "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf tunnel-interface {
                    type uint32;
                    description
                      "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures.";
    
                  }
    
                  case pw {
                    leaf remote-pe-address {
                      type inet:ip-address;
                      description
                        "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf pw-id {
                      type uint32;
                      description
                        "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case pw
    
                  case vpls {
                    leaf route-distinguisher {
                      type rt:route-distinguisher;
                      description
                        "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf sender-ve-id {
                      type uint16;
                      description
                        "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf receiver-ve-id {
                      type uint16;
                      description
                        "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case vpls
                  choice root-address {
                    description
                      "Root address choice.";
                    case ip-address {
                      leaf source-address {
                        type inet:ip-address;
                        description
                          "IP address.";
                      }
    
                      leaf group-ip-address {
                        type inet:ip-address;
                        description
                          "Group IP address.";
                      }
                    }  // case ip-address
                    leaf as-number {
                      type inet:as-number;
                      description
                        "The AS number that identifies an Autonomous
    System.";
                    }
                    leaf lsp-id {
                      type string;
                      description
                        "LSP ID is an identifier of a LSP
    within a MPLS network.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // choice root-address
                }  // choice tp-attribute-value
              }  // container tp-attribute
    
              container system-info {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "System ID address type.";
                }
                description
                  "Router ID container.";
                leaf router-id {
                  type rt:router-id;
                  description
                    "Router ID assigned to this node.";
                }
              }  // container system-info
            }  // container destination-tp
    
            leaf source-interface {
              type if:interface-ref;
              mandatory true;
              description "Source interface.";
            }
    
            leaf outbound-interface {
              type if:interface-ref;
              mandatory true;
              description "Outbound interface.";
            }
    
            leaf vrf {
              type cl-oam:routing-instance-ref;
              description
                "Virtual Routing and Forwarding (VRF) instance.";
            }
    
            leaf session-type {
              type enumeration {
                enum "proactive" {
                  value 0;
                  description
                    "The current session is a proactive session.";
                }
                enum "on-demand" {
                  value 1;
                  description
                    "The current session is an on-demand session.";
                }
              }
              default "on-demand";
              description
                "Indicate which kind of activation will be used
    by the current session.";
            }
    
            leaf max-ttl {
              type uint8;
              default "255";
              description
                "Maximum TTL indicates the maximum number of hops that
               a packet is permitted to travel before being discarded
               by a router.  By default, the maximum TTL is set to
               255.";
            }
          }
    
          output {
            list response-list {
              key "response-index";
              description
                "Path discovery response list.";
              leaf response-index {
                type uint32;
                mandatory true;
                description "Response index.";
              }
    
              leaf protocol-id {
                type identityref {
                  base protocol-id;
                }
                mandatory true;
                description
                  "Protocol used in path discovery.  This could be a
                 standard protocol (e.g., TCP/IP protocols, MPLS, etc.)
                 or a proprietary protocol as identified by
                 this field.";
              }
    
              leaf protocol-id-meta-data {
                type identityref {
                  base protocol-id-meta-data;
                }
                description
                  "An optional metadata related to the protocol ID.
                 For example, this could be the Internet Protocol
                 number for standard Internet Protocols used for
                 help with protocol processing.";
              }
    
              leaf status-code {
                type identityref {
                  base status-code;
                }
                mandatory true;
                description
                  "Status code for Continuity Check RPC operation.
                 This could be a basic status code (e.g., destination
                 is reachable or destination is not reachable) or some
                 customized status code as identified by this field.";
              }
    
              leaf status-sub-code {
                type identityref {
                  base status-sub-code;
                }
                mandatory true;
                description
                  "An optional status-sub-code for Continuity Check
                 RPC operation.  If the basic status code is destination
                 reachable, this status-sub-code doesn't need to be
                 specified.  If the basic status code is destination
                 unreachable, the status-sub-code can be used to specify
                 the detailed reasons.  This could be a basic
                 sub-status-code (such as an invalid Continuity Check) or
                 other error codes specific to the protocol under use for
                 Continuity Checks.  For example, if ICMP is the protocol
                 under use, the error codes defined in RFC 4443
                 can be used to specify the reasons specific to ICMP.
                 This technology-specific status-sub-code can be defined
                 in technology-specific models.";
                reference
                  "RFC 4443: The IETF Administrative Oversight Committee
                  (IAOC) Member Selection Guidelines and Process.";
    
              }
            }  // list response-list
    
            container src-test-point {
              description "Source test point.";
              leaf ni {
                type routing-instance-ref;
                description
                  "The ni is used to describe virtual resource partitioning
    that may be present on a network device.  An example of a
    common industry term for virtual resource partitioning is
    'VRF instance'.";
              }
    
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                mandatory true;
                description
                  "Test point address type.";
              }
    
              container mac-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "MAC address type.";
                }
                description
                  "MAC address based TP addressing.";
                leaf mac-address {
                  type yang:mac-address;
                  mandatory true;
                  description "MAC address.";
                }
              }  // container mac-address
    
              container ipv4-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "IPv4 address type.";
                }
                description
                  "IP address based TP addressing.";
                leaf ipv4-address {
                  type inet:ipv4-address;
                  mandatory true;
                  description "IPv4 address.";
                }
              }  // container ipv4-address
    
              container ipv6-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "IPv6 address type.";
                }
                description
                  "IPv6 address based TP addressing.";
                leaf ipv6-address {
                  type inet:ipv6-address;
                  mandatory true;
                  description "IPv6 address.";
                }
              }  // container ipv6-address
    
              container tp-attribute {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                  description
                    "Test point attribute type.";
                }
                description
                  "Test Point Attribute Container.";
                leaf tp-attribute-type {
                  type address-attribute-type;
                  description "Test point type.";
                }
    
                choice tp-attribute-value {
                  description
                    "Test point value.";
                  leaf ip-prefix {
                    type inet:ip-prefix;
                    description
                      "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf bgp {
                    type inet:ip-prefix;
                    description
                      "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf tunnel-interface {
                    type uint32;
                    description
                      "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures.";
    
                  }
    
                  case pw {
                    leaf remote-pe-address {
                      type inet:ip-address;
                      description
                        "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf pw-id {
                      type uint32;
                      description
                        "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case pw
    
                  case vpls {
                    leaf route-distinguisher {
                      type rt:route-distinguisher;
                      description
                        "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf sender-ve-id {
                      type uint16;
                      description
                        "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf receiver-ve-id {
                      type uint16;
                      description
                        "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case vpls
                  choice root-address {
                    description
                      "Root address choice.";
                    case ip-address {
                      leaf source-address {
                        type inet:ip-address;
                        description
                          "IP address.";
                      }
    
                      leaf group-ip-address {
                        type inet:ip-address;
                        description
                          "Group IP address.";
                      }
                    }  // case ip-address
                    leaf as-number {
                      type inet:as-number;
                      description
                        "The AS number that identifies an Autonomous
    System.";
                    }
                    leaf lsp-id {
                      type string;
                      description
                        "LSP ID is an identifier of a LSP
    within a MPLS network.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // choice root-address
                }  // choice tp-attribute-value
              }  // container tp-attribute
    
              container system-info {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "System ID address type.";
                }
                description
                  "Router ID container.";
                leaf router-id {
                  type rt:router-id;
                  description
                    "Router ID assigned to this node.";
                }
              }  // container system-info
            }  // container src-test-point
    
            container dest-test-point {
              description
                "Destination test point.";
              leaf ni {
                type routing-instance-ref;
                description
                  "The ni is used to describe virtual resource partitioning
    that may be present on a network device.  An example of a
    common industry term for virtual resource partitioning is
    'VRF instance'.";
              }
    
              leaf tp-location-type {
                type identityref {
                  base tp-address-technology-type;
                }
                mandatory true;
                description
                  "Test point address type.";
              }
    
              container mac-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                  description
                    "MAC address type.";
                }
                description
                  "MAC address based TP addressing.";
                leaf mac-address {
                  type yang:mac-address;
                  mandatory true;
                  description "MAC address.";
                }
              }  // container mac-address
    
              container ipv4-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                  description
                    "IPv4 address type.";
                }
                description
                  "IP address based TP addressing.";
                leaf ipv4-address {
                  type inet:ipv4-address;
                  mandatory true;
                  description "IPv4 address.";
                }
              }  // container ipv4-address
    
              container ipv6-address {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                  description
                    "IPv6 address type.";
                }
                description
                  "IPv6 address based TP addressing.";
                leaf ipv6-address {
                  type inet:ipv6-address;
                  mandatory true;
                  description "IPv6 address.";
                }
              }  // container ipv6-address
    
              container tp-attribute {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                  description
                    "Test point attribute type.";
                }
                description
                  "Test Point Attribute Container.";
                leaf tp-attribute-type {
                  type address-attribute-type;
                  description "Test point type.";
                }
    
                choice tp-attribute-value {
                  description
                    "Test point value.";
                  leaf ip-prefix {
                    type inet:ip-prefix;
                    description
                      "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf bgp {
                    type inet:ip-prefix;
                    description
                      "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures";
    
                  }
                  leaf tunnel-interface {
                    type uint32;
                    description
                      "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                    reference
                      "RFC 8029: Detecting Multiprotocol Label
                      Switched (MPLS) Data-Plane Failures.";
    
                  }
    
                  case pw {
                    leaf remote-pe-address {
                      type inet:ip-address;
                      description
                        "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf pw-id {
                      type uint32;
                      description
                        "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case pw
    
                  case vpls {
                    leaf route-distinguisher {
                      type rt:route-distinguisher;
                      description
                        "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf sender-ve-id {
                      type uint16;
                      description
                        "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
    
                    leaf receiver-ve-id {
                      type uint16;
                      description
                        "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // case vpls
                  choice root-address {
                    description
                      "Root address choice.";
                    case ip-address {
                      leaf source-address {
                        type inet:ip-address;
                        description
                          "IP address.";
                      }
    
                      leaf group-ip-address {
                        type inet:ip-address;
                        description
                          "Group IP address.";
                      }
                    }  // case ip-address
                    leaf as-number {
                      type inet:as-number;
                      description
                        "The AS number that identifies an Autonomous
    System.";
                    }
                    leaf lsp-id {
                      type string;
                      description
                        "LSP ID is an identifier of a LSP
    within a MPLS network.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                  }  // choice root-address
                }  // choice tp-attribute-value
              }  // container tp-attribute
    
              container system-info {
                when
                  "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                  description
                    "System ID address type.";
                }
                description
                  "Router ID container.";
                leaf router-id {
                  type rt:router-id;
                  description
                    "Router ID assigned to this node.";
                }
              }  // container system-info
            }  // container dest-test-point
    
            leaf sequence-number {
              type uint64;
              default "0";
              description
                "Sequence number in data packets.  A value of
    zero indicates that no sequence number is sent.";
            }
    
            leaf hop-cnt {
              type uint8;
              default "0";
              description
                "Hop count.  A value of zero indicates
    that no hop count is sent.";
            }
    
            container session-packet-statistics {
              description
                "Statistics per session packet.";
              leaf rx-packet-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of received OAM packets.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf tx-packet-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of transmitted OAM packets.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf rx-bad-packet {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total number of received bad OAM packets.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf tx-packet-failed {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total number of OAM packets that failed when sent.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
            }  // container session-packet-statistics
    
            container session-error-statistics {
              description
                "Per-session error statistics.";
              leaf packet-loss-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of received packet drops.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf loss-ratio {
                type percentage;
                description
                  "Loss ratio of the packets.  Expressed as percentage
    of packets lost with respect to packets sent.";
              }
    
              leaf packet-reorder-count {
                type uint32 {
                  range "0..4294967295";
                }
                default "0";
                description
                  "Total count of received packets that were reordered.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf packets-out-of-seq-count {
                type uint32 {
                  range "0..4294967295";
                }
                description
                  "Total count of packets received out of sequence.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
    
              leaf packets-dup-count {
                type uint32 {
                  range "0..4294967295";
                }
                description
                  "Total count of received packet duplicates.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
              }
            }  // container session-error-statistics
    
            container session-delay-statistics {
              description
                "Session delay summarized information.  By default, a
    one-way measurement protocol (e.g., OWAMP) is used
    to measure delay.  When a two-way measurement protocol
    (e.g., TWAMP) is used instead, it can be indicated
    using the protocol-id defined in RPC operation of
    retrieval methods for connectionless OAM (RFC 8533),
    i.e., set protocol-id as OWAMP.  Note that only one
    measurement protocol for delay is specified for
    interoperability reasons.";
              leaf time-unit-value {
                type identityref {
                  base lime:time-unit-type;
                }
                default "lime:milliseconds";
                description
                  "Time units, where the options are s, ms, ns, etc.";
              }
    
              leaf min-delay-value {
                type uint32;
                description
                  "Minimum delay value observed.";
              }
    
              leaf max-delay-value {
                type uint32;
                description
                  "Maximum delay value observed.";
              }
    
              leaf average-delay-value {
                type uint32;
                description
                  "Average delay value observed.";
              }
            }  // container session-delay-statistics
    
            container session-jitter-statistics {
              description
                "Summarized information about session jitter.  By default,
    jitter is measured using IP Packet Delay Variation
    (IPDV) as defined in RFC 3393.  When the other measurement
    method is used instead (e.g., Packet Delay Variation used
    in ITU-T Recommendation Y.1540, it can be indicated using
    protocol-id-meta-data defined in RPC operation of
    retrieval methods for connectionless OAM (RFC 8533).
    Note that only one measurement method for jitter is
    specified for interoperability reasons.";
              leaf unit-value {
                type identityref {
                  base lime:time-unit-type;
                }
                default "lime:milliseconds";
                description
                  "Time units, where the options are s, ms, ns, etc.";
              }
    
              leaf min-jitter-value {
                type uint32;
                description
                  "Minimum jitter value observed.";
              }
    
              leaf max-jitter-value {
                type uint32;
                description
                  "Maximum jitter value observed.";
              }
    
              leaf average-jitter-value {
                type uint32;
                description
                  "Average jitter value observed.";
              }
            }  // container session-jitter-statistics
    
            container path-verification {
              description
                "Optional information related to path verification.";
              leaf flow-info {
                type string;
                description
                  "Information that refers to the flow.";
              }
    
              container session-path-verification-statistics {
                description
                  "OAM path verification statistics per session.";
                leaf verified-count {
                  type uint32 {
                    range "0..4294967295";
                  }
                  description
                    "Total number of OAM packets that
    went through a path as intended.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
                }
    
                leaf failed-count {
                  type uint32 {
                    range "0..4294967295";
                  }
                  description
                    "Total number of OAM packets that
    went through an unintended path.
    The value of count will be set to zero (0)
    on creation and will thereafter increase
    monotonically until it reaches a maximum value
    of 2^32-1 (4294967295 decimal), when it wraps
    around and starts increasing again from zero.";
                }
              }  // container session-path-verification-statistics
            }  // container path-verification
    
            container path-trace-info {
              description
                "Optional per-hop path trace information about test points.
    The path trace information list typically has a single
    element for per-hop cases such as path-discovery RPC operation
    but allows a list of hop-related information for other types of
    data retrieval methods.";
              list path-trace-info-list {
                key "index";
                description
                  "Path trace information list.";
                leaf index {
                  type uint32;
                  description
                    "Trace information index.";
                }
    
                leaf ni {
                  type routing-instance-ref;
                  description
                    "The ni is used to describe virtual resource partitioning
    that may be present on a network device.  An example of a
    common industry term for virtual resource partitioning is
    'VRF instance'.";
                }
    
                leaf tp-location-type {
                  type identityref {
                    base tp-address-technology-type;
                  }
                  mandatory true;
                  description
                    "Test point address type.";
                }
    
                container mac-address {
                  when
                    "derived-from-or-self(../tp-location-type,'cl-oam:mac-address-type')" {
                    description
                      "MAC address type.";
                  }
                  description
                    "MAC address based TP addressing.";
                  leaf mac-address {
                    type yang:mac-address;
                    mandatory true;
                    description "MAC address.";
                  }
                }  // container mac-address
    
                container ipv4-address {
                  when
                    "derived-from-or-self(../tp-location-type,'cl-oam:ipv4-address-type')" {
                    description
                      "IPv4 address type.";
                  }
                  description
                    "IP address based TP addressing.";
                  leaf ipv4-address {
                    type inet:ipv4-address;
                    mandatory true;
                    description "IPv4 address.";
                  }
                }  // container ipv4-address
    
                container ipv6-address {
                  when
                    "derived-from-or-self(../tp-location-type,'cl-oam:ipv6-address-type')" {
                    description
                      "IPv6 address type.";
                  }
                  description
                    "IPv6 address based TP addressing.";
                  leaf ipv6-address {
                    type inet:ipv6-address;
                    mandatory true;
                    description "IPv6 address.";
                  }
                }  // container ipv6-address
    
                container tp-attribute {
                  when
                    "derived-from-or-self(../tp-location-type,'cl-oam:tp-attribute-type')" {
                    description
                      "Test point attribute type.";
                  }
                  description
                    "Test Point Attribute Container.";
                  leaf tp-attribute-type {
                    type address-attribute-type;
                    description
                      "Test point type.";
                  }
    
                  choice tp-attribute-value {
                    description
                      "Test point value.";
                    leaf ip-prefix {
                      type inet:ip-prefix;
                      description
                        "Generic IPv4/IPv6 prefix.  See Sections 3.2.13 and
    3.2.14 of RFC 8029.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                    leaf bgp {
                      type inet:ip-prefix;
                      description
                        "BGP Labeled IPv4/IPv6 Prefix.  See Sections
    3.2.11 and 3.2.12 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures";
    
                    }
                    leaf tunnel-interface {
                      type uint32;
                      description
                        "Basic IPv4/IPv6 Tunnel ID.  See Sections 3.2.3
    and 3.2.4 of RFC 8029 for details.";
                      reference
                        "RFC 8029: Detecting Multiprotocol Label
                        Switched (MPLS) Data-Plane Failures.";
    
                    }
    
                    case pw {
                      leaf remote-pe-address {
                        type inet:ip-address;
                        description
                          "Remote PE address.  See Section 3.2.8
    of RFC 8029 for details.";
                        reference
                          "RFC 8029: Detecting Multiprotocol Label
                          Switched (MPLS) Data-Plane Failures";
    
                      }
    
                      leaf pw-id {
                        type uint32;
                        description
                          "Pseudowire ID is a non-zero 32-bit ID.  See Sections
    3.2.8 and 3.2.9 of RFC 8029 for details.";
                        reference
                          "RFC 8029: Detecting Multiprotocol Label
                          Switched (MPLS) Data-Plane Failures";
    
                      }
                    }  // case pw
    
                    case vpls {
                      leaf route-distinguisher {
                        type rt:route-distinguisher;
                        description
                          "Route Distinguisher is an 8-octet identifier
    used to distinguish information about various
    L2VPNs advertised by a node.";
                        reference
                          "RFC 8029: Detecting Multiprotocol Label
                          Switched (MPLS) Data-Plane Failures";
    
                      }
    
                      leaf sender-ve-id {
                        type uint16;
                        description
                          "Sender's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                        reference
                          "RFC 8029: Detecting Multiprotocol Label
                          Switched (MPLS) Data-Plane Failures";
    
                      }
    
                      leaf receiver-ve-id {
                        type uint16;
                        description
                          "Receiver's VE ID.  The VE ID (VPLS Edge Identifier)
    is a 2-octet identifier.";
                        reference
                          "RFC 8029: Detecting Multiprotocol Label
                          Switched (MPLS) Data-Plane Failures";
    
                      }
                    }  // case vpls
                    choice root-address {
                      description
                        "Root address choice.";
                      case ip-address {
                        leaf source-address {
                          type inet:ip-address;
                          description
                            "IP address.";
                        }
    
                        leaf group-ip-address {
                          type inet:ip-address;
                          description
                            "Group IP address.";
                        }
                      }  // case ip-address
                      leaf as-number {
                        type inet:as-number;
                        description
                          "The AS number that identifies an Autonomous
    System.";
                      }
                      leaf lsp-id {
                        type string;
                        description
                          "LSP ID is an identifier of a LSP
    within a MPLS network.";
                        reference
                          "RFC 8029: Detecting Multiprotocol Label
                          Switched (MPLS) Data-Plane Failures";
    
                      }
                    }  // choice root-address
                  }  // choice tp-attribute-value
                }  // container tp-attribute
    
                container system-info {
                  when
                    "derived-from-or-self(../tp-location-type,'cl-oam:router-id-address-type')" {
                    description
                      "System ID address type.";
                  }
                  description
                    "Router ID container.";
                  leaf router-id {
                    type rt:router-id;
                    description
                      "Router ID assigned to this node.";
                  }
                }  // container system-info
    
                leaf timestamp-type {
                  type identityref {
                    base lime:timestamp-type;
                  }
                  description
                    "Type of timestamp, such as Truncated PTP or NTP.";
                }
    
                container timestamp-64bit {
                  when
                    "derived-from-or-self(../timestamp-type,'lime:truncated-ptp')or derived-from-or-self(../timestamp-type,'lime:ntp64')" {
                    description
                      "Only applies when PTP truncated or 64-bit NTP timestamp.";
                  }
                  description
                    "Container for 64-bit timestamp.  The Network Time Protocol
    (NTP) 64-bit timestamp format is defined in RFC 5905.  The
    PTP truncated timestamp format is defined in IEEE 1588v1.";
                  reference
                    "RFC 5905: Network Time Protocol Version 4: Protocol and
                        Algorithms Specification
                    IEEE 1588v1: IEEE Standard for a Precision Clock
                        Synchronization Protocol for Networked Measurement and
                        Control Systems Version 1";
    
                  leaf timestamp-sec {
                    type uint32;
                    description
                      "Absolute timestamp in seconds as per IEEE 1588v2
    or seconds part in 64-bit NTP timestamp.";
                  }
    
                  leaf timestamp-nanosec {
                    type uint32;
                    description
                      "Fractional part in nanoseconds as per IEEE 1588v2
    or fractional part in 64-bit NTP timestamp.";
                  }
                }  // container timestamp-64bit
    
                container timestamp-80bit {
                  when
                    "derived-from-or-self(../timestamp-type, 'lime:ptp80')" {
                    description
                      "Only applies when 80-bit PTP timestamp.";
                  }
                  if-feature ptp-long-format;
                  description
                    "Container for 80-bit timestamp.";
                  leaf timestamp-sec {
                    type uint64 {
                      range "0..281474976710655";
                    }
                    description
                      "48-bit timestamp in seconds as per IEEE 1588v2.";
                  }
    
                  leaf timestamp-nanosec {
                    type uint32;
                    description
                      "Fractional part in nanoseconds as per IEEE 1588v2.";
                  }
                }  // container timestamp-80bit
    
                container ntp-timestamp-32bit {
                  when
                    "derived-from-or-self(../timestamp-type,'lime:truncated-ntp')" {
                    description
                      "Only applies when 32-bit NTP short-format timestamp.";
                  }
                  if-feature ntp-short-format;
                  description
                    "Container for 32-bit timestamp RFC5905.";
                  reference
                    "RFC 5905: Network Time Protocol Version 4: Protocol and
                    Algorithms Specification.";
    
                  leaf timestamp-sec {
                    type uint16;
                    description
                      "Timestamp in seconds as per short-format NTP.";
                  }
    
                  leaf timestamp-nanosec {
                    type uint16;
                    description
                      "Truncated fractional part in 16-bit NTP timestamp.";
                  }
                }  // container ntp-timestamp-32bit
    
                container icmp-timestamp-32bit {
                  when
                    "derived-from-or-self(../timestamp-type, 'lime:icmp')" {
                    description
                      "Only applies when ICMP timestamp.";
                  }
                  if-feature icmp-timestamp;
                  description
                    "Container for 32-bit timestamp.  See RFC 792 for ICMP
    timestamp format.";
                  leaf timestamp-millisec {
                    type uint32;
                    description
                      "Timestamp in milliseconds for ICMP timestamp.";
                  }
                }  // container icmp-timestamp-32bit
    
                leaf ingress-intf-name {
                  type if:interface-ref;
                  description
                    "Ingress interface name.";
                }
    
                leaf egress-intf-name {
                  type if:interface-ref;
                  description
                    "Egress interface name.";
                }
    
                leaf queue-depth {
                  type uint32;
                  description
                    "Length of the queue of the interface from where
    the packet is forwarded out.  The queue depth could
    be the current number of memory buffers used by the
    queue, and a packet can consume one or more memory buffers,
    thus constituting device-level information.";
                }
    
                leaf transit-delay {
                  type uint32;
                  description
                    "Time in nanoseconds that the packet spent transiting a
    node.";
                }
    
                leaf app-meta-data {
                  type uint64;
                  description
                    "Application-specific data added by node.";
                }
              }  // list path-trace-info-list
            }  // container path-trace-info
          }
        }  // rpc path-discovery
      }  // module ietf-connectionless-oam-methods
    

© 2023 YumaWorks, Inc. All rights reserved.