< draft-ietf-lime-yang-connectionless-oam-04.txt   draft-ietf-lime-yang-connectionless-oam-05.txt >
Network Working Group D. Kumar Network Working Group D. Kumar
Internet-Draft Cisco Internet-Draft Cisco
Intended status: Standards Track M. Wang Intended status: Standards Track M. Wang
Expires: August 27, 2017 Q. Wu Expires: November 16, 2017 Q. Wu
Huawei Huawei
R. Rahman R. Rahman
S. Raghavan S. Raghavan
Cisco Cisco
February 23, 2017 May 15, 2017
Generic YANG Data Model for Connectionless Operations, Administration, Generic YANG Data Model for Connectionless Operations, Administration,
and Maintenance(OAM) protocols and Maintenance(OAM) protocols
draft-ietf-lime-yang-connectionless-oam-04 draft-ietf-lime-yang-connectionless-oam-05
Abstract Abstract
This document presents a base YANG Data model for connectionless This document presents a base YANG Data model for connectionless
Operations Administration, and Maintenance(OAM) protocols. It Operations Administration, and Maintenance(OAM) protocols. It
provides a technology-independent abstraction of key OAM constructs provides a technology-independent abstraction of key OAM constructs
for connectionless protocols. The base model presented here can be for connectionless protocols. The base model presented here can be
extended to include technology specific details. This is leading to extended to include technology specific details. This is leading to
uniformity between OAM protocols and support both nested OAM uniformity between OAM protocols and support both nested OAM
workflows (i.e., performing OAM functions at different or same levels workflows (i.e., performing OAM functions at different or same levels
skipping to change at page 1, line 43 skipping to change at page 1, line 43
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on August 27, 2017. This Internet-Draft will expire on November 16, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 20 skipping to change at page 2, line 20
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions used in this document . . . . . . . . . . . . . . 3 2. Conventions used in this document . . . . . . . . . . . . . . 3
2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 3. Overview of the Connectionless OAM Model . . . . . . . . . . 4
3. Overview of the Connectionless OAM Model . . . . . . . . . . 5
3.1. TP Address . . . . . . . . . . . . . . . . . . . . . . . 5 3.1. TP Address . . . . . . . . . . . . . . . . . . . . . . . 5
3.2. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.3. OAM-layers . . . . . . . . . . . . . . . . . . . . . . . 6 3.3. OAM-layers . . . . . . . . . . . . . . . . . . . . . . . 6
3.4. Test Point Locations Information . . . . . . . . . . . . 7 3.4. Test Point Locations Information . . . . . . . . . . . . 7
3.5. Test Point Locations . . . . . . . . . . . . . . . . . . 7 3.5. Test Point Locations . . . . . . . . . . . . . . . . . . 7
3.6. Path Discovery Data . . . . . . . . . . . . . . . . . . . 7 3.6. Path Discovery Data . . . . . . . . . . . . . . . . . . . 7
3.7. Continuity Check Data . . . . . . . . . . . . . . . . . . 8 3.7. Continuity Check Data . . . . . . . . . . . . . . . . . . 7
3.8. OAM data hierarchy . . . . . . . . . . . . . . . . . . . 8 4. OAM YANG Module . . . . . . . . . . . . . . . . . . . . . . . 7
4. OAM YANG Module . . . . . . . . . . . . . . . . . . . . . . . 17 5. Connectionless model applicability . . . . . . . . . . . . . 32
5. Connectionless model applicability . . . . . . . . . . . . . 47 5.1. BFD Extension . . . . . . . . . . . . . . . . . . . . . . 33
5.1. BFD Extension . . . . . . . . . . . . . . . . . . . . . . 47 5.1.1. Augment Method . . . . . . . . . . . . . . . . . . . 33
5.1.1. Augment Method . . . . . . . . . . . . . . . . . . . 47 5.1.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 35
5.1.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 50 5.2. LSP ping extension . . . . . . . . . . . . . . . . . . . 37
5.2. LSP ping extension . . . . . . . . . . . . . . . . . . . 52 5.2.1. Augment Method . . . . . . . . . . . . . . . . . . . 37
5.2.1. Technology type extension . . . . . . . . . . . . . . 52 5.2.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 38
5.2.2. Test point attributes extension . . . . . . . . . . . 53 6. Security Considerations . . . . . . . . . . . . . . . . . . . 40
6. Security Considerations . . . . . . . . . . . . . . . . . . . 53 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 55 8. Acknowlegements . . . . . . . . . . . . . . . . . . . . . . . 42
8. Acknowlegements . . . . . . . . . . . . . . . . . . . . . . . 55 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 42
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 55 9.1. Normative References . . . . . . . . . . . . . . . . . . 42
9.1. Normative References . . . . . . . . . . . . . . . . . . 55 9.2. Informative References . . . . . . . . . . . . . . . . . 44
9.2. Informative References . . . . . . . . . . . . . . . . . 57 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 58
1. Introduction 1. Introduction
Operations, Administration, and Maintenance (OAM) are important Operations, Administration, and Maintenance (OAM) are important
networking functions that allow operators to: networking functions that allow operators to:
1. Monitor networks connections (Reachability Verification, 1. Monitor networks connections (Reachability Verification,
Continuity Check). Continuity Check).
2. Troubleshoot failures (Fault verification and localization). 2. Troubleshoot failures (Fault verification and localization).
skipping to change at page 4, line 4 skipping to change at page 3, line 51
o configuration data o configuration data
o server o server
o state data o state data
The following terms are defined in [RFC6020] and are not redefined The following terms are defined in [RFC6020] and are not redefined
here: here:
o augment o augment
o data model
o data model
o data node o data node
The terminology for describing YANG data models is found in The terminology for describing YANG data models is found in
[RFC6020]. [RFC6020].
2.1. Terminology 2.1. Terminology
TP - Test Point TP - Test Point
MAC - Media Access Control MAC - Media Access Control
BFD - Bidirectional Forwarding Detection BFD - Bidirectional Forwarding Detection
RPC - A Remote Procedure Call, as used within the NETCONF protocol RPC - A Remote Procedure Call, as used within the NETCONF protocol
CC - Continuity Check [RFC7276] , Continuity Checks are used to CC - Continuity Check [RFC7276] , Continuity Checks are used to
verify that a destination is reachable and therefore also referred to verify that a destination is reachable and therefore also referred to
as reachability verification as reachability verification
2.2. Tree Diagrams
A simplified graphical representation of the data model is used in
this document. The meaning of the symbols in these diagrams is as
follows:
Each node is printed as:
<status> <flags> <name> <opts> <type>
<status> is one of:
+ for current
<flags> is one of:
rw for configuration data
ro for non-configuration data
-x for rpcs
-n for notifications
<name> is the name of the node
If the node is augmented into the tree from another module, its name
is printed as <prefix>:<name>.
<opts> is one of:
? for an optional leaf or choice
! for a presence container
* for a leaf-list or list
[<keys>] for a list's keys
<type> is the name of the type for leafs and leaf-lists
3. Overview of the Connectionless OAM Model 3. Overview of the Connectionless OAM Model
At the top of the model, there is an 'cc-oper-data' container for At the top of the model, there is an 'cc-oper-data' container for
session statistics. Grouping is also defined for common session session statistics. Grouping is also defined for common session
statistics and these are applicable for proactive OAM sessions. statistics and these are applicable for proactive OAM sessions.
Multiple 'test-point-locations' keyed using technology specific keys Multiple 'test-point-locations' keyed using technology specific keys
(eg., IPv4 address for IPv4 locations) are possible by augmented (eg., IPv4 address for IPv4 locations) are possible by augmented
network nodes which are defined in [I-D.ietf-i2rs-yang-network-topo] network nodes which are defined in [I-D.ietf-i2rs-yang-network-topo]
to describe the network hierarchies and the inventory of nodes to describe the network hierarchies and the inventory of nodes
contained in a network. Each 'test-point-location' is chosen based contained in a network. Each 'test-point-location' is chosen based
skipping to change at page 6, line 4 skipping to change at page 5, line 14
current test point under Test point Locations. The model is current test point under Test point Locations. The model is
augmented to "/nd:networks/nd:network/nd:node" using 'test-point- augmented to "/nd:networks/nd:network/nd:node" using 'test-point-
locations' defined below. locations' defined below.
3.1. TP Address 3.1. TP Address
In connectionless OAM, the tp address is defined with the following In connectionless OAM, the tp address is defined with the following
type: type:
o MAC address [RFC6136] o MAC address [RFC6136]
o IPv4 or IPv6 address o IPv4 or IPv6 address
o TP-attribute o TP-attribute
o System-id to represent the device or o System-id to represent the device or
node.[I-D.ietf-spring-sr-yang] node.[I-D.ietf-spring-sr-yang]
To define a forwarding treatment of a test packet, the 'tp-address' To define a forwarding treatment of a test packet, the 'tp-address'
needs to be associated with additional parameters, e.g. DSCP for IP needs to be associated with additional parameters, e.g. DSCP for IP
or TC for MPLS. In generic connectionless OAM YANG model, these or TC for MPLS. In generic connectionless OAM YANG model, these
parameters are not explicit configured. The model user can add parameters are not explicit configured. The model user can add
corresponding parameters according to their requirements. corresponding parameters according to their requirements.
3.2. Tools 3.2. Tools
The different OAM tools may be used in one of two basic types of The different OAM tools may be used in one of two basic types of
activation: proactive and on-demand. The proactive OAM refers to OAM activation: proactive and on-demand. The proactive OAM refers to OAM
actions which are carried out continuously to permit proactive actions which are carried out continuously to permit proactive
reporting of fault. The on-demand OAM refers to OAM actions which reporting of fault. The proactive OAM method requires persistent
are initiated via manual intervention for a limited time to carry out configuration. The on-demand OAM refers to OAM actions which are
diagnostics [RFC7276] [G.8013]. In connectionless OAM, 'session- initiated via manual intervention for a limited time to carry out
diagnostics. The on-demand OAM method requires only transient
configuration.[RFC7276] [G.8013]. In connectionless OAM, 'session-
type' is defined to indicate which kind of activation will be used by type' is defined to indicate which kind of activation will be used by
the current session. the current session.
In connectionless OAM, the tools attribute is used to describe a In connectionless OAM, the tools attribute is used to describe a
toolset for fault detection and isolation. And it can serve as a toolset for fault detection and isolation. And it can serve as a
constraint condition when the base model be extended to specific OAM constraint condition when the base model be extended to specific OAM
technology. For example, to fulfill the ICMP PING configuration, the technology. For example, to fulfill the ICMP PING configuration, the
"../coam:continuity-check" should be set to "true", and then the lime "../coam:continuity-check" should be set to "true", and then the lime
base model should be augmented with ICMP PING specific details. base model should be augmented with ICMP PING specific details.
3.3. OAM-layers 3.3. OAM-layers
As typical networks have a multi-layer architecture, the set of OAM As typical networks have a multi-layer architecture, the set of OAM
protocols similarly take a multi-layer structure; each layer may has protocols similarly take a multi-layer structure; each layer may has
its own OAM protocol [RFC7276] and is corresponding to specific its own OAM protocol [RFC7276] and is corresponding to specific
network portion or path and has associated test points. OAM-layers administrative domain or path and has associated test points. OAM-
is referred to a list of upper layer, lower layer that are related to layers is referred to a list of server layer, client layer that are
current test point. This allows users to easily navigate up and down related to current test point. This allows users to easily navigate
to efficiently troubleshoot a "loss of continuity defect" at between related layer to efficiently troubleshoot a "loss of
different layer. In this model, we have kept level default as 0, continuity defect". In this model, we have kept level default as 0,
when all test points are located at the same layer. 'Level' defines when all test points are located at the same layer. 'Level' defines
the relative technology level in a sequence of network portions, and the relative technology level in a sequence of administrative
is provided to allow correlation of faults in related OAM domains. domains, and is provided to allow correlation of faults in related
For example, there is a network in which data traffic between two OAM domains. For example, there is a network in which data traffic
customer edges is transported over three consecutive network between two customer edges is transported over three consecutive
portions, the current test point is located in the second network administrative domains, where the current test point is located in
portion. If there is a defect in the first network portion is the second administrative domain. In this scenario second
located at the upstream of the second network portion, the level of administrative domain is acting as client to first administrative
the first network portion is set to "-1". If the third network domain and server to third administrative domain. For Test Point at
portion is located at the downstream of the second network portion second administrative domain, client level is "-1", i.e. third
and the level is set to "1". In another case, if the first network administrative domain and server level is "1", i.e. first
portion and the third network portion is in the same level of the administrative domain. In another example, if the first
second network portion, the level is set to "0". The snippet below administrative domain and the second are in same level then it's
depicts an example of OAM layers. upstream or downstream administrative domain scenario and thus second
administrative domain level is set to "0".
list oam-layers { list oam-layers {
key "index"; key "index";
leaf index { leaf index {
type uint16 { type uint16 {
range "0..65535"; range "0..65535";
} }
} }
leaf level { leaf level {
type int32 { type int32 {
range "-1..1"; range "-1..1";
} }
description description
"Level"; "Level";
} }
ordered-by user; ordered-by system;
description description
"List of related oam layers."; "List of related oam layers.";
} }
3.4. Test Point Locations Information 3.4. Test Point Locations Information
This is a generic grouping for Test Point Locations Information. It This is a generic grouping for Test Point Locations Information. It
Provide details of Test Point Location using Tools, 'OAM-Layers' Provide details of Test Point Location using Tools, 'OAM-Layers'
grouping defined above. grouping defined above.
skipping to change at page 8, line 25 skipping to change at page 7, line 47
This is a generic grouping for continuity check data model that can This is a generic grouping for continuity check data model that can
be retrieved by any data retrieval methods including RPCs. be retrieved by any data retrieval methods including RPCs.
Continuity check data output from methods, includes 'src-test-point', Continuity check data output from methods, includes 'src-test-point',
'dst-test-point', 'sequence-number', 'hop-cnt' and session statistics 'dst-test-point', 'sequence-number', 'hop-cnt' and session statistics
of various kinds. The continuity check data model is made generic of various kinds. The continuity check data model is made generic
enough to allow different methods of data retrieval. None of the enough to allow different methods of data retrieval. None of the
fields are made mandatory for that reason. Noted that the retrieval fields are made mandatory for that reason. Noted that the retrieval
methods are defined in methods are defined in
[I-D.ietf-lime-yang-connectionless-oam-methods]. [I-D.ietf-lime-yang-connectionless-oam-methods].
3.8. OAM data hierarchy
The complete data hierarchy related to the OAM YANG model is
presented below.
module: ietf-connectionless-oam
+--ro cc-oper-data {continuity-check}?
+--ro cc-ipv4-sessions-statistics
| +--ro cc-session-statistics
| +--ro session-count? uint32
| +--ro session-up-count? uint32
| +--ro session-down-count? uint32
| +--ro session-admin-down-count? uint32
+--ro cc-ipv6-sessions-statistics
+--ro cc-session-statistics
+--ro session-count? uint32
+--ro session-up-count? uint32
+--ro session-down-count? uint32
+--ro session-admin-down-count? uint32
augment /nd:networks/nd:network/nd:node:
+--rw tp-location-type-value? identityref
+--rw (location-type)?
+--:(ipv4-location-type)
| +--rw test-point-ipv4-location-list
| +--rw test-point-locations* [ipv4-location]
| +--rw ipv4-location inet:ipv4-address
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location? inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(ipv6-location-type)
| +--rw test-point-ipv6-location-list
| +--rw test-point-locations* [ipv6-location]
| +--rw ipv6-location inet:ipv6-address
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location? inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(mac-location-type)
| +--rw test-point-mac-address-location-list
| +--rw test-point-locations* [mac-address-location]
| +--rw mac-address-location yang:mac-address
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location? inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(tunnel-location-type)
| +--rw test-point-tunnel-location-list
| +--rw test-point-locations* [tunnel-location]
| +--rw tunnel-location uint32
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location? inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(ip-prefix-location-type)
| +--rw test-point-ip-prefix-location-list
| +--rw test-point-locations* [ip-prefix-location]
| +--rw ip-prefix-location inet:ip-prefix
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(route-distinguisher-location-type)
| +--rw test-point-route-dist-location-list
| +--rw test-point-locations* [route-dist-location]
| +--rw route-dist-location uint32
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(group-ip-address-location-type)
| +--rw test-point-group-ip-address-location-list
| +--rw test-point-locations* [group-ip-address-location]
| +--rw group-ip-address-location IP-Multicast
-Group-Address
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location? inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(group-as-number-location-type)
| +--rw test-point-as-number-location-list
| +--rw test-point-locations* [as-number-location]
| +--rw as-number-location inet:as-number
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location? inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(group-lsp-id-location-type)
| +--rw test-point-lsp-id-location-list
| +--rw test-point-locations* [lsp-id-location]
| +--rw lsp-id-location string
| +--rw vrf? routing-instance-ref
| +--rw (technology)?
| | +--:(technology-null)
| | | +--rw tech-null? empty
| | +--:(technology-string)
| | +--rw ipv4-icmp? string
| +--rw tp-tools
| | +--rw connectivity-verification? boolean
| | +--rw continuity-check? boolean
| | +--rw path-discovery? boolean
| +--rw root?
| +--rw oam-layers* [index]
| +--rw index uint16
| +--rw level? int32
| +--rw (tp-location)?
| +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address)
| | +--rw ipv4-location inet:ipv4-address
| +--:(ipv6-location)
| | +--rw ipv6-address? inet:ipv6-address
| +--:(tunnel-location)
| | +--rw tunnel-location? uint32
| +--:(ip-prefix-location)
| | +--rw ip-prefix-location? inet:ip-prefix
| +--:(route-dist-location)
| | +--rw route-dist-location? uint32
| +--:(group-ip-address-location)
| | +--rw group-ip-address-location? IP-Multicast
-Group-Address
| +--:(as-number-location)
| | +--rw as-number-location? inet:as-number
| +--:(lsp-id-location)
| | +--rw lsp-id-location? string
| +--:(system-id-location)
| +--rw system-id-location? router-id
+--:(group-system-id-location-type)
+--rw test-point-system-info-location-list
+--rw test-point-locations* [system-id-location]
+--rw system-id-location inet:uri
+--rw vrf? routing-instance-ref
+--rw (technology)?
| +--:(technology-null)
| | +--rw tech-null? empty
| +--:(technology-string)
| +--rw ipv4-icmp? string
+--rw tp-tools
| +--rw connectivity-verification? boolean
| +--rw continuity-check? boolean
| +--rw path-discovery? boolean
+--rw root?
+--rw oam-layers* [index]
+--rw index uint16
+--rw level? int32
+--rw (tp-location)?
+--:(mac-address)
| +--rw mac-address-location? yang:mac-address
+--:(ipv4-address)
| +--rw ipv4-location? inet:ipv4-address
+--:(ipv6-location)
| +--rw ipv6-address? inet:ipv6-address
+--:(tunnel-location)
| +--rw tunnel-location? uint32
+--:(ip-prefix-location)
| +--rw ip-prefix-location inet:ip-prefix
+--:(route-dist-location)
| +--rw route-dist-location? uint32
+--:(group-ip-address-location)
| +--rw group-ip-address-location? IP-Multicast
-Group-Address
+--:(as-number-location)
| +--rw as-number-location? inet:as-number
+--:(lsp-id-location)
| +--rw lsp-id-location? string
+--:(system-id-location)
+--rw system-id-location? router-id
data hierarchy of OAM
4. OAM YANG Module 4. OAM YANG Module
<CODE BEGINS> file "ietf-connectionless-oam.yang" <CODE BEGINS> file "ietf-connectionless-oam@2017-04-25.yang"
module ietf-connectionless-oam { module ietf-connectionless-oam {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam"; namespace "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam";
prefix coam;
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";
}
organization "IETF LIME Working Group"; import ietf-yang-schema-mount {
contact 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;
}
"Deepak Kumar dekumar@cisco.com organization
Qin Wu bill.wu@huawei.com "IETF LIME Working Group";
S Raghavan srihari@cisco.com contact
Zitao Wang wangzitao@huawei.com "Deepak Kumar dekumar@cisco.com
R Rahman rrahman@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 indpendent manner.
Functional level abstraction is indendent with
YANG modeling. 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-04-25 {
description description
" Base model for Connectionless
Operations, Administration,
and Maintenance(OAM) ";
reference
" RFC XXXX: Connectionless
Operations, Administration, and
Maintenance(OAM)YANG Data Model";
}
"This YANG module defines the generic configuration, feature connection-less {
data model, statistics for connectionless OAM to be description
used within IETF in a protocol indpendent manner. "This feature indicates that OAM solution is connection less.";
Functional level abstraction is indendent with }
YANG modeling. 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-02-08 {
description
"Initial revision. - 10 version";
reference "";
}
/* features */
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 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 model for
path discovery command.";
}
/* Identities */
/* typedefs */
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.";
}
typedef IPv4-Multicast-Group-Address { feature continuity-check {
type string { description
pattern '(2((2[4-9])|(3[0-9]))\.)' "This feature indicates that the server supports
+'(([0-9]|[1-9][0-9]|1[0-9][0-9]|' executing continuity check OAM command and
+'2[0-4][0-9]|25[0-5])\.){2}' returning a response. Servers that do not advertise
+'([0-9]|[1-9][0-9]|1[0-9][0-9]' this feature will not support executing
+'|2[0-4][0-9]|25[0-5])'; continuity check command or rpc model for
} continuity check command.";
description }
"The IPv4-Multicast-Group-Address type
represents an IPv4 multicast address
in dotted-quad notation.";
reference "RFC4607";
} // typedef IPv4-Multicast-Group-Address
typedef IPv6-Multicast-Group-Address {
type string {
pattern
'(((FF|ff)[0-9a-fA-F]{2}):)([0-9a-fA-F]'
+'{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?'
+'(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4]'
+'[0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|'
+'2[0-4][0-9]|[01]?[0-9]?[0-9])))';
pattern
'(([^:]+:){6}(([^:]+:[^:]+)|'
+'(.*\..*)))|((([^:]+:)*[^:]+)'
+'?::(([^:]+:)*[^:]+)?)';
}
description
"The IPv6-Multicast-Group-Address
type represents an IPv6 address in full,
mixed, shortened, and shortened-mixed
notation.";
reference "RFC4291 2.7.
ietf-inet-types:ipv6-address";
}
typedef IP-Multicast-Group-Address {
type union {
type IPv4-Multicast-Group-Address;
type IPv6-Multicast-Group-Address;
}
description
"The IP-Multicast-Group-Address type
represents an IP multicast address and
is IP version neutral. The format of the
textual representations implies the IP version.";
}
identity address-attribute-types { 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 model for
path discovery command.";
}
description typedef router-id {
"This is base identity of address type yang:dotted-quad;
attribute types which are ip-prefix, description
bgp, tunnel, pwe3, vpls, etc."; "A 32-bit number in the dotted quad format assigned to each
} router. This number uniquely identifies the router within an
Autonomous System.";
}
typedef address-attribute-type { typedef routing-instance-ref {
type identityref { type leafref {
base address-attribute-types; path "/ni:network-instances/ni:network-instance/ni:name";
}
description
"Target address attribute type.";
} }
description
"This type is used for leafs that reference a routing instance
configuration.";
}
typedef opaque-tlv-type { typedef ipv4-multicast-group-address {
type identityref { type string {
base opaque-tlv-type-id; pattern "(2((2[4-9])|(3[0-9]))\\.)(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
}
description
"Opaque TLV type definition.";
}
identity time-resolution{
description
"Time interval resolution";
} }
description
"The ipv4-multicast-group-address type
represents an IPv4 multicast address
in dotted-quad notation.";
reference "RFC4607";
}
identity hours { typedef ipv6-multicast-group-address {
base time-resolution; type string {
description pattern "(((FF|ff)[0-9a-fA-F]{2}):)([0-9a-fA-F]{0,4}:){0,5}((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))";
"Hours"; pattern "(([^:]+:){6}(([^:]+:[^:]+)|(.*\\..*)))|((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)";
} }
description
"The ipv6-multicast-group-address
type represents an IPv6 address in full,
mixed, shortened, and shortened-mixed
notation.";
reference
"RFC4291 2.7.
ietf-inet-types:ipv6-address";
}
identity minutes { typedef ip-multicast-group-address {
base time-resolution; type union {
description type ipv4-multicast-group-address;
"Minutes"; type ipv6-multicast-group-address;
} }
description
"The ip-multicast-group-address type
represents an IP multicast address and
is IP version neutral. The format of the
textual representations implies the IP version.";
}
identity seconds { identity address-attribute-types {
base time-resolution; description
description "This is base identity of address
"Seconds"; 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 milliseconds { }
base time-resolution;
description
"Milliseconds";
}
identity microseconds { identity time-resolution {
description
"Time interval resolution";
}
base time-resolution; identity hours {
description base time-resolution;
"Microseconds"; description
} "Time resolution in Hours";
}
identity nanoseconds { identity minutes {
base time-resolution; base time-resolution;
description description
"Nanoseconds"; "Time resolution in Minutes";
} }
identity opaque-tlv-type-id {
description
"Base identity for opaque tlv types.";
}
identity default-tlv-type-id {
base opaque-tlv-type-id;
description
"Default or unknown TLV type id.";
}
/* groupings */ identity seconds {
grouping cc-session-statsitics { base time-resolution;
description "Grouping for session statistics."; description
container cc-session-statistics { "Time resolution in Seconds";
description "cc session counters"; }
leaf session-count {
type uint32;
description
"Number of cc sessions.";
}
leaf session-up-count {
type uint32;
description
"Number of sessions which are up.";
}
leaf session-down-count {
type uint32;
description
"Number of sessions which are down.";
}
leaf session-admin-down-count {
type uint32;
description
"Number of sessions which are admin-down.";
}
}
}
grouping session-packet-statistics { identity milliseconds {
description "Grouping for per session packet statistics"; base time-resolution;
container session-packet-statistics { description
"Time resolution in Milliseconds";
}
description "Per session packet statistics."; identity microseconds {
leaf rx-packet-count { base time-resolution;
type uint32; description
description "Time resolution in Microseconds";
"Total number of received OAM packet count."; }
}
leaf tx-packet-count {
type uint32;
description
"Total number of transmitted OAM packet count.";
}
leaf rx-bad-packet {
type uint32;
description
"Total number of received bad OAM packet.";
}
leaf tx-packet-failed {
type uint32;
description
"Total number of send OAM packet failed.";
} identity nanoseconds {
} base time-resolution;
} description
"Time resolution in Nanoseconds";
}
grouping cc-per-session-statistics { grouping cc-session-statistics {
description "Grouping for per session statistics"; description
container cc-per-session-statistics { "Grouping for session statistics.";
description "per session statistics."; container cc-session-statistics {
leaf create-time { description
type yang:date-and-time; "cc session counters";
description leaf session-count {
"Time and date when session is created."; type uint32;
} description
leaf last-down-time { "Number of Continuity Check sessions.";
type yang:date-and-time; }
description leaf session-up-count {
"Time and date last time session is down."; type uint32;
} description
leaf last-up-time { "Number of sessions which are up.";
type yang:date-and-time; }
description leaf session-down-count {
"Time and date last time session is up."; type uint32;
} description
leaf down-count { "Number of sessions which are down.";
type uint32; }
description leaf session-admin-down-count {
"Total down count."; type uint32;
} description
leaf admin-down-count { "Number of sessions which are admin-down.";
type uint32;
description
"Total down count.";
}
uses session-packet-statistics;
} }
} }
}
grouping session-error-statistics { grouping session-packet-statistics {
description
"Grouping for per session packet statistics";
container session-packet-statistics {
description description
"Grouping for per session error statistics"; "Per session packet statistics.";
container session-error-statistics { leaf rx-packet-count {
description "Per session error statistics."; type uint32;
leaf packet-drops-count { description
type uint32; "Total number of received OAM packet count.";
description }
"Total received packet drops count."; leaf tx-packet-count {
} type uint32;
leaf packet-reorder-count { description
"Total number of transmitted OAM packet count.";
type uint32; }
description leaf rx-bad-packet {
"Total received packet reordered count."; type uint32;
} description
leaf packets-out-of-seq-count { "Total number of received bad OAM packet.";
type uint32; }
description leaf tx-packet-failed {
"Total received out of sequence count."; type uint32;
} description
leaf packets-dup-count { "Total number of send OAM packet failed.";
type uint32;
description
"Total received packet duplicates count.";
}
} }
} }
}
grouping session-delay-statistics { grouping cc-per-session-statistics {
description
"Grouping for per session statistics";
container cc-per-session-statistics {
description description
"Grouping for per session delay statistics"; "per session statistics.";
container session-delay-statistics { leaf create-time {
type yang:date-and-time;
description description
"Session delay summarised information."; "Time and date when session is created.";
leaf time-resolution-value {
type identityref {
base time-resolution;
}
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.";
}
} }
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;
description
"Total Continuity Check sessions down count.";
}
leaf admin-down-count {
type uint32;
description
"Total Continuity Check sessions admin down count.";
}
uses session-packet-statistics;
} }
}
grouping session-jitter-statistics { grouping session-error-statistics {
description
"Grouping for per session error statistics";
container session-error-statistics {
description description
"Grouping for per session jitter statistics"; "Per session error statistics.";
container session-jitter-statistics { leaf packet-drops-count {
type uint32;
description description
"Session jitter summarised information."; "Total received packet drops count.";
leaf time-resolution-value { }
type identityref { leaf packet-reorder-count {
base time-resolution; type uint32;
} description
description "Total received packet reordered count.";
"Time units among choice of s,ms,ns etc."; }
} leaf packets-out-of-seq-count {
leaf min-jitter-value { type uint32;
type uint32; description
description "Total received out of sequence count.";
"Minimum jitter value observed."; }
} leaf packets-dup-count {
leaf max-jitter-value { type uint32;
type uint32; description
description "Total received packet duplicates count.";
"Maximum jitter value observed.";
}
leaf average-jitter-value {
type uint32;
description
"Average jitter value observed.";
}
} }
} }
}
grouping session-path-verification-statistics { grouping session-delay-statistics {
description
"Grouping for per session delay statistics";
container session-delay-statistics {
description description
"Grouping for per session path verification statistics"; "Session delay summarised information.";
container session-path-verification-statistics{ leaf time-resolution-value {
description type identityref {
"OAM per session path verification statistics."; base time-resolution;
leaf verified-count {
type uint32;
description
"Total number of OAM packets that
went through a path as intended.";
}
leaf failed-count {
type uint32;
description
"Total number of OAM packets that
went through an unintended path.";
} }
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.";
} }
} }
}
grouping session-type { grouping session-jitter-statistics {
description
"Grouping for per session jitter statistics";
container session-jitter-statistics {
description description
"This object indicates the current session "Session jitter summarised information.";
definition."; leaf time-resolution-value {
leaf session-type-enum { type identityref {
type enumeration { base time-resolution;
enum proactive {
description
"The current session is proactive";
}
enum on-demand {
description
"The current session is on-demand.";
}
} }
default "on-demand";
description description
"Session type enum"; "Time units among choice of s,ms,ns etc.";
} }
} leaf min-jitter-value {
grouping opaque-info-tlv { type uint32;
description description
"Opaque information as a TLV."; "Minimum jitter value observed.";
leaf type {
type opaque-tlv-type;
description "TLV type.";
} }
leaf length { leaf max-jitter-value {
type uint16; type uint32;
description "TLV length."; description
"Maximum jitter value observed.";
} }
leaf value { leaf average-jitter-value {
type yang:hex-string; type uint32;
description "TLV value."; description
"Average jitter value observed.";
} }
} }
}
grouping opaque-tlvs { grouping session-path-verification-statistics {
description
"Grouping for per session path verification statistics";
container session-path-verification-statistics {
description description
"Opaque TLVs."; "OAM per session path verification statistics.";
container opaque-tlvs { leaf verified-count {
type uint32;
description description
"Opaque TLVs container."; "Total number of OAM packets that
list opaque-tlvs-list { went through a path as intended.";
}
leaf failed-count {
type uint32;
description
"Total number of OAM packets that
went through an unintended path.";
}
}
}
grouping session-type {
description
"This object indicates the current session
definition.";
leaf session-type-enum {
type enumeration {
enum "proactive" {
description description
"Opaque TLVs list."; "The current session is proactive";
uses opaque-info-tlv; }
enum "on-demand" {
description
"The current session is on-demand.";
} }
} }
} default "on-demand";
identity tp-address-type {
description description
"Test point address type"; "Session type enum";
} }
}
identity mac-address-type { identity tp-address-technology-type {
base tp-address-type; description
description "Test point address type";
"MAC address type"; }
}
identity ipv4-address-type { identity mac-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"IPv4 address type"; "MAC address type";
} }
identity ipv6-address-type { identity ipv4-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"IPv6 address type"; "IPv4 address type";
} }
identity tp-attribute-type { identity ipv6-address-type {
base tp-address-technology-type;
description
"IPv6 address type";
}
base tp-address-type; identity tp-attribute-type {
description base tp-address-technology-type;
"Test point attribute type"; description
} "Test point attribute type";
}
identity system-id-address-type { identity system-id-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"System id address type"; "System id address type";
} }
identity lsp-id-address-type { identity as-number-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"LSP ID address type"; "AS number address type";
} }
identity as-number-address-type { identity group-ip-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"AS number address type"; "Group IP address type";
} }
identity group-ip-address-type { identity route-distinguisher-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"Group IP address type"; "Route Distinguisher address type";
} }
identity route-distinguisher-address-type { identity ip-prefix-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"Route Distinguisher address type"; "IP prefix address type";
} }
identity ip-prefix-address-type { identity tunnel-address-type {
base tp-address-type; base tp-address-technology-type;
description description
"IP prefix address type"; "Tunnel address type";
} }
identity tunnel-address-type { grouping tp-address {
base tp-address-type; leaf tp-location-type-value {
type identityref {
base tp-address-technology-type;
}
description description
"Tunnel address type"; "Test point address type.";
} }
choice tp-address {
grouping tp-address { case mac-address {
leaf tp-location-type-value { when "'tp-location-type-value' = 'mac-address-type'" {
type identityref { description
base tp-address-type; "MAC address type";
} }
description "Test point address type."; leaf mac-address {
} type yang:mac-address;
choice tp-address {
case mac-address {
when "'tp-location-type-value' = 'mac-address-type'" {
description "MAC address type";
}
leaf mac-address {
type yang:mac-address;
description
"MAC Address";
}
description description
"MAC Address";
}
description
"MAC Address based MP Addressing."; "MAC Address based MP Addressing.";
}
case ipv4-address {
when "'tp-location-type-value' = 'ipv4-address-type'" {
description
"IPv4 address type";
} }
case ipv4-address { leaf ipv4-address {
when "'tp-location-type-value' = 'ipv4-address-type'" { type inet:ipv4-address;
description "IPv4 address type";
}
leaf ipv4-address {
type inet:ipv4-address;
description
"IPv4 Address";
}
description description
"IPv4 Address";
}
description
"IP Address based MP Addressing."; "IP Address based MP Addressing.";
}
case ipv6-address {
when "'tp-location-type-value' = 'ipv6-address-type'" {
description
"IPv6 address type";
} }
case ipv6-address { leaf ipv6-address {
when "'tp-location-type-value' = 'ipv6-address-type'" { type inet:ipv6-address;
description "IPv6 address type";
}
leaf ipv6-address {
type inet:ipv6-address;
description
"IPv6 Address";
}
description description
"IPv6 Address";
}
description
"ipv6 Address based MP Addressing."; "ipv6 Address based MP Addressing.";
}
case tp-attribute {
when "'tp-location-type-value' = 'tp-attribute-type'" {
description
"Test point attribute type";
} }
leaf tp-attribute-type {
case tp-attribute { type address-attribute-type;
when "'tp-location-type-value' = 'tp-attribute-type'" { description
description "Test point attribute type"; "Test point type.";
} }
leaf tp-attribute-type { choice tp-attribute-value {
type address-attribute-type; description
description
"Test point type.";
}
choice tp-attribute-value {
description
"Test point value."; "Test point value.";
case ip-prefix { case ip-prefix {
leaf ip-prefix { leaf ip-prefix {
type inet:ip-prefix; type inet:ip-prefix;
description description
"IP prefix."; "IP prefix.";
}
} }
case bgp { }
leaf bgp { case bgp {
type inet:ip-prefix; leaf bgp {
description type inet:ip-prefix;
description
"BGP Labeled Prefix "; "BGP Labeled Prefix ";
}
} }
case tunnel { }
leaf tunnel-interface { case tunnel {
type uint32; leaf tunnel-interface {
description type uint32;
description
"VPN Prefix "; "VPN Prefix ";
}
} }
}
case pw { case pw {
leaf remote-pe-address{ leaf remote-pe-address {
type inet:ip-address; type inet:ip-address;
description description
"Remote pe address."; "Remote pe address.";
}
leaf pw-id {
type uint32;
description
"Pseudowire id.";
}
} }
case vpls { leaf pw-id {
leaf route-distinguisher { type uint32;
type uint32; description
description "Pseudowire id.";
"Route Distinguisher(8 octets).";
}
leaf sender-ve-id{
type uint32;
description
"Sender's VE ID.";
}
leaf receiver-ve-id{
type uint32;
description
"Receiver's VE ID.";
}
} }
case mpls-mldp{ }
choice root-address{ case vpls {
leaf route-distinguisher {
type uint32;
description description
"Root address choice."; "Route Distinguisher(8 octets).";
case ip-address{ }
leaf source-address{ leaf sender-ve-id {
type inet:ip-address; type uint32;
description description
"IP address."; "Sender's VE ID.";
} }
leaf group-ip-address{ leaf receiver-ve-id {
type IP-Multicast-Group-Address; type uint32;
description description
"Group ip address."; "Receiver's VE ID.";
} }
}
case mpls-mldp {
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 ip-multicast-group-address;
description
"Group ip address.";
}
} }
case vpn{ case vpn {
leaf as-number{ leaf as-number {
type inet:as-number; type inet:as-number;
description description
"AS number."; "AS number.";
} }
} }
case global-id{ case global-id {
leaf lsp-id{ leaf lsp-id {
type string; type string;
description description
"LSP id."; "LSP id.";
} }
} }
}
} }
} }
} }
}
case system-info { case system-info {
when "'tp-location-type-value' = 'system-id-address-type'" { when "'tp-location-type-value' = 'system-id-address-type'" {
description "System id address type"; description
} "System id address type";
leaf system-id { }
type router-id; leaf system-id {
description type router-id;
description
"System ID assigned to this node."; "System ID assigned to this node.";
}
} }
description
"TP Addressing.";
} }
description description
"TP Address"; "TP Addressing.";
} }
description
"TP Address";
}
grouping tp-address-vrf { grouping tp-address-vrf {
description
"Test point address with VRF.";
leaf vrf {
type routing-instance-ref;
description description
"Test point address with VRF."; "The vrf is used to describe the
leaf vrf { corresponding network instance";
type routing-instance-ref;
description
"The vrf is used to describe the
corresponding network instance";
}
uses tp-address;
} }
uses tp-address;
}
grouping connectionless-oam-layers { grouping connectionless-oam-layers {
list oam-layers { list oam-layers {
key "index"; key "index";
leaf index { leaf index {
type uint16 { type uint16 {
range "0..65535"; range "0..65535";
} }
description description
"Index"; "Index";
} }
leaf level { leaf level {
type int32 { type int32 {
range "-1..1"; range "-1..1";
}
default 0;
description
"Level 0 indicates default level,
-1 means server and +1 means client layer.
In relationship 0 means same layer.";
} }
choice tp-location { default "0";
description
"Level 0 indicates default level,
-1 means server and +1 means client layer.
In relationship 0 means same layer.";
}
choice tp-location {
case mac-address { case mac-address {
leaf mac-address-location { leaf mac-address-location {
type yang:mac-address; type yang:mac-address;
description description
"MAC Address"; "MAC Address";
} }
description description
"MAC Address based MP Addressing."; "MAC Address based MP Addressing.";
} }
case ipv4-address { case ipv4-address {
leaf ipv4-location { leaf ipv4-location {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Ipv4 Address"; "Ipv4 Address";
} }
description description
"IP Address based MP Addressing."; "IP Address based MP Addressing.";
} }
case ipv6-location { case ipv6-location {
leaf ipv6-address { leaf ipv6-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 Address"; "IPv6 Address";
} }
description description
"IPv6 Address based MP Addressing."; "IPv6 Address based MP Addressing.";
} }
case group-ip-address-location {
case tunnel-location{ leaf group-ip-address-location {
leaf tunnel-location{ type ip-multicast-group-address;
type uint32; description
description "Group IP address location";
"VPN Prefix";
}
description
"Tunnel location";
}
case ip-prefix-location{
leaf ip-prefix-location{
type inet:ip-prefix;
description
"IP prefix location";
}
description
"IP prefix location";
}
case route-dist-location{
leaf route-dist-location{
type uint32;
description
"Route Distinguisher (8 octets)";
}
description
"Route distinguisher location";
}
case group-ip-address-location{
leaf group-ip-address-location{
type IP-Multicast-Group-Address;
description
"Group IP address location";
}
description
"Group IP address";
}
case as-number-location{
leaf as-number-location{
type inet:as-number;
description
"AS number location";
}
description
"AS number";
}
case lsp-id-location{
leaf lsp-id-location{
type string;
description
"LSP id";
}
description
"LSP ID";
}
case system-id-location{
leaf system-id-location{
type router-id;
description
"System id location";
}
description
"System ID";
}
description
"TP location.";
} }
ordered-by user; description
description "Group IP address";
"List of related oam layers. }
0 means they are in same level, especially case as-number-location {
interworking scenarios of stiching multiple leaf as-number-location {
technology at same layer. -1 means server layer, type inet:as-number;
for eg:- in case of Overlay and Underlay,
Underlay is server layer for Overlay Test Point.
+1 means client layer, for eg:- in case of
Service OAM and Transport OAM, Service OAM is client
layer to Transport OAM.";
}
description
"Connectionless related OAM layer";
}
grouping tp-technology {
choice technology {
default technology-null;
case technology-null {
description description
"This is a placeholder when no technology is needed."; "AS number location";
leaf tech-null {
type empty;
description
"There is no technology define";
}
} }
description description
"Technology choice null"; "AS number for point to multipoint OAM";
case technology-string { }
case system-id-location {
leaf system-id-location {
type router-id;
description description
"OAM technology string"; "System id location";
leaf ipv4-icmp { }
type string; description
description "System ID";
"Name to identify oam technology"; }
} description
} "TP location.";
} }
ordered-by system;
description description
"OAM Technology"; "List of related oam layers.
0 means they are in same level, especially
interworking scenarios of stitching multiple
technology at same layer. -1 means server layer,
for eg:- in case of Overlay and Underlay,
Underlay is server layer for Overlay Test Point.
+1 means client layer, for example in case of
Service OAM and Transport OAM, Service OAM is client
layer to Transport OAM.";
} }
description
"Connectionless related OAM layer";
}
grouping tp-tools { grouping tp-technology {
choice technology {
default "technology-null";
case technology-null {
description
"This is a placeholder when no technology is needed.";
leaf tech-null {
type empty;
description
"There is no technology define";
}
}
description description
"Test Point OAM Toolset."; "Technology choice.";
container tp-tools{
leaf connectivity-verification{
type boolean;
description
"A flag indicating whether or not the
connectivity-verification 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 5085: Pseudowire Virtual Circuit Connectivity Verification.
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 4379: LSP-PING.";
}
leaf continuity-check{
type boolean;
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;
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.";
}
description
"Container for test point OAM tools set.";
}
} }
description
"OAM Technology";
}
grouping test-point-location-info { grouping tp-tools {
uses tp-technology; description
uses tp-tools; "Test Point OAM Toolset.";
anydata root { container tp-tools {
yangmnt:mount-point root; leaf continuity-check {
description type boolean;
"Root for models supported per description
test point"; "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;
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.";
} }
uses connectionless-oam-layers;
description description
"Test point Location"; "Container for test point OAM tools set.";
} }
}
grouping test-point-locations { grouping test-point-location-info {
description "Group of test point locations."; uses tp-technology;
leaf tp-location-type-value { uses tp-tools;
type identityref { anydata root {
base tp-address-type; yangmnt:mount-point "root";
} description
description "Test point location type."; "Root for models supported per
test point";
}
uses connectionless-oam-layers;
description
"Test point Location";
}
grouping test-point-locations {
description
"Group of test point locations.";
leaf tp-location-type-value {
type identityref {
base tp-address-technology-type;
} }
choice location-type { description
case ipv4-location-type { "Test point location type.";
when "'tp-location-type-value' = 'ipv4-address-type'" { }
choice location-type {
case ipv4-location-type {
when "'tp-location-type-value' = 'ipv4-address-type'" {
description description
"When test point location type is equal to ipv4 address."; "When test point location type is equal to ipv4 address.";
}
container test-point-ipv4-location-list {
list test-point-locations {
key "ipv4-location";
leaf ipv4-location {
type inet:ipv4-address;
description
"IPv4 Address.";
}
leaf vrf {
type routing-instance-ref;
description
"The vrf is used to describe the
corresponding network instance";
}
uses test-point-location-info;
ordered-by user;
description
"List of test point locations.";
}
description
"Serves as top-level container
for test point location list.";
}
} }
case ipv6-location-type { container test-point-ipv4-location-list {
when "'tp-location-type-value' = 'ipv6-address-type'" { list test-point-locations {
description key "ipv4-location";
"when test point location is equal to ipv6 address"; leaf ipv4-location {
} type inet:ipv4-address;
container test-point-ipv6-location-list {
list test-point-locations {
key "ipv6-location";
leaf ipv6-location {
type inet:ipv6-address;
description
"IPv6 Address.";
}
leaf vrf {
type routing-instance-ref;
description
"The vrf is used to describe the
corresponding network instance";
}
uses test-point-location-info;
ordered-by user;
description description
"List of test point locations."; "IPv4 Address.";
} }
description leaf vrf {
"Serves as top-level container type routing-instance-ref;
for test point location list.";
}
}
case mac-location-type {
when "'tp-location-type-value' = 'mac-address-type'" {
description
"when test point location type is equal to mac address.";
}
container test-point-mac-address-location-list {
list test-point-locations {
key "mac-address-location";
leaf mac-address-location {
type yang:mac-address;
description description
"MAC Address"; "The vrf is used to describe the
corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
ordered-by user; ordered-by system;
description
"List of test point locations.";
}
description description
"Serves as top-level container "List of test point locations.";
for test point location list.";
} }
} description
case tunnel-location-type {
when "'tp-location-type-value' ="
+" 'tunnel-address-type'" {
description
"When test point location type
is equal to tunnel type.";
}
container test-point-tunnel-location-list {
list test-point-locations {
key "tunnel-location";
leaf tunnel-location {
type uint32;
description
"VPN Prefix";
}
leaf vrf {
type routing-instance-ref;
description
"The vrf is used to describe the
corresponding network instance";
}
uses test-point-location-info;
ordered-by user;
description
"List of test point locations.";
}
description
"Serves as top-level container "Serves as top-level container
for test point location list."; for test point location list.";
}
} }
case ip-prefix-location-type { }
when "'tp-location-type-value' = " case ipv6-location-type {
+"'ip-prefix-address-type'" { when "'tp-location-type-value' = 'ipv6-address-type'" {
description description
"When test point location "when test point location is equal to ipv6 address";
type is equal to ip prefix."; }
} container test-point-ipv6-location-list {
container test-point-ip-prefix-location-list { list test-point-locations {
list test-point-locations { key "ipv6-location";
key "ip-prefix-location"; leaf ipv6-location {
leaf ip-prefix-location { type inet:ipv6-address;
type inet:ip-prefix;
description description
"IP Prefix"; "IPv6 Address.";
} }
leaf vrf { leaf vrf {
type routing-instance-ref; type routing-instance-ref;
description description
"The vrf is used to describe the "The vrf is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
ordered-by user; ordered-by system;
description
"List of test point locations.";
}
description description
"Serves as top-level container "List of test point locations.";
for test point location list.";
} }
description
"Serves as top-level container
for test point location list.";
} }
case route-distinguisher-location-type { }
when "'tp-location-type-value' = " case mac-location-type {
+"'route-distinguisher-address-type'" { when "'tp-location-type-value' = 'mac-address-type'" {
description description
"When test point "when test point location type is equal to mac address.";
location type is equal to }
route distinguiher."; container test-point-mac-address-location-list {
} list test-point-locations {
key "mac-address-location";
container test-point-route-dist-location-list { leaf mac-address-location {
list test-point-locations { type yang:mac-address;
key "route-dist-location";
leaf route-dist-location {
type uint32;
description
"Route Distinguisher(8 octets).";
}
leaf vrf {
type routing-instance-ref;
description description
"The vrf is used to describe the "MAC Address";
corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
ordered-by user; ordered-by system;
description
"List of test point locations.";
}
description description
"Serves as top-level container "List of test point locations.";
for test point location list.";
} }
description
"Serves as top-level container
for test point location list.";
} }
case group-ip-address-location-type { }
when "'tp-location-type-value' = " case group-ip-address-location-type {
+"'group-ip-address-type'" { when "'tp-location-type-value' = 'group-ip-address-type'" {
description description
"When test point location type is equal to "When test point location type is equal to
group ip address."; group ip address.";
} }
container test-point-group-ip-address-location-list { container test-point-group-ip-address-location-list {
list test-point-locations { list test-point-locations {
key "group-ip-address-location"; key "group-ip-address-location";
leaf group-ip-address-location { leaf group-ip-address-location {
type IP-Multicast-Group-Address; type ip-multicast-group-address;
description description
"Group IP address."; "Group IP address.";
} }
leaf vrf { leaf vrf {
type routing-instance-ref; type routing-instance-ref;
description description
"The vrf is used to describe the "The vrf is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
ordered-by user; ordered-by system;
description
"List of test point locations.";
}
description description
"Serves as top-level container for "List of test point locations.";
test point location list.";
} }
description
"Serves as top-level container for
test point location list.";
} }
case group-as-number-location-type { }
when "'tp-location-type-value' = " case group-as-number-location-type {
+"'as-number-address-type'" { when "'tp-location-type-value' = 'as-number-address-type'" {
description description
"When test point location type is equal to "When test point location type is equal to
as-number."; as-number.";
} }
container test-point-as-number-location-list { container test-point-as-number-location-list {
list test-point-locations { list test-point-locations {
key "as-number-location"; key "as-number-location";
leaf as-number-location { leaf as-number-location {
type inet:as-number; type inet:as-number;
description description
"AS number."; "AS number for point to multi point OAM.";
} }
leaf vrf { leaf vrf {
type routing-instance-ref; type routing-instance-ref;
description description
"The vrf is used to describe the "The vrf is used to describe the
corresponding network instance"; corresponding network instance";
}
uses test-point-location-info;
ordered-by user;
description
"List of test point locations.";
}
description
"Serves as top-level container
for test point location list.";
}
}
case group-lsp-id-location-type {
when "'tp-location-type-value' = "
+"'lsp-id-address-type'" {
description
"When test point location
type is equal to lspid.";
}
container test-point-lsp-id-location-list {
list test-point-locations {
key "lsp-id-location";
leaf lsp-id-location {
type string;
description
"LSP Id.";
}
leaf vrf {
type routing-instance-ref;
description
"The vrf is used to describe the
corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
ordered-by user; ordered-by system;
description
"List of test point locations.";
}
description description
"Serves as top-level container for "List of test point locations.";
test point location list.";
} }
description
"Serves as top-level container
for test point location list.";
} }
case group-system-id-location-type { }
when "'tp-location-type-value' = " case group-system-id-location-type {
+"'system-id-address-type'" { when "'tp-location-type-value' = 'system-id-address-type'" {
description description
"When test point location is equal to "When test point location is equal to
system info."; system info.";
} }
container test-point-system-info-location-list { container test-point-system-info-location-list {
list test-point-locations { list test-point-locations {
key "system-id-location"; key "system-id-location";
leaf system-id-location { leaf system-id-location {
type inet:uri; type inet:uri;
description description
"System Id."; "System Id.";
} }
leaf vrf { leaf vrf {
type routing-instance-ref; type routing-instance-ref;
description description
"The vrf is used to describe the "The vrf is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
ordered-by user; ordered-by system;
description
"List of test point locations.";
}
description description
"Serves as top-level container for "List of test point locations.";
test point location list.";
} }
description
"Serves as top-level container for
test point location list.";
} }
description
"Choice of address types.";
} }
}
augment "/nd:networks/nd:network/nd:node"{
description description
"Choice of address types.";
}
}
augment "/nd:networks/nd:network/nd:node" {
description
"Augment test points of connectionless oam."; "Augment test points of connectionless oam.";
uses test-point-locations; 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 {
grouping path-discovery-data { type uint32;
description description
"Path discovery related data output from nodes."; "Fractional part in nanoseconds as per IEEE1588v2
container src-test-point { or Fractional part in 64-bit NTP timestamp.";
description "Source test point."; }
uses tp-address-vrf; }
}
container dest-test-point {
description "Destination test point.";
uses tp-address-vrf;
}
leaf sequence-number {
type uint64;
description "Sequence number in data packets.";
}
leaf hop-cnt {
type uint8;
description "Hop count.";
}
uses session-packet-statistics; grouping timestamp {
uses session-error-statistics; description
uses session-delay-statistics; "Grouping for timestamp.";
uses session-jitter-statistics; leaf timestamp-type {
type uint32;
description
"Truncated PTP = 0, NTP = 1";
}
uses uint64-timestamp;
}
container path-verification { grouping path-discovery-data {
description
"Path discovery related data output from nodes.";
container src-test-point {
description
"Source test point.";
uses tp-address-vrf;
}
container dest-test-point {
description
"Destination test point.";
uses tp-address-vrf;
}
leaf sequence-number {
type uint64;
description
"Sequence number in data packets.";
}
leaf hop-cnt {
type uint8;
description
"Hop count.";
}
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 description
"Optional path verification related information.";
leaf flow-info {
type string;
description
"Informations that refers to the flow."; "Informations that refers to the flow.";
}
uses session-path-verification-statistics;
} }
uses session-path-verification-statistics;
container path-trace-info { }
description container path-trace-info {
"Optional path trace per-hop test point information. description
"Optional path trace per-hop test point information.
The list has typically a single element for per-hop The list has typically a single element for per-hop
cases like path-discovery RPC but allows a list of cases like path-discovery RPC but allows a list of
hop related information for other types of hop related information for other types of
data retrieval methods."; data retrieval methods.";
list path-trace-info-list { list path-trace-info-list {
key "index"; key "index";
description
"Path trace information list.";
leaf index {
type uint32;
description description
"Path trace information list."; "Trace information index.";
leaf index {
type uint32;
description
"Trace information index.";
}
uses tp-address-vrf;
leaf timestamp-sec {
type uint64;
description
"Absolute timestamp in
seconds as per IEEE1588v2.";
}
leaf timestamp-nanosec {
type uint32;
description
"Fractional part in
nanoseconds as per IEEE1588v2.";
}
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 egress interface
queue of the interface.";
}
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.";
}
uses opaque-tlvs;
} }
}
}
grouping continuity-check-data {
description
"Continuity check data output from nodes.";
container src-test-point {
description "Source test point.";
uses tp-address-vrf; uses tp-address-vrf;
uses timestamp;
leaf egress-intf-name { leaf ingress-intf-name {
type if:interface-ref; type if:interface-ref;
description description
"Egress interface name"; "Ingress interface name";
} }
} leaf egress-intf-name {
container dest-test-point {
description
"Destination test point.";
uses tp-address-vrf;
leaf ingress-intf-name {
type if:interface-ref; type if:interface-ref;
description description
"Ingress interface name"; "Egress interface name";
} }
leaf queue-depth {
type uint32;
description
"Length of the egress interface
queue of the interface.";
}
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.";
}
} }
leaf sequence-number {
type uint64;
description "Sequence number.";
}
leaf hop-cnt {
type uint8;
description "Hop count.";
}
uses session-packet-statistics;
uses session-error-statistics;
uses session-delay-statistics;
uses session-jitter-statistics;
} }
}
container cc-oper-data { grouping continuity-check-data {
if-feature continuity-check; description
config "false"; "Continuity check data output from nodes.";
description "CC operational information."; container src-test-point {
container cc-ipv4-sessions-statistics { description
description "CC ipv4 sessions"; "Source test point.";
uses cc-session-statsitics; uses tp-address-vrf;
leaf egress-intf-name {
type if:interface-ref;
description
"Egress interface name";
} }
container cc-ipv6-sessions-statistics { }
description "CC ipv6 sessions"; container dest-test-point {
uses cc-session-statsitics; description
"Destination test point.";
uses tp-address-vrf;
leaf ingress-intf-name {
type if:interface-ref;
description
"Ingress interface name";
} }
} }
leaf sequence-number {
type uint64;
description
"Sequence number.";
}
leaf hop-cnt {
type uint8;
description
"Hop count.";
}
uses session-packet-statistics;
uses session-error-statistics;
uses session-delay-statistics;
uses session-jitter-statistics;
}
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-ipv6-sessions-statistics {
description
"CC ipv6 sessions";
uses cc-session-statistics;
}
}
} }
<CODE ENDS> <CODE ENDS>
5. Connectionless model applicability 5. Connectionless model applicability
"ietf-connectionless-oam" model defined in this document provides "ietf-connectionless-oam" model defined in this document provides
technology-independent abstraction of key OAM constructs for technology-independent abstraction of key OAM constructs for
connectionless protocols. This model can be further extended to connectionless protocols. This model can be further extended to
include technology specific details, e.g., adding new data nodes with include technology specific details, e.g., adding new data nodes with
skipping to change at page 50, line 27 skipping to change at page 35, line 36
uses bfd-mpls:bfd-encap-cfg; uses bfd-mpls:bfd-encap-cfg;
} }
} }
} }
Similar augmentations can be defined to support other BFD Similar augmentations can be defined to support other BFD
technologies such as BFD over LAG, etc. technologies such as BFD over LAG, etc.
5.1.2. Schema Mount 5.1.2. Schema Mount
And anohter alternative method is using schema mount mechanism And another alternative method is using schema mount mechanism
[I-D.ietf-netmod-schema-mount] in the "ietf-connectionless-oam". [I-D.ietf-netmod-schema-mount] in the "ietf-connectionless-oam".
Within the "test-point-location" list, a "root" attribute is defined Within the "test-point-location" list, a "root" attribute is defined
to provide a mounted point for models mounted per "test-point- to provide a mounted point for models mounted per "test-point-
location". Therefore, the "ietf-connectionless-oam" model can location". Therefore, the "ietf-connectionless-oam" model can
provide a place in the node hierarchy where other OAM YANG data provide a place in the node hierarchy where other OAM YANG data
models can be attached, without any special extension in the "ietf- models can be attached, without any special extension in the "ietf-
connectionless-oam" YANG data models [I-D.ietf-netmod-schema-mount]. connectionless-oam" YANG data models [I-D.ietf-netmod-schema-mount].
Note that the limitation of the Schema Mount method is it is not Note that the limitation of the Schema Mount method is it is not
allowed to specify certain modules that are required to be mounted allowed to specify certain modules that are required to be mounted
under a mount point. under a mount point.
skipping to change at page 52, line 30 skipping to change at page 37, line 30
foo foo
...... ......
</ip-mh> </ip-mh>
</ietf-bfd-ip-mh> </ietf-bfd-ip-mh>
</root> </root>
</test-point-locations> </test-point-locations>
</ietf-connectionless-oam> </ietf-connectionless-oam>
5.2. LSP ping extension 5.2. LSP ping extension
5.2.1. Augment Method
The following sections shows how the "ietf-connectionless-oam" model The following sections shows how the "ietf-connectionless-oam" model
can be extended to support LSP ping technology. For this purpose, a can be extended to support LSP ping technology. For this purpose, a
set of extension are introduced such as technology-type extension and set of extension are introduced such as technology-type extension and
test-point attributes extension. test-point attributes extension.
Note that in MPLS WG, there is a LSP Ping yang data model Note that in MPLS WG, there is a LSP Ping yang data model
[I-D.draft-zheng-mpls-lsp-ping-yang-cfg] to be produced. Users can [I-D.zheng-mpls-lsp-ping-yang-cfg] to be produced. Users can choose
choose to use "ietf-connectioless-oam" as basis and augment the to use "ietf-connectioless-oam" as basis and augment the "ietf-
"ietf-connectionless-oam" model with LSP Ping specific details in the connectionless-oam" model with LSP Ping specific details in the model
model extension. The LSP Ping specific details can be the grouping extension. The LSP Ping specific details can be the grouping defined
defined in the LSP ping model. in the LSP ping model.
5.2.1. Technology type extension 5.2.1.1. Technology type extension
No lsp-ping technology type has been defined in the "ietf- No lsp-ping technology type has been defined in the "ietf-
connectionless-oam" model. Therefore a technology type extension is connectionless-oam" model. Therefore a technology type extension is
required in the model extension. required in the model extension.
The snippet below depicts an example of augmenting the "ietf- The snippet below depicts an example of augmenting the "ietf-
connectionless-oam" with "lsp-ping" type: connectionless-oam" with "lsp-ping" type:
augment "/nd:networks/nd:network/nd:node/" augment "/nd:networks/nd:network/nd:node/"
+"coam:location-type/coam:ipv4-location-type" +"coam:location-type/coam:ipv4-location-type"
+"/coam:test-point-ipv4-location-list/" +"/coam:test-point-ipv4-location-list/"
+"coam:test-point-locations/coam:technology" +"coam:test-point-locations/coam:technology"
+"/coam:technology-string" +"/coam:technology-string"
{ {
leaf lsp-ping{ leaf lsp-ping{
type string; type string;
} }
} }
5.2.2. Test point attributes extension 5.2.1.2. Test point attributes extension
To support lsp-ping, the "ietf-connectionless-oam" model can be To support lsp-ping, the "ietf-connectionless-oam" model can be
extended and add lsp-ping specific parameters can be defined and extended and add lsp-ping specific parameters can be defined and
under "test-point-location" list. under "test-point-location" list.
User can reuse the attributes or groupings which are defined in User can reuse the attributes or groupings which are defined in
[I-D.draft-zheng-mpls-lsp-ping-yang-cfg] as follows: [I-D.zheng-mpls-lsp-ping-yang-cfg] as follows:
The snippet below depicts an example of augmenting the "test-point- The snippet below depicts an example of augmenting the "test-point-
locations" list with lsp ping attributes: locations" list with lsp ping attributes:
augment "/nd:networks/nd:network/nd:node/" augment "/nd:networks/nd:network/nd:node/"
+"coam:location-type/coam:ipv4-location-type" +"coam:location-type/coam:ipv4-location-type"
+"/coam:test-point-ipv4-location-list/" +"/coam:test-point-ipv4-location-list/"
+"coam:test-point-locations" +"coam:test-point-locations"
{ {
list lsp-ping { list lsp-ping {
key "lsp-ping-name"; key "lsp-ping-name";
leaf lsp-ping-name { leaf lsp-ping-name {
type string { type string {
length "1..31"; length "1..31";
} }
mandatory "true"; mandatory "true";
description "LSP Ping test name."; description "LSP Ping test name.";
...... ......
} }
5.2.2. Schema Mount
And another alternative method is using schema mount mechanism
[I-D.ietf-netmod-schema-mount] in the "ietf-connectionless-oam".
Within the "test-point-location" list, a "root" attribute is defined
to provide a mounted point for models mounted per "test-point-
location". Therefore, the "ietf-connectionless-oam" model can
provide a place in the node hierarchy where other OAM YANG data
models can be attached, without any special extension in the "ietf-
connectionless-oam" YANG data models [I-D.ietf-netmod-schema-mount].
Note that the limitation of the Schema Mount method is it is not
allowed to specify certain modules that are required to be mounted
under a mount point.
The snippet below depicts the definition of "root" attribute.
anydata root {
yangmnt:mount-point root;
description
"Root for models supported per
test point";
}
The following section shows how the "ietf-connectionless-oam" model
can use schema mount to support LSP-PING technology.
5.2.2.1. LSP-PING Modules be populated in schema-mount
To support LSP-PING technology, "ietf-lspping" YANG module
[I-D.zheng-mpls-lsp-ping-yang-cfg] might be populated in the "schema-
mounts" container:
<schema-mounts
xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount">
<mount-point>
<module> ietf-connectionless-oam </module>
<name>root</name>
<use-schema>
<name>root</name>
</use-schema>
</mount-point>
<schema>
<name>root</name>
<module>
<name>ietf-lspping </name>
<revision>2016-03-18</revision>
<namespace>
urn:ietf:params:xml:ns:yang: ietf-lspping
</namespace>
<conformance-type>implement</conformance-type>
</module>
</schema>
</schema-mounts>
and the " ietf-connectionless-oam " module might have:
<ietf-connectionless-oam
uri="urn:ietf:params:xml:ns:yang:ietf-connectionless-oam">
......
<test-point-locations>
<ipv4-location> 1.1.1.1</ipv4-location>
......
<root>
<ietf-lspping uri="urn:ietf:params:xml:ns:yang:ietf-lspping">
<lsp-pings>
foo
......
</lsp-pings>
</ietf-lspping>
</root>
</test-point-locations>
</ietf-connectionless-oam>
6. Security Considerations 6. Security Considerations
The YANG module defined in this memo is designed to be accessed via The YANG module defined in this memo is designed to be accessed via
the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the
secure transport layer and the mandatory-to-implement secure secure transport layer and the mandatory-to-implement secure
transport is SSH [RFC6242]. The NETCONF access control model transport is SSH [RFC6242]. The NETCONF access control model
[RFC6536] provides the means to restrict access for particular [RFC6536] provides the means to restrict access for particular
NETCONF users to a pre-configured subset of all available NETCONF NETCONF users to a pre-configured subset of all available NETCONF
protocol operations and content. protocol operations and content.
skipping to change at page 55, line 47 skipping to change at page 42, line 23
8. Acknowlegements 8. Acknowlegements
The authors of this document would like to thank Greg Mirsky and The authors of this document would like to thank Greg Mirsky and
others for their sustainable review and comments, proposals to others for their sustainable review and comments, proposals to
improve and stabilize document. improve and stabilize document.
9. References 9. References
9.1. Normative References 9.1. Normative References
[I-D.draft-zheng-mpls-lsp-ping-yang-cfg]
Zheng, L., Aldrin, S., Zheng, G., Mirsky, G., and R.
Rahman, "Yang Data Model for LSP-PING", I-D draft-zheng-
mpls-lsp-ping-yang-cfg, March 2016.
[I-D.ietf-bfd-yang] [I-D.ietf-bfd-yang]
Zheng, L., Rahman, R., Networks, J., Jethanandani, M., and Rahman, R., Zheng, L., Networks, J., Jethanandani, M., and
G. Mirsky, "Yang Data Model for Bidirectional Forwarding G. Mirsky, "Yang Data Model for Bidirectional Forwarding
Detection (BFD)", draft-ietf-bfd-yang-04 (work in Detection (BFD)", draft-ietf-bfd-yang-05 (work in
progress), January 2017. progress), March 2017.
[I-D.ietf-i2rs-yang-network-topo] [I-D.ietf-i2rs-yang-network-topo]
Clemm, A., Medved, J., Varga, R., Bahadur, N., Clemm, A., Medved, J., Varga, R., Bahadur, N.,
Ananthakrishnan, H., and X. Liu, "A Data Model for Network Ananthakrishnan, H., and X. Liu, "A Data Model for Network
Topologies", draft-ietf-i2rs-yang-network-topo-11 (work in Topologies", draft-ietf-i2rs-yang-network-topo-12 (work in
progress), February 2017. progress), March 2017.
[I-D.ietf-lime-yang-connectionless-oam-methods] [I-D.ietf-lime-yang-connectionless-oam-methods]
Kumar, D., Wang, Z., Wu, Q., Rahman, R., and S. Raghavan, Kumar, D., Wang, Z., Wu, Q., Rahman, R., and S. Raghavan,
"Retrieval Methods YANG Data Model for Connectionless "Retrieval Methods YANG Data Model for Connectionless
Operations, Administration, and Maintenance(OAM) Operations, Administration, and Maintenance(OAM)
protocols", draft-ietf-lime-yang-connectionless-oam- protocols", draft-ietf-lime-yang-connectionless-oam-
methods-00 (work in progress), October 2016. methods-01 (work in progress), February 2017.
[I-D.ietf-lime-yang-oam-model] [I-D.ietf-lime-yang-oam-model]
Kumar, D., Wu, Q., and Z. Wang, "Generic YANG Data Model Kumar, D., Wu, Q., and Z. Wang, "Generic YANG Data Model
for Connection Oriented Operations, Administration, and for Connection Oriented Operations, Administration, and
Maintenance(OAM) protocols", draft-ietf-lime-yang-oam- Maintenance(OAM) protocols", draft-ietf-lime-yang-oam-
model-08 (work in progress), December 2016. model-10 (work in progress), April 2017.
[I-D.ietf-netmod-schema-mount] [I-D.ietf-netmod-schema-mount]
Bjorklund, M. and L. Lhotka, "YANG Schema Mount", draft- Bjorklund, M. and L. Lhotka, "YANG Schema Mount", draft-
ietf-netmod-schema-mount-03 (work in progress), October ietf-netmod-schema-mount-04 (work in progress), March
2016. 2017.
[I-D.ietf-rtgwg-ni-model]
Berger, L., Hopps, C., Lindem, A., and D. Bogdanovic,
"YANG Network Instances", draft-ietf-rtgwg-ni-model-02
(work in progress), March 2017.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <http://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<http://www.rfc-editor.org/info/rfc3688>. <http://www.rfc-editor.org/info/rfc3688>.
skipping to change at page 57, line 24 skipping to change at page 43, line 44
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<http://www.rfc-editor.org/info/rfc6242>. <http://www.rfc-editor.org/info/rfc6242>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536, Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012, DOI 10.17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>. <http://www.rfc-editor.org/info/rfc6536>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013,
<http://www.rfc-editor.org/info/rfc6991>.
[RFC7223] Bjorklund, M., "A YANG Data Model for Interface
Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
<http://www.rfc-editor.org/info/rfc7223>.
[RFC7224] Bjorklund, M., "IANA Interface Type YANG Module",
RFC 7224, DOI 10.17487/RFC7224, May 2014,
<http://www.rfc-editor.org/info/rfc7224>.
[RFC792] Postel, J., "Internet Control Message Protocol", RFC 792, [RFC792] Postel, J., "Internet Control Message Protocol", RFC 792,
September 1981. September 1981.
9.2. Informative References 9.2. Informative References
[G.8013] "OAM functions and mechanisms for Ethernet based [G.8013] "OAM functions and mechanisms for Ethernet based
networks", ITU-T Recommendation G.8013/Y.1731, 2013. networks", ITU-T Recommendation G.8013/Y.1731, 2013.
[I-D.ietf-spring-sr-yang] [I-D.ietf-spring-sr-yang]
Litkowski, S., Qu, Y., Sarkar, P., and J. Tantsura, "YANG Litkowski, S., Qu, Y., Sarkar, P., and J. Tantsura, "YANG
Data Model for Segment Routing", draft-ietf-spring-sr- Data Model for Segment Routing", draft-ietf-spring-sr-
yang-05 (work in progress), October 2016. yang-06 (work in progress), March 2017.
[I-D.zheng-mpls-lsp-ping-yang-cfg]
Zheng, L., Aldrin, S., Zheng, G., Mirsky, G., and R.
Rahman, "Yang Data Model for LSP-PING", draft-zheng-mpls-
lsp-ping-yang-cfg-04 (work in progress), October 2016.
[RFC6136] Sajassi, A., Ed. and D. Mohan, Ed., "Layer 2 Virtual [RFC6136] Sajassi, A., Ed. and D. Mohan, Ed., "Layer 2 Virtual
Private Network (L2VPN) Operations, Administration, and Private Network (L2VPN) Operations, Administration, and
Maintenance (OAM) Requirements and Framework", RFC 6136, Maintenance (OAM) Requirements and Framework", RFC 6136,
DOI 10.17487/RFC6136, March 2011, DOI 10.17487/RFC6136, March 2011,
<http://www.rfc-editor.org/info/rfc6136>. <http://www.rfc-editor.org/info/rfc6136>.
[RFC7276] Mizrahi, T., Sprecher, N., Bellagamba, E., and Y. [RFC7276] Mizrahi, T., Sprecher, N., Bellagamba, E., and Y.
Weingarten, "An Overview of Operations, Administration, Weingarten, "An Overview of Operations, Administration,
and Maintenance (OAM) Tools", RFC 7276, and Maintenance (OAM) Tools", RFC 7276,
 End of changes. 235 change blocks. 
1725 lines changed or deleted 1104 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/