netconfcentral logo

ietf-connectionless-oam@2017-09-06



  module ietf-connectionless-oam {

    yang-version 1.1;

    namespace
      "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam";

    prefix coam;

    import ietf-yang-schema-mount {
      prefix yangmnt;
    }
    import ietf-network {
      prefix nd;
    }
    import ietf-yang-types {
      prefix yang;
    }
    import ietf-interfaces {
      prefix if;
    }
    import ietf-inet-types {
      prefix inet;
    }
    import ietf-network-instance {
      prefix ni;
    }
    import ietf-routing-types {
      prefix rt;
    }

    organization "IETF LIME Working Group";

    contact
      "Deepak Kumar dekumar@cisco.com
     Qin Wu bill.wu@huawei.com
     S Raghavan srihari@cisco.com
     Zitao Wang wangzitao@huawei.com
     R Rahman rrahman@cisco.com";

    description
      "This YANG module defines the generic configuration,
     data model, statistics for connectionless OAM to be
     used within 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 model defined here to include protocol
     specific extensions";

    revision "2017-09-06" {
      description
        " Base model for Connectionless
       Operations, Administration,
       and Maintenance(OAM) ";
      reference
        " RFC XXXX: Connectionless
        Operations, Administration, and
        Maintenance(OAM)YANG Data Model";

    }


    feature connection-less {
      description
        "This feature indicates that OAM solution is connection less.";
    }

    feature continuity-check {
      description
        "This feature indicates that the server supports
       executing continuity check OAM command and
       returning a response. Servers that do not advertise
       this feature will not support executing
       continuity check command or rpc operation model for
       continuity check command.";
    }

    feature path-discovery {
      description
        "This feature indicates that the server supports
       executing path discovery OAM command and
       returning a response. Servers that do not advertise
       this feature will not support executing
       path discovery command or rpc operation model for
       path discovery command.";
    }

    typedef router-id {
      type yang:dotted-quad;
      description
        "A 32-bit number in the dotted quad format assigned to each
       router. This number uniquely identifies the router within an
       Autonomous System.";
    }

    typedef routing-instance-ref {
      type leafref {
        path "/ni:network-instances/ni:network-instance/ni:name";
      }
      description
        "This type is used for leafs that reference a routing instance
       configuration.";
    }

    identity address-attribute-types {
      base 
      description
        "This is base identity of address
       attribute types which are ip-prefix,
       bgp, tunnel, pwe3, vpls, etc.";
    }

    typedef address-attribute-type {
      type identityref {
        base address-attribute-types;
      }
      description
        "Target address attribute type.";
    }

    identity time-resolution {
      base 
      description "Time interval resolution";
    }

    identity hours {
      base time-resolution;
      description "Time resolution in Hours";
    }

    identity minutes {
      base time-resolution;
      description
        "Time resolution in Minutes";
    }

    identity seconds {
      base time-resolution;
      description
        "Time resolution in Seconds";
    }

    identity milliseconds {
      base time-resolution;
      description
        "Time resolution in Milliseconds";
    }

    identity microseconds {
      base time-resolution;
      description
        "Time resolution in Microseconds";
    }

    identity nanoseconds {
      base time-resolution;
      description
        "Time resolution in Nanoseconds";
    }

    grouping cc-session-statistics {
      description
        "Grouping for session statistics.";
      container cc-session-statistics {
        description "cc session counters";
        leaf session-count {
          type uint32;
          default "0";
          description
            "Number of Continuity Check sessions.
          A value of zero indicates that no session
          count is sent.";
        }

        leaf session-up-count {
          type uint32;
          default "0";
          description
            "Number of sessions which are up.
          A value of zero indicates that no up
          session count is sent.";
        }

        leaf session-down-count {
          type uint32;
          default "0";
          description
            "Number of sessions which are down.
         A value of zero indicates that no down
         session count is sent.";
        }

        leaf session-admin-down-count {
          type uint32;
          default "0";
          description
            "Number of sessions which are admin-down.
          A value of zero indicates that no admin
          down session count is sent.";
        }
      }  // container cc-session-statistics
    }  // grouping cc-session-statistics

    grouping session-packet-statistics {
      description
        "Grouping for per session packet statistics";
      container session-packet-statistics {
        description
          "Per session packet statistics.";
        leaf rx-packet-count {
          type uint32;
          default "0";
          description
            "Total number of received OAM packet count.
          A value of zero indicates that no received
          OAM packet count number is sent.";
        }

        leaf tx-packet-count {
          type uint32;
          default "0";
          description
            "Total number of transmitted OAM packet count.
          A value of zero indicates that no transmitted
         OAM packet count number is sent.";
        }

        leaf rx-bad-packet {
          type uint32;
          default "0";
          description
            "Total number of received bad OAM packet.
          A value of zero indicates that no received bad
          OAM packet count number is sent.";
        }

        leaf tx-packet-failed {
          type uint32;
          default "0";
          description
            "Total number of failed sending OAM packet.
          A value of zero indicates that no failed
         sending OAM packet count number is sent.";
        }
      }  // container session-packet-statistics
    }  // grouping session-packet-statistics

    grouping cc-per-session-statistics {
      description
        "Grouping for per session statistics";
      container cc-per-session-statistics {
        description
          "per session statistics.";
        leaf create-time {
          type yang:date-and-time;
          description
            "Time and date when session is created.";
        }

        leaf last-down-time {
          type yang:date-and-time;
          description
            "Time and date last time session is down.";
        }

        leaf last-up-time {
          type yang:date-and-time;
          description
            "Time and date last time session is up.";
        }

        leaf down-count {
          type uint32;
          default "0";
          description
            "Total Continuity Check sessions down count.
          A value of zero indicates that no
         down count per session is sent.";
        }

        leaf admin-down-count {
          type uint32;
          default "0";
          description
            "Total Continuity Check sessions admin down count.
          A value of zero indicates that no
         admin down count per session is sent.";
        }

        uses session-packet-statistics;
      }  // container cc-per-session-statistics
    }  // grouping cc-per-session-statistics

    grouping session-error-statistics {
      description
        "Grouping for per session error statistics";
      container session-error-statistics {
        description
          "Per session error statistics.";
        leaf packet-drops-count {
          type uint32;
          default "0";
          description
            "Total received packet drops count.
          A value of zero indicates that no
          packet drops count is sent.";
        }

        leaf packet-reorder-count {
          type uint32;
          default "0";
          description
            "Total received packet reordered count.
          A value of zero indicates that no packet
          reorder count is sent.";
        }

        leaf packets-out-of-seq-count {
          type uint32;
          description
            "Total received out of sequence count.
           A value of zero indicates that no packet
          out of sequence count is sent.";
        }

        leaf packets-dup-count {
          type uint32;
          description
            "Total received packet duplicates count.
          A value of zero indicates that no packet
          duplicates count is sent.";
        }
      }  // container session-error-statistics
    }  // grouping session-error-statistics

    grouping session-delay-statistics {
      description
        "Grouping for per session delay statistics";
      container session-delay-statistics {
        description
          "Session delay summarised information.";
        leaf time-resolution-value {
          type identityref {
            base time-resolution;
          }
          default "milliseconds";
          description
            "Time units among choice of 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
    }  // grouping session-delay-statistics

    grouping session-jitter-statistics {
      description
        "Grouping for per session jitter statistics";
      container session-jitter-statistics {
        description
          "Session jitter summarised information.";
        leaf time-resolution-value {
          type identityref {
            base time-resolution;
          }
          default "milliseconds";
          description
            "Time units among choice of 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
    }  // grouping session-jitter-statistics

    grouping session-path-verification-statistics {
      description
        "Grouping for per session path verification statistics";
      container session-path-verification-statistics {
        description
          "OAM per session path verification statistics.";
        leaf verified-count {
          type uint32;
          description
            "Total number of OAM packets that
           went through a path as intended.
          A value of zero indicates that no
          verified count is sent.";
        }

        leaf failed-count {
          type uint32;
          description
            "Total number of OAM packets that
           went through an unintended path.
          A value of zero indicates that no
         failed count is sent.";
        }
      }  // container session-path-verification-statistics
    }  // grouping session-path-verification-statistics

    grouping session-type {
      description
        "This object indicates which kind
      of activation will be used by the current
      session.";
      leaf session-type {
        type enumeration {
          enum "proactive" {
            value 0;
            description
              "The current session is proactive session.";
          }
          enum "on-demand" {
            value 1;
            description
              "The current session is on-demand session.";
          }
        }
        default "on-demand";
        description
          "Indicate which kind of activation will be used
         by the current session";
      }
    }  // grouping session-type

    identity tp-address-technology-type {
      base 
      description "Test point address type";
    }

    identity mac-address-type {
      base tp-address-technology-type;
      description "MAC address type";
    }

    identity ipv4-address-type {
      base tp-address-technology-type;
      description "IPv4 address type";
    }

    identity ipv6-address-type {
      base tp-address-technology-type;
      description "IPv6 address type";
    }

    identity tp-attribute-type {
      base tp-address-technology-type;
      description
        "Test point attribute type";
    }

    identity system-id-address-type {
      base tp-address-technology-type;
      description "System id address type";
    }

    identity as-number-address-type {
      base tp-address-technology-type;
      description "AS number address type";
    }

    identity route-distinguisher-address-type {
      base tp-address-technology-type;
      description
        "Route Distinguisher address type";
    }

    grouping tp-address {
      description "TP Address";
      leaf tp-location-types {
        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, 'coam:mac-address-type')" {
          description "MAC address type";
        }
        description
          "MAC Address based MP 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, 'coam:ipv4-address-type')" {
          description "IPv4 address type";
        }
        description
          "IP Address based MP 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, 'coam:ipv6-address-type')" {
          description "IPv6 address type";
        }
        description
          "ipv6 Address based MP 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, 'coam: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 "IP prefix.";
          }
          leaf bgp {
            type inet:ip-prefix;
            description
              "BGP Labeled Prefix ";
          }
          leaf tunnel-interface {
            type uint32;
            description "VPN Prefix ";
          }

          case pw {
            leaf remote-pe-address {
              type inet:ip-address;
              description
                "Remote pe address.";
            }

            leaf pw-id {
              type uint32;
              description
                "Pseudowire ID is a non-zero 32-bit ID.";
              reference
                "RFC 4379 :Detecting Multi-Protocol Label
                Switched (MPLS) Data Plane Failures";

            }
          }  // case pw

          case vpls {
            leaf route-distinguisher {
              type rt:route-distinguisher;
              description
                "Route Distinguisher is an 8 octets identifier
                used to distinguish information about various
                L2VPN advertised by a node.";
              reference
                "RFC 4379 :Detecting Multi-Protocol 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 4379 :Detecting Multi-Protocol 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 4379 :Detecting Multi-Protocol 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 represents autonomous system
                  numbers which identify an Autonomous System.";
            }
            leaf lsp-id {
              type string;
              description
                "LSP ID is an identifier of a LSP
                     within a MPLS network.";
              reference
                "RFC 4379 :Detecting Multi-Protocol 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, 'coam:system-id-address-type')" {
          description
            "System id address type";
        }
        description "system ID container.";
        leaf system-id {
          type rt:router-id;
          description
            "System ID assigned to this node.";
        }
      }  // container system-info
    }  // grouping tp-address

    grouping tp-address-ni {
      description
        "Test point address with VRF.";
      leaf ni {
        type routing-instance-ref;
        description
          "The ni is used to describe virtual resource partitioning
        that may be present on a network device.Example of common
        industry terms for virtual resource partitioning is VRF
        instance.";
      }

      uses tp-address;
    }  // grouping tp-address-ni

    grouping connectionless-oam-layers {
      description
        "Connectionless related OAM neighboring layer";
      list oam-neighboring-layers {
        key "index";
        description
          "List of neighboring test points in the upstream layer and/or
         downstream layer or same layer that are related to current test
         point. If neighboring test-point in the upstream layer exist, the
         technology-level is specified as +1. If neighboring test-point
         in the downstream layer exist, the technology-level is specified
         as -1, if neighboring test-points are located at the same layer
         as the current test-point, the technology-level is specified as
         0.";
        leaf index {
          type uint8 {
            range "0..128";
          }
          description
            "Index of a list of neighboring test points
           in the upstream layer and/or downstream layer
           and/or same layer";
        }

        leaf technology-level {
          type int8 {
            range "-1..1";
          }
          default "0";
          description
            "The relative technology level
           of neighboring test point
           corresponding to the current
           test point.Level 0 indicates default level,
           -1 means downstream layer related to current layer and +1
           means upstream layer related to current layer.
           In relationship 0 means same layer.";
        }

        choice tp-location {
          description "TP location.";
          case mac-address {
            description
              "MAC Address based MP Addressing.";
            leaf mac-address-location {
              type yang:mac-address;
              description "MAC Address";
            }
          }  // case mac-address

          case ipv4-address {
            description
              "IP Address based MP Addressing.";
            leaf ipv4-address-location {
              type inet:ipv4-address;
              description "Ipv4 Address";
            }
          }  // case ipv4-address

          case ipv6-address {
            description
              "IPv6 Address based MP Addressing.";
            leaf ipv6-address-location {
              type inet:ipv6-address;
              description "IPv6 Address";
            }
          }  // case ipv6-address

          case as-number {
            description
              "AS number for point to multipoint OAM";
            leaf as-number-location {
              type inet:as-number;
              description
                "AS number location";
            }
          }  // case as-number

          case system-id {
            description "System ID";
            leaf system-id-location {
              type router-id;
              description
                "System id location";
            }
          }  // case system-id
        }  // choice tp-location
      }  // list oam-neighboring-layers
    }  // grouping connectionless-oam-layers

    grouping tp-technology {
      description "OAM Technology";
      choice technology {
        default "technology-null";
        description "Technology choice.";
        case technology-null {
          description
            "This is a placeholder when no technology is needed.";
          leaf tech-null {
            type empty;
            description
              "There is no technology define";
          }
        }  // case technology-null
      }  // choice technology
    }  // grouping tp-technology

    grouping tp-tools {
      description "Test Point OAM Toolset.";
      container tp-tools {
        description
          "Container for test point OAM tools set.";
        leaf continuity-check {
          type boolean;
          mandatory true;
          description
            "A flag indicating whether or not the
           continuity check function is supported.";
          reference
            "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL.
             RFC 4443: Internet Control Message Protocol (ICMPv6)
            for the Internet Protocol Version 6 (IPv6) Specification.
             RFC 5880: Bidirectional Forwarding Detection.
             RFC 5881: BFD for IPv4 and IPv6.
             RFC 5883: BFD for Multihop Paths.
             RFC 5884: BFD for MPLS Label Switched Paths.
             RFC 5885: BFD for PW VCCV.
             RFC 6450: Multicast Ping Protocol.";

        }

        leaf path-discovery {
          type boolean;
          mandatory true;
          description
            "A flag indicating whether or not the
           path discovery function is supported.";
          reference
            "RFC 792: INTERNET CONTROL MESSAGE PROTOCOL.
             RFC 4443: Internet Control Message Protocol (ICMPv6)
            for the Internet Protocol Version 6 (IPv6) Specification.
             RFC 4884: Extended ICMP to Support Multi-part Message.
             RFC 5837:Extending ICMP for Interface
            and Next-Hop Identification.
             RFC 4379: LSP-PING.";

        }
      }  // container tp-tools
    }  // grouping tp-tools

    grouping test-point-location-info {
      description "Test point Location";
      uses tp-technology;

      uses tp-tools;

      anydata root {
        yangmnt:mount-point "root";
        description
          "Root for models supported per
         test point";
      }

      uses connectionless-oam-layers;
    }  // grouping test-point-location-info

    grouping test-point-locations {
      description
        "Group of test point locations.";
      leaf tp-location-type {
        type identityref {
          base tp-address-technology-type;
        }
        description
          "Test point location type.";
      }

      container ipv4-location-type {
        when
          "derived-from-or-self(../tp-location-type, 'coam:ipv4-address-type')" {
          description
            "When test point location type is equal to ipv4 address.";
        }
        description
          "ipv4 location type container.";
        container test-point-ipv4-location-list {
          description
            "Serves as top-level container
             for test point location list.";
          list test-point-locations {
            key "ipv4-location ni";
            description
              "List of test point locations.";
            leaf ipv4-location {
              type inet:ipv4-address;
              description "IPv4 Address.";
            }

            leaf ni {
              type routing-instance-ref;
              description
                "The ni is used to describe the
                 corresponding network instance";
            }

            uses test-point-location-info;
          }  // list test-point-locations
        }  // container test-point-ipv4-location-list
      }  // container ipv4-location-type

      container ipv6-location-type {
        when
          "derived-from-or-self(../tp-location-type, 'coam:ipv6-address-type')" {
          description
            "when test point location is equal to ipv6 address";
        }
        description
          "ipv6 location type container.";
        container test-point-ipv6-location-list {
          description
            "Serves as top-level container
             for test point location list.";
          list test-point-locations {
            key "ipv6-location ni";
            description
              "List of test point locations.";
            leaf ipv6-location {
              type inet:ipv6-address;
              description "IPv6 Address.";
            }

            leaf ni {
              type routing-instance-ref;
              description
                "The ni is used to describe the
                 corresponding network instance";
            }

            uses test-point-location-info;
          }  // list test-point-locations
        }  // container test-point-ipv6-location-list
      }  // container ipv6-location-type

      container mac-location-type {
        when
          "derived-from-or-self(../tp-location-type, 'coam:mac-address-type')" {
          description
            "when test point location type is equal to mac address.";
        }
        description
          "mac address location type container.";
        container test-point-mac-address-location-list {
          description
            "Serves as top-level container
             for test point location list.";
          list test-point-locations {
            key "mac-address-location";
            description
              "List of test point locations.";
            leaf mac-address-location {
              type yang:mac-address;
              description "MAC Address";
            }

            uses test-point-location-info;
          }  // list test-point-locations
        }  // container test-point-mac-address-location-list
      }  // container mac-location-type

      container group-as-number-location-type {
        when
          "derived-from-or-self(../tp-location-type, 'coam:as-number-address-type')" {
          description
            "when test point location type is equal to as-number.";
        }
        description
          "as number location type container.";
        container test-point-as-number-location-list {
          description
            "Serves as top-level container
             for test point location list.";
          list test-point-locations {
            key "as-number-location";
            description
              "List of test point locations.";
            leaf as-number-location {
              type inet:as-number;
              description
                "AS number for point to multi point OAM.";
            }

            leaf ni {
              type routing-instance-ref;
              description
                "The ni is used to describe the
                 corresponding network instance";
            }

            uses test-point-location-info;
          }  // list test-point-locations
        }  // container test-point-as-number-location-list
      }  // container group-as-number-location-type

      container group-system-id-location-type {
        when
          "derived-from-or-self(../tp-location-type, 'coam:system-id-address-type')" {
          description
            "when test point location type is equal to system-info.";
        }
        description
          "system ID location type container.";
        container test-point-system-info-location-list {
          description
            "Serves as top-level container for
             test point location list.";
          list test-point-locations {
            key "system-id-location";
            description
              "List of test point locations.";
            leaf system-id-location {
              type inet:uri;
              description "System Id.";
            }

            leaf ni {
              type routing-instance-ref;
              description
                "The ni is used to describe the
                 corresponding network instance";
            }

            uses test-point-location-info;
          }  // list test-point-locations
        }  // container test-point-system-info-location-list
      }  // container group-system-id-location-type
    }  // grouping test-point-locations

    augment /nd:networks/nd:network/nd:node {
      description
        "Augment test points of connectionless oam.";
      uses test-point-locations;
    }

    grouping uint64-timestamp {
      description "Grouping for timestamp.";
      leaf timestamp-sec {
        type uint32;
        description
          "Absolute timestamp in seconds as per IEEE1588v2
         or seconds part in 64-bit NTP timestamp.";
      }

      leaf timestamp-nanosec {
        type uint32;
        description
          "Fractional part in nanoseconds as per IEEE1588v2
         or Fractional part in 64-bit NTP timestamp.";
      }
    }  // grouping uint64-timestamp

    grouping timestamp {
      description "Grouping for timestamp.";
      leaf timestamp-type {
        type uint32;
        description
          "Truncated PTP = 0, NTP = 1";
      }

      uses uint64-timestamp;
    }  // grouping timestamp

    grouping path-discovery-data {
      description
        "Path discovery related data output from nodes.";
      container src-test-point {
        description "Source test point.";
        uses tp-address-ni;
      }  // container src-test-point

      container dest-test-point {
        description
          "Destination test point.";
        uses tp-address-ni;
      }  // 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";
      }

      uses session-packet-statistics;

      uses session-error-statistics;

      uses session-delay-statistics;

      uses session-jitter-statistics;

      container path-verification {
        description
          "Optional path verification related information.";
        leaf flow-info {
          type string;
          description
            "Informations that refers to the flow.";
        }

        uses session-path-verification-statistics;
      }  // container path-verification

      container path-trace-info {
        description
          "Optional path trace per-hop test point information.
         The path trace information list has typically a single
         element for per-hop cases like 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.";
          }

          uses tp-address-ni;

          uses timestamp;

          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 nano seconds
             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
    }  // grouping path-discovery-data

    grouping continuity-check-data {
      description
        "Continuity check data output from nodes.";
      container src-test-point {
        description "Source test point.";
        uses tp-address-ni;

        leaf egress-intf-name {
          type if:interface-ref;
          description
            "Egress interface name.";
        }
      }  // container src-test-point

      container dest-test-point {
        description
          "Destination test point.";
        uses tp-address-ni;

        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";
      }

      uses session-packet-statistics;

      uses session-error-statistics;

      uses session-delay-statistics;

      uses session-jitter-statistics;
    }  // grouping continuity-check-data

    container cc-session-statistics-data {
      if-feature continuity-check;
      config false;
      description
        "CC operational information.";
      container cc-ipv4-sessions-statistics {
        description "CC ipv4 sessions";
        uses cc-session-statistics;
      }  // container cc-ipv4-sessions-statistics

      container cc-ipv6-sessions-statistics {
        description "CC ipv6 sessions";
        uses cc-session-statistics;
      }  // container cc-ipv6-sessions-statistics
    }  // container cc-session-statistics-data
  }  // module ietf-connectionless-oam