< draft-ietf-lime-yang-connectionless-oam-methods-06.txt   draft-ietf-lime-yang-connectionless-oam-methods-07.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: March 4, 2018 Q. Wu Expires: March 19, 2018 Q. Wu
Huawei Huawei
R. Rahman R. Rahman
S. Raghavan S. Raghavan
Cisco Cisco
August 31, 2017 September 15, 2017
Retrieval Methods YANG Data Model for Connectionless Operations, Retrieval Methods YANG Data Model for Connectionless Operations,
Administration, and Maintenance(OAM) protocols Administration, and Maintenance(OAM) protocols
draft-ietf-lime-yang-connectionless-oam-methods-06 draft-ietf-lime-yang-connectionless-oam-methods-07
Abstract Abstract
This document presents a retrieval method YANG Data model for This document presents a retrieval method YANG Data model for
connectionless OAM protocols. It provides technology-independent RPC connectionless OAM protocols. It provides technology-independent RPC
operations for connectionless OAM protocols. The retrieval methods operations for connectionless OAM protocols. The retrieval methods
model presented here can be extended to include technology specific model presented here can be extended to include technology specific
details. This is leading to uniformity between OAM protocols and details. This is leading to uniformity between OAM protocols and
support both nested OAM workflows (i.e., performing OAM functions at support both nested OAM workflows (i.e., performing OAM functions at
different levels through a unified interface) and interacting OAM different levels through a unified interface) and interacting OAM
skipping to change at page 1, line 37 skipping to change at page 1, line 37
unified interface). 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 http://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 March 4, 2018. This Internet-Draft will expire on March 19, 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
(http://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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions used in this document . . . . . . . . . . . . . . 3 2. Conventions used in this document . . . . . . . . . . . . . . 3
2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4 2.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 4
3. Overview of the Connectionless OAM retrieval methods Model . 4 3. Overview of the Connectionless OAM retrieval methods Model . 4
3.1. RPC operation definitions . . . . . . . . . . . . . . . . 5 3.1. RPC operation definitions . . . . . . . . . . . . . . . . 5
3.2. OAM Retrieval Methods Hierarchy . . . . . . . . . . . . . 8 3.2. OAM Retrieval Methods Hierarchy . . . . . . . . . . . . . 7
4. OAM Retrieval Methods YANG Module . . . . . . . . . . . . . . 15 4. OAM Retrieval Methods YANG Module . . . . . . . . . . . . . . 14
5. Security Considerations . . . . . . . . . . . . . . . . . . . 19 5. Security Considerations . . . . . . . . . . . . . . . . . . . 19
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 20
7.1. Normative References . . . . . . . . . . . . . . . . . . 20 7.1. Normative References . . . . . . . . . . . . . . . . . . 20
7.2. Informative References . . . . . . . . . . . . . . . . . 21 7.2. Informative References . . . . . . . . . . . . . . . . . 21
Appendix A. Appdendix A.1 . . . . . . . . . . . . . . . . . . . 22 Appendix A. Appdendix A.1 Extending Connectionless OAM Method
Appendix B. Appendix A.2 . . . . . . . . . . . . . . . . . . . . 22 Module Example . . . . . . . . . . . . . . . . . . . 21
B.1. OAM Retrieval Persistent Methods YANG Module . . . . . . 23 Appendix B. Appendix A.2 Example of new retrieval procedures
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 Model . . . . . . . . . . . . . . . . . . . . . . . 22
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30
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 reachability of destinations (Reachability Verification, 1. Monitor reachability of destinations (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 2, line 51 skipping to change at page 3, line 4
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 reachability of destinations (Reachability Verification, 1. Monitor reachability of destinations (Reachability Verification,
Continuity Check). Continuity Check).
2. Troubleshoot failures (Fault verification and localization). 2. Troubleshoot failures (Fault verification and localization).
3. Monitor Performance 3. Monitor Performance
An overview of OAM tools is presented at [RFC7276]. An overview of OAM tools is presented at [RFC7276].
Ping and Traceroute [RFC792], [RFC4443] and BFD [RFC5880] are well- Ping and Traceroute [RFC792], [RFC4443] and BFD [RFC5880] are well-
known fault verification and isolation tools, respectively, for IP known fault verification and isolation tools, respectively, for IP
networks. Over the years, different technologies have developed networks. Over the years, different technologies have developed
similar tools for similar purposes. similar tools for similar purposes.
In this document, we present a retrieval method YANG Data model for In this document, we present an on-demand retrieval method YANG Data
connectionless OAM protocols. This module provides technology- model for connectionless OAM protocols. This model provides
independent RPC operations for connectionless OAM protocols. It is technology-independent RPC operations for connectionless OAM
separated from the generic YANG model for connectionless OAM protocols. It is separated from the generic YANG model for
[I-D.ietf-lime-yang-connectionless-oam] and can avoid mixing the connectionless OAM [I-D.ietf-lime-yang-connectionless-oam] and can
models for the retrieved-data from the retrieval procedures. It is avoid mixing the models for the retrieved-data from the retrieval
expected that retrieval procedures would evolve faster than the data procedures. It is expected that retrieval procedures would evolve
model [I-D.ietf-lime-yang-connectionless-oam] and will allow new faster than the data model [I-D.ietf-lime-yang-connectionless-oam]
procedures to be defined for retrieval of the same data defined by and will allow new procedures to be defined for retrieval of the same
the base data model. data defined by the base data 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
skipping to change at page 4, line 42 skipping to change at page 4, line 44
? for an optional leaf or choice ? for an optional leaf or choice
! for a presence container ! for a presence container
* for a leaf-list or list * for a leaf-list or list
[<keys>] for a list's keys [<keys>] for a list's keys
<type> is the name of the type for leafs and leaf-lists <type> is the name of the type for leafs and leaf-lists
3. Overview of the Connectionless OAM retrieval methods Model 3. Overview of the Connectionless OAM retrieval methods Model
In this document, we present a retrieval method YANG Data model for In this document, we present an on-demand retrieval method YANG Data
connectionless OAM protocols. This module provides technology- model for connectionless OAM protocols. This model provides
independent retrieval procedures (RPC operations) for connectionless technology-independent retrieval procedures (RPC operations) for
OAM protocols. It provides a flexible way to retrieve the data which connectionless OAM protocols. It provides a flexible way to retrieve
defined by the "ietf-connectionless-oam.yang" the data which defined by the "ietf-connectionless-oam.yang"
[I-D.ietf-lime-yang-connectionless-oam]. [I-D.ietf-lime-yang-connectionless-oam].
3.1. RPC operation definitions 3.1. RPC operation definitions
The RPC model facilitates issuing commands to a NETCONF server (in The RPC model facilitates issuing commands to a NETCONF server (in
this case to the device that need to execute the OAM command) and this case to the device that need to execute the OAM command) and
obtaining a response. obtaining a response.
Under 'connectionless-oam-methods' module, we summarize common OAM Under 'connectionless-oam-methods' module, we summarize common OAM
functions and define two generic RPC operations: 'continuity-check' functions and define two generic RPC operations: 'continuity-check'
and 'path-discovery'. In practice, these RPC operations are and 'path-discovery'. In practice, these RPC operations are
supported by corresponding technology-specific OAM tools [RFC7276]. activated on-demand and supported by corresponding technology-
For example, for the IP OAM model, the continuity-check RPC specific OAM tools [RFC7276]. For example, for the IP OAM model, the
corresponds to the IP Ping [RFC792] [RFC4443], while the path- continuity-check RPC corresponds to the IP Ping [RFC792] [RFC4443],
discovery RPC operation corresponds to IP Traceroute [RFC792] while the path-discovery RPC operation corresponds to IP Traceroute
[RFC4443]. [RFC792] [RFC4443].
Note that the RPC operation presented in this document is the base Note that the RPC operation presented in this document is the base
building block, which is used to derive a model for a technology- building block, which is used to derive a model for a technology-
specific OAM (i.e., ICMP ping [RFC792] [RFC4443], LSP ping specific OAM (i.e., ICMP ping [RFC792] [RFC4443], LSP ping
[RFC8029]), the base building block should be extended with [RFC8029]), the base building block should be extended with
corresponding technology specific parameters. To facilitate this for corresponding technology specific parameters. To facilitate this for
future enhancements to data retrieval methods, the RPCs are captured future enhancements to data retrieval methods, the RPCs are captured
under a separate module. under a separate module.
The generic 'path-discovery-data' and 'continuity-check-data' The generic 'path-discovery-data' and 'continuity-check-data'
groupings are used as data outputs from different RPCs described in groupings are used as data outputs from different RPCs described in
this document. Similar methods including other RPCs can retrieve the this document. Similar methods including other RPCs can retrieve the
data using the same data model. data using the same data model.
rpc continuity-check { rpc continuity-check {
if-feature coam:continuity-check; if-feature coam:continuity-check;
description description
"Generates continuity-check as per RFC7276."; "Continuity-check RPC operation as per RFC7276.";
input { input {
container destination-tp { uses rpc-input-parameters;
uses coam:tp-address; ....
description }
"destination test point."; output {
} container error-code {
uses coam:session-type; leaf status-code {
leaf source-interface { type identityref{
type if:interface-ref; base status-code;
description }
"source interface."; mandatory true;
}
leaf outbound-interface {
type if:interface-ref;
description
"outbound interface.";
}
leaf count {
type empty;
description
"Specifies the number of packets that will be sent.";
}
leaf vrf {
type coam:routing-instance-ref;
description
"vrf instance.";
}
leaf ttl {
type uint8;
default "255";
description description
"Time to live (TTL)."; "Error code for CC.";
} }
leaf packet-size { leaf status-sub-code {
type uint32 { type identityref{
range "64..10000"; base status-sub-code;
} }
default "64"; mandatory true;
description description
"Size of ping echo request packets, in octets"; "Sub code for CC.";
}
}
output {
list error-code-list {
key "response-index";
leaf response-index {
type uint32;
description
"response index.";
}
leaf status-code {
type int32;
description
"error code is ";
}
leaf status-sub-code {
type uint8;
description
"sub code.";
}
description
"error code list.";
} }
uses coam:continuity-check-data; description
"Error code and Sub Code for CC.";
} }
uses coam:continuity-check-data;
} }
}
rpc path-discovery { rpc path-discovery {
description description
"Generates path discovery as per RFC7276."; "path discovery RPC operation as per RFC7276.";
input { input {
container destination-tp { uses rpc-input-parameters;
uses coam:tp-address; .....
description }
"destination test point."; output {
} list response-list {
uses coam:session-type; key "response-index";
leaf source-interface { description
type if:interface-ref; "Path discovery response list.";
description leaf response-index {
"source interface."; type uint32;
} mandatory true;
leaf outbound-interface {
type if:interface-ref;
description description
"outbound interface."; "Response index.";
} }
leaf vrf {
type coam:routing-instance-ref; leaf status-code {
description type identityref{
"vrf"; base status-code;
} }
leaf max-ttl { mandatory true;
type uint8;
default "255";
description description
"max ttl."; "Error code for Path Discovery. ";
} }
} leaf status-sub-code {
output { type identityref{
list response-list { base status-sub-code;
key "response-index"; }
mandatory true;
description description
"path discovery response list."; "Sub code for Path Discovery. ";
leaf response-index {
type uint32;
description
"response index.";
}
leaf status-code {
type int32;
description
"error code is ";
}
leaf status-sub-code {
type uint8;
description
"sub code is ";
}
} }
uses coam:path-discovery-data; }
} uses coam:path-discovery-data;
} }
}
Snippet of data hierarchy related to RPC operations Snippet of data hierarchy related to RPC operations
3.2. OAM Retrieval Methods Hierarchy 3.2. OAM Retrieval Methods Hierarchy
The complete data hierarchy related to the Connectionless OAM The complete data hierarchy related to the Connectionless OAM
Retrieval Methods YANG model is presented below. Retrieval Methods YANG model is presented below.
module: ietf-connectionless-oam-methods module: ietf-connectionless-oam-methods
rpcs:
rpcs:
+---x continuity-check {coam:continuity-check}? +---x continuity-check {coam:continuity-check}?
| +---w input | +---w input
| | +---w destination-tp | | +---w destination-tp
| | | +---w tp-location-type? identityref | | | +---w tp-location-type identityref
| | | +---w tp-address | | | +---w tp-address
| | | +---w mac-address | | | +---w mac-address
| | | | +---w mac-address? yang:mac-address | | | | +---w mac-address yang:mac-address
| | | +---w ipv4-address | | | +---w ipv4-address
| | | | +---w ipv4-address? inet:ipv4-address | | | | +---w ipv4-address inet:ipv4-address
| | | +---w ipv6-address | | | +---w ipv6-address
| | | | +---w ipv6-address? inet:ipv6-address | | | | +---w ipv6-address inet:ipv6-address
| | | +---w tp-attribute | | | +---w tp-attribute
| | | | +---w tp-attribute-type? address-attribute-type | | | | +---w tp-attribute-type? address-attribute-type
| | | | +---w (tp-attribute-value)? | | | | +---w (tp-attribute-value)?
| | | | +--:(ip-prefix) | | | | +--:(ip-prefix)
| | | | | +---w ip-prefix? inet:ip-prefix | | | | | +---w ip-prefix? inet:ip-prefix
| | | | +--:(bgp) | | | | +--:(bgp)
| | | | | +---w bgp? inet:ip-prefix | | | | | +---w bgp? inet:ip-prefix
| | | | +--:(tunnel) | | | | +--:(tunnel)
| | | | | +---w tunnel-interface? uint32 | | | | | +---w tunnel-interface? uint32
| | | | +--:(pw) | | | | +--:(pw)
| | | | | +---w remote-pe-address? inet:ip-address | | | | | +---w remote-pe-address? inet:ip-address
| | | | | +---w pw-id? uint32 | | | | | +---w pw-id? uint32
| | | | +--:(vpls) | | | | +--:(vpls)
| | | | | +---w route-distinguisher? uint64 | | | | | +---w route-distinguisher? rt:route-distinguisher
| | | | | +---w sender-ve-id? uint16 | | | | | +---w sender-ve-id? uint16
| | | | | +---w receiver-ve-id? uint16 | | | | | +---w receiver-ve-id? uint16
| | | | +--:(mpls-mldp) | | | | +--:(mpls-mldp)
| | | | +---w (root-address)? | | | | +---w (root-address)?
| | | | +--:(ip-address) | | | | +--:(ip-address)
| | | | | +---w source-address? inet:ip-address | | | | | +---w source-address? inet:ip-address
| | | | | +---w group-ip-address? inet:ip-address | | | | | +---w group-ip-address? inet:ip-address
| | | | +--:(vpn) | | | | +--:(vpn)
| | | | | +---w as-number? inet:as-number | | | | | +---w as-number? inet:as-number
| | | | +--:(global-id) | | | | +--:(global-id)
| | | | +---w lsp-id? string | | | | +---w lsp-id? string
| | | +---w system-info | | | +---w system-info
| | | +---w system-id? router-id | | | +---w system-id? rt:router-id
| | +---w session-type? enumeration | | +---w source-interface if:interface-ref
| | +---w source-interface? if:interface-ref | | +---w outbound-interface if:interface-ref
| | +---w outbound-interface? if:interface-ref
| | +---w count? empty
| | +---w vrf? coam:routing-instance-ref | | +---w vrf? coam:routing-instance-ref
| | +---w count? uint32
| | +---w ttl? uint8 | | +---w ttl? uint8
| | +---w packet-size? uint32 | | +---w packet-size? uint32
| +--ro output | +--ro output
| +--ro error-code-list* [response-index] | +--ro error-code
| | +--ro response-index uint32 | | +--ro status-code identityref
| | +--ro status-code? int32 | | +--ro status-sub-code identityref
| | +--ro status-sub-code? uint8
| +--ro src-test-point | +--ro src-test-point
| | +--ro ni? routing-instance-ref | | +--ro ni? routing-instance-ref
| | +--ro tp-location-type? identityref | | +--ro tp-location-type identityref
| | +--ro tp-address | | +--ro tp-address
| | | +--ro mac-address | | | +--ro mac-address
| | | | +--ro mac-address? yang:mac-address | | | | +--ro mac-address yang:mac-address
| | | +--ro ipv4-address | | | +--ro ipv4-address
| | | | +--ro ipv4-address? inet:ipv4-address | | | | +--ro ipv4-address inet:ipv4-address
| | | +--ro ipv6-address | | | +--ro ipv6-address
| | | | +--ro ipv6-address? inet:ipv6-address | | | | +--ro ipv6-address inet:ipv6-address
| | | +--ro tp-attribute | | | +--ro tp-attribute
| | | | +--ro tp-attribute-type? address-attribute-type | | | | +--ro tp-attribute-type? address-attribute-type
| | | | +--ro (tp-attribute-value)? | | | | +--ro (tp-attribute-value)?
| | | | +--:(ip-prefix) | | | | +--:(ip-prefix)
| | | | | +--ro ip-prefix? inet:ip-prefix | | | | | +--ro ip-prefix? inet:ip-prefix
| | | | +--:(bgp) | | | | +--:(bgp)
| | | | | +--ro bgp? inet:ip-prefix | | | | | +--ro bgp? inet:ip-prefix
| | | | +--:(tunnel) | | | | +--:(tunnel)
| | | | | +--ro tunnel-interface? uint32 | | | | | +--ro tunnel-interface? uint32
| | | | +--:(pw) | | | | +--:(pw)
| | | | | +--ro remote-pe-address? inet:ip-address | | | | | +--ro remote-pe-address? inet:ip-address
| | | | | +--ro pw-id? uint32 | | | | | +--ro pw-id? uint32
| | | | +--:(vpls) | | | | +--:(vpls)
| | | | | +--ro route-distinguisher? uint64 | | | | | +--ro route-distinguisher? rt:route-distinguisher
| | | | | +--ro sender-ve-id? uint16 | | | | | +--ro sender-ve-id? uint16
| | | | | +--ro receiver-ve-id? uint16 | | | | | +--ro receiver-ve-id? uint16
| | | | +--:(mpls-mldp) | | | | +--:(mpls-mldp)
| | | | +--ro (root-address)? | | | | +--ro (root-address)?
| | | | +--:(ip-address) | | | | +--:(ip-address)
| | | | | +--ro source-address? inet:ip-address | | | | | +--ro source-address? inet:ip-address
| | | | | +--ro group-ip-address? inet:ip-address | | | | | +--ro group-ip-address? inet:ip-address
| | | | +--:(vpn) | | | | +--:(vpn)
| | | | | +--ro as-number? inet:as-number | | | | | +--ro as-number? inet:as-number
| | | | +--:(global-id) | | | | +--:(global-id)
| | | | +--ro lsp-id? string | | | | +--ro lsp-id? string
| | | +--ro system-info | | | +--ro system-info
| | | +--ro system-id? router-id | | | +--ro system-id? rt:router-id
| | +--ro egress-intf-name? if:interface-ref | | +--ro egress-intf-name? if:interface-ref
| +--ro dest-test-point | +--ro dest-test-point
| | +--ro ni? routing-instance-ref | | +--ro ni? routing-instance-ref
| | +--ro tp-location-type? identityref | | +--ro tp-location-type identityref
| | +--ro tp-address | | +--ro tp-address
| | | +--ro mac-address | | | +--ro mac-address
| | | | +--ro mac-address? yang:mac-address | | | | +--ro mac-address yang:mac-address
| | | +--ro ipv4-address | | | +--ro ipv4-address
| | | | +--ro ipv4-address? inet:ipv4-address | | | | +--ro ipv4-address inet:ipv4-address
| | | +--ro ipv6-address | | | +--ro ipv6-address
| | | | +--ro ipv6-address? inet:ipv6-address | | | | +--ro ipv6-address inet:ipv6-address
| | | +--ro tp-attribute | | | +--ro tp-attribute
| | | | +--ro tp-attribute-type? address-attribute-type | | | | +--ro tp-attribute-type? address-attribute-type
| | | | +--ro (tp-attribute-value)? | | | | +--ro (tp-attribute-value)?
| | | | +--:(ip-prefix) | | | | +--:(ip-prefix)
| | | | | +--ro ip-prefix? inet:ip-prefix | | | | | +--ro ip-prefix? inet:ip-prefix
| | | | +--:(bgp) | | | | +--:(bgp)
| | | | | +--ro bgp? inet:ip-prefix | | | | | +--ro bgp? inet:ip-prefix
| | | | +--:(tunnel) | | | | +--:(tunnel)
| | | | | +--ro tunnel-interface? uint32 | | | | | +--ro tunnel-interface? uint32
| | | | +--:(pw) | | | | +--:(pw)
| | | | | +--ro remote-pe-address? inet:ip-address | | | | | +--ro remote-pe-address? inet:ip-address
| | | | | +--ro pw-id? uint32 | | | | | +--ro pw-id? uint32
| | | | +--:(vpls) | | | | +--:(vpls)
| | | | | +--ro route-distinguisher? uint64 | | | | | +--ro route-distinguisher? rt:route-distinguisher
| | | | | +--ro sender-ve-id? uint16 | | | | | +--ro sender-ve-id? uint16
| | | | | +--ro receiver-ve-id? uint16 | | | | | +--ro receiver-ve-id? uint16
| | | | +--:(mpls-mldp) | | | | +--:(mpls-mldp)
| | | | +--ro (root-address)? | | | | +--ro (root-address)?
| | | | +--:(ip-address) | | | | +--:(ip-address)
| | | | | +--ro source-address? inet:ip-address | | | | | +--ro source-address? inet:ip-address
| | | | | +--ro group-ip-address? inet:ip-address | | | | | +--ro group-ip-address? inet:ip-address
| | | | +--:(vpn) | | | | +--:(vpn)
| | | | | +--ro as-number? inet:as-number | | | | | +--ro as-number? inet:as-number
| | | | +--:(global-id) | | | | +--:(global-id)
| | | | +--ro lsp-id? string | | | | +--ro lsp-id? string
| | | +--ro system-info | | | +--ro system-info
| | | +--ro system-id? router-id | | | +--ro system-id? rt:router-id
| | +--ro ingress-intf-name? if:interface-ref | | +--ro ingress-intf-name? if:interface-ref
| +--ro sequence-number? uint64 | +--ro sequence-number? uint64
| +--ro hop-cnt? uint8 | +--ro hop-cnt? uint8
| +--ro session-packet-statistics | +--ro session-packet-statistics
| | +--ro rx-packet-count? uint32 | | +--ro rx-packet-count? uint32
| | +--ro tx-packet-count? uint32 | | +--ro tx-packet-count? uint32
| | +--ro rx-bad-packet? uint32 | | +--ro rx-bad-packet? uint32
| | +--ro tx-packet-failed? uint32 | | +--ro tx-packet-failed? uint32
| +--ro session-error-statistics | +--ro session-error-statistics
| | +--ro packet-drops-count? uint32 | | +--ro packet-drops-count? uint32
skipping to change at page 11, line 36 skipping to change at page 10, line 23
| | +--ro max-delay-value? uint32 | | +--ro max-delay-value? uint32
| | +--ro average-delay-value? uint32 | | +--ro average-delay-value? uint32
| +--ro session-jitter-statistics | +--ro session-jitter-statistics
| +--ro time-resolution-value? identityref | +--ro time-resolution-value? identityref
| +--ro min-jitter-value? uint32 | +--ro min-jitter-value? uint32
| +--ro max-jitter-value? uint32 | +--ro max-jitter-value? uint32
| +--ro average-jitter-value? uint32 | +--ro average-jitter-value? uint32
+---x path-discovery {coam:path-discovery}? +---x path-discovery {coam:path-discovery}?
+---w input +---w input
| +---w destination-tp | +---w destination-tp
| | +---w tp-location-type? identityref | | +---w tp-location-type identityref
| | +---w tp-address | | +---w tp-address
| | +---w mac-address | | +---w mac-address
| | | +---w mac-address? yang:mac-address | | | +---w mac-address yang:mac-address
| | +---w ipv4-address | | +---w ipv4-address
| | | +---w ipv4-address? inet:ipv4-address | | | +---w ipv4-address inet:ipv4-address
| | +---w ipv6-address | | +---w ipv6-address
| | | +---w ipv6-address? inet:ipv6-address | | | +---w ipv6-address inet:ipv6-address
| | +---w tp-attribute | | +---w tp-attribute
| | | +---w tp-attribute-type? address-attribute-type | | | +---w tp-attribute-type? address-attribute-type
| | | +---w (tp-attribute-value)? | | | +---w (tp-attribute-value)?
| | | +--:(ip-prefix) | | | +--:(ip-prefix)
| | | | +---w ip-prefix? inet:ip-prefix | | | | +---w ip-prefix? inet:ip-prefix
| | | +--:(bgp) | | | +--:(bgp)
| | | | +---w bgp? inet:ip-prefix | | | | +---w bgp? inet:ip-prefix
| | | +--:(tunnel) | | | +--:(tunnel)
| | | | +---w tunnel-interface? uint32 | | | | +---w tunnel-interface? uint32
| | | +--:(pw) | | | +--:(pw)
| | | | +---w remote-pe-address? inet:ip-address | | | | +---w remote-pe-address? inet:ip-address
| | | | +---w pw-id? uint32 | | | | +---w pw-id? uint32
| | | +--:(vpls) | | | +--:(vpls)
| | | | +---w route-distinguisher? uint64 | | | | +---w route-distinguisher? rt:route-distinguisher
| | | | +---w sender-ve-id? uint16 | | | | +---w sender-ve-id? uint16
| | | | +---w receiver-ve-id? uint16 | | | | +---w receiver-ve-id? uint16
| | | +--:(mpls-mldp) | | | +--:(mpls-mldp)
| | | +---w (root-address)? | | | +---w (root-address)?
| | | +--:(ip-address) | | | +--:(ip-address)
| | | | +---w source-address? inet:ip-address | | | | +---w source-address? inet:ip-address
| | | | +---w group-ip-address? inet:ip-address | | | | +---w group-ip-address? inet:ip-address
| | | +--:(vpn) | | | +--:(vpn)
| | | | +---w as-number? inet:as-number | | | | +---w as-number? inet:as-number
| | | +--:(global-id) | | | +--:(global-id)
| | | +---w lsp-id? string | | | +---w lsp-id? string
| | +---w system-info | | +---w system-info
| | +---w system-id? router-id | | +---w system-id? rt:router-id
| +---w session-type? enumeration | +---w source-interface if:interface-ref
| +---w source-interface? if:interface-ref | +---w outbound-interface if:interface-ref
| +---w outbound-interface? if:interface-ref
| +---w vrf? coam:routing-instance-ref | +---w vrf? coam:routing-instance-ref
| +---w max-ttl? uint8 | +---w max-ttl? uint8
+--ro output +--ro output
+--ro response-list* [response-index] +--ro response-list* [response-index]
| +--ro response-index uint32 | +--ro response-index uint32
| +--ro status-code? int32 | +--ro status-code identityref
| +--ro status-sub-code? uint8 | +--ro status-sub-code identityref
+--ro src-test-point +--ro src-test-point
| +--ro ni? routing-instance-ref | +--ro ni? routing-instance-ref
| +--ro tp-location-type? identityref | +--ro tp-location-type identityref
| +--ro tp-address | +--ro tp-address
| +--ro mac-address | +--ro mac-address
| | +--ro mac-address? yang:mac-address | | +--ro mac-address yang:mac-address
| +--ro ipv4-address | +--ro ipv4-address
| | +--ro ipv4-address? inet:ipv4-address | | +--ro ipv4-address inet:ipv4-address
| +--ro ipv6-address | +--ro ipv6-address
| | +--ro ipv6-address? inet:ipv6-address | | +--ro ipv6-address inet:ipv6-address
| +--ro tp-attribute | +--ro tp-attribute
| | +--ro tp-attribute-type? address-attribute-type | | +--ro tp-attribute-type? address-attribute-type
| | +--ro (tp-attribute-value)? | | +--ro (tp-attribute-value)?
| | +--:(ip-prefix) | | +--:(ip-prefix)
| | | +--ro ip-prefix? inet:ip-prefix | | | +--ro ip-prefix? inet:ip-prefix
| | +--:(bgp) | | +--:(bgp)
| | | +--ro bgp? inet:ip-prefix | | | +--ro bgp? inet:ip-prefix
| | +--:(tunnel) | | +--:(tunnel)
| | | +--ro tunnel-interface? uint32 | | | +--ro tunnel-interface? uint32
| | +--:(pw) | | +--:(pw)
| | | +--ro remote-pe-address? inet:ip-address | | | +--ro remote-pe-address? inet:ip-address
| | | +--ro pw-id? uint32 | | | +--ro pw-id? uint32
| | +--:(vpls) | | +--:(vpls)
| | | +--ro route-distinguisher? uint64 | | | +--ro route-distinguisher? rt:route-distinguisher
| | | +--ro sender-ve-id? uint16 | | | +--ro sender-ve-id? uint16
| | | +--ro receiver-ve-id? uint16 | | | +--ro receiver-ve-id? uint16
| | +--:(mpls-mldp) | | +--:(mpls-mldp)
| | +--ro (root-address)? | | +--ro (root-address)?
| | +--:(ip-address) | | +--:(ip-address)
| | | +--ro source-address? inet:ip-address | | | +--ro source-address? inet:ip-address
| | | +--ro group-ip-address? inet:ip-address | | | +--ro group-ip-address? inet:ip-address
| | +--:(vpn) | | +--:(vpn)
| | | +--ro as-number? inet:as-number | | | +--ro as-number? inet:as-number
| | +--:(global-id) | | +--:(global-id)
| | +--ro lsp-id? string | | +--ro lsp-id? string
| +--ro system-info | +--ro system-info
| +--ro system-id? router-id | +--ro system-id? rt:router-id
+--ro dest-test-point +--ro dest-test-point
| +--ro ni? routing-instance-ref | +--ro ni? routing-instance-ref
| +--ro tp-location-type? identityref | +--ro tp-location-type identityref
| +--ro tp-address | +--ro tp-address
| +--ro mac-address | +--ro mac-address
| | +--ro mac-address? yang:mac-address | | +--ro mac-address yang:mac-address
| +--ro ipv4-address | +--ro ipv4-address
| | +--ro ipv4-address? inet:ipv4-address | | +--ro ipv4-address inet:ipv4-address
| +--ro ipv6-address | +--ro ipv6-address
| | +--ro ipv6-address? inet:ipv6-address | | +--ro ipv6-address inet:ipv6-address
| +--ro tp-attribute | +--ro tp-attribute
| | +--ro tp-attribute-type? address-attribute-type | | +--ro tp-attribute-type? address-attribute-type
| | +--ro (tp-attribute-value)? | | +--ro (tp-attribute-value)?
| | +--:(ip-prefix) | | +--:(ip-prefix)
| | | +--ro ip-prefix? inet:ip-prefix | | | +--ro ip-prefix? inet:ip-prefix
| | +--:(bgp) | | +--:(bgp)
| | | +--ro bgp? inet:ip-prefix | | | +--ro bgp? inet:ip-prefix
| | +--:(tunnel) | | +--:(tunnel)
| | | +--ro tunnel-interface? uint32 | | | +--ro tunnel-interface? uint32
| | +--:(pw) | | +--:(pw)
| | | +--ro remote-pe-address? inet:ip-address | | | +--ro remote-pe-address? inet:ip-address
| | | +--ro pw-id? uint32 | | | +--ro pw-id? uint32
| | +--:(vpls) | | +--:(vpls)
| | | +--ro route-distinguisher? uint64 | | | +--ro route-distinguisher? rt:route-distinguisher
| | | +--ro sender-ve-id? uint16 | | | +--ro sender-ve-id? uint16
| | | +--ro receiver-ve-id? uint16 | | | +--ro receiver-ve-id? uint16
| | +--:(mpls-mldp) | | +--:(mpls-mldp)
| | +--ro (root-address)? | | +--ro (root-address)?
| | +--:(ip-address) | | +--:(ip-address)
| | | +--ro source-address? inet:ip-address | | | +--ro source-address? inet:ip-address
| | | +--ro group-ip-address? inet:ip-address | | | +--ro group-ip-address? inet:ip-address
| | +--:(vpn) | | +--:(vpn)
| | | +--ro as-number? inet:as-number | | | +--ro as-number? inet:as-number
| | +--:(global-id) | | +--:(global-id)
| | +--ro lsp-id? string | | +--ro lsp-id? string
| +--ro system-info | +--ro system-info
| +--ro system-id? router-id | +--ro system-id? rt:router-id
+--ro sequence-number? uint64 +--ro sequence-number? uint64
+--ro hop-cnt? uint8 +--ro hop-cnt? uint8
+--ro session-packet-statistics +--ro session-packet-statistics
| +--ro rx-packet-count? uint32 | +--ro rx-packet-count? uint32
| +--ro tx-packet-count? uint32 | +--ro tx-packet-count? uint32
| +--ro rx-bad-packet? uint32 | +--ro rx-bad-packet? uint32
| +--ro tx-packet-failed? uint32 | +--ro tx-packet-failed? uint32
+--ro session-error-statistics +--ro session-error-statistics
| +--ro packet-drops-count? uint32 | +--ro packet-drops-count? uint32
| +--ro packet-reorder-count? uint32 | +--ro packet-reorder-count? uint32
skipping to change at page 14, line 42 skipping to change at page 13, line 28
| +--ro average-jitter-value? uint32 | +--ro average-jitter-value? uint32
+--ro path-verification +--ro path-verification
| +--ro flow-info? string | +--ro flow-info? string
| +--ro session-path-verification-statistics | +--ro session-path-verification-statistics
| +--ro verified-count? uint32 | +--ro verified-count? uint32
| +--ro failed-count? uint32 | +--ro failed-count? uint32
+--ro path-trace-info +--ro path-trace-info
+--ro path-trace-info-list* [index] +--ro path-trace-info-list* [index]
+--ro index uint32 +--ro index uint32
+--ro ni? routing-instance-ref +--ro ni? routing-instance-ref
+--ro tp-location-type? identityref +--ro tp-location-type identityref
+--ro tp-address +--ro tp-address
| +--ro mac-address | +--ro mac-address
| | +--ro mac-address? yang:mac-address | | +--ro mac-address yang:mac-address
| +--ro ipv4-address | +--ro ipv4-address
| | +--ro ipv4-address? inet:ipv4-address | | +--ro ipv4-address inet:ipv4-address
| +--ro ipv6-address | +--ro ipv6-address
| | +--ro ipv6-address? inet:ipv6-address | | +--ro ipv6-address inet:ipv6-address
| +--ro tp-attribute | +--ro tp-attribute
| | +--ro tp-attribute-type? address-attribute-type | | +--ro tp-attribute-type? address-attribute-type
| | +--ro (tp-attribute-value)? | | +--ro (tp-attribute-value)?
| | +--:(ip-prefix) | | +--:(ip-prefix)
| | | +--ro ip-prefix? inet:ip-prefix | | | +--ro ip-prefix? inet:ip-prefix
| | +--:(bgp) | | +--:(bgp)
| | | +--ro bgp? inet:ip-prefix | | | +--ro bgp? inet:ip-prefix
| | +--:(tunnel) | | +--:(tunnel)
| | | +--ro tunnel-interface? uint32 | | | +--ro tunnel-interface? uint32
| | +--:(pw) | | +--:(pw)
| | | +--ro remote-pe-address? inet:ip-address | | | +--ro remote-pe-address? inet:ip-address
| | | +--ro pw-id? uint32 | | | +--ro pw-id? uint32
| | +--:(vpls) | | +--:(vpls)
| | | +--ro route-distinguisher? uint64 | | | +--ro route-distinguisher? rt:route-distinguisher
| | | +--ro sender-ve-id? uint16 | | | +--ro sender-ve-id? uint16
| | | +--ro receiver-ve-id? uint16 | | | +--ro receiver-ve-id? uint16
| | +--:(mpls-mldp) | | +--:(mpls-mldp)
| | +--ro (root-address)? | | +--ro (root-address)?
| | +--:(ip-address) | | +--:(ip-address)
| | | +--ro source-address? inet:ip-address | | | +--ro source-address? inet:ip-address
| | | +--ro group-ip-address? inet:ip-address | | | +--ro group-ip-address? inet:ip-address
| | +--:(vpn) | | +--:(vpn)
| | | +--ro as-number? inet:as-number | | | +--ro as-number? inet:as-number
| | +--:(global-id) | | +--:(global-id)
| | +--ro lsp-id? string | | +--ro lsp-id? string
| +--ro system-info | +--ro system-info
| +--ro system-id? router-id | +--ro system-id? rt:router-id
+--ro timestamp-type? uint32 +--ro timestamp-type? uint32
+--ro timestamp-sec? uint32 +--ro timestamp-sec? uint32
+--ro timestamp-nanosec? uint32 +--ro timestamp-nanosec? uint32
+--ro ingress-intf-name? if:interface-ref +--ro ingress-intf-name? if:interface-ref
+--ro egress-intf-name? if:interface-ref +--ro egress-intf-name? if:interface-ref
+--ro queue-depth? uint32 +--ro queue-depth? uint32
+--ro transit-delay? uint32 +--ro transit-delay? uint32
+--ro app-meta-data? uint64 +--ro app-meta-data? uint64
data hierarchy of OAM Retrieval Methods data hierarchy of OAM Retrieval Methods
4. OAM Retrieval Methods YANG Module 4. OAM Retrieval Methods YANG Module
<CODE BEGINS> file "ietf-connectionless-oam-methods@2017-08-30.yang" <CODE BEGINS> file "ietf-connectionless-oam-methods@2017-09-06.yang"
module ietf-connectionless-oam-methods { module ietf-connectionless-oam-methods {
namespace "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-methods"; namespace "urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-methods";
prefix coam-methods; prefix coam-methods;
import ietf-interfaces { import ietf-interfaces {
prefix if; prefix if;
} }
import ietf-connectionless-oam { import ietf-connectionless-oam {
prefix coam; prefix coam;
} }
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 RPCs for "This YANG module defines the RPC operations for
connectionless OAM to be used within IETF connectionless OAM to be used within IETF
in a protocol Independent manner. in a protocol Independent manner.
Functional level abstraction is indendent with It is assumed that each protocol maps
YANG modeling. It is assumed that each protocol maps
corresponding abstracts to its native format. corresponding abstracts to its native format.
Each protocol may extend the YANG model defined Each protocol may extend the YANG model defined
here to include protocol specific extensions"; here to include protocol specific extensions";
revision 2017-08-30 { revision 2017-09-06{
description description
"02 version"; "08 version";
reference "draft-ietf-lime-yang-connectionless-oam-methods"; reference "draft-ietf-lime-yang-connectionless-oam-methods";
} }
rpc continuity-check { identity status-code{
if-feature "coam:continuity-check"; description
description "Base status code";
"Generates continuity-check as per RFC7276."; }
input {
container destination-tp { identity invalid-cc{
base status-code;
description
"Indicates that the Continuity check message is invalid";
}
identity invalid-pd {
base status-code;
description
"Indicates that the path discovery message is invalid";
}
identity status-sub-code {
description
"Base status sub code";
}
grouping rpc-input-parameters {
container destination-tp {
uses coam:tp-address; uses coam:tp-address;
description description
"Destination test point."; "Destination test point.";
} }
uses coam:session-type; leaf source-interface {
leaf source-interface {
type if:interface-ref; type if:interface-ref;
mandatory true;
description description
"Source interface."; "Source interface.";
} }
leaf outbound-interface { leaf outbound-interface {
type if:interface-ref; type if:interface-ref;
mandatory true;
description description
"Outbound interface."; "Outbound interface.";
} }
leaf count {
type empty;
description
"Specifies the number of
packets that will be sent.";
}
leaf vrf { leaf vrf {
type coam:routing-instance-ref; type coam:routing-instance-ref;
description description
"VRF instance."; "VRF instance.";
} }
leaf ttl { description
"Grouping for RPC input parameters";
}
rpc continuity-check {
if-feature "coam:continuity-check";
description
"Continuity-check RPC operation as per RFC7276.";
input {
uses rpc-input-parameters;
uses coam:session-type {
description "If session-type is specified, then session-type
must be set to on-demand";
}
leaf count {
type uint32;
default "5";
description
"Specifies the number of
packets that will be sent. By
default, the packet number is
set to 5.";
}
leaf ttl {
type uint8; type uint8;
default "255"; default "255";
description description
"Time to live (TTL)."; "Time to live (TTL) used to limit lifetime
of data packet transmitted in the network
and prevent looping. The TTL value is decremented
for every hop which the packet traverses. If the
TTL is zero, the data packet will be discarded.";
} }
leaf packet-size { leaf packet-size {
type uint32 { type uint32 {
range "64..10000"; range "64..10000";
} }
default "64"; default "64";
description description
"Size of ping echo request "Packet size of continuity-check message, in octets.
packets, in octets"; By default, the packet size is set to 64 octets.";
} }
} }
output { output {
list error-code-list { container error-code {
key "response-index";
leaf response-index {
type uint32;
description
"Response index.";
}
leaf status-code { leaf status-code {
type int32; type identityref{
description base status-code;
"Error code is "; }
mandatory true;
description
"Error code for continuity-check message. For example, Error code in
ICMPv6 message includes
1-Destination Unreachable
2- Packet Too Big
3- Time Exceeded
4- Parameter Problem [RFC4443].";
} }
leaf status-sub-code { leaf status-sub-code {
type uint8; type identityref{
description base status-sub-code;
"Sub code."; }
mandatory true;
description
"Sub code for continuity-check message. For example Sub code in
ICMPv6 Parameter Problem Message includes:
1-Erroneous header field encountered
2-Unrecognized Next Header type encountered
3-Unrecognized IPv6 option encountered.";
} }
description description
"Error code list."; "Error code and Sub Code for continuity-check message.";
} }
uses coam:continuity-check-data; uses coam:continuity-check-data;
} }
} }
rpc path-discovery { rpc path-discovery {
if-feature "coam:path-discovery"; if-feature "coam:path-discovery";
description description
"Generates path discovery as per RFC7276."; "Path discovery RPC operation as per RFC7276.";
input { input {
container destination-tp { uses rpc-input-parameters;
uses coam:tp-address; uses coam:session-type {
description description "If session-type is specified, then session-type
"Destination test point."; must be set to on-demand";
} }
uses coam:session-type;
leaf source-interface {
type if:interface-ref;
description
"Source interface.";
}
leaf outbound-interface {
type if:interface-ref;
description
"Outbound interface.";
}
leaf vrf {
type coam:routing-instance-ref;
description
"VRF";
}
leaf max-ttl { leaf max-ttl {
type uint8; type uint8;
default "255"; default "255";
description description
"Max ttl."; "Maximum TTL indicates the maixmum number of hops that
a packet is permitted to travel before being discarded
by a router. By default, the maximimum TTL is set to 255.";
} }
} }
output { output {
list response-list { list response-list {
key "response-index"; key "response-index";
description description
"Path discovery response list."; "Path discovery response list.";
leaf response-index { leaf response-index {
type uint32; type uint32;
mandatory true;
description description
"Response index."; "Response index.";
} }
leaf status-code { leaf status-code {
type int32; type identityref{
base status-code;
}
mandatory true;
description description
"Error code for Path Discovery message.
"Error code is "; For example, Error code in ICMPv6 message includes
1-Destination Unreachable
2- Packet Too Big
3- Time Exceeded
4- Parameter Problem [RFC4443]. ";
} }
leaf status-sub-code { leaf status-sub-code {
type uint8; type identityref{
base status-sub-code;
}
mandatory true;
description description
"Sub code is "; "Sub code for Path Discovery message. For example Sub code in
ICMPv6 Parameter Problem Message includes:
1-Erroneous header field encountered
2-Unrecognized Next Header type encountered
3-Unrecognized IPv6 option encountered ";
} }
description
"List of Error code and Sub Code for Path Discovery.";
} }
uses coam:path-discovery-data; uses coam:path-discovery-data;
} }
} }
}
<CODE ENDS> <CODE ENDS>
5. Security Considerations 5. 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].
skipping to change at page 20, line 24 skipping to change at page 20, line 4
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 [RFC6020]. registry [RFC6020].
name: ietf-connectionless-oam-methods name: ietf-connectionless-oam-methods
namespace: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam- namespace: urn:ietf:params:xml:ns:yang:ietf-connectionless-oam-
methods methods
prefix: coam-methods prefix: coam-methods
reference: RFC XXXX reference: RFC XXXX
7. References 7. References
7.1. Normative References 7.1. Normative References
[I-D.ietf-lime-yang-connectionless-oam] [I-D.ietf-lime-yang-connectionless-oam]
Kumar, D., Wang, Z., Wu, Q., Rahman, R., and S. Raghavan, Kumar, D., Wang, Z., Wu, Q., Rahman, R., and S. Raghavan,
"Generic YANG Data Model for Connectionless Operations, "Generic YANG Data Model for Connectionless Operations,
Administration, and Maintenance(OAM) protocols", draft- Administration, and Maintenance(OAM) protocols", draft-
ietf-lime-yang-connectionless-oam-08 (work in progress), ietf-lime-yang-connectionless-oam-09 (work in progress),
August 2017. August 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, <https://www.rfc- DOI 10.17487/RFC3688, January 2004,
editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, (TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008, <https://www.rfc- DOI 10.17487/RFC5246, August 2008,
editor.org/info/rfc5246>. <https://www.rfc-editor.org/info/rfc5246>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010, <https://www.rfc- DOI 10.17487/RFC6020, October 2010,
editor.org/info/rfc6020>. <https://www.rfc-editor.org/info/rfc6020>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>. <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>. <https://www.rfc-editor.org/info/rfc6242>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536, Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012, <https://www.rfc- DOI 10.17487/RFC6536, March 2012,
editor.org/info/rfc6536>. <https://www.rfc-editor.org/info/rfc6536>.
[RFC7011] Claise, B., Ed., Trammell, B., Ed., and P. Aitken, [RFC7011] Claise, B., Ed., Trammell, B., Ed., and P. Aitken,
"Specification of the IP Flow Information Export (IPFIX) "Specification of the IP Flow Information Export (IPFIX)
Protocol for the Exchange of Flow Information", STD 77, Protocol for the Exchange of Flow Information", STD 77,
RFC 7011, DOI 10.17487/RFC7011, September 2013, RFC 7011, DOI 10.17487/RFC7011, September 2013,
<https://www.rfc-editor.org/info/rfc7011>. <https://www.rfc-editor.org/info/rfc7011>.
[RFC792] Postel, J., "Internet Control Message Protocol", RFC 792, [RFC792] Postel, J., "Internet Control Message Protocol", RFC 792,
September 1981. September 1981.
skipping to change at page 22, line 5 skipping to change at page 21, line 30
[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>.
[RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection [RFC5880] Katz, D. and D. Ward, "Bidirectional Forwarding Detection
(BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010, (BFD)", RFC 5880, DOI 10.17487/RFC5880, June 2010,
<https://www.rfc-editor.org/info/rfc5880>. <https://www.rfc-editor.org/info/rfc5880>.
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG
Data Model Documents", RFC 6087, DOI 10.17487/RFC6087,
January 2011, <https://www.rfc-editor.org/info/rfc6087>.
[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, <https://www.rfc- DOI 10.17487/RFC7276, June 2014,
editor.org/info/rfc7276>. <https://www.rfc-editor.org/info/rfc7276>.
[RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N., [RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N.,
Aldrin, S., and M. Chen, "Detecting Multiprotocol Label Aldrin, S., and M. Chen, "Detecting Multiprotocol Label
Switched (MPLS) Data-Plane Failures", RFC 8029, Switched (MPLS) Data-Plane Failures", RFC 8029,
DOI 10.17487/RFC8029, March 2017, <https://www.rfc- DOI 10.17487/RFC8029, March 2017,
editor.org/info/rfc8029>. <https://www.rfc-editor.org/info/rfc8029>.
Appendix A. Appdendix A.1 Appendix A. Appdendix A.1 Extending Connectionless OAM Method Module
Example
The following is an example of extensions possible to "ietf- The following is an example of extensions possible to "ietf-
connectionless-oam-methods" YANG model defined in this document. connectionless-oam-methods" YANG model defined in this document.
The snippet below depicts an example of augmenting the "ietf- The snippet below depicts an example of augmenting the "ietf-
connectionless-oam-methods" YANG model with ICMP ping attributes: connectionless-oam-methods" YANG model with ICMP ping attributes:
augment "/coam-methods:continutiy-check" augment "/coam-methods:continutiy-check"
+"/coam-methods:output"{ +"/coam-methods:output"{
container session-rtt-statistics{ container session-rtt-statistics{
skipping to change at page 22, line 48 skipping to change at page 22, line 31
leaf avg-rtt{ leaf avg-rtt{
type uint32; type uint32;
description description
"The current average ping round-trip-time(RTT)"; "The current average ping round-trip-time(RTT)";
} }
description description
"This container presents the ping round-trip-time statistics."; "This container presents the ping round-trip-time statistics.";
} }
} }
Appendix B. Appendix A.2 Appendix B. Appendix A.2 Example of new retrieval procedures Model
The following is an example related to the YANG model defined in this
document. The example discusses persistent methods.
The persistent RPC operations are commands to trigger persistent
continuity check or path discovery OAM while specifying the options
for data-export from the device. Internet Protocol Flow Information
Export (IPFIX) [RFC7011] or YANG-push [I-D.ietf-netconf-yang-push].
are currently outlined here as data export options and more can be
added in future. It should be noted that the persistent methods are
used to trigger create, modify and delete the persistent state
associated with the data export options. The data export specific
configurations are beyond the scope of this document.
B.1. OAM Retrieval Persistent Methods YANG Module As discussed in introduction section of this document, the new
retrieval procedures can be defined for retrieval of the same data
defined by base YANG Data model for connectionless OAM protocols.
This appendix demonstrates how the base connectionless OAM data model
can be extended to support persistent data retrieval besides on
demand retrieval procedures defined in section 3,i.e.,first retrieve
persistent-id based on destination test point location information
and then retrieve export details based on persistent-id. Internet
Protocol Flow Information Export (IPFIX) [RFC7011] or YANG-push
[I-D.ietf-netconf-yang-push]. are currently outlined here as data
export options and more can be added in future.
module example-cl-oam-persistent-methods { The YANG module "example-cl-oam-persistent-methods" shown below is
namespace "http://example.com/cl-oam-persistent-methods"; intended as an illustration rather than a real definition of a RPC
prefix pcoam-methods; operation model for persistent data retrieval. For the sake of
brevity, this module does not obey all the guidelines specified in
[RFC6087].
import ietf-interfaces { module example-cl-oam-persistent-methods {
prefix if; namespace "http://example.com/cl-oam-persistent-methods";
prefix pcoam-methods;
import ietf-interfaces {
prefix if;
}
import ietf-connectionless-oam {
prefix coam;
}
import ietf-yang-types {
prefix yang;
}
identity export-method {
description
"Base identity to represent a conceptual export-method.";
} }
import ietf-connectionless-oam { identity ipfix-export {
prefix coam; base export-method;
description
"IPFIX based export. Configuration provided separately.";
} }
import ietf-yang-types { identity yang-push-export {
prefix yang; base export-method;
description
"Yang-push from draft-ietf-netconf-yang-push";
}
typedef export-method {
type identityref {
base export-method;
}
description
"Export method type.";
}
typedef change-type {
type enumeration {
enum "create" {
description
"Change due to a create.";
}
enum "delete" {
description
"Change due to a delete.";
}
enum "modify" {
description
"Change due to an update.";
}
}
description
"Different types of changes that may occur.";
} }
identity export-method { rpc cc-get-persistent-id {
description if-feature "coam:continuity-check";
"Base identity to represent a conceptual export-method."; description
} "Obtains continuity-check persistent identification given mapping
parameters as input.";
input {
container destination-tp {
uses coam:tp-address;
description
"Destination test point.";
}
uses coam:session-type;
leaf source-interface {
type if:interface-ref;
description
"Source interface.";
}
leaf outbound-interface {
type if:interface-ref;
description
"Outbound interface.";
}
leaf vrf {
type coam:routing-instance-ref;
description
"VRF instance.";
}
}
output {
container error-code {
leaf status-code {
type identityref{
base status-code;
}
mandatory true;
description
"Error code.";
}
leaf status-sub-code {
type identityref{
base status-sub-code;
}
mandatory true;
description
"Sub code for CC.";
}
description
"Error code and Sub Code.";
}
identity ipfix-export { leaf cc-persistent-id {
base export-method; type string;
description description
"IPFIX based export. Configuration provided separately."; "Id to act as a cookie.";
} }
}
}
identity yang-push-export { rpc cc-persistent-get-export-details {
base export-method; if-feature "coam:continuity-check";
description description
"Yang-push from draft-ietf-netconf-yang-push"; "Given the persistent id, gets the configuration
} options, details related to the configured data
export.";
input {
leaf cc-persistent-id {
type string;
description
"Persistent Id for use as a key in search.";
}
}
output {
container error-code {
leaf status-code {
type identityref{
base status-code;
}
mandatory true;
description
"Error code.";
}
leaf status-sub-code {
type identityref{
base status-sub-code;
}
mandatory true;
description
"Sub code for CC.";
}
description
"Error code and Sub Code.";
}
typedef export-method { leaf data-export-method {
type identityref { type export-method;
base export-method; description
} "Type of export in use.";
description }
"Export method type.";
}
typedef change-type { choice cc-trigger {
type enumeration { description
enum "create" { "Necessary conditions for
description periodic or on-change trigger.";
"Change due to a create."; case periodic {
} description
enum "delete" { "Periodic reports.";
description leaf period {
"Change due to a delete."; type yang:timeticks;
} description
enum "modify" { "Time interval between reports.";
description }
"Change due to an update."; leaf start-time {
} type yang:date-and-time;
} description
description "Timestamp from which reports were started.";
"Different types of changes that may occur."; }
} }
case on-change {
description
"On-change trigger and not periodic.";
leaf all-data-on-start {
type boolean;
description
"Full update done on start or not.";
}
leaf-list excluded-change {
type change-type;
description
"Changes that will not trigger an update.";
}
}
}
}
}
rpc cc-persistent-create { rpc pd-get-persistent-id {
if-feature "coam:continuity-check"; if-feature "coam:path-discovery";
description description
"Generates persistent continuity-check."; "Obtains persistent path discovery identification.";
input {
container destination-tp {
uses coam:tp-address;
description
"Destination test point.";
}
uses coam:session-type;
leaf source-interface {
type if:interface-ref;
description
"Source interface.";
}
leaf outbound-interface {
type if:interface-ref;
description
"Outbound interface.";
}
leaf vrf {
type coam:routing-instance-ref;
description
"VRF instance.";
}
leaf ttl {
type uint8;
default "255";
description
"Time to live (TTL).";
}
leaf data-export-method {
type export-method;
description
"Type of export.";
}
choice cc-trigger {
description
"Defines necessary conditions for
periodic or on-change trigger.";
case periodic {
description
"Periodic reports.";
leaf period {
type yang:timeticks;
description
"Time interval between reports.";
}
leaf start-time {
type yang:date-and-time;
description
"Timestamp from which reports are started.";
}
}
case on-change {
description
"On-change trigger and not periodic.";
leaf all-data-on-start {
type boolean;
description
"Full update needed on start or not.";
}
leaf-list excluded-change {
type change-type;
description
"Restrict which changes trigger an update.";
}
}
}
}
output {
list error-code-list {
key "response-index";
leaf response-index {
type uint32;
description
"Response index.";
}
leaf status-code {
type int32;
description
"Error code.";
}
leaf status-sub-code {
type uint8;
description
"Sub code.";
}
description
"Error code list.";
}
leaf cc-persistent-id {
type string;
description
"Id to act as a cookie.";
}
}
}
rpc cc-persistent-modify {
if-feature "coam:continuity-check";
description
"Modifies persistent continuity-check
as per RFC7276.";
input {
leaf cc-persistent-id {
type string;
description
"Cookie Id to be used for modifications.";
}
leaf data-export-method {
type export-method;
description
"Type of export to use.";
}
choice cc-trigger {
description
"Defines necessary conditions for
periodic or on-change trigger.";
case periodic {
description
"Periodic reports.";
leaf period { input {
type yang:timeticks; container destination-tp {
description uses coam:tp-address;
"Time interval between reports."; description
} "Destination test point.";
leaf start-time { }
type yang:date-and-time; uses coam:session-type;
description leaf source-interface {
"Timestamp from which reports are started."; type if:interface-ref;
} description
} "Source interface.";
case on-change { }
description leaf outbound-interface {
"On-change trigger and not periodic."; type if:interface-ref;
leaf all-data-on-start { description
type boolean; "Outbound interface.";
description }
"Full update needed on start or not."; leaf vrf {
} type coam:routing-instance-ref;
leaf-list excluded-change { description
type change-type; "VRF";
description }
"Restrict which changes trigger an update."; }
} output {
} list response-list {
} key "response-index";
} description
output { "Path discovery response list.";
list error-code-list { leaf response-index {
key "response-index"; type uint32;
leaf response-index { mandatory true;
type uint32; description
description "Response index.";
"Response index."; }
} leaf status-code {
leaf status-code { type identityref {
type int32; base status-code;
description }
"Error code"; mandatory true;
} description
leaf status-sub-code { "Error code for Persistent Path Discovery Information. ";
type uint8; }
description leaf status-sub-code {
"Sub code."; type identityref{
} base status-sub-code;
description }
"Error code list."; mandatory true;
} description
leaf cc-persistent-id { "Sub code for Persistent Path Discovery Information. ";
type string; }
description leaf pd-persistent-id {
"Id to represent a cookie."; type string;
} description
} "Id to act as a cookie.";
} }
rpc cc-persistent-delete { }
if-feature "coam:continuity-check"; }
description }
"Deletes persistent continuity-check as per RFC7276.";
input { rpc pd-persistent-get-export-details {
leaf cc-persistent-id { if-feature "coam:path-discovery";
type string; description
description "Given the persistent id, gets the configuration
"Cookie Id to be used in deletion."; options, details related to the configured data
} export.";
} input {
output { leaf cc-persistent-id {
list error-code-list { type string;
key "response-index"; description
leaf response-index { "Persistent Id for use as a key in search.";
type uint32;
description
"Response index.";
}
leaf status-code {
type int32;
description
"Error code.";
}
leaf status-sub-code {
type uint8;
description
"Sub code.";
}
description
"Error code list.";
}
} }
} }
rpc pd-persistent-create { output {
description list response-list {
"Generates persistent path discovery."; key "response-index";
input { description
container destination-tp { "Path discovery response list.";
uses coam:tp-address; leaf response-index {
description type uint32;
"Destination test point."; mandatory true;
}
uses coam:session-type;
leaf source-interface {
type if:interface-ref;
description
"Source interface.";
}
leaf outbound-interface {
type if:interface-ref;
description
"Outbound interface.";
}
leaf vrf {
type coam:routing-instance-ref;
description
"VRF";
}
leaf max-ttl {
type uint8;
default "255";
description
"Max ttl.";
}
leaf data-export-method {
type export-method;
description description
"Type of export."; "Response index.";
} }
choice pd-trigger { leaf status-code {
description type identityref{
"Defines necessary conditions base status-code;
for periodic or on-change
trigger.";
case periodic {
description
"Periodic reports.";
leaf period {
type yang:timeticks;
description
"Time interval between reports.";
}
leaf start-time {
type yang:date-and-time;
description
"Timestamp from which reports are started.";
}
}
case on-change {
description
"On-change trigger and not periodic.";
leaf all-data-on-start {
type boolean;
description
"Full update needed on start or not.";
}
leaf-list excluded-change {
type change-type;
description
"Restrict which changes trigger an update.";
}
} }
} mandatory true;
}
output {
list response-list {
key "response-index";
description description
"Path discovery response list."; "Error code for Persistent Path Discovery Creation. ";
leaf response-index {
type uint32;
description
"Response index.";
}
leaf status-code {
type int32;
description
"Error code is ";
}
leaf status-sub-code {
type uint8;
description
"Sub code is ";
}
leaf pd-persistent-id {
type string;
description
"Id to act as a cookie.";
}
} }
} leaf status-sub-code {
} type identityref{
rpc pd-persistent-modify { base status-sub-code;
description }
"Modifies persistent path discovery."; mandatory true;
input {
leaf pd-persistent-id {
type string;
description description
"Cookie Id to be used for modifications."; "Sub code for Persistent Path Discovery Creation. ";
} }
leaf data-export-method { leaf data-export-method {
type export-method; type export-method;
description description
"Type of export."; "Type of export.";
} }
choice pd-trigger { choice pd-trigger {
description description
"Defines necessary conditions for periodic or on-change "Necessary conditions
for periodic or on-change
trigger."; trigger.";
case periodic { case periodic {
description description
"Periodic reports."; "Periodic reports.";
leaf period { leaf period {
type yang:timeticks; type yang:timeticks;
description description
"Time interval between reports."; "Time interval between reports.";
} }
leaf start-time { leaf start-time {
skipping to change at page 31, line 40 skipping to change at page 29, line 36
description description
"Timestamp from which reports are started."; "Timestamp from which reports are started.";
} }
} }
case on-change { case on-change {
description description
"On-change trigger and not periodic."; "On-change trigger and not periodic.";
leaf all-data-on-start { leaf all-data-on-start {
type boolean; type boolean;
description description
"Full update needed on start or not."; "Full update done on start or not.";
} }
leaf-list excluded-change { leaf-list excluded-change {
type change-type; type change-type;
description description
"Restrict which changes trigger an update."; "Changes that will not trigger an update.";
} }
} }
} }
} }
output {
list response-list {
key "response-index";
description
"path discovery response list.";
leaf response-index {
type uint32;
description
"response index.";
}
leaf status-code {
type int32;
description
"error code is ";
}
leaf status-sub-code {
type uint8;
description
"sub code is ";
}
leaf pd-persistent-id {
type string;
description
"Id to act as a cookie.";
}
}
}
}
rpc pd-persistent-delete {
description
"Deletes persistent path discovery.";
input {
leaf pd-persistent-id {
type string;
description
"Cookie Id to be used in deletion.";
}
}
output {
list response-list {
key "response-index";
description
"path discovery response list.";
leaf response-index {
type uint32;
description
"response index.";
}
leaf status-code {
type int32;
description
"error code is ";
}
leaf status-sub-code {
type uint8;
description
"sub code is ";
}
}
}
} }
} }
}
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
 End of changes. 144 change blocks. 
725 lines changed or deleted 572 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/