< draft-ietf-lime-yang-connectionless-oam-14.txt   draft-ietf-lime-yang-connectionless-oam-15.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: April 27, 2018 Q. Wu Expires: May 1, 2018 Q. Wu, Ed.
Huawei Huawei
R. Rahman R. Rahman
S. Raghavan S. Raghavan
Cisco Cisco
October 24, 2017 October 28, 2017
Generic YANG Data Model for the Management of Operations, Generic YANG Data Model for the Management of Operations,
Administration, and Maintenance (OAM) Protocols that use Connectionless Administration, and Maintenance (OAM) Protocols that use Connectionless
Communications Communications
draft-ietf-lime-yang-connectionless-oam-14 draft-ietf-lime-yang-connectionless-oam-15
Abstract Abstract
This document presents a base YANG Data model for connectionless This document presents a base YANG Data model for Operations
Operations Administration, and Maintenance(OAM) protocols. The data Administration, and Maintenance(OAM) protocols that use
model is defined using the YANG in RFC7950 data modeling language. Connectionless Communications. The data model is defined using the
It provides a technology-independent abstraction of key OAM YANG in RFC7950 data modeling language. It provides a technology-
constructs for connectionless protocols. The base model presented independent abstraction of key OAM constructs for OAM protocols that
here can be extended to include technology specific details. This is use connectionless communication. The base model presented here can
leading to uniformity between OAM protocols and support both nested be extended to include technology specific details. This is leading
OAM workflows (i.e., performing OAM functions at different or same to uniformity between OAM protocols and support both nested OAM
levels through a unified interface) and interacting OAM workflows workflows (i.e., performing OAM functions at different or same levels
(i.e., performing OAM functions at same levels through a unified through a unified interface) and interacting OAM workflows (i.e.,
interface). performing OAM functions at same levels through a unified interface).
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 https://datatracker.ietf.org/drafts/current/. Drafts is at https://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 April 27, 2018. This Internet-Draft will expire on May 1, 2018.
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
(https://trustee.ietf.org/license-info) in effect on the date of (https://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 25 skipping to change at page 2, line 25
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 . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Conventions used in this document . . . . . . . . . . . . . . 3 2. Conventions used in this document . . . . . . . . . . . . . . 3
2.1. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 4 2.1. Abbreviations . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 2.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5
3. Overview of the Connectionless OAM Model . . . . . . . . . . 5 3. Overview of the Connectionless OAM Model . . . . . . . . . . 5
3.1. TP Address . . . . . . . . . . . . . . . . . . . . . . . 6 3.1. TP Address . . . . . . . . . . . . . . . . . . . . . . . 6
3.2. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Tools . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. OAM neighboring test points . . . . . . . . . . . . . . . 7 3.3. OAM neighboring test points . . . . . . . . . . . . . . . 7
3.4. Test Point Locations Information . . . . . . . . . . . . 8 3.4. Test Point Locations Information . . . . . . . . . . . . 8
3.5. Test Point Locations . . . . . . . . . . . . . . . . . . 8 3.5. Test Point Locations . . . . . . . . . . . . . . . . . . 8
3.6. Path Discovery Data . . . . . . . . . . . . . . . . . . . 9 3.6. Path Discovery Data . . . . . . . . . . . . . . . . . . . 9
3.7. Continuity Check Data . . . . . . . . . . . . . . . . . . 9 3.7. Continuity Check Data . . . . . . . . . . . . . . . . . . 9
3.8. OAM data hierarchy . . . . . . . . . . . . . . . . . . . 9 3.8. OAM data hierarchy . . . . . . . . . . . . . . . . . . . 9
4. OAM YANG Module . . . . . . . . . . . . . . . . . . . . . . . 12 4. LIME Common Types YANG Module . . . . . . . . . . . . . . . . 12
5. Connectionless model applicability . . . . . . . . . . . . . 40 5. Connectionless OAM YANG Module . . . . . . . . . . . . . . . 14
5.1. BFD Extension . . . . . . . . . . . . . . . . . . . . . . 40 6. Connectionless model applicability . . . . . . . . . . . . . 42
5.1.1. Augment Method . . . . . . . . . . . . . . . . . . . 41 6.1. BFD Extension . . . . . . . . . . . . . . . . . . . . . . 43
5.1.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 43 6.1.1. Augment Method . . . . . . . . . . . . . . . . . . . 43
5.2. LSP ping extension . . . . . . . . . . . . . . . . . . . 45 6.1.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 46
5.2.1. Augment Method . . . . . . . . . . . . . . . . . . . 45 6.2. LSP ping extension . . . . . . . . . . . . . . . . . . . 48
5.2.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 46 6.2.1. Augment Method . . . . . . . . . . . . . . . . . . . 48
6. Security Considerations . . . . . . . . . . . . . . . . . . . 48 6.2.2. Schema Mount . . . . . . . . . . . . . . . . . . . . 49
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 50 7. Security Considerations . . . . . . . . . . . . . . . . . . . 51
8. Acknowlegements . . . . . . . . . . . . . . . . . . . . . . . 50 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 53
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 9. Acknowlegements . . . . . . . . . . . . . . . . . . . . . . . 53
9.1. Normative References . . . . . . . . . . . . . . . . . . 50 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 53
9.2. Informative References . . . . . . . . . . . . . . . . . 52 10.1. Normative References . . . . . . . . . . . . . . . . . . 53
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 10.2. Informative References . . . . . . . . . . . . . . . . . 55
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 56
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 communication (Reachability Verification, 1. Monitor networks communication (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 3, line 27 skipping to change at page 3, line 27
An overview of OAM tools is presented at [RFC7276]. An overview of OAM tools is presented at [RFC7276].
Ping and Traceroute [RFC792], [RFC4443] are well-known fault Ping and Traceroute [RFC792], [RFC4443] are well-known fault
verification and isolation tools, respectively, for IP networks. verification and isolation tools, respectively, for IP networks.
Over the years, different technologies have developed similar tools Over the years, different technologies have developed similar tools
for similar purposes. for similar purposes.
The different OAM tools may support connection-oriented technologies The different OAM tools may support connection-oriented technologies
or connectionless technologies. In connection-oriented technologies, or connectionless technologies. In connection-oriented technologies,
a connection is established prior to the transmission of data. After a connection is established prior to the transmission of data. After
connection is established, no additional control information such as the connection is established, no additional control information such
signaling or operations and maintenance information is required to as signaling or operations and maintenance information is required to
transmit the data. In connectionless technologies, data is typically transmit the data. In connectionless technologies, data is typically
sent between end points without prior arrangement, but control sent between end points without prior arrangement, but control
information is required to identify destination.[G.800][RFC7276]. information is required to identify destination.[G.800][RFC7276].
Note that the YANG Data model for OAM protcols using connection- Note that the YANG Data model for OAM protcols using connection-
oriented communications is defined in oriented communications is defined in
[I-D.ietf-lime-yang-connection-oriented-oam-model]. [I-D.ietf-lime-yang-connection-oriented-oam-model].
This document defines a base YANG Data model for connectionless OAM This document defines a base YANG Data model for OAM protocols that
protocols. The data model is defined using the YANG [RFC7950] data use Connectionless Communications. The data model is defined using
modeling language. This generic YANG model for connectionless OAM the YANG [RFC7950] data modeling language. This generic YANG model
only includes configuration data and state data. It can be used in for connectionless OAM only includes configuration data and state
conjunction with data retrieval method model described in data. It can be used in conjunction with data retrieval method model
[I-D.ietf-lime-yang-connectionless-oam-methods], which focuses on described in [I-D.ietf-lime-yang-connectionless-oam-methods], which
data retrieval procedures such as RPC. However it also can be used focuses on data retrieval procedures such as RPC. However it also
independently of this data retrieval method model. can be used independently of this data retrieval method model.
2. Conventions used in this document 2. Conventions used in this document
The following terms are defined in [RFC6241] and are not redefined The following terms are defined in [RFC6241] and are not redefined
here: here:
o client o client
o configuration data o configuration data
o server o server
skipping to change at page 4, line 42 skipping to change at page 4, line 42
TWAMP - Two-Way Active Measurement Protocol (TWAMP) [RFC 5357]. TWAMP - Two-Way Active Measurement Protocol (TWAMP) [RFC 5357].
AS - Autonomous System. AS - Autonomous System.
LSP - Label Switched Path. LSP - Label Switched Path.
TE - Traffic Engineering. TE - Traffic Engineering.
MPLS - Multiprotocol Label Switching. MPLS - Multiprotocol Label Switching.
NI - Network Instance.
PTP - Precision Time Protocol [IEEE.1588]. PTP - Precision Time Protocol [IEEE.1588].
NTP - Network Time Protocol [RFC5905]. NTP - Network Time Protocol [RFC5905].
2.2. Terminology 2.2. Terminology
MAC address- Address for data link layer interface. MAC address- Address for data link layer interface.
TP - Test Point. Test point is a functional entity that is defined TP - Test Point. Test point is a functional entity that is defined
at a node in the network and can initiate and/or react to OAM at a node in the network and can initiate and/or react to OAM
skipping to change at page 5, line 16 skipping to change at page 5, line 23
with the management plane as well. with the management plane as well.
RPC operation - A specific Remote Procedure Call. RPC operation - A specific Remote Procedure Call.
CC - Continuity Check.[RFC7276], Continuity Checks are used to verify CC - Continuity Check.[RFC7276], Continuity Checks are used to verify
that a destination is reachable and therefore also referred to as that a destination is reachable and therefore also referred to as
reachability verification. reachability verification.
3. Overview of the Connectionless OAM Model 3. Overview of the Connectionless OAM Model
The model augments "/networks/network/node" path defined in the ietf- The YANG data model for OAM protocols that use Connectionless
network module [I-D.ietf-i2rs-yang-network-topo] with 'test-point- Communications has been split into two modules:
locations' grouping defined in Section 3.5. The network node in
o The module ietf-lime-common-types.yang provides common definitions
such as Time-specific data types and Timestamp specific data
types.
o The module ietf-connectionless-oam.yang defines technology-
independent abstraction of key OAM constructs for OAM protocols
that use Connectionless communication.
The ietf-connectionless-oam module augments the "/networks/network/
node" path defined in the ietf- network module
[I-D.ietf-i2rs-yang-network-topo] with 'test-point-locations'
grouping defined in Section 3.5. The network node in
"/networks/network/node" path are used to describe the network "/networks/network/node" path are used to describe the network
hierarchies and the inventory of nodes contained in a network. hierarchies and the inventory of nodes contained in a network.
Under the 'test-point-locations' grouping, each test point location Under the 'test-point-locations' grouping, each test point location
is chosen based on 'tp-location-type' leaf which when chosen, leads is chosen based on 'tp-location-type' leaf which when chosen, leads
to a container that includes a list of 'test-point-locations'. to a container that includes a list of 'test-point-locations'.
Each 'test-point-locations' list includes a 'test-point-location- Each 'test-point-locations' list includes a 'test-point-location-
info' grouping. The 'test-point-location-info' grouping includes: info' grouping. The 'test-point-location-info' grouping includes:
skipping to change at page 6, line 19 skipping to change at page 6, line 36
With connectionless OAM protocols, the TP address can be one of the With connectionless OAM protocols, the TP address can be one of the
following types: following types:
o MAC address [RFC6136] at link layer for TPs o MAC address [RFC6136] at link layer for TPs
o IPv4 or IPv6 address at IP layer for TPs o IPv4 or IPv6 address at IP layer for TPs
o TP-attribute identifying a TP associated with an application layer o TP-attribute identifying a TP associated with an application layer
function function
o System-id to represent the device or node. o Router-id to represent the device or node.
[I-D.ietf-spring-sr-yang] [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'
grouping needs to be associated with additional parameters, e.g., grouping needs to be associated with additional parameters, e.g.,
DSCP for IP or EXP (renamed to Traffic Classic in [RFC5462]) for DSCP for IP or EXP (renamed to Traffic Classic in [RFC5462]) for
MPLS. In generic connectionless OAM YANG model, these parameters are MPLS. In generic connectionless OAM YANG model, these parameters are
not explicit configured. The model user can add corresponding not explicitly configured. The model user can add corresponding
parameters according to their requirements. 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 proactive OAM method requires persistent reporting of fault. The proactive OAM method requires persistent
configuration. The on-demand OAM refers to OAM actions which are configuration. The on-demand OAM refers to OAM actions which are
initiated via manual intervention for a limited time to carry out initiated via manual intervention for a limited time to carry out
skipping to change at page 8, line 9 skipping to change at page 8, line 9
neighboring test point placed before the current test point, the neighboring test point placed before the current test point, the
'position' leaf is set to -1. If there is one neighboring test point 'position' leaf is set to -1. If there is one neighboring test point
placed after the current test point, the 'position' leaf is set to 1. placed after the current test point, the 'position' leaf is set to 1.
If there is no neighboring test point placed before or after the If there is no neighboring test point placed before or after the
current test point, the 'position' leaf is set to 0. current test point, the 'position' leaf is set to 0.
list oam-neighboring-tps { list oam-neighboring-tps {
key "index"; key "index";
leaf index { leaf index {
type uint16 { type uint16 {
range "0..65536"; range "0..65535";
} }
description description
"Index of a list of neighboring test points "Index of a list of neighboring test points
in adjacent layers up and down the stack for in adjacent layers up and down the stack for
the same interface that are related to the the same interface that are related to the
current test point."; current test point.";
} }
leaf position { leaf position {
type int8 { type int8 {
range "-1..1"; range "-1..1";
skipping to change at page 9, line 38 skipping to change at page 9, line 38
continuity check data model is made generic enough to allow different continuity check data model is made generic enough to allow different
methods of data retrieval. None of the fields are made mandatory for methods of data retrieval. None of the fields are made mandatory for
that reason. Noted that the retrieval methods are defined in that reason. Noted that the retrieval 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 3.8. OAM data hierarchy
The complete data hierarchy related to the OAM YANG model is The complete data hierarchy related to the OAM YANG model is
presented below. presented below.
module: ietf-connectionless-oam module: ietf-connectionless-oam
+--ro cc-session-statistics-data {continuity-check}? +--ro cc-session-statistics-data {continuity-check}?
+--ro cc-ipv4-sessions-statistics +--ro cc-session-statistics* [type]
| +--ro cc-session-statistics +--ro type identityref
| +--ro session-count? uint32 +--ro cc-ipv4-sessions-statistics
| +--ro session-up-count? uint32 | +--ro cc-session-statistics
| +--ro session-down-count? uint32 | +--ro session-count? uint32
| +--ro session-admin-down-count? uint32 | +--ro session-up-count? uint32
+--ro cc-ipv6-sessions-statistics | +--ro session-down-count? uint32
+--ro cc-session-statistics | +--ro session-admin-down-count? uint32
+--ro session-count? uint32 +--ro cc-ipv6-sessions-statistics
+--ro session-up-count? uint32 +--ro cc-session-statistics
+--ro session-down-count? uint32 +--ro session-count? uint32
+--ro session-admin-down-count? uint32 +--ro session-up-count? uint32
augment /nd:networks/nd:network/nd:node: +--ro session-down-count? uint32
+--ro session-admin-down-count? uint32
augment /nd:networks/nd:network/nd:node:
+--rw tp-location-type? identityref +--rw tp-location-type? identityref
+--rw ipv4-location-type +--rw ipv4-location-type
| +--rw test-point-ipv4-location-list | +--rw test-point-ipv4-location-list
| +--rw test-point-locations* [ipv4-location ni] | +--rw test-point-locations* [ipv4-location ni]
| +--rw ipv4-location inet:ipv4-address | +--rw ipv4-location inet:ipv4-address
| +--rw ni routing-instance-ref | +--rw ni routing-instance-ref
| +--rw (technology)? | +--rw (technology)?
| | +--:(technology-null) | | +--:(technology-null)
| | +--rw tech-null? empty | | +--rw tech-null? empty
| +--rw tp-tools | +--rw tp-tools
| | +--rw continuity-check boolean | | +--rw continuity-check boolean
| | +--rw path-discovery boolean | | +--rw path-discovery boolean
| +--rw root? | +--rw root? <anydata>
| +--rw oam-neighboring-tps* [index] | +--rw oam-neighboring-tps* [index]
| +--rw index uint16 | +--rw index uint16
| +--rw position? int8 | +--rw position? int8
| +--rw (tp-location)? | +--rw (tp-location)?
| +--:(mac-address) | +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address | | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address) | +--:(ipv4-address)
| | +--rw ipv4-address-location? inet:ipv4-address | | +--rw ipv4-address-location? inet:ipv4-address
| +--:(ipv6-address) | +--:(ipv6-address)
| | +--rw ipv6-address-location? inet:ipv6-address | | +--rw ipv6-address-location? inet:ipv6-address
| +--:(as-number) | +--:(as-number)
| | +--rw as-number-location? inet:as-number | | +--rw as-number-location? inet:as-number
| +--:(system-id) | +--:(router-id)
| +--rw system-id-location? router-id | +--rw router-id-location? rt:router-id
+--rw ipv6-location-type +--rw ipv6-location-type
| +--rw test-point-ipv6-location-list | +--rw test-point-ipv6-location-list
| +--rw test-point-locations* [ipv6-location ni] | +--rw test-point-locations* [ipv6-location ni]
| +--rw ipv6-location inet:ipv6-address | +--rw ipv6-location inet:ipv6-address
| +--rw ni routing-instance-ref | +--rw ni routing-instance-ref
| +--rw (technology)? | +--rw (technology)?
| | +--:(technology-null) | | +--:(technology-null)
| | +--rw tech-null? empty | | +--rw tech-null? empty
| +--rw tp-tools | +--rw tp-tools
| | +--rw continuity-check boolean | | +--rw continuity-check boolean
| | +--rw path-discovery boolean | | +--rw path-discovery boolean
| +--rw root? | +--rw root? <anydata>
| +--rw oam-neighboring-tps* [index] | +--rw oam-neighboring-tps* [index]
| +--rw index uint16 | +--rw index uint16
| +--rw position? int8 | +--rw position? int8
| +--rw (tp-location)? | +--rw (tp-location)?
| +--:(mac-address) | +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address | | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address) | +--:(ipv4-address)
| | +--rw ipv4-address-location? inet:ipv4-address | | +--rw ipv4-address-location? inet:ipv4-address
| +--:(ipv6-address) | +--:(ipv6-address)
| | +--rw ipv6-address-location? inet:ipv6-address | | +--rw ipv6-address-location? inet:ipv6-address
| +--:(as-number) | +--:(as-number)
| | +--rw as-number-location? inet:as-number | | +--rw as-number-location? inet:as-number
| +--:(system-id) | +--:(router-id)
| +--rw system-id-location? router-id | +--rw router-id-location? rt:router-id
+--rw mac-location-type +--rw mac-location-type
| +--rw test-point-mac-address-location-list | +--rw test-point-mac-address-location-list
| +--rw test-point-locations* [mac-address-location] | +--rw test-point-locations* [mac-address-location]
| +--rw mac-address-location yang:mac-address | +--rw mac-address-location yang:mac-address
| +--rw (technology)? | +--rw (technology)?
| | +--:(technology-null) | | +--:(technology-null)
| | +--rw tech-null? empty | | +--rw tech-null? empty
| +--rw tp-tools | +--rw tp-tools
| | +--rw continuity-check boolean | | +--rw continuity-check boolean
| | +--rw path-discovery boolean | | +--rw path-discovery boolean
| +--rw root? | +--rw root? <anydata>
| +--rw oam-neighboring-tps* [index] | +--rw oam-neighboring-tps* [index]
| +--rw index uint16 | +--rw index uint16
| +--rw position? int8 | +--rw position? int8
| +--rw (tp-location)? | +--rw (tp-location)?
| +--:(mac-address) | +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address | | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address) | +--:(ipv4-address)
| | +--rw ipv4-address-location? inet:ipv4-address | | +--rw ipv4-address-location? inet:ipv4-address
| +--:(ipv6-address) | +--:(ipv6-address)
| | +--rw ipv6-address-location? inet:ipv6-address | | +--rw ipv6-address-location? inet:ipv6-address
| +--:(as-number) | +--:(as-number)
| | +--rw as-number-location? inet:as-number | | +--rw as-number-location? inet:as-number
| +--:(system-id) | +--:(router-id)
| +--rw system-id-location? router-id | +--rw router-id-location? rt:router-id
+--rw group-as-number-location-type +--rw group-as-number-location-type
| +--rw test-point-as-number-location-list | +--rw test-point-as-number-location-list
| +--rw test-point-locations* [as-number-location] | +--rw test-point-locations* [as-number-location]
| +--rw as-number-location inet:as-number | +--rw as-number-location inet:as-number
| +--rw ni? routing-instance-ref | +--rw ni? routing-instance-ref
| +--rw (technology)? | +--rw (technology)?
| | +--:(technology-null) | | +--:(technology-null)
| | +--rw tech-null? empty | | +--rw tech-null? empty
| +--rw tp-tools | +--rw tp-tools
| | +--rw continuity-check boolean | | +--rw continuity-check boolean
| | +--rw path-discovery boolean | | +--rw path-discovery boolean
| +--rw root? | +--rw root? <anydata>
| +--rw oam-neighboring-tps* [index] | +--rw oam-neighboring-tps* [index]
| +--rw index uint16 | +--rw index uint16
| +--rw position? int8 | +--rw position? int8
| +--rw (tp-location)? | +--rw (tp-location)?
| +--:(mac-address) | +--:(mac-address)
| | +--rw mac-address-location? yang:mac-address | | +--rw mac-address-location? yang:mac-address
| +--:(ipv4-address) | +--:(ipv4-address)
| | +--rw ipv4-address-location? inet:ipv4-address | | +--rw ipv4-address-location? inet:ipv4-address
| +--:(ipv6-address) | +--:(ipv6-address)
| | +--rw ipv6-address-location? inet:ipv6-address | | +--rw ipv6-address-location? inet:ipv6-address
| +--:(as-number) | +--:(as-number)
| | +--rw as-number-location? inet:as-number | | +--rw as-number-location? inet:as-number
| +--:(system-id) | +--:(router-id)
| +--rw system-id-location? router-id | +--rw router-id-location? rt:router-id
+--rw group-system-id-location-type +--rw group-router-id-location-type
+--rw test-point-system-info-location-list +--rw test-point-system-info-location-list
+--rw test-point-locations* [system-id-location] +--rw test-point-locations* [router-id-location]
+--rw system-id-location inet:uri +--rw router-id-location rt:router-id
+--rw ni? routing-instance-ref +--rw ni? routing-instance-ref
+--rw (technology)? +--rw (technology)?
| +--:(technology-null) | +--:(technology-null)
| +--rw tech-null? empty | +--rw tech-null? empty
+--rw tp-tools +--rw tp-tools
| +--rw continuity-check boolean | +--rw continuity-check boolean
| +--rw path-discovery boolean | +--rw path-discovery boolean
+--rw root? +--rw root? <anydata>
+--rw oam-neighboring-tps* [index] +--rw oam-neighboring-tps* [index]
+--rw index uint16 +--rw index uint16
+--rw position? int8 +--rw position? int8
+--rw (tp-location)? +--rw (tp-location)?
+--:(mac-address) +--:(mac-address)
| +--rw mac-address-location? yang:mac-address | +--rw mac-address-location? yang:mac-address
+--:(ipv4-address) +--:(ipv4-address)
| +--rw ipv4-address-location? inet:ipv4-address | +--rw ipv4-address-location? inet:ipv4-address
+--:(ipv6-address) +--:(ipv6-address)
| +--rw ipv6-address-location? inet:ipv6-address | +--rw ipv6-address-location? inet:ipv6-address
+--:(as-number) +--:(as-number)
| +--rw as-number-location? inet:as-number | +--rw as-number-location? inet:as-number
+--:(system-id) +--:(router-id)
+--rw system-id-location? router-id +--rw router-id-location? rt:router-id
4. OAM YANG Module 4. LIME Common Types YANG Module
<CODE BEGINS> file "ietf-lime-common-types@2017-09-06.yang"
module ietf-lime-common-types {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-lime-common-types";
prefix "lime";
organization
"IETF Layer Independent OAM Management(LIME)
Working Group";
contact
"WG Web: <https://datatracker.ietf.org/wg/lime>
WG List: <mailto:lmap@ietf.org>
Editor: Qin Wu
<bill.wu@huawei.com>";
description
"This module provides common definitions used by the data
models written for Layer Independent OAM Management(LIME).
This module defines identities but no schema tree elements.";
revision "2017-09-06" {
description
"Initial version";
reference
"RFC xxxx: A YANG Data Model for OAM Protocols that use Connectionless
Communications";
}
/*** Collection of common types related to time ***/
/*** Time unit identity ***/
identity time-unit-type {
description
"Time unit type";
}
identity hours {
base time-unit-type;
description
"Time unit in Hours";
}
identity minutes {
base time-unit-type;
description
"Time unit in Minutes";
}
identity seconds {
base time-unit-type;
description
"Time unit in Seconds";
}
identity milliseconds {
base time-unit-type;
description
"Time unit in Milliseconds";
}
identity microseconds {
base time-unit-type;
description
"Time unit in Microseconds";
}
identity nanoseconds {
base time-unit-type;
description
"Time unit in Nanoseconds";
}
/*** Timestamp format Identity ***/
identity timestamp-type {
description
"Base identity for Timestamp Type.";
}
identity truncated-ptp {
base timestamp-type;
description
"Identity for 64bit short format PTP timestamp.";
}
identity truncated-ntp {
base timestamp-type;
description
"Identity for 32bit short format NTP timestamp.";
}
identity ntp64 {
base timestamp-type;
description
"Identity for 64bit NTP timestamp.";
}
identity icmp {
base timestamp-type;
description
"Identity for 32bit ICMP timestamp.";
}
}
<CODE ENDS>
5. Connectionless OAM YANG Module
<CODE BEGINS> file "ietf-connectionless-oam@2017-09-06.yang" <CODE BEGINS> file "ietf-connectionless-oam@2017-09-06.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 cl-oam; prefix cl-oam;
import ietf-yang-schema-mount { import ietf-yang-schema-mount {
prefix yangmnt; prefix yangmnt;
} }
skipping to change at page 13, line 4 skipping to change at page 15, line 8
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 cl-oam; prefix cl-oam;
import ietf-yang-schema-mount { import ietf-yang-schema-mount {
prefix yangmnt; prefix yangmnt;
} }
import ietf-network { import ietf-network {
prefix nd; prefix nd;
} }
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
} }
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
} }
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
import ietf-network-instance { import ietf-network-instance {
prefix ni; prefix ni;
} }
import ietf-routing-types { import ietf-routing-types {
prefix rt; prefix rt;
} }
import ietf-lime-common-types {
prefix lime;
}
organization organization
"IETF LIME Working Group"; "IETF LIME Working Group";
contact contact
"Deepak Kumar dekumar@cisco.com "Deepak Kumar dekumar@cisco.com
Qin Wu bill.wu@huawei.com Qin Wu bill.wu@huawei.com
S Raghavan srihari@cisco.com S Raghavan srihari@cisco.com
Zitao Wang wangzitao@huawei.com Zitao Wang wangzitao@huawei.com
R Rahman rrahman@cisco.com"; R Rahman rrahman@cisco.com";
description description
"This YANG module defines the generic configuration, "This YANG module defines the generic configuration,
skipping to change at page 14, line 33 skipping to change at page 16, line 40
"This feature indicates that timestamp is PTP long format."; "This feature indicates that timestamp is PTP long format.";
} }
feature ntp-short-format { feature ntp-short-format {
description description
"This feature indicates that timestamp is NTP short format."; "This feature indicates that timestamp is NTP short format.";
} }
feature icmp-timestamp { feature icmp-timestamp {
description description
"This feature indicates that timestamp is ICMP timestamp."; "This feature indicates that timestamp is ICMP timestamp.";
} }
typedef router-id { identity traffic-type {
type yang:dotted-quad; description
description "This is base identity of traffic type
"A 32-bit number in the dotted quad format assigned to each which include IPv4 and IPv6,etc.";
router. This number uniquely identifies the router within an
Autonomous System.";
}
typedef routing-instance-ref {
type leafref {
path "/ni:network-instances/ni:network-instance/ni:name";
}
description
"This type is used for leafs that reference a routing instance
configuration.";
} }
identity ipv4 {
base traffic-type;
description
"identity for IPv4 traffic type.";
}
identity ipv6 {
base traffic-type;
description
"identity for IPv4 traffic type.";
}
identity address-attribute-types { identity address-attribute-types {
description description
"This is base identity of address "This is base identity of address
attribute types which are ip-prefix, attribute types which are Generic
bgp, tunnel, pwe3, vpls, etc."; IPv4/IPv6 Prefix,BGP Labeled
IPv4/IPv6 Prefix,Tunnel ID,
PW ID, vpls VE ID, etc.(See RFC8029
for details.)";
} }
typedef address-attribute-type { typedef address-attribute-type {
type identityref { type identityref {
base address-attribute-types; base address-attribute-types;
} }
description description
"Target address attribute type."; "Target address attribute type.";
} }
typedef percentage { typedef percentage {
type decimal64 { type decimal64 {
fraction-digits 5; fraction-digits 5;
} range "0..100";
description "Percentage"; }
description "Percentage";
} }
typedef routing-instance-ref {
identity time-interval-type { type leafref {
description path "/ni:network-instances/ni:network-instance/ni:name";
"Time interval type"; }
}
identity hours {
base time-interval-type;
description
"Time unit in Hours";
}
identity minutes {
base time-interval-type;
description
"Time unit in Minutes";
}
identity seconds {
base time-interval-type;
description
"Time unit in Seconds";
}
identity milliseconds {
base time-interval-type;
description
"Time unit in Milliseconds";
}
identity microseconds {
base time-interval-type;
description
"Time unit in Microseconds";
}
identity nanoseconds {
base time-interval-type;
description description
"Time unit in Nanoseconds"; "This type is used for leafs that reference a routing instance
configuration.";
} }
identity timestamp-type {
description
"Base identity for Timestamp Type.";
}
identity truncated-ptp {
base timestamp-type;
description
"Identity for 64bit short format PTP timestamp.";
}
identity truncated-ntp {
base timestamp-type;
description
"Identity for 32bit short format NTP timestamp.";
}
identity ntp64 {
base timestamp-type;
description
"Identity for 64bit NTP timestamp.";
}
identity icmp {
base timestamp-type;
description
"Identity for 32bit ICMP timestamp.";
}
grouping cc-session-statistics { grouping cc-session-statistics {
description description
"Grouping for session statistics."; "Grouping for session statistics.";
container cc-session-statistics { container cc-session-statistics {
description description
"cc session counters"; "cc session counters";
leaf session-count { leaf session-count {
type uint32; type uint32;
default "0"; default "0";
description description
skipping to change at page 17, line 40 skipping to change at page 18, line 43
description description
"Per session packet statistics."; "Per session packet statistics.";
leaf rx-packet-count { leaf rx-packet-count {
type uint32{ type uint32{
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total number of received OAM packet count. "Total number of received OAM packet count.
If the value is 4294967295, The value of count will be set to zero (0)
it indicates the packet count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf tx-packet-count { leaf tx-packet-count {
type uint32{ type uint32{
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total number of transmitted OAM packet count. "Total number of transmitted OAM packet count.
If the value is 4294967295, The value of count will be set to zero (0)
it indicates the packet count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf rx-bad-packet { leaf rx-bad-packet {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total number of received bad OAM packet. "Total number of received bad OAM packet.
If the value is 4294967295, The value of count will be set to zero (0)
it indicates the bad packet count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf tx-packet-failed { leaf tx-packet-failed {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total number of failed sending OAM packet. "Total number of failed sending OAM packet.
If the value is 4294967295, it indicates The value of count will be set to zero (0)
failed packet count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
} }
} }
grouping cc-per-session-statistics { grouping cc-per-session-statistics {
description description
"Grouping for per session statistics"; "Grouping for per session statistics";
container cc-per-session-statistics { container cc-per-session-statistics {
description description
"per session statistics."; "per session statistics.";
skipping to change at page 19, line 7 skipping to change at page 20, line 23
description description
"Time and date last time session is up."; "Time and date last time session is up.";
} }
leaf down-count { leaf down-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total Continuity Check sessions down count. "Total Continuity Check sessions down count.
If the value is 4294967295, it indicates down The value of count will be set to zero (0)
count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf admin-down-count { leaf admin-down-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total Continuity Check sessions admin down count. "Total Continuity Check sessions admin down count.
If the value is 4294967295, it indicates admin The value of count will be set to zero (0)
down count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
uses session-packet-statistics; uses session-packet-statistics;
} }
} }
grouping session-error-statistics { grouping session-error-statistics {
description description
"Grouping for per session error statistics"; "Grouping for per session error statistics";
container session-error-statistics { container session-error-statistics {
description description
"Per session error statistics."; "Per session error statistics.";
leaf packet-loss-count { leaf packet-loss-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total received packet drops count. "Total received packet drops count.
If the value is 4294967295, it indicates The value of count will be set to zero (0)
packet drops count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf loss-ratio{ leaf loss-ratio{
type percentage; type percentage;
description description
"Loss ratio of the packets. Express as percentage "Loss ratio of the packets. Express as percentage
of packets lost with respect to packets sent."; of packets lost with respect to packets sent.";
} }
leaf packet-reorder-count { leaf packet-reorder-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
default "0"; default "0";
description description
"Total received packet reordered count. "Total received packet reordered count.
The value of count will be set to zero (0)
If the value is 4294967295, it indicates on creation and will thereafter increase
packet reorder count is overrun."; monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf packets-out-of-seq-count { leaf packets-out-of-seq-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
description description
"Total received out of sequence count. "Total received out of sequence count.
If the value is 4294967295, it indicates The value of count will be set to zero (0)
out of sequence count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero..";
} }
leaf packets-dup-count { leaf packets-dup-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
description description
"Total received packet duplicates count. "Total received packet duplicates count.
If the value is 4294967295, it indicates The value of count will be set to zero (0)
packet duplicates count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
} }
} }
grouping session-delay-statistics { grouping session-delay-statistics {
description description
"Grouping for per session delay statistics"; "Grouping for per session delay statistics";
container session-delay-statistics { container session-delay-statistics {
description description
"Session delay summarised information.By default, "Session delay summarised information.By default,
one way measurement protocol (e.g., OWAMP)is used one way measurement protocol (e.g., OWAMP)is used
to measure delay. When two way measurement protocol to measure delay. When two way measurement protocol
(e.g., TWAMP) is used instead, it can be indicated (e.g., TWAMP) is used instead, it can be indicated
using and protocol-id defined in RPC operation of using and protocol-id defined in RPC operation of
draft-ietf-lime-yang-connectionless-oam-methods,i.e., draft-ietf-lime-yang-connectionless-oam-methods,i.e.,
set protocol-id as OWAMP. Note that only one measurement set protocol-id as OWAMP. Note that only one measurement
protocol for delay is specified for interoperability reason."; protocol for delay is specified for interoperability reason.";
leaf time-interval-value { leaf time-unit-value {
type identityref { type identityref {
base time-interval-type; base lime:time-unit-type;
} }
default "milliseconds"; default lime:milliseconds;
description description
"Time units among choice of s,ms,ns etc."; "Time units among choice of s,ms,ns etc.";
} }
leaf min-delay-value { leaf min-delay-value {
type uint32; type uint32;
description description
"Minimum delay value observed."; "Minimum delay value observed.";
} }
leaf max-delay-value { leaf max-delay-value {
type uint32; type uint32;
skipping to change at page 21, line 32 skipping to change at page 23, line 17
description description
"Session jitter summarised information. By default, "Session jitter summarised information. By default,
jitter is measured using IP Packet Delay Variation jitter is measured using IP Packet Delay Variation
(IPDV) as defined in RFC3393. When the other measurement (IPDV) as defined in RFC3393. When the other measurement
method is used instead(e.g., Packet Delay Variation used in method is used instead(e.g., Packet Delay Variation used in
Y.1540, it can be indicated using protocol-id-meta-data Y.1540, it can be indicated using protocol-id-meta-data
defined in RPC operation of defined in RPC operation of
draft-ietf-lime-yang-connectionless-oam-methods. Note that draft-ietf-lime-yang-connectionless-oam-methods. Note that
only one measurement method for jitter is specified only one measurement method for jitter is specified
for interoperability reason."; for interoperability reason.";
leaf interval-value { leaf unit-value {
type identityref { type identityref {
base time-interval-type; base lime:time-unit-type;
} }
default "milliseconds"; default lime:milliseconds;
description description
"Time units among choice of s,ms,ns etc."; "Time units among choice of s,ms,ns etc.";
} }
leaf min-jitter-value { leaf min-jitter-value {
type uint32; type uint32;
description description
"Minimum jitter value observed."; "Minimum jitter value observed.";
} }
leaf max-jitter-value { leaf max-jitter-value {
type uint32; type uint32;
skipping to change at page 22, line 23 skipping to change at page 24, line 7
container session-path-verification-statistics { container session-path-verification-statistics {
description description
"OAM per session path verification statistics."; "OAM per session path verification statistics.";
leaf verified-count { leaf verified-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
description description
"Total number of OAM packets that "Total number of OAM packets that
went through a path as intended. went through a path as intended.
A value of 4294967295 indicates that The value of count will be set to zero (0)
verified count is overrun."; on creation and will thereafter increase
monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
leaf failed-count { leaf failed-count {
type uint32 { type uint32 {
range "0..4294967295"; range "0..4294967295";
} }
description description
"Total number of OAM packets that "Total number of OAM packets that
went through an unintended path. went through an unintended path.
A value of 4294967295 indicates that The value of count will be set to zero (0)
on creation and will thereafter increase
failed count is overrun."; monotonically until it reaches a maximum value
of 2^32-1 (4294967295 decimal), when it wraps
around and starts increasing again from zero.";
} }
} }
} }
grouping session-type { grouping session-type {
description description
"This object indicates which kind "This object indicates which kind
of activation will be used by the current of activation will be used by the current
session."; session.";
leaf session-type { leaf session-type {
type enumeration { type enumeration {
skipping to change at page 23, line 38 skipping to change at page 25, line 27
base tp-address-technology-type; base tp-address-technology-type;
description description
"IPv6 address type"; "IPv6 address type";
} }
identity tp-attribute-type { identity tp-attribute-type {
base tp-address-technology-type; base tp-address-technology-type;
description description
"Test point attribute type"; "Test point attribute type";
} }
identity system-id-address-type { identity router-id-address-type {
base tp-address-technology-type; base tp-address-technology-type;
description description
"System id address type"; "System id address type";
} }
identity as-number-address-type { identity as-number-address-type {
base tp-address-technology-type; base tp-address-technology-type;
description description
"AS number address type"; "AS number address type";
} }
identity route-distinguisher-address-type { identity route-distinguisher-address-type {
skipping to change at page 25, line 30 skipping to change at page 27, line 20
description description
"Test point type."; "Test point type.";
} }
choice tp-attribute-value { choice tp-attribute-value {
description 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."; "Generic IPv4/IPv6 prefix.See Section 3.2.13 and
Section 3.2.14 of RFC8029.";
reference
"RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures";
} }
} }
case bgp { case bgp {
leaf bgp { leaf bgp {
type inet:ip-prefix; type inet:ip-prefix;
description description
"BGP Labeled Prefix "; "BGP Labeled IPv4/IPv6 Prefix.See section
3.2.11 and section 3.2.12 of RFC8029 for details. ";
reference
"RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures";
} }
} }
case tunnel { case tunnel {
leaf tunnel-interface { leaf tunnel-interface {
type uint32; type uint32;
description description
"VPN Prefix "; "Basic IPv4/IPv6 Tunnel ID. See section 3.2.3
and Section 3.2.4 of RFC8029 for details.";
reference
"RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures.";
} }
} }
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,See section 3.2.8
of RFC8029 for details.";
reference
"RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures";
} }
leaf pw-id { leaf pw-id {
type uint32; type uint32;
description description
"Pseudowire ID is a non-zero 32-bit ID."; "Pseudowire ID is a non-zero 32-bit ID.See section
3.2.8 and Section 3.2.9 for details.";
reference reference
"RFC 4379 :Detecting Multi-Protocol Label "RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures"; Switched (MPLS) Data Plane Failures";
} }
} }
case vpls { case vpls {
leaf route-distinguisher { leaf route-distinguisher {
type rt:route-distinguisher; type rt:route-distinguisher;
description description
"Route Distinguisher is an 8 octets identifier "Route Distinguisher is an 8 octets identifier
used to distinguish information about various used to distinguish information about various
L2VPN advertised by a node."; L2VPN advertised by a node.";
reference reference
"RFC 4379 :Detecting Multi-Protocol Label "RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures"; Switched (MPLS) Data Plane Failures";
} }
leaf sender-ve-id { leaf sender-ve-id {
type uint16; type uint16;
description description
"Sender's VE ID. The VE ID (VPLS Edge Identifier) "Sender's VE ID. The VE ID (VPLS Edge Identifier)
is a 2-octet identifier."; is a 2-octet identifier.";
reference reference
"RFC 4379 :Detecting Multi-Protocol Label "RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures"; Switched (MPLS) Data Plane Failures";
} }
leaf receiver-ve-id { leaf receiver-ve-id {
type uint16; type uint16;
description description
"Receiver's VE ID.The VE ID (VPLS Edge Identifier) "Receiver's VE ID.The VE ID (VPLS Edge Identifier)
is a 2-octet identifier."; is a 2-octet identifier.";
reference reference
"RFC 4379 :Detecting Multi-Protocol Label "RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures"; Switched (MPLS) Data Plane Failures";
} }
} }
case mpls-mldp { case mpls-mldp {
choice root-address { choice root-address {
description description
"Root address choice."; "Root address choice.";
case ip-address { case ip-address {
leaf source-address { leaf source-address {
type inet:ip-address; type inet:ip-address;
skipping to change at page 27, line 29 skipping to change at page 29, line 34
numbers which identify an Autonomous System."; numbers which identify an Autonomous System.";
} }
} }
case global-id { case global-id {
leaf lsp-id { leaf lsp-id {
type string; type string;
description description
"LSP ID is an identifier of a LSP "LSP ID is an identifier of a LSP
within a MPLS network."; within a MPLS network.";
reference reference
"RFC 4379 :Detecting Multi-Protocol Label "RFC 8029 :Detecting Multi-Protocol Label
Switched (MPLS) Data Plane Failures"; Switched (MPLS) Data Plane Failures";
} }
} }
} }
} }
} }
description description
"Test Point Attribute Container"; "Test Point Attribute Container";
} }
container system-info { container system-info {
when "derived-from-or-self(../tp-location-type,"+ when "derived-from-or-self(../tp-location-type,"+
"'cl-oam:system-id-address-type')" { "'cl-oam:router-id-address-type')" {
description description
"System id address type"; "System id address type";
} }
leaf system-id { leaf router-id {
type rt:router-id; type rt:router-id;
description description
"System ID assigned to this node."; "Router ID assigned to this node.";
} }
description description
"system ID container."; "Router ID container.";
} }
description description
"TP Address"; "TP Address";
} }
grouping tp-address-ni { grouping tp-address-ni {
description description
"Test point address with VRF."; "Test point address with VRF.";
leaf ni { leaf ni {
type routing-instance-ref; type routing-instance-ref;
description description
skipping to change at page 29, line 40 skipping to change at page 31, line 44
} }
case as-number { case as-number {
leaf as-number-location { leaf as-number-location {
type inet:as-number; type inet:as-number;
description description
"AS number location"; "AS number location";
} }
description description
"AS number for point to multipoint OAM"; "AS number for point to multipoint OAM";
} }
case system-id { case router-id {
leaf system-id-location { leaf router-id-location {
type router-id; type rt:router-id;
description description
"System id location"; "System id location";
} }
description description
"System ID"; "System ID";
} }
description description
"TP location."; "TP location.";
} }
description description
"List of neighboring test points in the same layer that are related to current test "List of neighboring test points in the same layer that are related to current test
point. If the neighboring test-point is placed after the current test point, the point. If the neighboring test-point is placed after the current test point, the
position is specified as +1. If neighboring test-point position is specified as +1. If neighboring test-point
is placed before the current test point, the position is specified is placed before the current test point, the position is specified
as -1, if no neighboring test points placed before or after the current as -1, if no neighboring test points placed before or after the current
test point in the same layer, the position is specified as 0."; test point in the same layer, the position is specified as 0.";
} }
description description
skipping to change at page 31, line 48 skipping to change at page 34, line 4
test point"; test point";
} }
uses connectionless-oam-tps; uses connectionless-oam-tps;
description description
"Test point Location"; "Test point Location";
} }
grouping test-point-locations { grouping test-point-locations {
description description
"Group of test point locations."; "Group of test point locations.";
leaf tp-location-type { leaf tp-location-type {
type identityref { type identityref {
base tp-address-technology-type; base tp-address-technology-type;
} }
description description
"Test point location type."; "Test point location type.";
} }
container ipv4-location-type { container ipv4-location-type {
when "derived-from-or-self(../tp-location-type,"+ when "derived-from-or-self(../tp-location-type,"+
"'cl-oam:ipv4-address-type')" { "'cl-oam: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 { container test-point-ipv4-location-list {
list test-point-locations { list test-point-locations {
key "ipv4-location ni"; key "ipv4-location ni";
leaf ipv4-location { leaf ipv4-location {
type inet:ipv4-address; type inet:ipv4-address;
description description
"IPv4 Address."; "IPv4 Address.";
} }
leaf ni { leaf ni {
type routing-instance-ref; type routing-instance-ref;
description description
skipping to change at page 32, line 37 skipping to change at page 34, line 42
description description
"List of test point locations."; "List of test point locations.";
} }
description description
"Serves as top-level container "Serves as top-level container
for test point location list."; for test point location list.";
} }
description description
"ipv4 location type container."; "ipv4 location type container.";
} }
container ipv6-location-type { container ipv6-location-type {
when "derived-from-or-self(../tp-location-type,"+ when "derived-from-or-self(../tp-location-type,"+
"'cl-oam:ipv6-address-type')" { "'cl-oam:ipv6-address-type')" {
description description
"when test point location is equal to ipv6 address"; "when test point location is equal to ipv6 address";
} }
container test-point-ipv6-location-list { container test-point-ipv6-location-list {
list test-point-locations { list test-point-locations {
key "ipv6-location ni"; key "ipv6-location ni";
leaf ipv6-location { leaf ipv6-location {
type inet:ipv6-address; type inet:ipv6-address;
description description
"IPv6 Address."; "IPv6 Address.";
} }
leaf ni { leaf ni {
type routing-instance-ref; type routing-instance-ref;
description description
"The ni is used to describe the "The ni is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
description description
"List of test point locations."; "List of test point locations.";
} }
description description
"Serves as top-level container "Serves as top-level container
for test point location list."; for test point location list.";
} }
description description
"ipv6 location type container."; "ipv6 location type container.";
} }
container mac-location-type { container mac-location-type {
when "derived-from-or-self(../tp-location-type,"+ when "derived-from-or-self(../tp-location-type,"+
"'cl-oam:mac-address-type')" { "'cl-oam:mac-address-type')" {
description description
"when test point location type is equal to mac address."; "when test point location type is equal to mac address.";
} }
container test-point-mac-address-location-list { container test-point-mac-address-location-list {
list test-point-locations { list test-point-locations {
key "mac-address-location"; key "mac-address-location";
leaf mac-address-location { leaf mac-address-location {
type yang:mac-address; type yang:mac-address;
description description
"MAC Address"; "MAC Address";
} }
uses test-point-location-info; uses test-point-location-info;
description description
"List of test point locations."; "List of test point locations.";
skipping to change at page 33, line 48 skipping to change at page 36, line 4
description description
"Serves as top-level container "Serves as top-level container
for test point location list."; for test point location list.";
} }
description description
"mac address location type container."; "mac address location type container.";
} }
container group-as-number-location-type { container group-as-number-location-type {
when "derived-from-or-self(../tp-location-type,"+ when "derived-from-or-self(../tp-location-type,"+
"'cl-oam:as-number-address-type')" { "'cl-oam:as-number-address-type')" {
description description
"when test point location type is equal to as-number."; "when test point location type is equal to 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 for point to multi point OAM."; "AS number for point to multi point OAM.";
} }
leaf ni { leaf ni {
type routing-instance-ref; type routing-instance-ref;
description description
"The ni is used to describe the "The ni is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
description description
"List of test point locations."; "List of test point locations.";
} }
description description
"Serves as top-level container "Serves as top-level container
for test point location list."; for test point location list.";
} }
description description
"as number location type container."; "as number location type container.";
} }
container group-system-id-location-type { container group-router-id-location-type {
when "derived-from-or-self(../tp-location-type,"+ when "derived-from-or-self(../tp-location-type,"+
"'cl-oam:system-id-address-type')" { "'cl-oam:router-id-address-type')" {
description description
"when test point location type is equal to system-info."; "when test point location type is equal to 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 "router-id-location";
leaf system-id-location { leaf router-id-location {
type inet:uri; type rt:router-id;
description description
"System Id."; "System Id.";
} }
leaf ni { leaf ni {
type routing-instance-ref; type routing-instance-ref;
description description
"The ni is used to describe the "The ni is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
skipping to change at page 35, line 4 skipping to change at page 37, line 7
} }
leaf ni { leaf ni {
type routing-instance-ref; type routing-instance-ref;
description description
"The ni is used to describe the "The ni is used to describe the
corresponding network instance"; corresponding network instance";
} }
uses test-point-location-info; uses test-point-location-info;
description description
"List of test point locations."; "List of test point locations.";
} }
description description
"Serves as top-level container for "Serves as top-level container for
test point location list."; test point location list.";
} }
description description
"system ID location type container."; "system ID location type container.";
} }
} }
augment "/nd:networks/nd:network/nd:node" { augment "/nd:networks/nd:network/nd:node" {
description description
"Augment test points of connectionless oam."; "augments the /networks/network/node path defined in the ietf-
uses test-point-locations; network module (I-D.ietf-i2rs-yang-network-topo) with test-point-
locations grouping.";
uses test-point-locations;
} }
grouping timestamp { grouping timestamp {
description description
"Grouping for timestamp."; "Grouping for timestamp.";
leaf timestamp-type { leaf timestamp-type {
type identityref { type identityref {
base timestamp-type; base lime:timestamp-type;
} }
description description
"Type of Timestamp, such as Truncated PTP, NTP."; "Type of Timestamp, such as Truncated PTP, NTP.";
} }
container timestamp-64bit { container timestamp-64bit {
when "derived-from-or-self(../timestamp-type, 'cl-oam:truncated-ptp')"+ when "derived-from-or-self(../timestamp-type, 'cl-oam:truncated-ptp')"+
"or derived-from-or-self(../timestamp-type,'cl-oam:ntp64')" { "or derived-from-or-self(../timestamp-type,'cl-oam:ntp64')" {
description description
"Only applies when Truncated NTP or 64bit NTP Timestamp."; "Only applies when Truncated NTP or 64bit NTP Timestamp.";
} }
skipping to change at page 36, line 6 skipping to change at page 38, line 10
"Fractional part in nanoseconds as per IEEE1588v2 "Fractional part in nanoseconds as per IEEE1588v2
or Fractional part in 64-bit NTP timestamp."; or Fractional part in 64-bit NTP timestamp.";
} }
description description
"Container for 64bit timestamp."; "Container for 64bit timestamp.";
} }
container timestamp-80bit { container timestamp-80bit {
when "derived-from-or-self(../timestamp-type, 'cl-oam:ptp80')"{ when "derived-from-or-self(../timestamp-type, 'cl-oam:ptp80')"{
description description
"Only applies when 80bit PTP Timestamp."; "Only applies when 80bit PTP Timestamp.";
} }
if-feature ptp-long-format; if-feature ptp-long-format;
leaf timestamp-sec { leaf timestamp-sec {
type uint64 { type uint64 {
range "0..281474976710656"; range "0..281474976710655";
} }
description description
"48bit Timestamp in seconds as per IEEE1588v2."; "48bit Timestamp in seconds as per IEEE1588v2.";
} }
leaf timestamp-nanosec { leaf timestamp-nanosec {
type uint32; type uint32;
description description
"Fractional part in nanoseconds as per IEEE1588v2 "Fractional part in nanoseconds as per IEEE1588v2
or Fractional part in 64-bit NTP timestamp."; or Fractional part in 64-bit NTP timestamp.";
} }
description description
"Container for 64bit timestamp."; "Container for 80bit timestamp.";
} }
container ntp-timestamp-32bit { container ntp-timestamp-32bit {
when "derived-from-or-self(../timestamp-type, 'cl-oam:truncated-ntp')"{ when "derived-from-or-self(../timestamp-type, 'cl-oam:truncated-ntp')"{
description description
"Only applies when 32 bit NTP Short format Timestamp."; "Only applies when 32 bit NTP Short format Timestamp.";
} }
if-feature ntp-short-format; if-feature ntp-short-format;
leaf timestamp-sec { leaf timestamp-sec {
type uint16; type uint16;
description description
"Timestamp in seconds as per short format NTP."; "Timestamp in seconds as per short format NTP.";
} }
leaf timestamp-nanosec { leaf timestamp-nanosec {
type uint16; type uint16;
description description
"Truncated Fractional part in 16-bit NTP timestamp."; "Truncated Fractional part in 16-bit NTP timestamp.";
} }
description description
"Container for 64bit timestamp."; "Container for 32bit timestamp.";
} }
container icmp-timestamp-32bit { container icmp-timestamp-32bit {
when "derived-from-or-self(../timestamp-type, 'cl-oam:icmp-ntp')"{ when "derived-from-or-self(../timestamp-type, 'cl-oam:icmp-ntp')"{
description description
"Only applies when Truncated NTP or 64bit NTP Timestamp."; "Only applies when Truncated NTP or 64bit NTP Timestamp.";
} }
if-feature icmp-timestamp; if-feature icmp-timestamp;
leaf timestamp-millisec { leaf timestamp-millisec {
type uint32; type uint32;
description description
"timestamp in milliseconds for ICMP timestamp."; "timestamp in milliseconds for ICMP timestamp.";
} }
description description
"Container for 32bit timestamp."; "Container for 32bit timestamp.";
} }
} }
grouping path-discovery-data { grouping path-discovery-data {
description description
"Path discovery related data output from nodes."; "Path discovery related data output from nodes.";
container src-test-point { container src-test-point {
description description
"Source test point."; "Source test point.";
uses tp-address-ni; uses tp-address-ni;
} }
container dest-test-point { container dest-test-point {
skipping to change at page 40, line 4 skipping to change at page 42, line 6
type uint8; type uint8;
default "0"; default "0";
description description
"Hop count.A value of zero indicates "Hop count.A value of zero indicates
that no hop count is sent"; that no hop count is sent";
} }
uses session-packet-statistics; uses session-packet-statistics;
uses session-error-statistics; uses session-error-statistics;
uses session-delay-statistics; uses session-delay-statistics;
uses session-jitter-statistics; uses session-jitter-statistics;
} }
container cc-session-statistics-data { container cc-session-statistics-data {
if-feature "continuity-check"; if-feature "continuity-check";
config false; config false;
description list cc-session-statistics {
"CC operational information."; key type;
container cc-ipv4-sessions-statistics { leaf type {
type identityref {
base traffic-type;
}
description
"Type of traffic.";
}
container cc-ipv4-sessions-statistics {
when "../type = 'ipv4'" {
description
"Only applies when traffic type is Ipv4.";
}
description description
"CC ipv4 sessions"; "CC ipv4 sessions";
uses cc-session-statistics; uses cc-session-statistics;
} }
container cc-ipv6-sessions-statistics { container cc-ipv6-sessions-statistics {
when "../type = 'ipv6'" {
description
"Only applies when traffic type is Ipv6.";
}
description description
"CC ipv6 sessions"; "CC ipv6 sessions";
uses cc-session-statistics; uses cc-session-statistics;
} }
description
"List of CC session statistics data.";
}
description
"CC operational information.";
} }
} }
<CODE ENDS> <CODE ENDS>
5. Connectionless model applicability 6. Connectionless model applicability
The "ietf-connectionless-oam" model defined in this document provides The "ietf-connectionless-oam" model defined in this document provides
a technology-independent abstraction of key OAM constructs for a 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
technology specific functions and parameters into proper anchor technology specific functions and parameters into proper anchor
points of the base model, so as to develop a technology-specific points of the base model, so as to develop a technology-specific
connectionless OAM model. connectionless OAM model.
This section demonstrates the usability of the connectionless YANG This section demonstrates the usability of the connectionless YANG
OAM data model to various connectionless OAM technologies, e.g., BFD, OAM data model to various connectionless OAM technologies, e.g., BFD,
LSP ping. Note that, in this section, several snippets of LSP ping. Note that, in this section, several snippets of
technology-specific model extensions are presented for illustrative technology-specific model extensions are presented for illustrative
purposes. The complete model extensions should be worked on in purposes. The complete model extensions should be worked on in
respective protocol working groups. respective protocol working groups.
5.1. BFD Extension 6.1. BFD Extension
RFC 7276 defines BFD as a connection-oriented protocol. It is used RFC 7276 defines BFD as a connection-oriented protocol. It is used
to monitor a connectionless protocol in the case of basic BFD for IP. to monitor a connectionless protocol in the case of basic BFD for IP.
5.1.1. Augment Method 6.1.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 cover BFD technology. For this purpose, a set of can be extended to cover BFD technology. For this purpose, a set of
extension are introduced such as technology-type extension and test- extension are introduced such as technology-type extension and test-
point attributes extension. point attributes extension.
Note that a dedicated BFD YANG data model [I-D.ietf-bfd-yang] is also Note that a dedicated BFD YANG data model [I-D.ietf-bfd-yang] is also
standardized. Augmentation of the "ietf-connectionless-oam" model standardized. Augmentation of the "ietf-connectionless-oam" model
with BFD specific details provides an alternative approach that with BFD specific details provides an alternative approach that
provides a unified view of management information across various OAM provides a unified view of management information across various OAM
protocols. The BFD specific details can be the grouping defined in protocols. The BFD specific details can be the grouping defined in
the BFD model avoiding duplication of effort. the BFD model avoiding duplication of effort.
5.1.1.1. Technology type extension 6.1.1.1. Technology type extension
No BFD technology type has been defined in the "ietf-connectionless- No BFD technology type has been defined in the "ietf-connectionless-
oam" model. Therefore a technology type extension is required in the oam" model. Therefore a technology type extension is required in the
model Extension. model Extension.
The snippet below depicts an example of adding the "bfd" type as an The snippet below depicts an example of adding the "bfd" type as an
augment to the ietf-connectionless-oam" model: augment to the ietf-connectionless-oam" model:
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"
{ {
leaf bfd{ leaf bfd{
type string; type string;
} }
} }
5.1.1.2. Test point attributes extension 6.1.1.2. Test point attributes extension
To support BFD technology, the "ietf-connectionless-oam" model can be To support BFD technology, the "ietf-connectionless-oam" model can be
extended by adding specific parameters into the "test-point- extended by adding specific parameters into the "test-point-
locations" list and/or adding a new location type such as "BFD over locations" list and/or adding a new location type such as "BFD over
MPLS TE" under "location-type". MPLS TE" under "location-type".
5.1.1.2.1. Define and insert new nodes into corresponding test-point- 6.1.1.2.1. Define and insert new nodes into corresponding test-point-
location location
In the "ietf-connectionless-oam" model, multiple "test-point- In the "ietf-connectionless-oam" model, multiple "test-point-
location" lists are defined under the "location-type" choice node. location" lists are defined under the "location-type" choice node.
Therefore, to derive a model for some BFD technologies ( such as ip Therefore, to derive a model for some BFD technologies ( such as ip
single-hop, ip multi-hops, etc), data nodes for BFD specific details single-hop, ip multi-hops, etc), data nodes for BFD specific details
need to be added into corresponding "test-point-locations" list. In need to be added into corresponding "test-point-locations" list. In
this section, some groupings which are defined in [I-D.ietf-bfd-yang] this section, some groupings which are defined in [I-D.ietf-bfd-yang]
are reused as follow: are reused as follow:
skipping to change at page 42, line 38 skipping to change at page 45, line 33
} }
uses bfd:bfd-grouping-common-cfg-parms; uses bfd:bfd-grouping-common-cfg-parms;
uses bfd:bfd-grouping-echo-cfg-parms; uses bfd:bfd-grouping-echo-cfg-parms;
} }
} }
} }
Similar augmentations can be defined to support other BFD Similar augmentations can be defined to support other BFD
technologies such as BFD IP multi-hop, BFD over MPLS, etc. technologies such as BFD IP multi-hop, BFD over MPLS, etc.
5.1.1.2.2. Add new location-type cases 6.1.1.2.2. Add new location-type cases
In the "ietf-connectionless-oam" model, If there is no appropriate In the "ietf-connectionless-oam" model, If there is no appropriate
"location type" case that can be extended, a new "location-type" case "location type" case that can be extended, a new "location-type" case
can be defined and inserted into the "location-type" choice node. can be defined and inserted into the "location-type" choice node.
Therefore, the model user can flexibly add "location-type" to support Therefore, the model user can flexibly add "location-type" to support
other type of test point which are not defined in the "ietf- other type of test point which are not defined in the "ietf-
connectionless-oam" model. In this section, a new "location-type" connectionless-oam" model. In this section, a new "location-type"
case is added and some groupings that are defined in case is added and some groupings that are defined in
[I-D.ietf-bfd-yang] are reused as follows: [I-D.ietf-bfd-yang] are reused as follows:
skipping to change at page 43, line 25 skipping to change at page 46, line 25
} }
uses bfd:bfd-grouping-common-cfg-parms; uses bfd:bfd-grouping-common-cfg-parms;
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 6.1.2. Schema Mount
Another alternative method is using the schema mount mechanism [I- Another alternative method is using the schema mount mechanism [I-
D.ietf-netmod-schema-mount] in the "ietf-connectionless-oam" model. D.ietf-netmod-schema-mount] in the "ietf-connectionless-oam" model.
Within the "test-point-locations" list, a "root" attribute is defined Within the "test-point-locations" list, a "root" attribute is defined
to provide a mount point for models mounted per "test-point- to provide a mount point for models mounted per "test-point-
locations". Therefore, the "ietf-connectionless-oam" model can locations". 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
skipping to change at page 44, line 5 skipping to change at page 47, line 5
anydata root { anydata root {
yangmnt:mount-point root; yangmnt:mount-point root;
description description
"Root for models supported per "Root for models supported per
test point"; test point";
} }
The following section shows how the "ietf-connectionless-oam" model The following section shows how the "ietf-connectionless-oam" model
can use schema mount to support BFD technology. can use schema mount to support BFD technology.
5.1.2.1. BFD Modules be populated in schema-mount 6.1.2.1. BFD Modules be populated in schema-mount
To support BFD technology, "ietf-bfd-ip-sh" and "ietf-bfd-ip-mh" YANG To support BFD technology, "ietf-bfd-ip-sh" and "ietf-bfd-ip-mh" YANG
modules might be populated in the "schema-mounts" container: modules might be populated in the "schema-mounts" container:
<schema-mounts <schema-mounts
xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount"> xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount">
<mount-point> <mount-point>
<module> ietf-connectionless-oam </module> <module> ietf-connectionless-oam </module>
<name>root</name> <name>root</name>
<use-schema> <use-schema>
skipping to change at page 45, line 28 skipping to change at page 48, line 28
<ietf-bfd-ip-mh uri="urn:ietf:params:xml:ns:yang:ietf-bfd-ip-mh"> <ietf-bfd-ip-mh uri="urn:ietf:params:xml:ns:yang:ietf-bfd-ip-mh">
<ip-mh> <ip-mh>
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 6.2. LSP ping extension
5.2.1. Augment Method 6.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 extensions are introduced such as the "technology-type" set of extensions are introduced such as the "technology-type"
extension and the test-point "attributes" extension. extension and the test-point "attributes" extension.
Note that a LSP Ping YANG data model Note that a LSP Ping YANG data model
[I-D.zheng-mpls-lsp-ping-yang-cfg] has been standardized. As with [I-D.zheng-mpls-lsp-ping-yang-cfg] has been standardized. As with
BFD, users can choose to use the "ietf-connectioless-oam" as basis BFD, users can choose to use the "ietf-connectioless-oam" as basis
and augment the "ietf- connectionless-oam" model with LSP Ping and augment the "ietf- connectionless-oam" model with LSP Ping
specific details in the model extension to provide a unified view specific details in the model extension to provide a unified view
across different technologies. The LSP Ping specific details can be across different technologies. The LSP Ping specific details can be
the grouping defined in the LSP ping model to avoid duplication of the grouping defined in the LSP ping model to avoid duplication of
effort. effort.
5.2.1.1. Technology type extension 6.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"
{ {
leaf lsp-ping{ leaf lsp-ping{
type string; type string;
} }
} }
5.2.1.2. Test point attributes extension 6.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-locations" list. under "test-point-locations" list.
User can reuse the attributes or groupings which are defined in Users can reuse the attributes or groupings which are defined in
[I-D.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"
{ {
skipping to change at page 46, line 46 skipping to change at page 49, line 46
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 6.2.2. Schema Mount
And another 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-locations" list, a "root" attribute is defined Within the "test-point-locations" 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-
locations". Therefore, the "ietf-connectionless-oam" model can locations". 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
skipping to change at page 47, line 23 skipping to change at page 50, line 23
anydata root { anydata root {
yangmnt:mount-point root; yangmnt:mount-point root;
description description
"Root for models supported per "Root for models supported per
test point"; test point";
} }
The following section shows how the "ietf-connectionless-oam" model The following section shows how the "ietf-connectionless-oam" model
can use schema mount to support LSP-PING technology. can use schema mount to support LSP-PING technology.
5.2.2.1. LSP-PING Modules be populated in schema-mount 6.2.2.1. LSP-PING Modules be populated in schema-mount
To support LSP-PING technology, "ietf-lspping" YANG module To support LSP-PING technology, "ietf-lspping" YANG module
[I-D.zheng-mpls-lsp-ping-yang-cfg] might be populated in the "schema- [I-D.zheng-mpls-lsp-ping-yang-cfg] might be populated in the "schema-
mounts" container: mounts" container:
<schema-mounts <schema-mounts
xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount"> xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount">
<mount-point> <mount-point>
<module> ietf-connectionless-oam </module> <module> ietf-connectionless-oam </module>
<name>root</name> <name>root</name>
skipping to change at page 48, line 22 skipping to change at page 51, line 22
<ietf-lspping uri="urn:ietf:params:xml:ns:yang:ietf-lspping"> <ietf-lspping uri="urn:ietf:params:xml:ns:yang:ietf-lspping">
<lsp-pings> <lsp-pings>
foo foo
...... ......
</lsp-pings> </lsp-pings>
</ietf-lspping> </ietf-lspping>
</root> </root>
</test-point-locations> </test-point-locations>
</ietf-connectionless-oam> </ietf-connectionless-oam>
6. Security Considerations 7. Security Considerations
The YANG module defined in this document is designed to be accessed The YANG module defined in this document is designed to be accessed
via network management protocols such as NETCONF [RFC6241] or via network management protocols such as NETCONF [RFC6241] or
RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport
layer, and the mandatory-to-implement secure transport is Secure layer, and the mandatory-to-implement secure transport is Secure
Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the
mandatory-to-implement secure transport is TLS [RFC5246]. mandatory-to-implement secure transport is TLS [RFC5246].
The NETCONF access control model [RFC6536] provides the means to The NETCONF access control model [RFC6536] provides the means to
restrict access for particular NETCONF or RESTCONF users to a restrict access for particular NETCONF or RESTCONF users to a
skipping to change at page 49, line 13 skipping to change at page 52, line 13
point-locations/ point-locations/
/nd:networks/nd:network/nd:node/cl-oam:location-type/cl-oam:mac- /nd:networks/nd:network/nd:node/cl-oam:location-type/cl-oam:mac-
location-type/cl-oam:test-point-mac-address-location-list/cl- location-type/cl-oam:test-point-mac-address-location-list/cl-
oam:test-point-locations/ oam:test-point-locations/
/nd:networks/nd:network/nd:node/cl-oam:location-type/cl-oam:group- /nd:networks/nd:network/nd:node/cl-oam:location-type/cl-oam:group-
as-number-location-type/cl-oam:test-point-as-number-location-list/ as-number-location-type/cl-oam:test-point-as-number-location-list/
cl-oam:test-point-locations/ cl-oam:test-point-locations/
/nd:networks/nd:network/nd:node/cl-oam:location-type/cl-oam:group- /nd:networks/nd:network/nd:node/cl-oam:location-type/cl-oam:group-
system-id-location-type/cl-oam:test-point-system-info-location- router-id-location-type/cl-oam:test-point-system-info-location-
list/cl-oam:test-point-locations/ list/cl-oam:test-point-locations/
Unauthorized access to any of these lists can adversely affect OAM Unauthorized access to any of these lists can adversely affect OAM
management system handling of end-to-end OAM and coordination of OAM management system handling of end-to-end OAM and coordination of OAM
within underlying network layers. This may lead to inconsistent within underlying network layers. This may lead to inconsistent
configuration, reporting, and presentation for the OAM mechanisms configuration, reporting, and presentation for the OAM mechanisms
used to manage the network. used to manage the network.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
skipping to change at page 50, line 8 skipping to change at page 53, line 8
/coam:cc-session-statistics-data/cl-oam:cc-ipv6-sessions- /coam:cc-session-statistics-data/cl-oam:cc-ipv6-sessions-
statistics/cl-oam:cc-session-statistics/cl-oam:session-up-count// statistics/cl-oam:cc-session-statistics/cl-oam:session-up-count//
/coam:cc-session-statistics-data/cl-oam:cc-ipv6-sessions- /coam:cc-session-statistics-data/cl-oam:cc-ipv6-sessions-
statistics/cl-oam:cc-session-statistics/cl-oam:session-down-count/ statistics/cl-oam:cc-session-statistics/cl-oam:session-down-count/
/coam:cc-session-statistics-data/cl-oam:cc-ipv6-sessions- /coam:cc-session-statistics-data/cl-oam:cc-ipv6-sessions-
statistics/cl-oam:cc-session-statistics/cl-oam:session-admin-down- statistics/cl-oam:cc-session-statistics/cl-oam:session-admin-down-
count/ count/
7. IANA Considerations 8. IANA Considerations
This document registers a URI in the IETF XML registry [RFC3688]. This document registers a URI in the IETF XML registry [RFC3688].
Following the format in [RFC3688] the following registration is Following the format in [RFC3688] the following registration is
requested to be made: requested to be made:
URI: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam URI: urn:ietf:params:xml:ns:yang:ietf-lime-common-types
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam
Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
This document registers a YANG module in the YANG Module Names This document registers a YANG module in the YANG Module Names
registry [RFC7950]. registry [RFC7950].
name: ietf-connectionless-oam Name: ietf-lime-common-types
Namespace: urn:ietf:params:xml:ns:yang:ietf-lime-common-types
Prefix: lime
Reference: RFC XXXX
namespace: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam Name: ietf-connectionless-oam
Namespace: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam
Prefix: cl-oam
Reference: RFC XXXX
prefix: cl-oam 9. Acknowlegements
reference: RFC XXXX The authors of this document would like to thank Elwyn Davies, Alia
Atlas,Brian E Carpenter,Greg Mirsky,Adam Roach,Alissa Cooper,Eric
Rescorla,Ben Campbell, Benoit Claise,Kathleen Moriarty and others for
their sustainable review and comments, proposals to improve and
stabilize document.
8. Acknowlegements 10. References
The authors of this document would like to thank Greg Mirsky and 10.1. Normative References
others for their sustainable review and comments, proposals to
improve and stabilize document.
9. References [I-D.ietf-i2rs-yang-network-topo]
Clemm, A., Medved, J., Varga, R., Bahadur, N.,
Ananthakrishnan, H., and X. Liu, "A Data Model for Network
Topologies", draft-ietf-i2rs-yang-network-topo-17 (work in
progress), October 2017.
9.1. Normative References [I-D.ietf-rtgwg-routing-types]
Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
"Routing Area Common YANG Data Types", draft-ietf-rtgwg-
routing-types-17 (work in progress), October 2017.
[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,
<https://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet
Control Message Protocol (ICMPv6) for the Internet Control Message Protocol (ICMPv6) for the Internet
Protocol Version 6 (IPv6) Specification", STD 89, Protocol Version 6 (IPv6) Specification", STD 89,
RFC 4443, DOI 10.17487/RFC4443, March 2006, RFC 4443, DOI 10.17487/RFC4443, March 2006,
<https://www.rfc-editor.org/info/rfc4443>. <https://www.rfc-editor.org/info/rfc4443>.
skipping to change at page 51, line 48 skipping to change at page 55, line 16
Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
<https://www.rfc-editor.org/info/rfc7223>. <https://www.rfc-editor.org/info/rfc7223>.
[RFC792] Postel, J., "Internet Control Message Protocol", RFC 792, [RFC792] Postel, J., "Internet Control Message Protocol", RFC 792,
September 1981. September 1981.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
[RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N.,
Aldrin, S., and M. Chen, "Detecting Multiprotocol Label
Switched (MPLS) Data-Plane Failures", RFC 8029,
DOI 10.17487/RFC8029, March 2017,
<https://www.rfc-editor.org/info/rfc8029>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>. <https://www.rfc-editor.org/info/rfc8040>.
9.2. Informative References 10.2. Informative References
[G.800] "Unified functional architecture of transport networks", [G.800] "Unified functional architecture of transport networks",
ITU-T Recommendation G.800, 2016. ITU-T Recommendation G.800, 2016.
[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-bfd-yang] [I-D.ietf-bfd-yang]
Rahman, R., Zheng, L., Jethanandani, M., Networks, J., and Rahman, R., Zheng, L., Jethanandani, M., Networks, J., and
G. Mirsky, "YANG Data Model for Bidirectional Forwarding G. Mirsky, "YANG Data Model for Bidirectional Forwarding
Detection (BFD)", draft-ietf-bfd-yang-06 (work in Detection (BFD)", draft-ietf-bfd-yang-06 (work in
progress), June 2017. progress), June 2017.
[I-D.ietf-i2rs-yang-network-topo]
Clemm, A., Medved, J., Varga, R., Bahadur, N.,
Ananthakrishnan, H., and X. Liu, "A Data Model for Network
Topologies", draft-ietf-i2rs-yang-network-topo-17 (work in
progress), October 2017.
[I-D.ietf-lime-yang-connection-oriented-oam-model] [I-D.ietf-lime-yang-connection-oriented-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- Maintenance(OAM) protocols", draft-ietf-lime-yang-
connection-oriented-oam-model-00 (work in progress), June connection-oriented-oam-model-00 (work in progress), June
2017. 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-10 (work in progress), October 2017. methods-11 (work in progress), October 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-08 (work in progress), October ietf-netmod-schema-mount-08 (work in progress), October
2017. 2017.
[I-D.ietf-rtgwg-ni-model] [I-D.ietf-rtgwg-ni-model]
Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X. Berger, L., Hopps, C., Lindem, A., Bogdanovic, D., and X.
Liu, "YANG Network Instances", draft-ietf-rtgwg-ni- Liu, "YANG Network Instances", draft-ietf-rtgwg-ni-
model-04 (work in progress), September 2017. model-04 (work in progress), September 2017.
[I-D.ietf-rtgwg-routing-types]
Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
"Routing Area Common YANG Data Types", draft-ietf-rtgwg-
routing-types-17 (work in progress), October 2017.
[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-07 (work in progress), July 2017. yang-07 (work in progress), July 2017.
[I-D.zheng-mpls-lsp-ping-yang-cfg] [I-D.zheng-mpls-lsp-ping-yang-cfg]
Zheng, L., Aldrin, S., Zheng, G., Mirsky, G., and R. Zheng, L., Aldrin, S., Zheng, G., Mirsky, G., and R.
Rahman, "Yang Data Model for LSP-PING", draft-zheng-mpls- Rahman, "Yang Data Model for LSP-PING", draft-zheng-mpls-
lsp-ping-yang-cfg-05 (work in progress), June 2017. lsp-ping-yang-cfg-05 (work in progress), June 2017.
skipping to change at page 53, line 38 skipping to change at page 57, line 4
DOI 10.17487/RFC6136, March 2011, DOI 10.17487/RFC6136, March 2011,
<https://www.rfc-editor.org/info/rfc6136>. <https://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,
DOI 10.17487/RFC7276, June 2014, DOI 10.17487/RFC7276, June 2014,
<https://www.rfc-editor.org/info/rfc7276>. <https://www.rfc-editor.org/info/rfc7276>.
Authors' Addresses Authors' Addresses
Deepak Kumar Deepak Kumar
CISCO Systems CISCO Systems
510 McCarthy Blvd 510 McCarthy Blvd
Milpitas, CA 95035 Milpitas, CA 95035
USA USA
Email: dekumar@cisco.com Email: dekumar@cisco.com
Michael Wang Michael Wang
Huawei Technologies,Co.,Ltd Huawei Technologies,Co.,Ltd
101 Software Avenue, Yuhua District 101 Software Avenue, Yuhua District
Nanjing 210012 Nanjing 210012
China China
Email: wangzitao@huawei.com Email: wangzitao@huawei.com
Qin Wu Qin Wu (editor)
Huawei Huawei
101 Software Avenue, Yuhua District 101 Software Avenue, Yuhua District
Nanjing, Jiangsu 210012 Nanjing, Jiangsu 210012
China China
Email: bill.wu@huawei.com Email: bill.wu@huawei.com
Reshad Rahman Reshad Rahman
Cisco Systems Cisco Systems
2000 Innovation Drive 2000 Innovation Drive
 End of changes. 143 change blocks. 
317 lines changed or deleted 455 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/